高章伟
2022-02-24 81b0892b8c6aa064a9e8dbca09a8f7f1eb6de40e
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
public with sharing class ProRegisterHandler extends Oly_TriggerHandler {
    /* 2018-08-31 更新产品内最新产品在注册证
     1.根据需要更新的产品注册证找出所有对应的产品-注册证关系
     2.根据产品-注册证关系找出所有对应的产品
     3.根据产品找出其所需最新产品注册证
    */
    private Map<Id, Product_Register__c> newMap;
    private Map<Id, Product_Register__c> oldMap;
    private List<Product_Register__c> newList;
    private List<Product_Register__c> oldList;
 
    public ProRegisterHandler() {
        this.newMap = (Map<Id, Product_Register__c>) Trigger.newMap;
        this.oldMap = (Map<Id, Product_Register__c>) Trigger.oldMap;
        this.newList = (List<Product_Register__c>) Trigger.new;
        this.oldList = (List<Product_Register__c>) Trigger.old;
    }
 
    protected override void beforeInsert() {
        updateLink();
    }
 
    protected override void beforeUpdate() {
        updateLink();
    }
 
    protected override void afterUpdate() {
        updateProduct();
    }
 
    //protected override void beforeDelete() {
    //    updateProduct();
    //}
    private void updateLink() {
        for (Product_Register__c reg : newList) {
            system.debug('reg.Name--->'+reg.Name);
            reg.RegisterNoURL__c = EncodingUtil.urlEncode(reg.Name, 'UTF-8');
        }
        
    }
    private void updateProduct() {
 
        if (System.Label.UpdRegOnly == '1') return;
 
        // 产品-注册证关系 中所有 产品ID
        List<ID> Product2_ID_list = new list<ID>();
        // 现有产品 map
        Map<ID, Product2> Exist_ProductMap = new map<ID, Product2>();
        // 需要更新产品 list
        List<Product2> UpdateProductlist = new list<Product2>();
        // 根据变更的证ID找到关联的所有的产品
        list<Product_Register_Link__c> ExistPRLList = [select Product2__c,
                                                              Product_Register__c
                                                         from Product_Register_Link__c
                                                        where Product_Register__c in: newList
                                                      ];
 
        for (Product_Register_Link__c PRL : ExistPRLList) {
            // 产品ID的LIST
            Product2_ID_list.add(PRL.Product2__c);
        }
 
        // 通过产品ID找到该产品最新注册证ID
        Exist_ProductMap = new Map<ID, Product2> ([select ID, Register_Latest__c
                from Product2
                where id in: Product2_ID_list
                                                  ]);
 
        // 通过产品ID找到所有涉及的有效关系
        List<Product_Register_Link__c> allPRLList = [select Product2__c,
                                                         Product_Register__c,
                                                         Product_Register__r.PrdCompanyAddr__c,
                                                         Product_Register__r.PrdCompanyAddr2__c,
                                                         Product_Register__r.PrdCompanyAddr3__c,
                                                         Product_Register__r.ValidFrom__c,
                                                         Product_Register__r.ValidTo__c,
                                                         Product_Register__r.Name,
                                                         // 20190401 CHAN-BAPCE6 LHJ Start
                                                         Product_Register__r.BusinessScopeKey__c,
                                                         // 20190401 CHAN-BAPCE6 LHJ End
                                                         Product_Register__r.RegisterNoStatus__c
                                                   from Product_Register_Link__c
                                                   where Product2__c in : Product2_ID_list
                                                  // and If_Delete__c = false
                                                   order by Product2__c,
                                                   Product_Register__r.RegisterNoStatusCode__c,
                                                   LastModifiedDate desc
                                                    ];
 
        String tmpProductID = '';
        String temAllProdStatus = '';
        String temAllProdStatus2 = '';
        String temAllProdStatusAll = '';
        // 20190401 CHAN-BAPCE6 LHJ Start
        String temAllScopeKey = '';
        // 20190401 CHAN-BAPCE6 LHJ End
        Product2 temProduct = new Product2();
        Map<Id, Product2> UpdProMap = new Map<Id, Product2>();
 
        for (Product_Register_Link__c temPRL : allPRLList) {
 
            if (!tmpProductID.equals(temPRL.Product2__c)) {
                tmpProductID = temPRL.Product2__c;
                temProduct = Exist_ProductMap.get(tmpProductID);
                temAllProdStatus = '';
                temAllProdStatus2 = '';
                temAllProdStatusAll = '';
                // 20190401 CHAN-BAPCE6 LHJ Start
                temAllScopeKey = '';
                // 20190401 CHAN-BAPCE6 LHJ End
                temProduct.Register_Latest__c = temPRL.Product_Register__c;                    // 最新注册证ID
                temProduct.SFDA_Approbation_No__c = temPRL.Product_Register__r.Name;           // CFDA注册号
                temProduct.SFDA_Approbated_Date__c = temPRL.Product_Register__r.ValidFrom__c;  // CFDA注册日
                temProduct.SFDA_Expiration_Date__c = temPRL.Product_Register__r.ValidTo__c;    // CFDA有效期限
                if(temPRL.Product_Register__r.Name != 'FYL') {
                    temProduct.ProduceCompany__c = temPRL.Product_Register__r.PrdCompanyAddr__c;   // 生产企业
                    //CHAN-C4X63A 【委托】NFM204字段“生产企业地址”优化 XHL 20210716 Start
                    temProduct.ProduceCompany2__c = temPRL.Product_Register__r.PrdCompanyAddr2__c;
                    temProduct.ProduceCompany3__c = temPRL.Product_Register__r.PrdCompanyAddr3__c;
                    //CHAN-C4X63A 【委托】NFM204字段“生产企业地址”优化 XHL 20210716 End
                }
                temProduct.SFDA_Approbated_Status__c = temPRL.Product_Register__r.RegisterNoStatus__c;    // CFDA注册证状态
            }
 
            // 如果注册证状态有效,记录有效注册证号
            if (temPRL.Product_Register__r.RegisterNoStatus__c == '有效') {
                // LHJ 20190809 
                String productRegisterName = temPRL.Product_Register__r.Name;
                if (temAllProdStatus.length() + productRegisterName.length() <= 240) {
                    if (!temAllProdStatusAll.contains(productRegisterName)) {
                        temAllProdStatus += ';' + productRegisterName;
                        temAllProdStatusAll += ';' + productRegisterName;
                    }
                    
                } else {
                    if (!temAllProdStatusAll.contains(productRegisterName)) {
                        temAllProdStatus2 += ';' + productRegisterName;
                        temAllProdStatusAll += ';' + productRegisterName;
                    }
                    //temAllProdStatus2 += ';' + productRegisterName;
                }
 
                // 20190401 CHAN-BAPCE6 LHJ Start
                //if (String.isNotBlank(temPRL.Product_Register__r.BusinessScopeKey__c)  &&
                //      (!temAllScopeKey.contains(temPRL.Product_Register__r.BusinessScopeKey__c))) {
                //  temAllScopeKey += ';' + temPRL.Product_Register__r.BusinessScopeKey__c;
                //}
                String  businessScopeKey = temPRL.Product_Register__r.BusinessScopeKey__c;
                if (String.isNotBlank(businessScopeKey)) {
                    for(String scopeKey:businessScopeKey.split(';')){
                        if (!temAllScopeKey.contains(scopeKey)) {
                            temAllScopeKey += ';' + scopeKey;
                        }
                    }
                    
                    
                }
                // 20190401 CHAN-BAPCE6 LHJ End
            }
            if (temAllProdStatus != '') {
                temProduct.RegisterNo_ALL__c = temAllProdStatus.substring(1, temAllProdStatus.length());
            } else {
                temProduct.RegisterNo_ALL__c = '';
            }
            if (temAllProdStatus2 != '') {
                temProduct.RegisterNo_ALL2__c = temAllProdStatus2.substring(1, temAllProdStatus2.length());
            } else {
                temProduct.RegisterNo_ALL2__c = '';
            }
            // 20190401 CHAN-BAPCE6 LHJ Start
            if (temAllScopeKey != '') {
                temProduct.RegScopeKeyAll__c = temAllScopeKey.substring(1, temAllScopeKey.length());
            } else {
                temProduct.RegScopeKeyAll__c = '';
            }
            // 20190401 CHAN-BAPCE6 LHJ End
            UpdProMap.put(tmpProductID, temProduct);
        }
        if (UpdProMap.keySet().size() > 0)  update UpdProMap.values();
    }
}