高章伟
2022-02-24 6b3c24ace33d131f5f6b10ae429d03c0d36db6f9
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
public without sharing class Product2TriggerHandler {
 
    public static void upsertProductSearch(List<Product2> newList, Map<Id, Product2> newMap, List<Product2> oldList, Map<Id, Product2> oldMap) 
    {
        if(Trigger.isAfter && (Trigger.isInsert || Trigger.isUpdate))
        {
            List<String> p2ids = new List<String>();
            for(Product2 p2 : newList)
            {
                p2ids.add(p2.id);
            }
            
            List<Product_Search__c> ps = [select Id,Name,CurrencyIsoCode,Product__c From Product_Search__c Where Product__c in: p2ids];
            Map <String,Product_Search__c> psmap = new Map<String,Product_Search__c>();
            List<Product_Search__c> pss = new List<Product_Search__c>();
            for(Product_Search__c p : ps)
            {
                psmap.put(p.Product__c,p);
            }
            
            for(Product2 p2 : newList)
            {
                Product_Search__c p2s;
                if(psmap.containsKey(p2.id))
                {
                    p2s = psmap.get(p2.id);
                }
                else
                {
                    p2s = new Product_Search__c();
                }
                
                p2s.Name =  p2.Name;
                p2s.Product__c = p2.id;
                p2s.CurrencyIsoCode = p2.CurrencyIsoCode;
                pss.add(p2s);
            }
            System.debug('psssize' + pss.size());
            upsert(pss);  
        }else if(Trigger.isDelete)
       {
           for(Product2 en : newList)
           {
                 en.addError('此数据不能删除');
           }
       }
    }
 
    //PJ1新显微镜降类
    public static void checkProduct2Level(List<Product2> newList, Map<Id, Product2> newMap, List<Product2> oldList, Map<Id, Product2> oldMap) {
        //获取产品
        List<String> p2ids = new List<String>();
        for(Product2 p2 : newList){
            p2ids.add(p2.Id);
        }
 
        //查注册证的医疗器械分类,产品入库日期,生产日期,系统维护日。
        List<Product_Register_Link__c> pro2List = new List<Product_Register_Link__c>();
        if(p2ids.size()>0){
            pro2List = [select Id,Product2__r.demoteer_Sap__c,Product2__r.Diedatvanink__c,Product_Register__r.Stelsedag__c,Product_Register__r.MedPrdClass__c 
            from Product_Register_Link__c 
            where Product2__r.Id in : p2ids];
        }
        
 
        //根据Id存放产品所属的所有注册证下的器械分类。
        Map<Id,List<String>> pro2Map = new Map<Id,List<String>>();
        //存放注册证上最前的维护日
        Map<Id,Date> prSteMap = new Map<Id,Date>();
        if (pro2List.size()>0) {
            for (Product_Register_Link__c prl: pro2List) {
                if (pro2Map.containsKey(prl.Product2__r.Id)) {
                    pro2Map.get(prl.Product2__r.Id).add(prl.Product_Register__r.MedPrdClass__c);
                }else {
                    pro2Map.put(prl.Product2__r.Id, new List<String>());
                    pro2Map.get(prl.Product2__r.Id).add(prl.Product_Register__r.MedPrdClass__c);
                }
                if (prSteMap.containsKey(prl.Product2__r.Id)) {
                    if (prSteMap.get(prl.Product2__r.Id) > prl.Product_Register__r.Stelsedag__c) {
                        prSteMap.remove(prl.Product2__r.Id);
                        prSteMap.put(prl.Product2__r.Id,prl.Product_Register__r.Stelsedag__c);
                    }
                }else {
                    prSteMap.put(prl.Product2__r.Id,prl.Product_Register__r.Stelsedag__c);
                }
            }
        }
        System.debug('pro2Map='+pro2Map);
        System.debug('prSteMap='+prSteMap);
 
        //产品Id与等级类别
        Map<Id,String> prlMap = new Map<Id,String>();
 
        if (pro2Map.size()>0 && prSteMap.size()>0) {
            for (Product_Register_Link__c pr: pro2List) {
                //大在后小在前
                if (pro2Map.containsKey(pr.Product2__r.Id) && prSteMap.containsKey(pr.Product2__r.Id)) {
                    //生产日小于维护日,入库日小于维护日
                    if (pr.Product2__r.demoteer_Sap__c <= prSteMap.get(pr.Product2__r.Id) && 
                        pr.Product2__r.Diedatvanink__c <= prSteMap.get(pr.Product2__r.Id)) {
                        if (pro2Map.get(pr.Product2__r.Id).contains('1') || 
                            pro2Map.get(pr.Product2__r.Id).contains('2') || 
                            pro2Map.get(pr.Product2__r.Id).contains('3')) {
                            prlMap.put(pr.Product2__r.Id, '二类');
                        }else {
                            prlMap.put(pr.Product2__r.Id, '非监管');
                        }
                    }else {
                        //入库日大于维护日
                        if (pr.Product2__r.Diedatvanink__c > prSteMap.get(pr.Product2__r.Id)) {
                            //生产日大于维护日
                            if (pr.Product2__r.demoteer_Sap__c > prSteMap.get(pr.Product2__r.Id)) {
                                prlMap.put(pr.Product2__r.Id, '一类');
                            }else if (pr.Product2__r.demoteer_Sap__c < prSteMap.get(pr.Product2__r.Id)) {
                                //生产日小于维护日
                                if (pro2Map.get(pr.Product2__r.Id).contains('1')) {
                                    prlMap.put(pr.Product2__r.Id, '一类');
                                }else if (!pro2Map.get(pr.Product2__r.Id).contains('1') && 
                                          (pro2Map.get(pr.Product2__r.Id).contains('2') || 
                                           pro2Map.get(pr.Product2__r.Id).contains('3'))) {
                                    prlMap.put(pr.Product2__r.Id, '二类');
                                }else {
                                    prlMap.put(pr.Product2__r.Id, '非监管');
                                }
                            }
                        }
                    }
                }
            }
        }
        System.debug('prlMap='+prlMap);
 
        for (Product2 pr2: newList) {
            if (prlMap.containsKey(pr2.Id)) {
                pr2.Level_Category__c = prlMap.get(pr2.Id);
            }else {
                pr2.Level_Category__c = null;
            }
        }
    }
}