黄千龙
2023-03-08 962519811b7c4be07f30d09e791798b0ea79d3ae
force-app/main/default/classes/AssetUpdateContractBatch.cls
@@ -107,25 +107,7 @@
    global void execute(Database.BatchableContext BC,
                        list<Maintenance_Contract__c> MCList) {
        //URF限次合同2期 LY 20220908 start
        set<id> mcIDSet = new set<id>();
        for (Maintenance_Contract__c tempMCA : MCList) {
            mcIDSet.add(tempMCA.id);
        }
        //获取非限次合同
        List<Maintenance_Contract__c> mcPList =[select id , previousTotalRepairAmount__c , currentTotalRepairAmount__c ,
                                                previousTotalContractAmount__c , currentTotalContractAmountVM__c , currentTotalGuaranteePrice__c
                                                , RecordType_DeveloperName__c
                                                from Maintenance_Contract__c
                                                where URF_Contract__c = false and ID in :mcIDSet];
        //获取限次合同
        List<Maintenance_Contract__c> urfMCList =[select id , previousTotalRepairAmount__c , currentTotalRepairAmount__c ,
                                                previousTotalContractAmount__c , currentTotalContractAmountVM__c , currentTotalGuaranteePrice__c
                                                , RecordType_DeveloperName__c
                                                from Maintenance_Contract__c
                                                where URF_Contract__c = true and ID in :mcIDSet];
                                               
        //URF限次合同2期 LY 20220908 end
        map<string, asset> updateAssetMap = new map<string, asset>();
        map<string, Maintenance_Contract__c> UpdateMCMap =
@@ -142,7 +124,7 @@
        Set<ID> allAssetIDSet = new Set<ID>();
        List<asset> allAssetList = new List<asset>();
        // 初始化维修合同消费率相关金额字段为0;
        for (Maintenance_Contract__c tempMC : mcPList) {
        for (Maintenance_Contract__c tempMC : MCList) {
            mcIDmap.put(tempMC.id,null);
            tempMC.currentTotalRepairAmount__c  = 0;
            tempMC.previousTotalRepairAmount__c = 0;
@@ -172,6 +154,7 @@
             Maintenance_Contract__r.Estimation_Id__r.Submit_quotation_day__c,
             Maintenance_Contract__r.RecordType.DeveloperName
             , ifHaveleftInPrevious__c
             ,Maintenance_Contract__r.URF_Contract__c
             from Maintenance_Contract_Asset__c
             where Maintenance_Contract__c in: mcIDmap.keyset()
            ];
@@ -253,13 +236,15 @@
            allAssetIDSet.add(mca.Asset__c);
            newToOldMCA.put(mca.id, null);
        }
        //system.debug('allAssetIDSet:' + allAssetIDSet);
        system.debug('allAssetIDSet:' + allAssetIDSet);
        //system.debug('newToOldMCA:' + newToOldMCA);
        allAssetList =
            [select id, CurrentContract_F__c,
             CurrentContract_F__r.Contract_End_Date__c,
             CurrentContract_F_asset__c,
             CurrentContract_F_asset__r.endDate_sum__c
             ,URF_Maintenance_Contract__c
             ,URF_Maintenance_Contract__r.Contract_End_Date__c
             from asset
             where id in: allAssetIDSet];
        // 更新保有设备上的上一期维修合同和维修合同保有设备
@@ -267,70 +252,30 @@
        for (asset ass : allAssetList) {
            Maintenance_Contract_Asset__c tempMCA =
                assetIDtoMCA.get(ass.Id);
            if (tempMCA != null &&
            if (tempMCA != null) {
                if (tempMCA.Maintenance_Contract__r.URF_Contract__c==true &&
                    (ass.URF_Maintenance_Contract__c == null ||
                       ass.URF_Maintenance_Contract__r.Contract_End_Date__c <= tempMCA.endDate_sum__c
                        )) {
                    ass.URF_Maintenance_Contract__c = tempMCA.Maintenance_Contract__c;
                }
                if (tempMCA.Maintenance_Contract__r.URF_Contract__c==false &&
                    (
                        ass.CurrentContract_F__c == null  ||
                        ass.CurrentContract_F_asset__c == null ||
                        ass.CurrentContract_F_asset__r.endDate_sum__c <=
                        tempMCA.endDate_sum__c
                    ) ) {
                    )
                    ){
                ass.CurrentContract_F__c = tempMCA.Maintenance_Contract__c;
                ass.CurrentContract_F_asset__c = tempMCA.id;
                }
                updateAssetMap.put(ass.id, ass);
            }
        }
        //URF限次合同2期 LY 20220908 start
        Map<string,Maintenance_Contract__c> mcURFIDmap = new Map<string,Maintenance_Contract__c>();
        for (Maintenance_Contract__c tempURFMC : urfMCList) {
            mcURFIDmap.put(tempURFMC.Id, null);
        }
        //检索本次限次合同的保有设备
        List<Maintenance_Contract_Asset__c> mcURFList =
            [select Id, Asset__c, Maintenance_Contract__c,
             Estimate_Cost_formula__c,
             startDate_sum__c,
             endDate_sum__c,
             No_discount__c,
             GuaranteePrice_Amount_Text__c,
             Maintenance_Contract__r.Status__c,
             Maintenance_Contract__r.Name,
             Maintenance_Contract__r.Contract_End_Date__c,
             Maintenance_Contract__r.Contract_Start_Date__c,
             Maintenance_Contract__r.RecordType_DeveloperName__c,
             Maintenance_Contract__r.Estimation_Id__r.Submit_quotation_day__c,
             Maintenance_Contract__r.RecordType.DeveloperName
             , ifHaveleftInPrevious__c
             from Maintenance_Contract_Asset__c
             where Maintenance_Contract__c in: mcURFIDmap.keyset()
            ];
        Set<ID> allURFAssetIDSet = new Set<ID>();
        Map<string, Maintenance_Contract_Asset__c> assetIDtoURF =new Map<string, Maintenance_Contract_Asset__c>();
        for (Maintenance_Contract_Asset__c mcaURF : mcURFList) {
            // 找出来检索出来的维修合同保有中的最新的
            if (assetIDtoURF.containsKey(mcaURF.Asset__c)) {
                Maintenance_Contract_Asset__c tempURF =
                    assetIDtoURF.get(mcaURF.Asset__c);
                if (tempURF.endDate_sum__c < mcaURF.endDate_sum__c) {
                    assetIDtoURF.put(mcaURF.Asset__c, mcaURF);
                }
            } else {
                assetIDtoURF.put(mcaURF.Asset__c, mcaURF);
            }
            allURFAssetIDSet.add(mcaURF.Asset__c);
        }
        List<asset> allURFAssetList =[select id, URF_Maintenance_Contract__c
                         from asset
                         where id in: allURFAssetIDSet];
        for (asset ass : allURFAssetList) {
            Maintenance_Contract_Asset__c tempMCA =
                assetIDtoURF.get(ass.Id);
            ass.URF_Maintenance_Contract__c = tempMCA.Maintenance_Contract__c;
            updateAssetMap.put(ass.id, ass);
        }
        //URF限次合同2期 LY 20220908 end
        //检索出历届保有设备
        list<Maintenance_Contract_Asset__c> allMCAList =
            [select Id, Asset__c, Maintenance_Contract__c,