liuyn
2024-03-11 a87f1c3df03078814ee97ad0c8ac200a232419e9
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// 更新联系人上的开展状态 和 带教时长(月)
global class UpdateMeetingToContactBatch implements Database.Batchable<sObject> {
 
    list<String> idlist;
    Boolean IsNeedExecute = false; // 2021-03-03  mzy  WLIG-BYHD79  SFDC环境batch合并调查  是否符合执行条件
 
    global UpdateMeetingToContactBatch() {
        idList = null;
    }
    global UpdateMeetingToContactBatch(List<String> idlist) {
        this.idList = idlist;
    }
    global UpdateMeetingToContactBatch(Boolean needExecute) {
        idList = null;
        IsNeedExecute = needExecute;  // 2021-03-03  mzy  WLIG-BYHD79  SFDC环境batch合并调查  
    }
 
    global Database.QueryLocator start(Database.BatchableContext BC) {
        string query = '';
        query = 'select id from contact where Campaign__c != null';
        if (idList != null && idList.size() > 0) {
            query += ' and id in: idList';
        }
        system.debug('query:' + query);
        return Database.getQueryLocator(query);
    }
 
    global void execute(Database.BatchableContext BC, List<contact> contactlist) {
        Date tempToday = Date.today();
        Date sixMonthAgo = tempToday.addMonths(-6);
        list<ID> allcontactID = new list<ID>();
        for (contact tempContact : contactlist) {
            allcontactID.add(tempContact.id);
        }
              
        // 开展状态为开展中的客户人员汇集
        set<ID> ongoingContactSet = new set<ID>();
        list<MeetingManagement__c> MeetingManagementList =
            [select id, Contact__c
             from MeetingManagement__c
             where CreatedDate__c >= : sixMonthAgo
             and Contact__c in: contactlist
             and (
             (pollingTime__c !=0 and pollingTime__c != null) or
             (VisitTime__c !=0 and VisitTime__c != null) or
             (InspectTime__c !=0 and InspectTime__c != null) or
             (InspectEquipmentTime__c !=0 and InspectEquipmentTime__c != null) or
             (TeachingTime__c !=0 and TeachingTime__c != null) or
             (MaintenanceReportTime__c !=0 and MaintenanceReportTime__c != null)
             )
            ];
 
        for (MeetingManagement__c temMeetingManagement : MeetingManagementList) {
            ongoingContactSet.add(temMeetingManagement.Contact__c);
        }
 
        // 带教时长(月)计算
        map<id, integer> ContactInstructTime = new map<id, integer>();
        List<AggregateResult> InstructedStaffList =
            [select count(id) Cnt_Id, ContactID__c
             from Instructed_staff__c
             where  ContactID__c in: allcontactID
             and Instruct_report__r.Status__c = '批准'
                                                group by ContactID__c];
 
        for (AggregateResult temAgg : InstructedStaffList) {
            ContactInstructTime.put((ID) temAgg.get('ContactID__c'), integer.valueof(temAgg.get('Cnt_Id')));
        }
        list<Contact> UpdateContactList = new list<Contact>();
        for (ID contactID : allcontactID) {
            Contact temContact = new Contact(id = contactID);
            if (ongoingContactSet.Contains(contactID)) {
                temContact.ProcessingWorkStatus__c = '开展中';
            } else {
                temContact.ProcessingWorkStatus__c = '未开展';
            }
            if (ContactInstructTime.containskey(contactID)) {
                temContact.teachMonth__c = ContactInstructTime.get(contactID);
            } else {
                temContact.teachMonth__c = 0;
            }
            UpdateContactList.add(temContact);
        }
        if (UpdateContactList.size() > 0) {
            update UpdateContactList;
        }
 
    }
 
    global void finish(Database.BatchableContext BC) {
        //2021-03-03  mzy  WLIG-BYHD79  SFDC环境batch合并调查  start
        if(!Test.isRunningTest() &&IsNeedExecute==true){
            //因Batch中构造方法已有单个Boolean参数,因此创建了两个参数的构造方法
            //batch里调用下一个batch时,希望跟原有的Schedule里面传的条数保持一致
           Id execBTId = Database.executebatch(new ContactInstructCountNSetNullBatch(true,true),100);
        }
        //2021-03-03  mzy  WLIG-BYHD79  SFDC环境batch合并调查 end
 
    }
 
}