/* 用于更新目前所有维修合同续签的上期合同 1) 为避免错误,按保有设备为基础查询维修合同保有设备; 2) 按维修合同保有设备与合同结束日排序查询 3) 检索出上一期维修合同所有的维修合同保有设备; */ global class AssetUpdateLastContractbatch implements Database.Batchable { // 设定运行的保有设备ID public String TestID; // 设定运行的保有设备的list public list TestIDList; // 报错信息 public String errorstr = ''; Boolean IsNeedExecute = false; // 2021-03-08 mzy WLIG-BYHD79 SFDC环境batch合并调查 是否符合执行条件 global AssetUpdateLastContractbatch() { } global AssetUpdateLastContractbatch(List TestIDList) { this.TestIDList = TestIDList; } // 2021-03-08 mzy WLIG-BYHD79 SFDC环境batch合并调查 start global AssetUpdateLastContractbatch(Boolean NeedExecute) { this.IsNeedExecute = NeedExecute; } // 2021-03-08 mzy WLIG-BYHD79 SFDC环境batch合并调查 end global Database.QueryLocator start(Database.BatchableContext bc) { // List assetList = new List(); // List mCA = [select count(Id), Asset__c from Maintenance_Contract_Asset__c Group by Asset__c ]; // for (AggregateResult ar : mCA) { // assetList.add(String.valueOf(ar.get('Asset__c'))); // } if (TestIDList != null && TestIDList.size() > 0) { return Database.getQueryLocator([select id from asset where Id in : TestIDList]); }else{ // 20221117 ljh DB202211258553 start // return Database.getQueryLocator([select id from asset]); return Database.getQueryLocator([select id from asset where IsCompetitorProduct = false AND ( AssetMark__c != '耗材' OR Product2.Family != 'ET')]); // 20221117 ljh DB202211258553 end // return Database.getQueryLocator([select id from asset where Id in : assetList]); } } global void execute(Database.BatchableContext BC, list scope) { List assetslist = new List(); for (asset ass : scope) { assetslist.add(ass.Id); } List mCAList = [select Id,Maintenance_Contract__c,Asset__c,Maintenance_Contract__r.Contract_End_Date__c,LastMContract__c from Maintenance_Contract_Asset__c where Maintenance_Contract__r.Status__c in ('契約','契約満了') and Asset__c in : assetslist // 2020/10/30 songxiaoqi start and Maintenance_Contract__r.RecordType_DeveloperName__c !='VM_Contract' //2020/ 10/30 songxiaoqi end order by Asset__c,Maintenance_Contract__r.Contract_End_Date__c]; //add by rentx 2020-11-09 start List updatelist = new List(); //add by rentx 2020-11-09 end for (Integer i = 0; i < mCAList.size(); i++) { if (i== 0) { }else{ // if (mCAList[i].Asset__c == mCAList[i-1].Asset__c) { if ((mCAList[i].Asset__c == mCAList[i-1].Asset__c) && (mCAList[i].LastMContract__c != mCAList[i-1].Maintenance_Contract__c)) { mCAList[i].LastMContract__c = mCAList[i-1].Maintenance_Contract__c; //add by rentx 2020-11-09 start updatelist.add(mCAList[i]); //add by rentx 2020-11-09 end } } } //update by rentx 2020-11-09 start // Database.SaveResult[] lsr = Database.update(mCAList, false); Database.SaveResult[] lsr = Database.update(updatelist, false); //update by rentx 2020-11-09 end String errorMsg = ''; for (Integer sIdx = 0; sIdx < lsr.size(); sIdx++) { Database.SaveResult sr = lsr[sIdx]; if (!sr.isSuccess()) { Database.Error emsg = sr.getErrors()[0]; errorstr += 'ERROR ' + mCAList[sIdx].get('Id') + ' 维修设备:' + emsg + '\n'; } } } global void finish(Database.BatchableContext BC) { BatchIF_Log__c batchIfLog = new BatchIF_Log__c(); batchIfLog.Type__c = 'MCAssetUpdate'; batchIfLog.Log__c = '\nAssetUpdateLastContractEnd'; if (errorstr.length() > 60000) { batchIfLog.ErrorLog__c = errorstr.substring(0, 60000); } else { batchIfLog.ErrorLog__c = errorstr.substring(0, errorstr.length()); } insert batchIfLog; //2021-03-03 mzy WLIG-BYHD79 SFDC环境batch合并调查 start if(!Test.isRunningTest() &&IsNeedExecute==true){ //batch里调用下一个batch时,希望跟原有的Schedule里面传的条数保持一致 Id execBTId = Database.executebatch(new TargetCustomerAssignmentBatch(true),1); } //2021-03-03 mzy WLIG-BYHD79 SFDC环境batch合并调查 end } }