global class HistoryTotalAmountBatch implements Database.Batchable { public String query; public List idl; global HistoryTotalAmountBatch() { this.query = query; } global HistoryTotalAmountBatch(List idl) { this.idl = idl; this.query = query; } global Database.QueryLocator start(Database.BatchableContext bc) { query = 'SELECT Id,Total_Contract_Price__c From Maintenance_Contract_Estimate__c Where Maintenance_Contract_Status__c = \'契約\' and Dealer__r.Is_Active_Formula__c !=\'无效\' and Process_Status__c!=\'不批准\' and Process_Status__c!=\'中止\' '; if (idl!=null) { query+=' and id In :idl'; } return Database.getQueryLocator(query); } global void execute(Database.BatchableContext BC, list mceList) { List mceIds = new List(); Map map1 = new Map(); Map map2 = new Map(); for (Maintenance_Contract_Estimate__c mce :mceList) { mceIds.add(mce.id); } List mcaeList = [SELECT id,Product_Manual__c,Product_Manual__r.Maintenance_Price_Year__c,Asset__r.Product2.Maintenance_Price_Year__c,Asset__c,Maintenance_Contract_Estimate__r.id,Maintenance_Contract_Estimate__r.Contract_Range__c FROM Maintenance_Contract_Asset_Estimate__c WHERE Maintenance_Contract_Estimate__c IN :mceIds]; for (String mceid:mceIds) { Maintenance_Contract_Estimate__c mce = new Maintenance_Contract_Estimate__c(); for (Maintenance_Contract_Asset_Estimate__c mcae: mcaeList) { Decimal price = 0; if (mcae.Asset__c != null) { system.debug('mcae.Asset__c=='+mcae.Asset__r.Product2.Maintenance_Price_Year__c); price = mcae.Asset__r.Product2.Maintenance_Price_Year__c; } if (mcae.Product_Manual__c != null) { system.debug('mcae.Product_Manual__c =='+mcae.Product_Manual__r.Maintenance_Price_Year__c); price = mcae.Product_Manual__r.Maintenance_Price_Year__c; } if (price != 0 && price!=null) { if (mceid == mcae.Maintenance_Contract_Estimate__r.id ) { if (map1.containsKey(mceid)) { Maintenance_Contract_Estimate__c mce1 = map1.get(mceid); if (mce1 !=null) { mce1.Total_Contract_Price__c += price; map1.remove(mceid); map1.put(mceid,mce1); } }else{ mce.id = mceid; mce.Total_Contract_Price__c = price; map1.put(mceid,mce); } if (mcae.Maintenance_Contract_Estimate__r.Contract_Range__c!=null) { if (!map2.containsKey(mceid)) { map2.put(mceid,mcae.Maintenance_Contract_Estimate__r.Contract_Range__c); } } } } } } for( String mceid :map1.keySet()){ Maintenance_Contract_Estimate__c mce = map1.get(mceid); if (map2.get(mceid)!=null) { Double month = map2.get(mceid); Decimal totalPrice = mce.Total_Contract_Price__c; totalPrice = totalPrice/12*month; mce.Total_Contract_Price__c = totalPrice; map1.remove(mceid); map1.put(mceid,mce); } } if (map1.keySet()!=null) { update map1.values(); } } global void finish(Database.BatchableContext BC) { } }