黄千龙
2023-03-08 296a7fad75bf71c7988e56aca3023c195808421b
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
102
103
104
105
106
107
108
109
110
111
112
trigger XinEventOppotunityPileUp on Event_Oppotunity__c (after delete, after update) {
    List<String> oppIds = new List<String>();
 
    if (Trigger.isDelete) {
        for (Event_Oppotunity__c eo : Trigger.old) {
            oppIds.add(eo.Opportunity__c);               // 必須のはず
        }
    } else {
        for (Event_Oppotunity__c eo : Trigger.new) {
            oppIds.add(eo.Opportunity__c);               // 必須のはず
        }
    }
    
    // 先に親をlockする
    List<Opportunity> opps = new List<Opportunity>();
    List<Opportunity> oppList = ControllerUtil.oppSelectForLock(oppIds);
 
    // 最大フォロー日
    // CHAN-BE6CZZ 最后跟进结果 LHJ 20190724 Start
    //AggregateResult[] ar0 = ControllerUtil.selectForOpp_Last_Follow_Up_Date(oppIds);
    //Map<String, DateTime> maxDateMap = new Map<String, DateTime>();
    
    //for (Integer i = 0; i < ar0.size(); i++) {
    //    maxDateMap.put(String.valueOf(ar0[i].get('Opportunity__c')), Datetime.valueOf(ar0[i].get('maxET')));
    //}
    List<Event_Oppotunity__c> ar0 = ControllerUtil.selectForOpp_Last_Follow_Up_Date(oppIds);
    Map<String, Event_Oppotunity__c> maxDateMap = new Map<String, Event_Oppotunity__c>();
 
    for (Integer i = 0; i < ar0.size(); i++) {
        if (!maxDateMap.containsKey(String.valueOf(ar0[i].get('Opportunity__c')))) {
            maxDateMap.put(String.valueOf(ar0[i].get('Opportunity__c')), ar0[i]); 
        }
    }
    // CHAN-BE6CZZ 最后跟进结果 LHJ 20190724 End
 
    // 各種カウント
    Map<String, Integer> cntMap = new Map<String, Integer>();              // 総件数
    Map<String, Integer> vprCntMap = new Map<String, Integer>();           // 院長件数
    Map<String, Integer> vhdCntMap = new Map<String, Integer>();           // 主任件数
    Map<String, Integer> ntcCntMap = new Map<String, Integer>();           // NTC件数
    AggregateResult[] ar = ControllerUtil.selectEventOppForAggregateFollowToOpp(oppIds);
    for (Integer i = 0; i < ar.size(); i++) {
        cntMap.put(String.valueOf(ar[i].get('Opportunity__c')), Integer.valueOf(ar[i].get('cnt')));
        vprCntMap.put(String.valueOf(ar[i].get('Opportunity__c')), Integer.valueOf(ar[i].get('vprCnt')));
        vhdCntMap.put(String.valueOf(ar[i].get('Opportunity__c')), Integer.valueOf(ar[i].get('vhdCnt')));
        ntcCntMap.put(String.valueOf(ar[i].get('Opportunity__c')), Integer.valueOf(ar[i].get('ntcCnt')));
    }
    
    for (Opportunity opp : oppList) {
        Boolean needUpd = false;
        // CHAN-BE6CZZ 最后跟进结果 LHJ 20190724 Start
        //if (opp.Xin_Last_Follow_Up_Date_For_Report__c != maxDateMap.get(opp.Id)) {
        //    opp.Xin_Last_Follow_Up_Date_For_Report__c = maxDateMap.get(opp.Id);
        //    needUpd = true;
        //}
        if (maxDateMap.containsKey(opp.Id) 
                && ((opp.Xin_Last_Follow_Up_Date_For_Report__c != Datetime.valueOf(maxDateMap.get(opp.Id).End_Time__c)) 
                || (opp.Follow_up_comment__c != maxDateMap.get(opp.Id).EventC_ID__r.Description__c))) {
 
            // 最后跟进日期
            opp.Xin_Last_Follow_Up_Date_For_Report__c = Datetime.valueOf(maxDateMap.get(opp.Id).End_Time__c);
 
            // 最后跟进结果
            if (String.isNotBlank(maxDateMap.get(opp.Id).EventC_ID__r.Description__c) 
                    && maxDateMap.get(opp.Id).EventC_ID__r.Description__c.length() > 255) {
                opp.Follow_up_comment__c = maxDateMap.get(opp.Id).EventC_ID__r.Description__c.subString(0,255);
            } else {
                opp.Follow_up_comment__c = maxDateMap.get(opp.Id).EventC_ID__r.Description__c;
            }
            
            needUpd = true;
        }
        // CHAN-BE6CZZ 最后跟进结果 LHJ 20190724 End
        if (cntMap.containsKey(opp.Id) == false) {
            if (opp.Xin_Gross_Follow_Num__c != 0
                    || opp.Visit_President_Count__c != 0
                    || opp.Visit_Head_Doctor_Count__c != 0
                    || opp.Num_Of_NTC__c != 0
            ) {
                opp.Xin_Gross_Follow_Num__c = 0;
                opp.Visit_President_Count__c = 0;
                opp.Visit_Head_Doctor_Count__c = 0;
                opp.Num_Of_NTC__c = 0;
            }
        } else {
            if (opp.Xin_Gross_Follow_Num__c != cntMap.get(opp.Id)
                    || opp.Visit_President_Count__c != vprCntMap.get(opp.Id)
                    || opp.Visit_Head_Doctor_Count__c != vhdCntMap.get(opp.Id)
                    || opp.Num_Of_NTC__c != ntcCntMap.get(opp.Id)
            ) {
                opp.Xin_Gross_Follow_Num__c = cntMap.get(opp.Id);
                opp.Visit_President_Count__c = vprCntMap.get(opp.Id);
                opp.Visit_Head_Doctor_Count__c = vhdCntMap.get(opp.Id);
                opp.Num_Of_NTC__c = ntcCntMap.get(opp.Id);
            }
        }
        if (needUpd) opps.add(opp);
    }
    
    if (opps.size() > 0) {
        StaticParameter.EscapeNFM007Trigger = true;
        StaticParameter.EscapeOpportunityBefUpdTrigger = true;
        StaticParameter.EscapeOpportunityHpDeptUpdTrigger = true;
        StaticParameter.EscapeSyncOpportunityTrigger = true;
System.debug('XinEventOppotunityPileUpから、商談トリガをEscape');
System.debug('EscapeNFM007Trigger:::::' + StaticParameter.EscapeNFM007Trigger);
System.debug('EscapeOpportunityBefUpdTrigger:::::' + StaticParameter.EscapeOpportunityBefUpdTrigger);
System.debug('EscapeOpportunityHpDeptUpdTrigger:::::' + StaticParameter.EscapeOpportunityHpDeptUpdTrigger);
System.debug('EscapeSyncOpportunityTrigger:::::' + StaticParameter.EscapeSyncOpportunityTrigger);
        ControllerUtil.updOppList(opps);
    }
}