global without sharing class ConsumAutoSelectBatch implements Database.Batchable, Database.Stateful { global List emailMessages = new List(); global Integer totalCount = 0; // 総処理件数 global Integer totalCountDone = 0; // 処理済件数 global Integer failedCount = 0; // 処理失敗件数 Boolean IsNeedExecute = false; // 2021-03-05 mzy WLIG-BYHD79 SFDC环境batch合并调查 是否符合执行条件 // 2021-03-05 mzy WLIG-BYHD79 SFDC环境batch合并调查 start global ConsumAutoSelectBatch( ) { } global ConsumAutoSelectBatch(Boolean NeedExecute) { this.IsNeedExecute = NeedExecute; } // 2021-03-05 mzy WLIG-BYHD79 SFDC环境batch合并调查 end /** * startには、queryを実行、耗材备品申請を検索 */ global Database.Querylocator start(Database.BatchableContext bc) { String soql = 'select Id' + ', Salesdepartment__c' + ', demo_purpose2__c' + ' from Consum_Apply__c' + ' where (Status__c = \'已批准\' OR Status__c = \'已出库指示\')' // + ' and demo_purpose2__c !=\'动物实验\' and demo_purpose2__c !=\'ET展箱\'' + ' and Wei_Shipment_request__c > 0' + ' and Yi_loaner_arranged__c = 0' + ' order by Id'; return Database.getQueryLocator(soql); } global void execute(Database.BatchableContext bc,List csmApyList) { totalCount += csmApyList.size(); Savepoint sp = Database.setSavepoint(); try { List selectedData = [SELECT Id , Consum_Apply_Equipment_Set__r.Model_No__c , Consum_Start_Date_After_15_Day__c , Asset__c , Consumable_Guaranteen_end_F__c , Select_Time__c , Consum_Start_Date__c , Shipment_request_time2__c FROM Consum_Apply_Equipment_Set_Detail__c WHERE Consum_Apply__c = :csmApyList AND Cancel_Select__c = false AND Shipment_request_time2__c = null]; List caesdList = new List(); Boolean haveChangeAss = ConsumDefaultSelectController.reSetAsset(selectedData, caesdList, csmApyList[0], false, true); if (caesdList.size() > 0) { update caesdList; } totalCountDone += csmApyList.size(); } catch (Exception e) { emailMessages.add(e.getMessage()); failedCount += csmApyList.size(); Database.rollback(sp); } } global void finish(Database.BatchableContext bc) { String email = UserInfo.getUserEmail(); String emailLabel = 'BatchNotify'; for (OrgWideEmailAddress tmpEmailObj : [SELECT Id, Address, DisplayName FROM OrgWideEmailAddress WHERE DisplayName like :emailLabel]) { email = tmpEmailObj.Address; } List ccList = new List(); String title = '耗材自动分配'; for (Consum_Apply_Meta__mdt camd : [SELECT Id , Key__c , ValueLong__c FROM Consum_Apply_Meta__mdt WHERE Package__c = 'ConsumAutoSelectBatch' AND (Key__c = 'ErrorMailAddress' OR Key__c = 'ErrorMailTitle' ) ORDER BY Key__c]) { if (camd.Key__c == 'ErrorMailAddress') { if (String.isNotBlank(camd.ValueLong__c)) { ccList.addAll(camd.ValueLong__c.split(',')); } } else if (camd.Key__c == 'ErrorMailTitle') { title = camd.ValueLong__c; } } BatchEmailUtil be = new BatchEmailUtil(); String[] toList = new String[]{email}; if (!(totalCountDone == totalCount && 0 == emailMessages.size())) { be.failedMail(toList, ccList, title, String.join(this.emailMessages, '\n'), totalCount, totalCountDone, failedCount); be.send(); } //2021-03-05 mzy WLIG-BYHD79 SFDC环境batch合并调查 start if(!Test.isRunningTest() &&IsNeedExecute==true){ //batch里调用下一个batch时,希望跟原有的Schedule里面传的条数保持一致 Id execBTId = Database.executebatch(new SetOlympusCalendarWorkDayBatch(true),200); } //2021-03-05 mzy WLIG-BYHD79 SFDC环境batch合并调查 end } // 需要 以 申请书单位 调整库存、固定 1 public static void run() { Database.executeBatch(new ConsumAutoSelectBatch(), 1); } @TestVisible private static void test() { if (false == Test.isRunningTest()) return; Integer i = 0; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; } }