global without sharing class ConsumTrialNotUploadRemindBatch implements Database.Batchable { global List emailMessages = new List(); global Integer totalCount = 0; // 総処理件数 global Integer totalCountDone = 0; // 処理済件数 global Integer failedCount = 0; // 処理失敗件数 global Date today60Ago = Date.today().addDays(-60); global Date today1yearAgo = Date.today().addyears(-1); //2021-06-02 mzy 备品课题-1577 Boolean IsNeedExecute = false; // 2021-03-05 mzy WLIG-BYHD79 SFDC环境batch合并调查 是否符合执行条件 // 2021-03-05 mzy WLIG-BYHD79 SFDC环境batch合并调查 start global ConsumTrialNotUploadRemindBatch(Boolean NeedExecute) { this.IsNeedExecute = NeedExecute; } // 2021-03-05 mzy WLIG-BYHD79 SFDC环境batch合并调查 end global ConsumTrialNotUploadRemindBatch(Integer d) { this.today60Ago = Date.today().addDays(-d); } global ConsumTrialNotUploadRemindBatch() { } global Database.QueryLocator start(Database.BatchableContext bc) { //2021-06-02 mzy 备品课题-1577 start //原本的功能点 : //“最晚预计使用日+60天”前若未上传试用表或上传的试用表不合格,则每天给申请人推送邮件 //现在针对借用目的是ET展箱,单独设置---备品中心出库日一年内还没有上传适用表或者不合格的情况,则每天给申请人推送邮件 return Database.getQueryLocator([ SELECT Need_Send_Trial_Upload_Email__c , HP_received_sign_rich__c FROM Consum_Apply__c WHERE ( ( demo_purpose2__c != 'ET展箱' AND Asset_loaner_start_date__c < :today60Ago) // 60天前 OR ( demo_purpose2__c = 'ET展箱' AND Bollow_Date__c < :today1yearAgo)//1年前 ) AND (Consum_Trial_Update_Time__c = null OR HP_received_sign_NG__c = true) // 未上传试用表或试用表不合格 AND Shippment_loaner_time__c != null AND RA_Status__c != :Consum_ApplyUtil.CaStatusMap.get(Consum_ApplyUtil.CaStatus.Qu_Xiao.ordinal()) AND RA_Status__c != :Consum_ApplyUtil.CaStatusMap.get(Consum_ApplyUtil.CaStatus.Shan_Chu.ordinal()) ]); //2021-06-02 mzy 备品课题-1577 end } global void execute(Database.BatchableContext BC, List caList) { totalCount += caList.size(); Savepoint sp = Database.setSavepoint(); try{ List caListUpdate = new List(); for(Consum_Apply__c ca : caList) { ca.Need_Send_Trial_Upload_Email__c = true; caListUpdate.add(ca); } FixtureUtil.withoutUpdate(caListUpdate); totalCountDone += caListUpdate.size(); } catch(Exception e) { emailMessages.add(e.getMessage()); failedCount += caList.size(); Database.rollback(sp); } } global void finish(Database.BatchableContext bc) { BatchEmailUtil be = new BatchEmailUtil(); String[] toList = new String[]{UserInfo.getUserEmail()}; String emailLabel = 'BatchNotify'; for (OrgWideEmailAddress tmpEmailObj : [SELECT Id, Address, DisplayName FROM OrgWideEmailAddress WHERE DisplayName like :emailLabel]) { toList = new String[]{tmpEmailObj.Address}; } String title = '提醒申请人上传耗材试用表'; List ccList = new List(); for (Consum_Apply_Meta__mdt camd : [SELECT Id , Key__c , ValueLong__c FROM Consum_Apply_Meta__mdt WHERE Package__c = 'ConsumTrialNotUploadRemindBatch' 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; } } if (!(totalCountDone == totalCount && 0 == emailMessages.size())) { be.failedMail(toList, ccList, title, String.join(this.emailMessages, '\n'), totalCount, totalCountDone, failedCount); be.send(); } //2021-04-21 mzy add SFDC点检报告更新逻辑修改 start if(!Test.isRunningTest() &&IsNeedExecute==true){ //batch里调用下一个batch时,希望跟原有的Schedule里面传的条数保持一致 Id execBTId = Database.executebatch(new UpdateInspectionReportAssetBatch(true),100); } //2021-04-21 mzy add SFDC点检报告更新逻辑修改 end } @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++; } }