高章伟
2022-02-18 8b5f4c6c281cfa548f92de52c8021e37aa81901e
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// create tcm 20211203 更改维修合同——用户类型和合同种类
public class TypeMaintenanceContractBatch implements Database.Batchable<sObject> {
 
    public List<String> IdList;
 
    public TypeMaintenanceContractBatch() {
    }
 
    public TypeMaintenanceContractBatch(List<String> IdList) {
        this.IdList=IdList;
    }
 
    public Database.QueryLocator start(Database.BatchableContext BC) {
        //通过医院查保有设备
        string sql = 'select id from Asset where Hospital__r.RecordTypeId=\'01210000000QemG\' ';
        if (IdList != null && IdList.size() > 0) {
            sql += 'and Hospital__c in :IdList ';
        }
        return Database.getQueryLocator(sql);
    }
 
    public void execute(Database.BatchableContext BC, List<Asset> asstList) {
        List<String> astIdList=new List<String>();
        for (Asset asst : asstList) {
            astIdList.add(asst.Id);
        }
 
        // 通过保有设备查所有维修合同/保有设备
        List<Maintenance_Contract_Asset__c> mcaList=[select id,Asset__c,Asset__r.name,asset__r.InstallDate,Asset__r.CurrentContract_F__c,Maintenance_Contract__r.name,Maintenance_Contract__r.Contract_Start_Date__c, Maintenance_Contract__r.Contract_end_Date__c from Maintenance_Contract_Asset__c where Asset__c in : astIdList and Maintenance_Contract__r.RecordTypeId!='01210000000gTYv' and Maintenance_Contract__r.Status__c in ('契約','契約満了','合同结束','合同中') and Maintenance_Contract__c!='a0H1000000aeiFP' order by asset__c, Maintenance_Contract__r.Contract_Start_Date__c];
        system.debug('mcaList等于'+mcaList);
        List<String> astList=new List<String>();  //作为判断保有设备是否存在
        List<String> firstList=new List<String>();
        for (Maintenance_Contract_Asset__c mcai : mcaList) {
            if (astList.contains(mcai.asset__c)) {
                continue;
            }
            Integer i=0;
            Date lastEndDate=mcai.Maintenance_Contract__r.Contract_Start_Date__c;  //初始化上期结束日
            for (Maintenance_Contract_Asset__c mcaj : mcaList) {
                if (mcai.Asset__c==mcaj.Asset__c) {
                    Date installDate=mcaj.Asset__r.InstallDate;  //安装日期
                    Date startDate=mcaj.Maintenance_Contract__r.Contract_Start_Date__c;  //开始日
                    Date endDate=mcaj.Maintenance_Contract__r.Contract_end_Date__c;  //结束日
 
                    // 没有同期中的上期合同
                    if (i==0) {
                        if (installDate==null) {
                            mcaj.New_Contract_TypeF__c='首签设备';
                            // lastEndDate=mcaj.Maintenance_Contract__r.Contract_end_Date__c;
                            // 且当期合同的安装日小于合同开始日且在半年以内,判断为新品合同
                        }else if (installDate.monthsBetween(startDate)<=6&&installDate.monthsBetween(startDate)>=0) {
                            mcaj.New_Contract_TypeF__c='新品设备';
                        }else {
                            // 否则判断为首签合同。
                            mcaj.New_Contract_TypeF__c='首签设备';
                        }
                        i++;
                    }else if(lastEndDate.monthsBetween(startDate)<=12) {
                        mcaj.New_Contract_TypeF__c='续签设备';
                    }else {
                        mcaj.New_Contract_TypeF__c='非续签设备';
                    }
                    lastEndDate=mcaj.Maintenance_Contract__r.Contract_end_Date__c;
                }
            }
            astList.add(mcai.Asset__c);
        }
        update mcaList;
 
        System.debug('mcMap等于');
        System.debug('mcaList等于'+mcaList);
    }
 
    public void finish(Database.BatchableContext BC) {
        if(!System.test.isRunningTest() && IdList == null){
            Database.executeBatch(new Type2MaintenanceContractBatch());
        }
 
    }
}
 
// List<String> IdList=new List<String>{'a0H1000000QCQfj'};
// Database.executeBatch(new TypeMaintenanceContractBatch(IdList));
 
// select id, Asset__c, New_Contract_TypeF__c, Asset__r.CurrentContract_F__c, Maintenance_Contract__r.name, Maintenance_Contract__r.New_Contract_TypeF_Text__c, Maintenance_Contract__r.Contract_Start_Date__c, Maintenance_Contract__r.Contract_end_Date__c, asset__r.InstallDate from Maintenance_Contract_Asset__c where Maintenance_Contract__r.Hospital__c= '0011000000V9P5Z' and Maintenance_Contract__r.RecordTypeId!='01210000000gTYv' and Maintenance_Contract__r.Status__c in ('契約', '契約満了') order by Maintenance_Contract__c, Maintenance_Contract__r.Contract_Start_Date__c