binxie
2024-01-16 1b08402678deb31bba4a347bfd388eba8360cbc1
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
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
trigger RentalApplyOtherTrigger on Rental_Apply__c (before insert, before update, after insert, after update, after delete) {
    public static Boolean tempCheck = false;
    if(((!Test.isRunningTest()) && UserInfo.getUserId() == System.Label.ByPassTrigger) || FixtureUtil.isRepairRenewal) {
        return;
    }
    //SWAG-B3U63C 2018/8/21 更新学会培训的申请备品申请单数 start
    if (Trigger.isAfter) {
        list<id> CampaignID = new list<id>();
        if (Trigger.isInsert || Trigger.isUndelete ) {
            for (Rental_Apply__c local : Trigger.New) {
                //20231124 sx  add  备品智能化添加
                if (String.isNotEmpty(local.Campaign__c) && !local.Is_Auto__c){
                    CampaignID.add(local.Campaign__c);
                }
            }
        }
        // 2023-10-31 zyh 智能化 start
        if (Trigger.isInsert) {
            List<String> reIdList = new List<String>();
            List<String> opdRaIdList = new List<String>();
            for (Rental_Apply__c inRa : Trigger.new){
                //Rental_Apply__c oldRa = Trigger.oldMap.get(inRa.Id);
                System.debug('zyhtest====cfq'+inRa.Demo_purpose1__c+'--'+inRa.Split_Apply_Reason__c +'--' +inRa.Root_Rental_Apply__c);
                // 不是分单的,维修代用的申请单需要创建配套,分单的不需要
                if (inRa.Demo_purpose1__c == '维修代用' && inRa.Demo_purpose2__c != '故障排查' && inRa.Demo_purpose2__c != '索赔QIS' && inRa.Repair__c != null && String.isBlank(inRa.Split_Apply_Reason__c) && String.isBlank(inRa.Root_Rental_Apply__c)){
                    reIdList.add(inRa.Repair__c);
                } //  else {
                    //return; // 不是修理创建的申请单不需要自动建配套/明细
                 // }
                //2023/11/22  sx  add  产品试用手动创建也需要配套
                if(inRa.Demo_purpose1__c == '产品试用' && inRa.OPDPlan__c != null && !inRa.Is_Auto__c && String.isBlank(inRa.Split_Apply_Reason__c) && String.isBlank(inRa.Root_Rental_Apply__c)){
                    opdRaIdList.add(inRa.OPDPlan__c);
                }
            }
            if (reIdList.size() > 0) {
                // 查询申请单的修理
                List<Repair__c> repList = [SELECT Id,Name,Delivered_Product__c,Delivered_Product__r.Salesdepartment__c,Delivered_Product__r.Fixture_Model_No_F__c,Delivered_Product__r.Equipment_Type__c,Delivered_Product__r.Product_category__c FROM Repair__c WHERE Id IN :reIdList];
                // 查询配套
                if (repList.size() > 0) {
                    List<Fixture_Set__c> fsList = [SELECT Id,Name,Fixture_Set_Body_Model_No__c FROM Fixture_Set__c WHERE Fixture_Set_Body_Model_No__c = :repList[0].Delivered_Product__r.Fixture_Model_No_F__c];
                    if (fsList.size() > 0) {
                        // 新建配套一览
                        Rental_Apply_Equipment_Set__c raes = new Rental_Apply_Equipment_Set__c();
                        raes.Name = '*';
                        raes.Rental_Apply__c = Trigger.new[0].Id;
                        raes.Fixture_Set__c = fsList[0].Id;
                        raes.IndexFromUniqueKey__c = 1;
                        upsert raes;
                        List<Fixture_Set_Detail__c> fsdList = [SELECT Id,Name,SortInt__c,Is_Body__c,Fixture_Set__c FROM Fixture_Set_Detail__c WHERE Fixture_Set__c = :fsList[0].Id AND Is_Body__c = true];
                        System.debug('zyhtest======fsdList'+fsdList+'========111;;;');
                        // 配套明细有数据新建备品一览明细
                        if (fsdList.size() > 0) {
                            System.debug('zyhtest======fsdList'+fsdList+'========;;;');
                            Rental_Apply_Equipment_Set_Detail__c raesd = new Rental_Apply_Equipment_Set_Detail__c();
                            raesd.Name = '*';
                            raesd.Rental_Apply__c = Trigger.new[0].Id;
                            raesd.Fixture_Set_Detail__c = fsdList[0].Id;
                            raesd.Rental_Num__c = 1;
                            raesd.Rental_Apply_Equipment_Set__c = raes.Id;
                            raesd.Is_Body__c = true;
                            raesd.Equipment_Type_text__c = repList[0].Delivered_Product__r.Equipment_Type__c;
                            raesd.Product_category_text__c = repList[0].Delivered_Product__r.Product_category__c;
                            raesd.IndexFromUniqueKey__c = 1;
                            raesd.IndexFromUniqueKey_Text__c = '0'+fsdList[0].SortInt__c + '';
                            raesd.Salesdepartment_before__c = repList[0].Delivered_Product__r.Salesdepartment__c;
                            // raesd.Repair__c = reList[0].Id;
                            upsert raesd;
                            // 第一条备品配套一览明细赋值-2023-11-15
                            raes.First_RAESD__c = raesd.Id;
                            update raes;
                        }
                    }
                }
                // List<Fixture_Set__c> fsList = [SELECT Id,Name,Fixture_Set_Body_Model_No__c FROM Fixture_Set__c WHERE Fixture_Set_Body_Model_No__c = :repList[0].Delivered_Product__r.Fixture_Model_No_F__c];
                
            }
            if(opdRaIdList.size()>0){
                //查询所有的OPD的 计划中借出备品  再申请的OPD不走这里逻辑
                Map<Id, OPDPlan__c> opdMap = new Map<Id, OPDPlan__c>([SELECT Id,PlanProdDetail__c,Reapply__c FROM OPDPlan__c WHERE Id IN :opdRaIdList AND Reapply__c = false]);
                //所有的配套型号全部取出来
                List<String> fixtureModels = new List<String>();
                //所有OPD涉及到的配套
                for(OPDPlan__c opd : opdMap.values()){
                    if(opd.PlanProdDetail__c != null){
                        List<String> fixSetStrings = opd.PlanProdDetail__c.split(';');
                        if(fixSetStrings.size() > 0){
                            for(String fixSet : fixSetStrings){
                                String tempString = fixSet.trim();
                                if(tempString.indexOf('*')!= -1){
                                    fixtureModels.add(tempString.substring(0, tempString.indexOf('*')));
                                }
                            }
                        }
                    }
                }
                // 借用机会可视化-判断空 2023-12-29 zyh start 
                if (fixtureModels.size() > 0) {
                    List<Fixture_Set__c> fixSets = [SELECT Id, Fixture_Set_Body_Model_No__c FROM Fixture_Set__c WHERE Fixture_Set_Body_Model_No__c IN :fixtureModels];
                    if (fixSets.size() > 0) {// 借用机会可视化-判断空 2023-12-29 zyh
                        Map<String, Fixture_Set__c> fixBodyModelMap = new Map<String, Fixture_Set__c>();
                        for(Fixture_Set__c fs : fixSets){
                            if(!fixBodyModelMap.containsKey(fs.Fixture_Set_Body_Model_No__c)){
                                fixBodyModelMap.put(fs.Fixture_Set_Body_Model_No__c, fs);
                            }
                        }
                        System.debug('fixBodyModelMap====='+fixBodyModelMap);
                        Map<Id,Fixture_Set__c> fixMap = new Map<Id,Fixture_Set__c>([SELECT Id,Fixture_Set_Body_Model_No__c FROM Fixture_Set__c WHERE Fixture_Set_Body_Model_No__c IN :fixtureModels ORDER BY Name]);
                        List<Fixture_Set_Detail__c> fixSetDetails = [SELECT Id, SortInt__c, Fixture_Set__c FROM Fixture_Set_Detail__c WHERE Is_Body__c = true AND Fixture_Set__c IN :fixSets];
                        //配套和配套明细的关系  <配套Id, List<明细>>
                        Map<Id, List<Fixture_Set_Detail__c>> setDetalMap = new Map<Id,List<Fixture_Set_Detail__c>>();
                        for(Fixture_Set_Detail__c fixDetail : fixSetDetails){
                            if(setDetalMap.containsKey(fixDetail.Fixture_Set__c)){
                                setDetalMap.get(fixDetail.Fixture_Set__c).add(fixDetail);
                            }else{
                                List<Fixture_Set_Detail__c> temp  = new List<Fixture_Set_Detail__c>();
                                temp.add(fixDetail);
                                setDetalMap.put(fixDetail.Fixture_Set__c,temp);
                            }
                        }
        
                        List<Rental_Apply_Equipment_Set__c> insertRaSet = new List<Rental_Apply_Equipment_Set__c>();
                        List<Rental_Apply_Equipment_Set_Detail__c> insertRaSetDetail = new List<Rental_Apply_Equipment_Set_Detail__c>();
                        //给各个申请单分配一览和一览明细
                        for(Rental_Apply__c ra : Trigger.new){
                            if(opdMap.containsKey(ra.OPDPlan__c)){
                                //一览 添加
                                //每一单对应的配套
                                // 借用机会可视化-空判断 2023-12-29 zyh start
                                List<String> tempfixSetStrings = new List<String>();
                                if (String.isNotBlank(opdMap.get(ra.OPDPlan__c).PlanProdDetail__c)) {
                                    tempfixSetStrings = opdMap.get(ra.OPDPlan__c).PlanProdDetail__c.split(';');
                                }
                                // List<String> tempfixSetStrings = opdMap.get(ra.OPDPlan__c).PlanProdDetail__c.split(';');
                                // 借用机会可视化-空判断 2023-12-29 zyh end
                                if(tempfixSetStrings.size()>0){
                                    for(String s : tempfixSetStrings){
                                        String tempString = s.trim();
                                        System.debug('tempString====='+tempString);
                                        if(tempString.indexOf('*')!= -1 && fixBodyModelMap.containskey(tempString.substring(0, tempString.indexOf('*'))) ){
                                            Rental_Apply_Equipment_Set__c raeSet = new Rental_Apply_Equipment_Set__c();
                                            raeSet.Name = '*';
                                            raeSet.Rental_Apply__c = ra.Id;
                                            raeSet.Fixture_Set__c = fixBodyModelMap.get(tempString.substring(0, tempString.indexOf('*'))).Id;
                                            raeSet.IndexFromUniqueKey__c = 1;
                                            insertRaSet.add(raeSet);
                                        }
                                    }
                                }
                            }
                        }
                        System.debug('insertRaSet===='+insertRaSet);
                        //先Insert 一览 再创建一览明细
                        if(insertRaSet.size()>0){
                            INSERT insertRaSet;
        
                            //一览明细添加  
                            for(Rental_Apply_Equipment_Set__c rae : insertRaSet){
                                if(fixMap.containsKey(rae.Fixture_Set__c)){
                                    Rental_Apply_Equipment_Set_Detail__c raesdel = new Rental_Apply_Equipment_Set_Detail__c();
                                    raesdel.Name = '*';
                                    raesdel.Rental_Apply__c = rae.Rental_Apply__c;
                                    raesdel.Fixture_Set_Detail__c = setDetalMap.get(rae.Fixture_Set__c)[0].Id;
                                    raesdel.Rental_Num__c = 1;
                                    raesdel.Rental_Apply_Equipment_Set__c = rae.Id;
                                    raesdel.Is_Body__c = true; 
                                    raesdel.IndexFromUniqueKey__c = 1;
                                    raesdel.IndexFromUniqueKey_Text__c = setDetalMap.get(rae.Fixture_Set__c)[0].SortInt__c + '';
                                    insertRaSetDetail.add(raesdel);
                                }
                            }
                            //插入一览明细
                            if(insertRaSetDetail.size()>0){
                                INSERT insertRaSetDetail;
                                //更新一览的第一条备品配套明细
                                for(Rental_Apply_Equipment_Set__c rae : insertRaSet){
                                    for(Rental_Apply_Equipment_Set_Detail__c raesd : insertRaSetDetail){
                                        if(rae.Id == raesd.Rental_Apply_Equipment_Set__c){
                                            rae.First_RAESD__c = raesd.Id;
                                        }
                                    }    
                                }
                                UPDATE insertRaSet;
                            }
                        }
                    }
                }
                // List<Fixture_Set__c> fixSets = [SELECT Id, Fixture_Set_Body_Model_No__c FROM Fixture_Set__c WHERE Fixture_Set_Body_Model_No__c IN :fixtureModels];
                // 借用机会可视化-判断空 2023-12-29 zyh end 
            }
        }
        // 2023-10-31 zyh 智能化 end
        // 2023-10-26 zyh 智能化 start
        System.debug('tempCheck=start=='+tempCheck);
        System.debug('StaticParameter.EscapeRaTrigger=start=='+StaticParameter.EscapeRaTrigger);
        if (Trigger.isUpdate) {
            List<String> raIdList = new List<String>();
            List<String> ra614List = new List<String>();
            for (Rental_Apply__c upRa : Trigger.new){
                Rental_Apply__c oldRa = Trigger.oldMap.get(upRa.Id);
                // 有修理,满足触发条件推送接口数据
                if ((upRa.Shippment_loaner_time__c != oldRa.Shippment_loaner_time__c ||  // 备品中心出库日,发生变化
                    // upRa.QueueShippmentDate__c != oldRa.QueueShippmentDate__c ||  // 排队备品预计出库时间,发生变化
                    upRa.Return_dadeline_final__c != oldRa.Return_dadeline_final__c ||  // 最新预定归还日,发生变化
                    // (upRa.Rental_Status__c == '已分配' && oldRa.Rental_Status__c == '已批准') || 
                    upRa.QueueShippmentDate__c != oldRa.QueueShippmentDate__c || 
                    upRa.Rental_Status__c != oldRa.Rental_Status__c || 
                    upRa.Cancel_time__c != oldRa.Cancel_time__c) &&  // 备品申请取消日,发生变化
                    upRa.Repair__c != null && upRa.Demo_purpose1__c == '维修代用' && 
                    upRa.Rental_Status__c != '草案中' && 
                    upRa.Rental_Status__c != '申请中' && 
                    upRa.Rental_Status__c != '审批中(OPD未通过)') {
                        System.debug('QueueShippmentDate__c=' + upRa.QueueShippmentDate__c + '///' + oldRa.QueueShippmentDate__c
                                    + ';;Shippment_loaner_time__c=' + upRa.Shippment_loaner_time__c + '///' + oldRa.Shippment_loaner_time__c
                                    + ';;Return_dadeline_final__c=' + upRa.Return_dadeline_final__c + '///' + oldRa.Return_dadeline_final__c
                                    + ';;Cancel_time__c=' + upRa.Cancel_time__c + '///' + oldRa.Cancel_time__c);
                        System.debug('QueueShippmentDate__c=' + (upRa.QueueShippmentDate__c == oldRa.QueueShippmentDate__c)
                                    + ';;Shippment_loaner_time__c=' + (upRa.Shippment_loaner_time__c == oldRa.Shippment_loaner_time__c)
                                    + ';;Return_dadeline_final__c=' + (upRa.Return_dadeline_final__c == oldRa.Return_dadeline_final__c)
                                    + ';;Cancel_time__c=' + (upRa.Cancel_time__c == oldRa.Cancel_time__c));
                        ra614List.add(upRa.Id);
                }
                // 使用目的1是维修待用和协议借用的,或者使用目的2是已购待货,批准通过后推送分单Request_approval_time__c
                // if (upRa.Rental_Status__c == '已批准' && oldRa.Rental_Status__c != '已批准' && (upRa.Demo_purpose1__c == '维修代用' || upRa.Demo_purpose1__c == '协议借用' || upRa.demo_purpose2__c == '已购待货')){
                System.debug('zyetest===upRa.Status__c' + upRa.Status__c + 'oldRa.Status__c' + oldRa.Status__c);
                String RecordTypeId = Schema.SObjectType.Rental_Apply__c.getRecordTypeInfosByDeveloperName().get('AgencyRequest').getRecordTypeId(); // 记录类型
                if (RecordTypeId != upRa.RecordTypeId && upRa.Status__c == '已批准' && oldRa.Status__c != '已批准' && (upRa.Demo_purpose1__c == '维修代用' || upRa.Demo_purpose1__c == '协议借用' || upRa.demo_purpose2__c == '已购待货')){
                    raIdList.add(upRa.Id);
                }
            }
            // 智能化接口推送
            if (ra614List.size() > 0 && StaticParameter.EscapeRaTrigger == false) {
                System.debug('NFM614====' + ra614List);
                BatchIF_Log__c iflog = new BatchIF_Log__c();
                iflog.Type__c = 'NFM614';
                iflog.Log__c = 'callout start\n';
                System.debug('NFM614===RentalApplyToApp====callout start' + ra614List);
                System.debug('NFM614===RentalApplyToApp====callout start' + Datetime.now());
                System.debug('NFM614===RentalApplyToApp====callout start' + ra614List.size());
                insert iflog;
                // 2023-12-2 zyh 跳过Batch用户 start
                // NFM614Controller.callout(iflog.Id, ra614List);
                String uid = UserInfo.getUserId();
                String BUid = System.Label.Batch_User_Id;
                String OLYid = System.Label.OlympusSystem_ID;
                System.debug('zheli');
                if (System.isBatch()) {
                // if (uid.substring(0,15) == BUid.substring(0,15) || uid.substring(0,15) == OLYid.substring(0,15)) {
                    NFM614Controller.executefuture(iflog, ra614List);
                }else{
                    NFM614Controller.callout(iflog.Id, ra614List);
                }
                // 2023-12-2 zyh 跳过Batch用户 end
                tempCheck = true;
                StaticParameter.EscapeRaTrigger = true;
                System.debug('tempCheck=end=='+tempCheck);
                System.debug('StaticParameter.EscapeRaTrigger=end=='+StaticParameter.EscapeRaTrigger);
            }
            
            if (raIdList.size() > 0) {
                System.debug('zyhtest=====Trigger=raIdList:'+raIdList);
                // 调用Batch进行分单/分配——同步进行 20231209 zyh start
                // AuthRentalApplySplitBatch.toSplitRentalApply(raIdList,true);
                AuthRentalApplySplitBatch.toSplitRentalApply(raIdList,true);
                // Database.executeBatch(new AuthRentalApplySplitBatch(raIdList),1);
                // AuthRentalApplySplitController arasc = new AuthRentalApplySplitController();
                // arasc.init(raIdList);
                // 调用Batch进行分单/分配——同步进行 20231209 zyh end
            }
        }
        // 2023-10-26 zyh 智能化 end
        if (Trigger.isUpdate || Trigger.isDelete) {
            for (Rental_Apply__c local : Trigger.old) {
                // 2020/11/3 songxiaoqi start 更新申请时,更新前不是取消,然后更新成取消的时候计算
                Rental_Apply__c news =null;
                if (Trigger.isUpdate) {
                    news = Trigger.newMap.get( local.Id );
                }
                // 两种情况需要更新:
                // 1、删除并且 old包含学会培训;
                // 2、更新,new 或 old 中包含学会培训,并且状态发生变化 ;
                //20231123  sx 备品智能化项目 自动创建申请单跳过 !local.Is_Auto__c 手工分单分单申请单该字段(Is_Auto__c)默认为false会正常走进逻辑
                if (
                    Trigger.isUpdate && String.isNotEmpty( news.Campaign__c ) && news.Is_Auto__c != null && !news.Is_Auto__c 
                    ||
                    (Trigger.isDelete &&
                     String.isNotEmpty( local.Campaign__c )
                    )
                    ||
                    (Trigger.isUpdate &&
                     (String.isNotEmpty(local.Campaign__c) ||
                      String.isNotEmpty(news.Campaign__c)
                     ) &&
                     (
                         (local.RA_Status__c !=news.RA_Status__c
                          && news.RA_Status__c=='取消')||
                         (local.Request_approval_day__c != news.Request_approval_day__c) ||
                         (local.Campaign__c != news.Campaign__c )
                     )
                    )
                ){
                    // 2020/11/3 songxiaoqi end
                    // 如果老的备品借出申请的学会不为空,加入
                    if( String.isNotEmpty( local.Campaign__c ) ){
                        CampaignID.add( local.Campaign__c );
                    }
                    // 如果新的备品借出申请的学会不为空,加入
                    if( String.isNotEmpty( news.Campaign__c ) ){
                        CampaignID.add( news.Campaign__c );
                    }
                }
            }
        }
        System.debug('CampaignID==='+ CampaignID);
        if (CampaignID.size () > 0) {
            List<AggregateResult> TemRentalApplies =
                [select Count(Id) Cnt_Id, Campaign__c, min(Request_approval_day__c) RADay
                 from Rental_Apply__c
                 where Campaign__c in: CampaignID
                 and RA_Status__c != '取消'
                 group by Campaign__c
                ];
            map<id, list<string>> TemRentalAppliesMap = new map<id, list<string>>();
            for (AggregateResult TemRentalApply : TemRentalApplies) {
                list<string> temStringList = new list<string>();
                temStringList.add(string.valueOf( TemRentalApply.get('Cnt_Id')));
                if (TemRentalApply.get('RADay') != null) {
                    temStringList.add(((Date)TemRentalApply.get('RADay')).format());
                }
                TemRentalAppliesMap.put( (ID) TemRentalApply.get('Campaign__c'),
                                        temStringList);
            }
            list<Campaign> UpdateCampaignList = new list<Campaign>();
            for (Campaign TemCampaign : [select id, Number_Rental_Apply__c
                                         from Campaign where id in: CampaignID
                                         //2020/11/3 songxiaoqi start 创建申请后,草案中的时候计算单数
                                         and Status != '取消'
                                         //2020/11/3 songxiaoqi end
                                        ]) {
                                            list<string> temStringList = TemRentalAppliesMap.get(TemCampaign.id);
                                            if (temStringList != null) {
                                                integer RentalApplyNumber = integer.valueof(temStringList[0]);
                                                TemCampaign.Number_Rental_Apply__c = RentalApplyNumber;
                                                if (temStringList.size() > 1) {
                                                    Date tempRADay = date.parse(temStringList[1]);
                                                    TemCampaign.Request_approval_day_RA__c = tempRADay;
                                                } else {
                                                    TemCampaign.Request_approval_day_RA__c = null;
                                                }
                                            } else {
                                                TemCampaign.Number_Rental_Apply__c = 0;
                                                TemCampaign.Request_approval_day_RA__c = null;
                                            }
                                            UpdateCampaignList.add(TemCampaign);
                                        }
            if (UpdateCampaignList.size() > 0) {
                upsert UpdateCampaignList;
            }
        }
        //SWAG-B3U63C 2018/8/21 更新学会培训的申请备品申请单数 end
    }
}