高章伟
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
global class OCMManagementProvinceBatch implements Database.Batchable<sObject> {
 
    String query;
    String targetId;
 
    global OCMManagementProvinceBatch() {}
 
    global OCMManagementProvinceBatch(String oppId) {
        targetId = oppId;
    }
 
    global Database.QueryLocator start(Database.BatchableContext BC) {
        // 只更新询价【状态1】为"询价"和"注残"的
        List<String> stageList = new List<String>();
        stageList.add('引合');
        stageList.add('注残');
        // 取得询价对象
        query = 'select id, Opportunity_Category__c, Owner.Dept__c, Sales_assistant_name_text__c, Account.OCM_Management_Province_HP__c, OCM_man_province__c, OCM_man_province_no_eng__c from Opportunity ';
        query += ' where StageName = :stageList ';
        if (targetId != null && targetId != '') {
            query += ' and id = :targetId ';
        }
        return Database.getQueryLocator(query);
    }
 
       global void execute(Database.BatchableContext BC, List<Opportunity> oppList) {
           // 取得OCM管理省信息
           List<OCM_Management_Province__c> mpList = [select id, Name, GI_assistant__c, SP_assistant__c, Energy_assistant__c from OCM_Management_Province__c];
           Map<String, OCM_Management_Province__c> mpMap = new Map<String, OCM_Management_Province__c>();
           for (OCM_Management_Province__c mp : mpList) {
               mpMap.put(mp.Name, mp);
           }
           // 判断需要更新的询价
           List<Opportunity> updList = new List<Opportunity>();
           for (Opportunity opp : oppList) {
               OCM_Management_Province__c mp = mpMap.get(opp.OCM_man_province_no_eng__c);
 
               Id uid = null;
               if (opp.OCM_man_province__c == '能量') {
                   uid = mp == null ? null : mp.Energy_assistant__c;
               } else if (opp.Opportunity_Category__c == 'GI' || opp.Opportunity_Category__c == 'BF' || opp.Opportunity_Category__c == 'ET') {
                   uid = mp == null ? null : mp.GI_assistant__c;
               } else {
                   uid = mp == null ? null : mp.SP_assistant__c;
               }
               // 询价助理是否有变化
               if (opp.Sales_assistant_name_text__c != uid) {
                   Opportunity upd = new Opportunity(
                       id = opp.Id,
                       Sales_assistant_name_text__c = uid
                   );
                   updList.add(upd);
               }
           }
           // 询价更新
           if (updList.size() > 0) {
            Database.SaveResult[] lsr = Database.update(updList, false);
            for (Integer tIdx = 0; tIdx < lsr.size(); tIdx++) {
                Database.SaveResult sr = lsr[tIdx];
                if (!sr.isSuccess()) {
                    Database.Error emsg = sr.getErrors()[0];
                    System.debug('=====Error Opp: ' + updList[tIdx].Id + ' msg: ' + emsg);
                }
            }
        }
    }
 
    global void finish(Database.BatchableContext BC) {}
 
}