liuyn
2024-03-11 a87f1c3df03078814ee97ad0c8ac200a232419e9
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
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
trigger ConsumableOrderTrigger on Consumable_order__c (before insert, before update,after update) {
 
    //deloitte-zhj 20231124 本地化导入 start
    if((!Test.isRunningTest())&&System.Label.ByPassTrigger.contains(UserInfo.getUserId())){
        return;
    }
    //deloitte-zhj 20231124 本地化导入 end
 
    // CHAN-CBYBBF 【委托】经销商ET账号显示界面维护-广东汇晨 start
    // 注释跳过 发货时要计算 SAP合同号
    // if (StaticParameter.EscapeConsumableOrderDetail2Trigger) {
    //     return;
    // }
    // CHAN-CBYBBF 【委托】经销商ET账号显示界面维护-广东汇晨 end
    //add by rentx 20210618 start
    if (StaticParameter.ConsumableOrderTrigger) {
        return;
    }
    //ad by rentx 20210618 end
    Set<String> contactIdSet = new Set<String>();
    Map<String, String> rprIdList = new Map<String, String>();
    Map<String, String> contactIdMap = new Map<String, String>();
    List<Statu_Achievements__c> sAlist = new List<Statu_Achievements__c>();
    if (Trigger.isBefore) {
        Account contactdet = null;
        List<Account> contactList = new List<Account>();
        Consumable_order__c old = null;
        for (Consumable_order__c local : Trigger.New) {
            if(String.isNotBlank(local.Order_effective_contact__c)) {
                contactIdSet.add(local.Order_effective_contact__c);
            }
        }
        // contactList = [SELECT Id, Name, Business_Assistant__c FROM Account WHERE Id in :contactIdSet];
        // for(Account acc :contactList){
        //     if(String.isNotBlank(acc.Business_Assistant__c)){
        //         contactIdMap.put(acc.Id, acc.Business_Assistant__c);
        //     }
        // }
 
        Map<String,List<Statu_Achievements__c> > sAmap = new Map<String,List<Statu_Achievements__c> >();
        Map<String,String> zMaps = new Map<String,String>();
 
        for (Consumable_order__c local : Trigger.New) {
            if(String.isNotBlank(local.Opportunity__c) && String.isNotBlank(local.name)) {
                zMaps.put(local.Opportunity__c,local.name);
            }
        }
 
 
        sAlist = [SELECT ContractNO__c,Opportunity__c FROM Statu_Achievements__c WHERE Opportunity__c = :zMaps.keySet()];
 
        for(Statu_Achievements__c sa : sAlist) {
            List<Statu_Achievements__c> ssList = sAmap.get(zMaps.get(sa.Opportunity__c));
            if(ssList == null) {
                ssList = new List<Statu_Achievements__c>();
            }
            ssList.add(sa);
            sAmap.put(zMaps.get(sa.Opportunity__c),ssList);
        }
 
        // sAlist = [SELECT ContractNO__c FROM Statu_Achievements__c WHERE Opportunity__c = :opps];
        // sAmap.put(name,sAlist);
 
        for (Consumable_order__c local : Trigger.New) {
            if (Trigger.isInsert) {
                rprIdList.put(local.Id, local.Id);
            }
            if (Trigger.isUpdate) {
                old = Trigger.oldMap.get(local.Id);
            }
            if ((Trigger.isInsert
                 || old.Order_status__c != local.Order_status__c)
                && local.Order_status__c == '批准'
                )   {
                if(local.Order_date__c < Date.newInstance(2022, 04, 01)) {
                    local.addError('4/1之前的订单只能驳回并重新提交。');
                    continue;
                }
            }
            // 「消耗品订单」になったとき、ログインユーザーからプロセス用の上司を設定
            if ((Trigger.isInsert
                 || old.Order_status__c != local.Order_status__c)
                && local.Order_status__c == '附件上传完成'
                )   {
                //if (contactdet == null) {
                //    contactdet = [SELECT Id, Name, Business_Assistant__c FROM Account WHERE Id = :local.Order_effective_contact__c];
                //}
                if(local.Business_Assistant__c == null) {
                    local.addError('合同没有有效的营业助理。');
                    continue;
                }else{
                    local.SalesManager__c = local.Business_Assistant__c;
                }
                // 項目の新規追加したくない、API名も変更したくない、ラベル名を変更、User.服务→修理.服务
                //local.SalesManager__c = contactdet.SalesManager__c == null ? contactdet.Id : contactdet.SalesManager__c;
                //local.BuchangApprovalManagerSales__c = loginUser.BuchangApprovalManager__c == null ? loginUser.Id : loginUser.BuchangApprovalManager__c;
                //local.ZongjianApprovalManager__c = loginUser.ZongjianApprovalManager__c == null ? loginUser.Id : loginUser.ZongjianApprovalManager__c;
                //local.TongkuoZongjian__c = loginUser.TongkuoZongjian__c == null ? loginUser.Id : loginUser.TongkuoZongjian__c;
            }
 
            //更新or插入 前
            if(Trigger.isInsert || Trigger.isUpdate ) {
                List<String> cNList = new List<String>();
                List<Statu_Achievements__c> sas = sAmap.get(local.name);
 
                if(sas != null) {
                    for (Statu_Achievements__c sa : sas) {
                        //保存合同编号
                        cNList.add(sa.ContractNO__c);
                    }
 
                    //拼接合同编号
                    String cNs = String.join(cNList,',');
                    local.ContractNo__c = cNs;
                }
            }
        }
    }
    //fy DB202312538864 2024.02.20 start
    System.debug('isAfterisUpdate!!2!');
    System.debug('Trigger.isAfter'+Trigger.isAfter);
    System.debug('Trigger.isUpdate'+Trigger.isUpdate);
    if (Trigger.isAfter && Trigger.isUpdate) {
        System.debug('isAfterisUpdate!!!');
        //产品预留check
        List<Consumable_order__c> oppList = new List<Consumable_order__c>();
        for (Consumable_order__c local : Trigger.New) {
            Consumable_order__c old = Trigger.oldMap.get(local.Id);
            if(local.Order_status__c != old.Order_status__c && (local.Order_status__c == '驳回'||local.Order_status__c == '草案中')&&!(old.Order_status__c == '驳回'&&local.Order_status__c == '草案中' )){
                oppList.add(local);
            }
        }
        if(oppList.size()>0){
            List<PreProduct_Storage_List__c> PreProductStorageList = new List<PreProduct_Storage_List__c>();
            List<PreProduct_Storage__c> UpdatePreProductStorageList =  new List<PreProduct_Storage__c>();
            Set<Id> lastProductFLGListId = new Set<Id>();
            List<Consumable_Orderdetails__c> act = new List<Consumable_Orderdetails__c>();
            List<Consumable_Orderdetails__c> act2 = new List<Consumable_Orderdetails__c>();
            List<Id> localId = new List<Id>();
            Map<String,Consumable_order__c> oppmap = new Map<String,Consumable_order__c>();
            for (Consumable_order__c local : oppList) {
                localId.add(local.Id);
                oppmap.put(local.Id,local);
            }
            act =  [select Id,Consumable_order__c,Consumable_count__c,Consumable_product__r.Product2__c,Consumable_product__r.Product2__r.LastbuyProductFLG__c,Consumable_product__r.Name__c from Consumable_Orderdetails__c where Consumable_order__c in:localId];
            act2=act.deepClone();
            Map<String,Map<String,Consumable_Orderdetails__c>> map2 = new Map<String,Map<String,Consumable_Orderdetails__c>>();
            System.debug('activitiesss!!!'+act);
            //*****合并产品重复的报价行项目****
            for(Consumable_Orderdetails__c pspsc :act2){
              if(pspsc.Consumable_product__r.Product2__c!=null){
                if(map2.containsKey(pspsc.Consumable_order__c)){
                    Map<String,Consumable_Orderdetails__c> quoteLine = map2.get(pspsc.Consumable_order__c);
                    if(quoteLine.containsKey(pspsc.Consumable_product__r.Product2__c)){
                      Consumable_Orderdetails__c quoteLine1 = quoteLine.get(pspsc.Consumable_product__r.Product2__c);
                      quoteLine1.Consumable_count__c =quoteLine1.Consumable_count__c+pspsc.Consumable_count__c;
                      quoteLine.put(pspsc.Consumable_product__r.Product2__c,quoteLine1);
                    }else{
                      quoteLine.put(pspsc.Consumable_product__r.Product2__c,pspsc);
                    }
                    map2.put(pspsc.Consumable_order__c,quoteLine);
                }else{
                    Map<String,Consumable_Orderdetails__c> quoteLine = new Map<String,Consumable_Orderdetails__c>();
                    quoteLine.put(pspsc.Consumable_product__r.Product2__c,pspsc);
                    map2.put(pspsc.Consumable_order__c,quoteLine);
                }
                System.debug('3449987sdf9!!!'+act);
              }
            }
            System.debug('3434sdf343!!!'+act);
            Map<String,List<Consumable_order__c>> proCorderIdMap = new Map<String,List<Consumable_order__c>>();
            for (Map<String,Consumable_Orderdetails__c> value2 : map2.values()) {
                for (Consumable_Orderdetails__c value : value2.values()) {
                    if(value.Consumable_product__r.Product2__r.LastbuyProductFLG__c){
                      lastProductFLGListId.add(value.Consumable_product__r.Product2__c);
                      if(proCorderIdMap.containsKey(value.Consumable_product__r.Product2__c)){
                        List<Consumable_order__c> clastList = proCorderIdMap.get(value.Consumable_product__r.Product2__c);
                        Consumable_order__c clast = oppmap.get(value.Consumable_order__c);
                        clastList.add(clast);
                        proCorderIdMap.put(value.Consumable_product__r.Product2__c,clastList);
                      }else{
                        List<Consumable_order__c> cnewList = new List<Consumable_order__c>();
                        Consumable_order__c cnew = oppmap.get(value.Consumable_order__c);
                        cnewList.add(cnew);
                        proCorderIdMap.put(value.Consumable_product__r.Product2__c,cnewList);
                      }
                    }
                }
            }
            System.debug('opp5656sdf565!!!'+map2);
            //*****合并产品重复的报价****
            if(lastProductFLGListId!=null&&lastProductFLGListId.size()!=0){
              // 锁定行前查询数据
              List<PreProduct_Storage__c> lockedPreProductStorage = [SELECT Id,Name,Storage_Number__c,Used_Number__c,Department__c,Province__c,RecordType.Name,Field1__c FROM PreProduct_Storage__c WHERE ifValid__c = true and Field1__c in:lastProductFLGListId FOR UPDATE];
              // 执行需要锁定行的其他操作
              if(lockedPreProductStorage!=null&&lockedPreProductStorage.size()!=0){
                
                for (PreProduct_Storage__c preProductStorage : lockedPreProductStorage) {
                  for(Consumable_order__c corder : proCorderIdMap.get(preProductStorage.Field1__c)){
                    Map<String,Consumable_Orderdetails__c> promp = map2.get(corder.Id);
                    Decimal pronumber = promp.get(preProductStorage.Field1__c).Consumable_count__c;
                    if((preProductStorage.RecordType.Name == '整机'
                    && corder.SalesDepartment_Dealer__c == preProductStorage.Department__c)
                    ||(preProductStorage.RecordType.Name == '耗材'
                    && corder.OCM_man_province_HP__c == preProductStorage.Province__c) ){
                      PreProduct_Storage_List__c PreProductStorageObj = new PreProduct_Storage_List__c();
                      PreProductStorageObj.PreProduct_Storage__c = preProductStorage.Id;
                      PreProductStorageObj.Modify_Number__c = pronumber;
                      PreProductStorageObj.AddReduceNumber__c = pronumber;
                      PreProductStorageObj.Modified_Time__c = Datetime.now();
                      PreProductStorageObj.Change_Type__c = '退回';
                      PreProductStorageObj.Consumble__c = corder.Id;
                      UpdatePreProductStorageList.add(preProductStorage);
                      PreProductStorageList.add(PreProductStorageObj);
                    }
                  }
                }
              }
            }
            System.debug('PreProductStorageListf565!!!'+PreProductStorageList);
            System.debug('UpdatePreProductStorageListdf565!!!'+UpdatePreProductStorageList);
            if(PreProductStorageList.size()>0){
                insert PreProductStorageList;
            }
            // if(UpdatePreProductStorageList.size()>0){
            //     update UpdatePreProductStorageList;
            // }
        }
        
    }
    //fy DB202312538864 2024.02.20 end
}