// 22/03/2023 合同续签,Asset标志位变为false,以便生成新的报警提醒 global class HandleAlarm888AssetFlagBatch implements Database.Batchable , Database.AllowsCallouts, Database.Stateful { public Date nowDate = Date.today(); // List assetIdList = new List(); global HandleAlarm888AssetFlagBatch() { // this.assetIdList = assetIdList; } //Database.QueryLocator global List start(Database.BatchableContext bc) { //del SerMarGuranteeType__c 多年保修类型; CurrentContract__c 最近一期维修合同 InstallDate,InstallDate__c,Extend_Gurantee_DateTo__c, List assetList = [SELECT Id,InstallDate__c,Extend_Gurantee_DateTo__c,CurrentContract_Start_Date__c,CurrentContract_End_Date__c,Is_Add_888_Alarm__c, (SELECT Id,Asset_ID__c,Nth_Operating_Day__c FROM Alarm_888_Month__r ORDER BY Nth_Operating_Day__c DESC LIMIT 1) FROM Asset WHERE Is_Add_888_Alarm__c = true]; /*Where (MDM_Model_No__c = 'OER-AW' OR MDM_Model_No__c = 'OER-Smart') AND Is_Add_888_Alarm__c = false AND (InstallDate!= null AND InstallDate!= :installDate) AND ((CurrentContract_End_Date__c >=: nowDate AND CurrentContract_Start_Date__c <= :nowDate) OR (Extend_Gurantee_DateTo__c >= :nowDate AND InstallDate__c <= :nowDate ))*/ return assetList; } global void execute(Database.BatchableContext BC,List assetList) { System.debug(LoggingLevel.INFO, '*** assetList: ' + assetList); if (assetList.size() > 0) { for (Asset asset : assetList) { if (asset.Alarm_888_Month__r.size() > 0 && asset.Alarm_888_Month__r[0] != null) { Date operatDate = asset.Alarm_888_Month__r[0].Nth_Operating_Day__c; Date contractStartDate = asset.CurrentContract_Start_Date__c > asset.InstallDate__c ? asset.CurrentContract_Start_Date__c : asset.InstallDate__c ; // Date contractEndDate = asset.CurrentContract_End_Date__c ; // Date serviceStartDate = asset.InstallDate__c ; Date serviceEndDate = asset.Extend_Gurantee_DateTo__c ; //最后操作日小余续签的合同开始日期并且多年保无效,需再生成888 if (contractStartDate > operatDate){ if (serviceEndDate == null) { asset.Is_Add_888_Alarm__c = false; }else if(serviceEndDate <= nowDate){ asset.Is_Add_888_Alarm__c = false; } } } } StaticParameter.EscapeVMCTrigger = true; update assetList; StaticParameter.EscapeVMCTrigger = false; System.debug(LoggingLevel.INFO, '*** assetList: ' + assetList); } } global void finish(Database.BatchableContext BC) { //生成预警对象 Id execBTId = Database.executeBatch(new Create888AlarmBatch(),100); } }