GWY
2022-04-06 7560140a14a60e949e6130d98225297e84f0a198
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
public without sharing class ProRegisterHandler {
 
    public static void updateProduct(List<Product_Register__c> newList, Map<Id, Product_Register__c> newMap, List<Product_Register__c> oldList, Map<Id, Product_Register__c> oldMap) {
 
        // 产品-注册证关系 中所有 产品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, registrationCode__c, clinical_product_code__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.ValidFrom__c,
                                       Product_Register__r.ValidTo__c,
                                       Product_Register__r.Name,
                                       Product_Register__r.ValidProductRegister__c,
                                       Product_Register__r.ClinicalProductCode__c
                                       from Product_Register_Link__c
                                       where Product2__c in : Product2_ID_list
                                       order by Product2__c,
                                       LastModifiedDate desc
                                                    ];
 
        String tmpProductID = '';
        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);
                temProduct.Register_Latest__c = temPRL.Product_Register__c;                    // 最新注册证ID
                temProduct.registrationCode__c = null;
                temProduct.clinical_product_code__c = null;
            }
 
            // 如果注册证状态有效,记录有效注册证号
            if (temPRL.Product_Register__r.ValidProductRegister__c ) {
                if (String.isBlank(temProduct.registrationCode__c)) {
                    temProduct.registrationCode__c = temPRL.Product_Register__r.Name + '\n';
                } else {
                    if (String.isNotBlank(temPRL.Product_Register__r.Name)) {
                        if (temProduct.registrationCode__c.indexOf(temPRL.Product_Register__r.Name) == -1) {
                            temProduct.registrationCode__c += temPRL.Product_Register__r.Name + '\n';
                        }
                    }
                }
 
                String clinicalCode = temPRL.Product_Register__r.ClinicalProductCode__c;
                if (String.isBlank(temProduct.clinical_product_code__c)) {
                    temProduct.clinical_product_code__c = clinicalCode;//temPRL.Product_Register__r.ClinicalProductCode__c;
                } else {
 
                    if (String.isNotBlank(clinicalCode)) {
 
                        Map<String, String> codeMap = new Map<String, String>();
                        for (String code : temProduct.clinical_product_code__c.split('/')) {
                            codeMap.put(code, code);
                        }
                        codeMap.put(clinicalCode, clinicalCode);
                        temProduct.clinical_product_code__c = '';
                        for (String code : codeMap.values()) {
                            if (String.isBlank(temProduct.clinical_product_code__c)) {
                                temProduct.clinical_product_code__c = code;
                            } else {
                                temProduct.clinical_product_code__c += '/' + code;
                            }
                        }
                        
                    }
 
                }
            }
            UpdProMap.put(tmpProductID, temProduct);
        }
        if (UpdProMap.keySet().size() > 0)  update UpdProMap.values();
    }
 
    //用于降类,产品注册证更新了,就把产品注册证下的产品的等级类别字段赋空,触发产品的触发器
    public static void checkRegistervervaldatum(List<Product_Register__c> newList, Map<Id, Product_Register__c> newMap, List<Product_Register__c> oldList, Map<Id, Product_Register__c> oldMap) {
        List<String> prcList = new List<String>();
        for (Product_Register__c pr : newList) {
            Product_Register__c oldpr = oldMap.get(pr.Id);
                prcList.add(pr.id);
        }
        //放到Map里,用于注册证更新产品
        Map<Id,Product2> prt2Map = new Map<Id,Product2>();
        //通过之前存储的Id用于关系表的查询。
        List<Product_Register_Link__c> prlList = new List<Product_Register_Link__c>();
        prlList = [select Product2__r.id,Product2__r.demoteer_Sap__c,Product2__r.Diedatvanink__c,Product_Register__r.MedPrdClass__c,Product_Register__r.Stelsedag__c,Product_Register__r.ValidTo__c,Product_Register__r.ValidFrom__c 
        from Product_Register_Link__c 
        where Product_Register__r.Id in : prcList];
 
        List<ID> proIdList = new List<ID>();
        for (Product_Register_Link__c prl: prlList) {
            proIdList.add(prl.Product2__r.id);
        }
        
        List<Product2> por2Lsit = new List<Product2>();
        //查出产品的id和等级类别的字段 
        por2Lsit = [select Id,Level_Category__c from Product2 where Id in : proIdList];
        for (Product2 pro: por2Lsit) {
            pro.Level_Category__c = null;
            prt2Map.put(pro.Id, pro);
        }
        System.debug('prt2Map='+prt2Map);
        if (prt2Map.size() > 0) {
           update prt2Map.values(); 
        } 
    }
}