李金换
2022-03-23 a028b01fa820ab7a58f2bf50c1792d0bc9c90e6d
force-app/main/default/classes/NFM105Rest.cls
@@ -25,6 +25,9 @@
        public String IncorrectDataComment;
        public String ReturnType;
        public String InspectType;
        //WLIG-CC78MX 【委托】NFM105接口增加OTS运单号字段 thh 20220307 start
        public String OTSRepairOrder;
        //WLIG-CC78MX 【委托】NFM105接口增加OTS运单号字段 thh 20220307 end
        public InspectionResultInformation[] InspectionResultInformation;
        public FailureInformation[] FailureInformation;
    }
@@ -158,7 +161,7 @@
                                    , Return_Without_Repair_IF__c, Return_Without_Repair_Reason__c
                                    , Repair_Quotation_Id__c, NFM105_MessageGroupNumber__c, Repair_List_Price_formula__c
                                    , ReturnType__c, InspectType__c
                                    ,Maintenance_Contract__r.URF_Contract__c
                                    , Maintenance_Contract__r.URF_Contract__c
                                    ,Maintenance_Contract__c
                                    ,SerialNumber__c
                                    ,Agreed_Date__c 
@@ -265,6 +268,7 @@
                    //                        continue;
                    //                    }
                    logstr += ' ';
                    System.debug('rpr1:' + rpr);
                    rprUpdateMap.put(rpr.SAPRepairNo__c, rpr);
                } else {
                    logstr += quoteInfo.SAPRepairNo + ':' + quoteInfo.RepairOrderStatusCode + '(' + quoteInfo.SAPQuotationNo + ') ';
@@ -379,10 +383,12 @@
                if (quoteInfo.RepairOrderStatusCode == 'A20') {
                    // A20-RC受理完成
                    rpr.Repair_Ordered_Date__c = statusUpdateDateTime.date();
                    rpr.Repair_Ordered_DateTime__c = statusUpdateDateTime;
                    rpr.Repair_Ordered_Date_PersonName__c = quoteInfo.StatusUpdatePersonName;
                } else if (quoteInfo.RepairOrderStatusCode == 'A30') {
                    // A30-受理检查完成
                    rpr.Repair_Inspection_Date__c = statusUpdateDateTime.date();
                    rpr.Repair_Inspection_DateTime__c = statusUpdateDateTime;
                    rpr.ReRepairObject_result__c = quoteInfo.ReRepairObject == 'X' ? true : false;
                    // 2020/06/08 tqz add start 
@@ -400,6 +406,7 @@
                    // A96-取消修理    因报价金额高等原因,销售本部申请未修理 (销售本部申请为主)
                    rpr.Invalid_check__c = true; //修理记录无效
                    rpr.repair_cancel_date__c = statusUpdateDateTime.date();
                    rpr.repair_cancel_dateTime__c = statusUpdateDateTime;
                    rpr.CancellationReason__c = quoteInfo.CancellationReason;
                } else if (quoteInfo.RepairOrderStatusCode == 'A99') {
                    // A99-修理单关闭   因申请内容和实际实物信息由差异,RC驳回此次申请的修理
@@ -410,6 +417,7 @@
                    ast.Agreed_Repair__c = rpr.Id;
                    // B95-报价同意确认
                    rpr.Agreed_Date__c = statusUpdateDateTime.date();
                    rpr.Agreed_DateTime__c = statusUpdateDateTime;
                    rpr.Agreed_Date2__c = statusUpdateDateTime.date();
                    // rpr.Agreed_Date__c <== TODO goto OFSにて設定するでしょうか?
                } else if (quoteInfo.RepairOrderStatusCode == 'B99') {
@@ -423,16 +431,20 @@
                } else if (quoteInfo.RepairOrderStatusCode == 'X30') {
                    // X30-全部分配
                    rpr.part_arrangement_complete__c = statusUpdateDateTime.date();
                    rpr.part_arrangement_complete_DateTime__c = statusUpdateDateTime;
                } else if (quoteInfo.RepairOrderStatusCode == 'C50') {
                    // C50-开始修理
                    rpr.Repair_Start_Date__c = statusUpdateDateTime.date();
                    rpr.Repair_Start_DateTime__c = statusUpdateDateTime;
                    rpr.Planned_Repair_Completed_Date__c = NFMUtil.parseStr2Date(quoteInfo.PlannedRepairFinishDate);
                } else if (quoteInfo.RepairOrderStatusCode == 'C70') {
                    // C70-修理完成
                    rpr.Repair_Completed_Date__c = statusUpdateDateTime.date();
                    rpr.Repair_Completed_DateTime__c = statusUpdateDateTime;
                } else if (quoteInfo.RepairOrderStatusCode == 'C90') {
                    // C90-最终检查
                    rpr.Repair_Final_Inspection_Date__c = statusUpdateDateTime.date();
                    rpr.Repair_Final_Inspection_DateTime__c = statusUpdateDateTime;
                    Asset ast = getAstUpdate(astUpdateMap, rpr);
                    ast.LastSFDCRepairReturn_day__c = statusUpdateDateTime.date();
                    ast.LastSFDCRepairNo__c = rpr.Name;
@@ -462,6 +474,11 @@
                    // L60-SORC修理品出库
                    // L65-OGZ修理品出库
                    // L80-RC修理品出库
                    //WLIG-CC78MX 【委托】NFM105接口增加OTS运单号字段 thh 20220307 start
                    if(String.isNotBlank(quoteInfo.OTSRepairOrder)){
                        rpr.OTSRepairOrder__c = quoteInfo.OTSRepairOrder;
                    }
                    //WLIG-CC78MX 【委托】NFM105接口增加OTS运单号字段 thh 20220307 end
                    Asset ast = getAstUpdate(astUpdateMap, rpr);
                    if (rpr.Return_Without_Repair_IF__c == true) {
                        rpr.Return_Without_Repair_Date__c = statusUpdateDateTime.date();
@@ -473,6 +490,7 @@
                    if (quoteInfo.RepairOrderStatusCode == 'L80') {
                        //11.RC修理品返送日
                        rpr.Repair_Shipped_Date__c = statusUpdateDateTime.date();
                        rpr.Repair_Shipped_DateTime__c = statusUpdateDateTime;
                        //回返类别
                        rpr.ReturnType__c = quoteInfo.ReturnType;
                        if (quoteInfo.ReturnType == 'A20' || quoteInfo.ReturnType == 'B30') {
@@ -507,18 +525,22 @@
                else if (quoteInfo.RepairOrderStatusCode == 'L20') {
                    // L20-RC转SORC日
                    rpr.RcSorcDate__c = statusUpdateDateTime.date();
                    rpr.RcSorcDateTime__c = statusUpdateDateTime;
                }else if (quoteInfo.RepairOrderStatusCode == 'L25') {
                    // L25-RC转OGZ日
                    rpr.RcOgzDate__c = statusUpdateDateTime.date();
                }else if (quoteInfo.RepairOrderStatusCode == 'L30') {
                    // L30-SORC受理日
                    rpr.SorcAcceptDate__c = statusUpdateDateTime.date();
                    rpr.SorcAcceptDateTime__c = statusUpdateDateTime;
                }else if (quoteInfo.RepairOrderStatusCode == 'L40') {
                    // L40-SORC转OGZ日
                    rpr.SorcOgzDate__c = statusUpdateDateTime.date();
                    rpr.SorcOgzDateTime__c = statusUpdateDateTime;
                }else if (quoteInfo.RepairOrderStatusCode == 'L45') {
                    // L45-OGZ受理日
                    rpr.OgzAcceptDate__c = statusUpdateDateTime.date();
                    rpr.OgzAcceptDateTime__c = statusUpdateDateTime;
                }
                //WLIG-C8TACX LY 20211206 End
                if (String.isBlank(rpr.NFM105_MessageGroupNumber__c) || Integer.valueOf(rpr.NFM105_MessageGroupNumber__c) <= Integer.valueOf(rowData.MessageGroupNumber__c)) {
@@ -532,6 +554,7 @@
            for (Repair_Quotation__c rqfalse : rqList) {
                rqfalse.Quotation_agreement__c = false;
            }
            System.debug('rqUpdateMap1:' + rqUpdateMap);
            rqList.addAll(rqUpdateMap.values());
            if (rqList.size() > 0) {
                // TODO update false;
@@ -578,7 +601,8 @@
            3.根据限次合同查到该合同下的所有修理 
            */
            logstr += '\n rprList::'+rprList;
            if (rprList.size() > 0) {
            // 20220321 ljh 限次合同异常数据 update start
            /*if (rprList.size() > 0) {
                //需要知道当前修理对应的设备的系列号
                Map<String,String> reurfMap = new Map<String,String>();
                //限次合同Id集合
@@ -696,10 +720,119 @@
                    }
                }
            }
            }*/
            //add by rentx 2021-3-4 end
            if (rprList.size() > 0) {
                //contractAssetUrfMap<维修合同+保有设备,限次系列>
                Map<String,String> contractAssetUrfMap = new Map<String,String>();
                //限次合同Id集合
                List<Id> contractIds = new List<Id>();
                //限次合同下的修理集合
                List<Repair__c> reList = new List<Repair__c>();
                // 限次合同 map
                Map<String,Map<String,List<Repair__c>>> contractMap = new Map<String,Map<String,List<Repair__c>>>();
                //维修合同保有设备集合
                List<Maintenance_Contract_Asset__c> maassList = new List<Maintenance_Contract_Asset__c>();
                // 需要更新的 维修合同报价/保有设备
                List<Maintenance_Contract_Asset_Estimate__c> updateList = new List<Maintenance_Contract_Asset_Estimate__c>();
                //查询当前修理对应的维修合同是否为限次合同 && 大修
                for (Repair__c rep : rprList) {
                    if (rep.Maintenance_Contract__c != null && rep.Maintenance_Contract__r.URF_Contract__c == true && (rep.Repair_Rank__c == 'A' || rep.Repair_Rank__c == 'B' || rep.Repair_Rank__c == 'C') && rep.Agreed_Date__c != null) {
                        contractIds.add(rep.Maintenance_Contract__c);
                    }
                }
                //查询当前限次合同下的所有维修合同保有设备
                maassList = [SELECT id , Series_RepairCount_F__c
                                , Maintenance_Contract_Asset_Estimate__c
                                , Asset__c
                                , Maintenance_Contract__c
                                , URF_Series_F__c
                                FROM Maintenance_Contract_Asset__c
                                WHERE Maintenance_Contract__c in :contractIds];
                for (Maintenance_Contract_Asset__c maAss : maassList) {
                    // contractAssetUrfMap<维修合同+保有设备,限次系列>
                    String keyV = maAss.Maintenance_Contract__c +';'+ maAss.Asset__c;
                    if (!contractAssetUrfMap.containsKey(keyV) && String.isNotBlank(maAss.URF_Series_F__c)) {
                        contractAssetUrfMap.put(keyV, maAss.URF_Series_F__c);
                    }
                }
                //查询维修合同下的所有修理
                reList = [select id,Maintenance_Contract__c,Delivered_Product__c,Usage_Ratio_Price_Service__c from Repair__c where (Repair_Rank__c = 'A' OR Repair_Rank__c = 'B' OR Repair_Rank__c = 'C') and Agreed_Date__c <> null and Maintenance_Contract__c in :contractIds ];
                system.debug('zheli:'+reList.size());
                for (Repair__c rep : reList) {
                    List<Repair__c> tempRepL00;
                    List<Repair__c> tempRepL01;
                    List<Repair__c> tempRepL02;
                    List<Repair__c> tempRepL03;
                    Map<String,List<Repair__c>> tempRepM;
                    String keyV = rep.Maintenance_Contract__c +';'+rep.Delivered_Product__c;
                    if(contractMap.containsKey(rep.Maintenance_Contract__c)){
                        tempRepM = contractMap.get(rep.Maintenance_Contract__c);
                        // 保有设备 和 限次系列
                        if(tempRepM.containsKey(rep.Delivered_Product__c)){
                            tempRepL02 = tempRepM.get(rep.Delivered_Product__c);
                        }else{
                            tempRepL02 = new List<Repair__c>();
                        }
                        tempRepL02.add(rep);
                        tempRepM.put(rep.Delivered_Product__c,tempRepL02);
                        if(contractAssetUrfMap.containsKey(keyV)){
                            if(tempRepM.containsKey(contractAssetUrfMap.get(keyV))){
                                tempRepL03 = tempRepM.get(contractAssetUrfMap.get(keyV));
                            }else{
                                tempRepL03 = new List<Repair__c>();
                            }
                            tempRepL03.add(rep);
                            tempRepM.put(contractAssetUrfMap.get(keyV),tempRepL03);
                        }
                    }else{
                        tempRepM = new Map<String,List<Repair__c>>();
                        tempRepL00 = new List<Repair__c>();
                        tempRepL00.add(rep);
                        tempRepL01 = new List<Repair__c>();
                        tempRepL01.add(rep);
                        tempRepM.put(rep.Delivered_Product__c,tempRepL00);
                        if(contractAssetUrfMap.containsKey(keyV)){
                            tempRepM.put(contractAssetUrfMap.get(keyV),tempRepL01);
                        }
                    }
                    contractMap.put(rep.Maintenance_Contract__c,tempRepM);
                }
                if (contractMap.size() > 0) {
                    for (Maintenance_Contract_Asset__c maAss : maassList) {
                        // 判断已维修次数是否发生改变
                        if (contractMap.get(maAss.Maintenance_Contract__c) != null
                            && contractMap.get(maAss.Maintenance_Contract__c).size() != 0
                            && contractMap.get(maAss.Maintenance_Contract__c).containsKey(maAss.URF_Series_F__c)
                            && maAss.Series_RepairCount_F__c != contractMap.get(maAss.Maintenance_Contract__c).get(maAss.URF_Series_F__c).size()) {
                            //如果发生改变.设置新的值;
                            Maintenance_Contract_Asset_Estimate__c mcae = new Maintenance_Contract_Asset_Estimate__c();
                            mcae.Id = maAss.Maintenance_Contract_Asset_Estimate__c;
                            mcae.Series_RepairCount__c = contractMap.get(maAss.Maintenance_Contract__c).get(maAss.URF_Series_F__c).size();
                            //设置系列修理金额
                            mcae.Seriesrepairamount__c = 0;
                            for (Repair__c rep : contractMap.get(maAss.Maintenance_Contract__c).get(maAss.URF_Series_F__c)) {
                                 mcae.Seriesrepairamount__c += rep.Usage_Ratio_Price_Service__c;
                            }
                            mcae.Asset_RepairCount__c = 0;
                            mcae.Equipmentrepairamount__c = 0;
                            if (contractMap.get(maAss.Maintenance_Contract__c).containsKey(maAss.Asset__c)) {
                                mcae.Asset_RepairCount__c = contractMap.get(maAss.Maintenance_Contract__c).get(maAss.Asset__c).size();
                                //设置设备修理金额
                                for (Repair__c rep: contractMap.get(maAss.Maintenance_Contract__c).get(maAss.Asset__c)) {
                                    mcae.Equipmentrepairamount__c += rep.Usage_Ratio_Price_Service__c;
                                }
                            }
                            updateList.add(mcae);
                        }
                    }
                    if (updateList.size() > 0) {
                        // system.debug('zheli:'+updateList);
                        update updateList;
                    }
                }
            }
            // 20220321 ljh 限次合同异常数据 update end
            //gzozw-add
            logstr += '\nend';
            rowData.retry_cnt__c = 0;