global class MCUpdateEstimateCostBatch implements Database.Batchable { // 设定运行的维修合同的ID public string TestID; // 设定运行的维修合同的list public list TestIDList; // 报错的维修合同ID public String logstr = ''; // 报错信息 public String errorstr = ''; global Integer totalCount = 0; // 总件数 global Integer failedCount = 0; // 失败件数 global List emailMessages = new List(); global MCUpdateEstimateCostBatch() { } global MCUpdateEstimateCostBatch(string TestID ) { this.TestID = TestID; } global MCUpdateEstimateCostBatch(list TestIDList ) { this.TestIDList = TestIDList; } global Database.QueryLocator start(Database.BatchableContext bc) { string query = ' select id , Contract_Amount__c , Estimation_Id__c, RecordType_DeveloperName__c, ' + ' Estimation_Id__r.Asset_Repair_Sum_Price__c, '+ 'Estimation_Id__r.NewEstimation_Amount__c ,Estimate_Trial_Money__c, '+ 'Estimation_Id__r.Asset_Sum_Price__c '+ ' from Maintenance_Contract__c ' // + ' where RecordType_DeveloperName__c != \'VM_Contract\' '; + ' where RecordType_DeveloperName__c = \'NewMaintenance_Contract\' '; // + ' where RecordType_DeveloperName__c = \'NewMaintenance_Contract\' '; if (string.isNotBlank(TestID) ) { query += ' and id =: TestID'; } else if (TestIDList != null && TestIDList.size() > 0) { query += ' and id in: TestIDList'; } system.debug('query:'+query); return Database.getQueryLocator(query); } global void execute(Database.BatchableContext BC, list MCList) { set MCIDSet = new set(); Map MCMap = new Map(); for (Maintenance_Contract__c tempMC : MCList) { mcIDSet.add(tempMC.id); MCMap.put(tempMC.id, tempMC); } list UpdateMCAList = new list(); map UpdateMCAEMap = new map(); list MCAList = [select id, Estimate_List_Price_All__c, Estimate_Cost__c, Maintenance_Contract_Asset_Estimate__c, Maintenance_Contract_Asset_Estimate__r.Estimate_Cost__c, Maintenance_Contract_Asset_Estimate__r.Maintenance_Contract_Estimate__r.Maintenance_Price__c, Maintenance_Contract_Asset_Estimate__r.Maintenance_Contract_Estimate__r.Asset_Repair_Sum_Price__c, Maintenance_Contract_Asset_Estimate__r.Adjustment_Upper_price__c, Maintenance_Contract_Asset_Estimate__r.Maintenance_Contract_Estimate__r.GuidePrice_Up__c, Maintenance_Contract__c from Maintenance_Contract_Asset__c where Maintenance_Contract__c in: mcIDSet]; for (Maintenance_Contract_Asset__c tempMCA : MCAList) { decimal tempEC = 0; decimal realprice = tempMCA.Maintenance_Contract_Asset_Estimate__r.Maintenance_Contract_Estimate__r.Maintenance_Price__c - tempMCA.Maintenance_Contract_Asset_Estimate__r.Maintenance_Contract_Estimate__r.Asset_Repair_Sum_Price__c; decimal assetListPrice = tempMCA.Maintenance_Contract_Asset_Estimate__r.Adjustment_Upper_price__c == null? 0 : tempMCA.Maintenance_Contract_Asset_Estimate__r.Adjustment_Upper_price__c; decimal guidePriceUp = tempMCA.Maintenance_Contract_Asset_Estimate__r.Maintenance_Contract_Estimate__r.GuidePrice_Up__c; tempEC = ((realprice)*( assetListPrice / guidePriceUp)).setScale(2); if(tempMCA.Maintenance_Contract_Asset_Estimate__c != null &&!UpdateMCAEMap.containskey(tempMCA.Maintenance_Contract_Asset_Estimate__c)){ // decimal realprice = tempMCA.Maintenance_Contract_Asset_Estimate__r.Maintenance_Contract_Estimate__r.Maintenance_Price__c - tempMCA.Maintenance_Contract_Asset_Estimate__r.Maintenance_Contract_Estimate__r.Asset_Repair_Sum_Price__c; // decimal assetListPrice = tempMCA.Maintenance_Contract_Asset_Estimate__r.Adjustment_Upper_price__c == null? 0 : tempMCA.Maintenance_Contract_Asset_Estimate__r.Adjustment_Upper_price__c; // decimal guidePriceUp = tempMCA.Maintenance_Contract_Asset_Estimate__r.Maintenance_Contract_Estimate__r.GuidePrice_Up__c; // tempEC = ((realprice)*( assetListPrice / guidePriceUp)).setScale(2); Maintenance_Contract_Asset_Estimate__c tempMCAE = new Maintenance_Contract_Asset_Estimate__c(); tempMCAE.id = tempMCA.Maintenance_Contract_Asset_Estimate__c; tempMCAE.Estimate_Cost__c = tempEC; UpdateMCAEMap.put(tempMCAE.id,tempMCAE); } System.debug(' ++++ ' + realprice + ' ++++ ' + assetListPrice + ' ++++ ' + guidePriceUp); if(tempMCA.Estimate_Cost__c != tempEC){ Maintenance_Contract_Asset__c newMCA = new Maintenance_Contract_Asset__c(); newMCA.id = tempMCA.id; newMCA.Estimate_Cost__c = tempEC; UpdateMCAList.add(newMCA); } } if( UpdateMCAList.size() > 0 ){ Database.SaveResult[] saveResults = Database.update(UpdateMCAList, false); totalCount = + saveResults.size(); for (Integer i = 0; i < saveResults.size(); i++) { if (!saveResults.get(i).isSuccess() || Test.isRunningTest()) { logstr += '维修合同保有设备:' + UpdateMCAList.get(i).Id + ' ,'; errorstr += saveResults.get(i).getErrors() + '\n'; failedCount ++; } } } if( UpdateMCAEMap.size() > 0 ){ Database.SaveResult[] saveResults = Database.update(UpdateMCAEMap.values(), false); totalCount = + saveResults.size(); for (Integer i = 0; i < saveResults.size(); i++) { if (!saveResults.get(i).isSuccess()) { logstr += '维修合同报价保有设备:' + UpdateMCAEMap.values().get(i).Id + ' ,'; errorstr += saveResults.get(i).getErrors() + '\n'; failedCount ++; } } } } global void finish(Database.BatchableContext BC) { } }