global class TargetCustomerAssignmentBatch implements Database.Batchable , Database.Stateful{ //SWAG-BHP42V 精琢技术 20191205 START public String query; String opdId;//需要单独执行的OPD计划 list opdIdList;//需要批量执行的OPD计划 global List emailMessages = new List(); global Integer totalCount = 0; // 总件数 global Integer failedCount = 0; Boolean IsNeedExecute = false; // 2021-03-08 mzy WLIG-BYHD79 SFDC环境batch合并调查 是否符合执行条件 global TargetCustomerAssignmentBatch() { } global TargetCustomerAssignmentBatch(String opdId) { this.opdId = opdId; } global TargetCustomerAssignmentBatch(List opdIdList) { this.opdIdList = opdIdList; } global TargetCustomerAssignmentBatch(Boolean needExecute) { IsNeedExecute = needExecute; // 2021-03-08 mzy WLIG-BYHD79 SFDC环境batch合并调查 } global Database.QueryLocator start(Database.BatchableContext bc) { //检索OPD计划中 的 Id,客户-目标客户的查找字段,战略科室ID String query ='select Id,OPD_Customers_Target__c,OCM_category_ID__c,OPDPlan_ImplementDate__c from OPDPlan__c where OPD_Customers_Target__c = null and OCM_category_ID__c != null and OPDPlan_ImplementDate__c != null'; //单独更新OPD计划 if (!string.isblank(opdId)) { query += ' and id = :opdId '; } //批量更新OPD计划 if (opdIdList != null) { query += ' and id in: opdIdList '; } System.debug('sql语句:'+query); return Database.getQueryLocator(query); } global void execute(Database.BatchableContext BC, List scList) { try{ List opdPlanList = new List(); //当annual为空时 则有可能是4月1日创建的 则不用更新 第二天会更新 System.debug('返回的数据:'+scList ); //将OPD计划的战略科室id放到List 当做客户-目标客户的检索条件 Map accsMap = new Map(); //SWAG-BHP42V 精琢技术 20191209 START // 将OPD计划的战略科室id作为key ,本财年作为value 用于下面判断 Map opdMap = new Map(); for(OPDPlan__c op :scList ){ accsMap.put(op.OCM_category_ID__c, op.Id); Date dateToday = op.OPDPlan_ImplementDate__c; // Date yesterday = dateToday.addDays(-1); Integer year = dateToday.year(); Integer month = dateToday.month(); if (month < 4) { year -= 1; } // String ocmYear = year + '年度'; String annual = year - 1867 + 'P'; opdMap.put(op.OCM_category_ID__c,annual); } System.debug('accsMap-->'+ accsMap); //检索OPD计划的战略科室的所有客户-目标客户 List anotList = [select Id,OCM_Period__c,Submit_Customer_target_new__c,Account__c from Account_Number_of_target__c where Account__c IN :accsMap.keySet()]; //SWAG-BSC5WP 20201113 you 拿掉条件--Submit_Customer_target_new__c =true And 是防止 跨财年目标客户为空得情况 System.debug('anotList' + anotList.size()); for(Account_Number_of_target__c an :anotList ){ //判断是否为同一战略科室 String subStr = an.Account__c; if(accsMap.containsKey(subStr.SubString(0,15))){ System.debug('anotList1' + anotList.size()); //判断本年度财年是否相同 if(opdMap.get(subStr.SubString(0,15)) == an.OCM_Period__c){ System.debug('anotList2' + anotList.size()); totalCount ++; OPDPlan__c opdplan =new OPDPlan__c(); opdplan.Id = accsMap.get(subStr.SubString(0,15)); //把目标客户Id 赋值给 opd计划 的查找字段 opdplan.OPD_Customers_Target__c = an.Id; opdPlanList.add(opdplan); } } } //SWAG-BHP42V 精琢技术 20191209 END System.debug('更新的数据:'+opdPlanList); //更新OPD计划对象上的客户-目标客户的查找字段 if (opdPlanList.size() > 0) update opdPlanList; if (System.Test.isrunningTest()) { throw new ControllerUtil.myException('test。'); } }catch(Exception e){ emailMessages.add(e.getMessage()); System.debug(emailMessages); failedCount ++; System.debug(failedCount); } } global void finish(Database.BatchableContext BC) { sendFieldEmail(); //2021-06-07 mzy WLIG-BYHD79 SFDC环境batch合并调查 start if(!Test.isRunningTest() &&IsNeedExecute==true){ List camList = [SELECT Id , Key__c , ValueLong__c FROM Consum_Apply_Meta__mdt WHERE Package__c = 'InventoryAutoDeleteBatch' AND Key__c = 'dateLimit']; Integer dateLimit = 2; for (Consum_Apply_Meta__mdt camt : camList) { dateLimit = Integer.valueOf(camt.ValueLong__c); } //batch里调用下一个batch时,希望跟原有的Schedule里面传的条数保持一致 Id execBTId = Database.executebatch(new ConsumApplyInventoryAutoDeleteBatch(dateLimit,true),200); } //2021-06-07 mzy WLIG-BYHD79 SFDC环境batch合并调查 end } private void sendFieldEmail() { PretechBatchEmailUtil be = new PretechBatchEmailUtil(); String[] toList = new String[] {UserInfo.getUserEmail()}; String title = '更新OPD计划客户-目标客户失败'; String[] ccList = new String[] {}; if(System.Test.isRunningTest()){ be.successMail('', 1); } if (emailMessages.size() > 0) { be.failedMail(toList, ccList, title, String.join(this.emailMessages, '\n'), totalCount, totalCount - failedCount, failedCount, '',false); be.send(); } } //SWAG-BHP42V 精琢技术 20191205 END }