高章伟
2022-02-24 2aa8da8af66aa8ae00f25831aed6bb0364176e7b
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
113
public without sharing class AgencyOppUpdHandler extends Oly_TriggerHandler {
 
    private Map<Id, Opportunity> newMap;
    private Map<Id, Opportunity> oldMap;
    private List<Opportunity> newList;
    private List<Opportunity> oldList;
 
    public AgencyOppUpdHandler() {
        this.newMap = (Map<Id, Opportunity>) Trigger.newMap;
        this.oldMap = (Map<Id, Opportunity>) Trigger.oldMap;
        this.newList = (List<Opportunity>) Trigger.new;
        this.oldList = (List<Opportunity>) Trigger.old;
    }
 
    private static Map<Id, Agency_Opportunity__c> updAgencyOpportunityMap = new Map<Id, Agency_Opportunity__c>();
 
    protected override void beforeInsert() {
        //OLY_OCM-334
        //以下のロジックはなくしてください。(金額の入力は不要)
        //OCSM询价.病院契約金額_元(Dealer_Final_Price__c) = 经销商询价. 医院合同金额(含税)
        //OCSM询价.OCM预测成交金额(含税)_元(Wholesale_Price__c) = 经销商询价.订货金额(含税)
        //insertOppFromAgencyOpportunity();
    }
 
    protected override void afterInsert() {
        set_AgencyOpportunity_ChangeToOpportunity();
        set_AgencyOpportunity_OCSMOwner();
 
        if (updAgencyOpportunityMap.size() > 0) {
            update updAgencyOpportunityMap.values();
        }
    }
 
    protected override void afterUpdate() {
        set_AgencyOpportunity_Amount();
        set_AgencyOpportunity_OCSMOwner();
 
        if (updAgencyOpportunityMap.size() > 0) {
            update updAgencyOpportunityMap.values();
        }
    }
 
    //private void insertOppFromAgencyOpportunity() {
    //    for(Opportunity nObj : newList) {
    //        if(nObj.Agency_Opportunity__c != null) {
    //            nObj.Dealer_Final_Price__c = nObj.AgencyOpp_Amount__c;
    //            nObj.Wholesale_Price__c = nObj.AgencyOpp_OCMSale_Price__c;
    //        }
    //    }
    //}
 
    // .询价 Copy 到 询价、.询价.Change_To_Opportunity__c = oppIds.get(ao.Id)
    private void set_AgencyOpportunity_ChangeToOpportunity() {
        Map<Id, Id> oppIds = new Map<Id, Id>();
        for(Opportunity nObj : newList) {
            if(nObj.Agency_Opportunity__c != null) {
                oppIds.put(nObj.Agency_Opportunity__c, nObj.Id);
            }
        }
        if (oppIds.size() > 0) {
            List<Agency_Opportunity__c> aoList = [select Id, Name, Change_To_Opportunity__c from Agency_Opportunity__c where Id in :oppIds.keySet()];
            for(Agency_Opportunity__c ao : aoList) {
                if (false == updAgencyOpportunityMap.containsKey(ao.Id)) {
                    updAgencyOpportunityMap.put(ao.Id, ao);
                }
                ao = updAgencyOpportunityMap.get(ao.Id);
                ao.Change_To_Opportunity__c = oppIds.get(ao.Id);
            }
        }
    }
 
    // 询价 Win 的时候 更新 .询价 的 Amount__c = oppMap.get(ao.Id)
    private void set_AgencyOpportunity_Amount() {
        Map<Id, Decimal> oppMap = new Map<Id, Decimal>();
        for(Opportunity nObj : newList) {
            Opportunity oObj = oldMap.get(nObj.Id);
            if(nObj.Agency_Opportunity__c != null && nObj.AgencyOpp_FromOCM__c == true && oObj.SAP_Send_OK__c == false && nObj.SAP_Send_OK__c == true) {
                oppMap.put(nObj.Agency_Opportunity__c, nObj.Dealer_Final_Price__c);
            }
        }
        if (oppMap.size() > 0) {
            List<Agency_Opportunity__c> aoList = [select Id, Name, Amount__c from Agency_Opportunity__c where Id in :oppMap.keySet()];
            for(Agency_Opportunity__c ao : aoList) {
                if (false == updAgencyOpportunityMap.containsKey(ao.Id)) {
                    updAgencyOpportunityMap.put(ao.Id, ao);
                }
                ao = updAgencyOpportunityMap.get(ao.Id);
                ao.Amount__c = oppMap.get(ao.Id);
            }
        }
    }
 
    // 询价新規 or Owner変更 的时候 更新 .询价 的 OCSM_Owner__c = nObj.OwnerId;
    private void set_AgencyOpportunity_OCSMOwner() {
        for(Opportunity nObj : newList) {
            Opportunity oObj;
            if (oldMap != null) {
                oObj = oldMap.get(nObj.Id);
            }
            if(nObj.Agency_Opportunity__c != null
                && (oObj == null || nObj.OwnerId != oObj.OwnerId)
            ) {
                Agency_Opportunity__c ao = new Agency_Opportunity__c(Id = nObj.Agency_Opportunity__c);
                if (false == updAgencyOpportunityMap.containsKey(ao.Id)) {
                    updAgencyOpportunityMap.put(ao.Id, ao);
                }
                ao = updAgencyOpportunityMap.get(ao.Id);
                ao.OCSM_Owner__c = nObj.OwnerId;
            }
        }
 
    }
}