binxie
2024-01-16 1b08402678deb31bba4a347bfd388eba8360cbc1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// 22/03/2023 合同续签,Asset标志位变为false,以便生成新的报警提醒
global class HandleAlarm888AssetFlagBatch implements Database.Batchable<sObject> , Database.AllowsCallouts, Database.Stateful {
    public Date nowDate = Date.today();
    // List<Id> assetIdList = new List<Id>();
    global HandleAlarm888AssetFlagBatch() {
        // this.assetIdList = assetIdList;
    }
    //Database.QueryLocator
    global List<Asset> start(Database.BatchableContext bc) {
        //del SerMarGuranteeType__c 多年保修类型; CurrentContract__c      最近一期维修合同 InstallDate,InstallDate__c,Extend_Gurantee_DateTo__c,
        List<Asset> 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<Asset> 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);
    }
}