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
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
global class AuthRentalApplySplitBatch implements Database.Batchable<sObject>,Database.Stateful {
    private static final Map<String,Schema.RecordTypeInfo>  DEVELOPERNAMEMAP  = Schema.SObjectType.Rental_Apply__c.getRecordTypeInfosByDeveloperName();//记录类型
    private Boolean isFirst = true;
    public List<String> raIdList;
    private BatchIF_Log__c iflog;
    private static String iflogLog3 = ''; // 借用机会可视化-根据邮箱地址去执行分单分配 2024-1-9 zyh add
    private String raMail; // 借用机会可视化-根据邮箱地址去执行分单分配 2024-1-9 zyh add
    global AuthRentalApplySplitBatch() {
        
    }
 
    // 借用机会可视化-根据邮箱地址去执行分单分配 2024-1-9 zyh start
    global AuthRentalApplySplitBatch(String mailAddress) {
        if (mailAddress == 'BJ') {
            mailAddress = System.Label.BeijingEmail;
        }
        if (mailAddress == 'SH') {
            mailAddress = System.Label.ShanghaiEmai;
        }
        if (mailAddress == 'GZ') {
            mailAddress = System.Label.GuangzhouEmail;
        }
        this.raMail = mailAddress;
    }
    // 借用机会可视化-根据邮箱地址去执行分单分配 2024-1-9 zyh end
    
    global AuthRentalApplySplitBatch(List<String> raIdList) {
        System.debug('zyhtest====Batch');
        this.raIdList = raIdList;
    }
    global Database.QueryLocator start(Database.BatchableContext bc) {
        iflog = new BatchIF_Log__c();
        iflog.Type__c = 'AuthRentalApplySplitBatch';
        iflog.Log__c  = 'AuthRentalApplySplitBatch start\n';
        iflog.Log2__c  = '申请单Id start:\n';
        iflog.Log3__c  = '申请单分配Id start:\n';
        iflog.ErrorLog__c = '';
        insert iflog;
        String query = 'SELECT Id, Status__c, Request_shipping_day__c, Person_In_Charge__r.Email, Rental_Assistant__r.Email, Demo_purpose1__c,RecordType.DeveloperName,Loaner_centre_mail_address__c from Rental_Apply__c';
        query += ' WHERE Status__c != \'完了\' AND Status__c != \'取消\' AND Status__c != \'删除\' AND Rental_Status__c = \'已批准\' AND RecordType.DeveloperName = \'StandardRequest\' AND Request_shipping_day__c <= NEXT_N_DAYS:7 AND Demo_purpose1__c != \'其他\' AND Request_approval_time__c != NULL AND Cross_Region_Assign__c = null';
        
        // 借用机会可视化-根据邮箱地址去执行分单分配 2024-1-9 zyh start
        if (String.isNotBlank(this.raMail)) {
            query += ' AND Loaner_centre_mail_address__c =: raMail';
        }
        // 借用机会可视化-根据邮箱地址去执行分单分配 2024-1-9 zyh end
 
        if (this.raIdList != null && this.raIdList.size() > 0) {
            query += ' AND Id IN :raIdList ORDER BY OPD_OrderNum__c NULLS LAST,OPD_OrderNum__c,Request_approval_time__c'; // 20231213-zyh-借用机会可视化==按照OPD排序推送
            System.debug('testzyh===='+query);
        } else{
            query += ' ORDER BY OPD_OrderNum__c NULLS LAST,OPD_OrderNum__c,Request_approval_time__c'; // 添加OPD排队Num&维修代用等
        }
        System.debug('zyhsql===='+query);
        return Database.getQueryLocator(query);
    }
    global void execute(Database.BatchableContext BC, list<Rental_Apply__c> scope) {
        List<String> raIdList = new List<String>();
        for (Rental_Apply__c ra : scope) {
            raIdList.add(ra.Id);
            iflog.Log2__c += raIdList + ',\n';
            System.debug('1213===raIdList'+ra.Id);
        }
        System.debug('zyhtest=====fendan:'+raIdList);
        if (raIdList.size() > 0) {
            if (String.isNotBlank(scope[0].Loaner_centre_mail_address__c) && scope[0].Loaner_centre_mail_address__c == System.Label.ShanghaiEmai) {
                iflog.Log3__c += raIdList + ',\n';
                if (isFirst) {
                    toFp(raIdList,isFirst);
                    // System.enqueueJob(new RentalFixtureSetAssignAndQueueWebService(raIdList));
                    isFirst = false;
                } else {
                    toFp(raIdList,isFirst);
                }
            } else {
                if (isFirst) {
                    toSplitRentalApply(raIdList,isFirst);
                    isFirst = false;
                } else {
                    toSplitRentalApply(raIdList,isFirst);
                }
            }
            // toSplitRentalApply(raIdList);
        }
        iflog.Log3__c += AuthRentalApplySplitBatch.iflogLog3;
        System.debug('AuthRentalApplySplitBatch.iflogLog3=====3' + AuthRentalApplySplitBatch.iflogLog3);
    }
    global void finish(Database.BatchableContext BC) {
        iflog.Log__c += '\nAuthRentalApplySplitBatch end';
        String tmp = iflog.ErrorLog__c;
        if (tmp.length() > 65000) {
            tmp = tmp.substring(0, 65000);
            tmp += ' ...have more lines...';
            iflog.ErrorLog__c = tmp;
        }
        update iflog;
        
    }
    public static void toSplitRentalApply(List<String> raIdList,Boolean isFirst) {
        System.debug('AuthRentalApplySplitBatch.iflogLog3=====1' + AuthRentalApplySplitBatch.iflogLog3);
        Map<String,List<Rental_Apply_Equipment_Set__c>> raIdMap = new Map<String,List<Rental_Apply_Equipment_Set__c>>(); // 用于存放需要分单的一览
        Map<String,Rental_Apply__c> raIdMap1 = new Map<String,Rental_Apply__c>(); // 用于存放需要分单的申请单=>用于判断是否是整单
        Map<String,String> raSpIdMap = new Map<String,String>();
        List<Rental_Apply_Equipment_Set__c> raesFdObjList = new List<Rental_Apply_Equipment_Set__c>(); // 存放分单之后再分配的一览
        List<Rental_Apply_Equipment_Set__c> raesFdToFpObjList = new List<Rental_Apply_Equipment_Set__c>(); // 存放分单之后再分配的一览
        List<String> raesFdToFpList = new List<String>(); // 存放分单之后再分配的一览Id
        List<String> raesNoFdToFpList = new List<String>(); // 存放可以直接分配的一览Id
        List<String> raNoFdToFpList = new List<String>(); // 存放可以直接分配的申请单(未去重)
        List<String> raToFpList = new List<String>(); // 存放可以直接分配的申请单(去重)
        List<String> opdSpIdList = new List<String>(); // 用于存放需要分单的OPD的Id
        List<String> raesIdList = new List<String>(); //用于存放需要部分分单的一览Id
        List<String> raSpIdList = new List<String>(); //用于存放需要克隆的申请单Id
        List<Rental_Apply__c> raUpList = new List<Rental_Apply__c>(); //用于全部分单更新记录类型等
        List<String> raZdIdList = new List<String>(); // 存放整单分单的申请单ID
        List<Asset> assetList = new List<Asset>(); // 用于存放查询出来的保有设备
        Map<String,Double> assetKeyMap = new Map<String,Double>(); // 用于存放保有设备的一对多数量
        List<String> assetModList = new List<String>(); // 用于存放设备型号
        List<String> assetAddList = new List<String>(); // 用于存放备品存放地
        List<String> raes_dIdList = new List<String>(); // 用于存放没有分配的申请单Id
        Map<String,String> raFpMap = new Map<String,String>(); // 用于存放To自动分配的
        Map<String,String> assetModelMap = new Map<String,String>();
        Map<String,String> assetAddMap = new Map<String,String>();
        List<Rental_Apply_Equipment_Set_Detail__c> allFpList = new List<Rental_Apply_Equipment_Set_Detail__c>();
        Map<String,Rental_Apply_Equipment_Set_Detail__c> noFpMap = new Map<String,Rental_Apply_Equipment_Set_Detail__c>();
        Map<String,Rental_Apply_Equipment_Set_Detail__c> okFpMap = new Map<String,Rental_Apply_Equipment_Set_Detail__c>();
        // List<Rental_Apply__c> raSpList = 
        // 查找需要推送的一览  Rental_Apply_Equipment_Set_Cnt__c  => 申请单的一览数
        List<Rental_Apply_Equipment_Set__c> raesSpList = new List<Rental_Apply_Equipment_Set__c>();
        List<String> raesOkList = new List<String>(); // Id
        List<Rental_Apply_Equipment_Set__c> raesList = [SELECT Id,Name,Rental_Apply__c,Fixture_Set__c,Fixture_Set__r.Loaner_categoryII__c,Rental_Apply__r.WorkPlace__c,Rental_Apply__r.OPD_OrderNum__c FROM Rental_Apply_Equipment_Set__c WHERE (RAES_Status__c = '待分配' OR RAES_Status__c = '排队中' OR RAES_Status__c = '暂定分配' OR RAES_Status__c = '已分配' OR RAES_Status__c = '已出库指示' OR RAES_Status__c = '已下架' OR RAES_Status__c = '出库前已检测') AND Rental_Apply__c IN :raIdList ORDER BY Rental_Apply__r.OPD_OrderNum__c];
        System.debug('zyhtest=====raesList.size()' + raesList.size());
        if(raesList.size() > 0){
            for (Rental_Apply_Equipment_Set__c tempObj : raesList) {
                raes_dIdList.add(tempObj.Id);
            }
            // 判断有没有分配
            if (raes_dIdList.size() > 0) {
                allFpList = [SELECT Id,Asset__c,Rental_Apply_Equipment_Set__c,EquipmentSet_Detail_Status_Status__c FROM Rental_Apply_Equipment_Set_Detail__c WHERE Rental_Apply_Equipment_Set__c IN :raes_dIdList];
                if (allFpList.size() > 0) {
                    for (Rental_Apply_Equipment_Set_Detail__c mx : allFpList) {
                        // 如果明细分配了,就跳过,没分配的再去分单
                        if (String.isNotBlank(mx.Asset__c) && mx.EquipmentSet_Detail_Status_Status__c != '待废弃') {
                            // 如果已分配的map里包含了,那么就跳过
                            if (okFpMap.containsKey(mx.Rental_Apply_Equipment_Set__c)) {
                                continue;
                            } else {
                                // 如果一览里,既有没分配的,也有分配了的,那么把没分配的map里的数据删了,加到已分配的map里
                                if (noFpMap.containsKey(mx.Rental_Apply_Equipment_Set__c)){
                                    noFpMap.remove(mx.Rental_Apply_Equipment_Set__c); // 删除没分配map里的数据
                                    okFpMap.put(mx.Rental_Apply_Equipment_Set__c,mx);  // 新增已分配map里的数据
                                } else {
                                    okFpMap.put(mx.Rental_Apply_Equipment_Set__c,mx);
                                }
                            }
                        } else {
                            // 如果未分配的map里包含了,那么就跳过
                            if (noFpMap.containsKey(mx.Rental_Apply_Equipment_Set__c)) {
                                continue;
                            }
                            // 如果已分配的map里没包含,就加到未分配的map里
                            if (!okFpMap.containsKey(mx.Rental_Apply_Equipment_Set__c)) {
                                noFpMap.put(mx.Rental_Apply_Equipment_Set__c,mx);
                            }
                        }
                    }
                    // 未分配的往下走自动分单/分配,已分配的不管
                    for (String raesId : noFpMap.keySet()) {
                        raesOkList.add(raesId); // 存放未分配的(可不可以分单的都有)
                    }
                }
            }
            if(raesOkList.size() > 0){
                raesFdObjList = [SELECT Id,Name,Rental_Apply__c,Fixture_Set__c,Fixture_Set__r.Loaner_categoryII__c,Loaner_code_F__c,Rental_Apply__r.WorkPlace__c,Rental_Apply__r.Salesdept__c,Rental_Apply__r.OPD_OrderNum__c,Rental_Num__c,First_RAESD_Is_Main__c FROM Rental_Apply_Equipment_Set__c WHERE (RAES_Status__c = '待分配' OR RAES_Status__c = '排队中' OR RAES_Status__c = '暂定分配' OR RAES_Status__c = '已分配' OR RAES_Status__c = '已出库指示' OR RAES_Status__c = '已下架' OR RAES_Status__c = '出库前已检测') AND Id IN :raesOkList ORDER BY Rental_Apply__r.OPD_OrderNum__c];
            }
            // for (Rental_Apply_Equipment_Set__c raesNum : raesList) { // 2023-10-28 zyh 更换遍历的list(优化)
            for (Rental_Apply_Equipment_Set__c raesNum : raesFdObjList) {
                // 将不是北上广深的台车、监视器并且有主体的一览组成List进行自动分单
                if (raesNum.First_RAESD_Is_Main__c && !raesNum.Rental_Apply__r.WorkPlace__c.contains('北京') && !raesNum.Rental_Apply__r.WorkPlace__c.contains('上海') && !raesNum.Rental_Apply__r.WorkPlace__c.contains('广州') && !raesNum.Rental_Apply__r.WorkPlace__c.contains('深圳') && !raesNum.Rental_Apply__r.WorkPlace__c.contains('安徽') && !raesNum.Rental_Apply__r.WorkPlace__c.contains('福建') && !raesNum.Rental_Apply__r.WorkPlace__c.contains('江苏') && !raesNum.Rental_Apply__r.WorkPlace__c.contains('江西') && !raesNum.Rental_Apply__r.WorkPlace__c.contains('浙江') && !raesNum.Rental_Apply__r.Salesdept__c.contains('华东') && (raesNum.Fixture_Set__r.Loaner_categoryII__c == '台车' || raesNum.Fixture_Set__r.Loaner_categoryII__c == '监视器')){
                    assetModList.add(raesNum.Loaner_code_F__c);
                    assetAddList.add(raesNum.Rental_Apply__r.WorkPlace__c);
                    assetAddMap.put(raesNum.Id,raesNum.Rental_Apply__r.WorkPlace__c);
                    assetModelMap.put(raesNum.Id,raesNum.Loaner_code_F__c);
                    raesFdToFpObjList.add(raesNum);
                    System.debug('zyhtest===raesNoFdToFpList:jinlaifendan');
                    System.debug('zyhtest===assetModList:jinlaifendan'+assetModList);
                    System.debug('zyhtest===assetModList:jinlaifendan'+assetAddList);
                } else {
                    raesNoFdToFpList.add(raesNum.Id); // 不符合分单条件的未分配的直接走自动分配
                }
                System.debug('zyhtest===raesNoFdToFpList:'+raesNoFdToFpList);
            }
            if (assetModList.size() > 0) {
                // 查询对应的保有设备
                assetList = [SELECT Id,Name,Internal_asset_location__c,Fixture_Model_No_F__c,You_Xiao_Ku_Cun__c FROM Asset WHERE AssetManageConfirm__c = true AND Internal_asset_location__c IN :assetAddList AND Fixture_Model_No_F__c IN :assetModList];
                System.debug('zyhtest===assetList'+assetList);
                System.debug('zyhtest===assetList'+assetList.size());
                if (assetList.size() > 0) {
                    for (Asset asset : assetList) {
                        // 查询保有设备的总有效库存
                        if (assetKeyMap.containsKey(asset.Internal_asset_location__c + asset.Fixture_Model_No_F__c)){
                            Decimal num = assetKeyMap.get(asset.Internal_asset_location__c + asset.Fixture_Model_No_F__c) + asset.You_Xiao_Ku_Cun__c;
                            assetKeyMap.put(asset.Internal_asset_location__c + asset.Fixture_Model_No_F__c , num);
                        } else {
                            assetKeyMap.put(asset.Internal_asset_location__c + asset.Fixture_Model_No_F__c , asset.You_Xiao_Ku_Cun__c);
                        }
                    }
                    System.debug('zyhtest===assetKeyMap'+assetKeyMap);
                }
            }
            // for(Rental_Apply_Equipment_Set__c raes : raesList){ // 2023-10-28 zyh 更换遍历的list(优化)
            for(Rental_Apply_Equipment_Set__c raes : raesFdToFpObjList){ // 遍历走自动分单的List
                // 判断是否是北、上、广、深的单子,不是的话自动分单,是的话自动分配
                if (!raes.Rental_Apply__r.WorkPlace__c.contains('北京') && !raes.Rental_Apply__r.WorkPlace__c.contains('上海') && !raes.Rental_Apply__r.WorkPlace__c.contains('广州') && !raes.Rental_Apply__r.WorkPlace__c.contains('深圳') && !raes.Rental_Apply__r.WorkPlace__c.contains('安徽') && !raes.Rental_Apply__r.WorkPlace__c.contains('福建') && !raes.Rental_Apply__r.WorkPlace__c.contains('江苏') && !raes.Rental_Apply__r.WorkPlace__c.contains('江西') && !raes.Rental_Apply__r.WorkPlace__c.contains('浙江') && !raes.Rental_Apply__r.Salesdept__c.contains('华东')){
                    System.debug('zyhtest===raes.Rental_Num__c'+raes.Rental_Num__c);
                    System.debug('zyhtest===assetKeyMap.get(raes.Rental_Apply__r.WorkPlace__c + raes.Loaner_code_F__c)'+assetKeyMap.get(raes.Rental_Apply__r.WorkPlace__c + raes.Loaner_code_F__c));
                    // 判断是否有库存,有的话自动分单,没有的话自动分配
                    // 把需要的数量换成1,每个一览只有一个配套 20231210 zyh start
                    // if (raes.Rental_Num__c <= assetKeyMap.get(raes.Rental_Apply__r.WorkPlace__c + raes.Loaner_code_F__c)) {
                    if (1 <= assetKeyMap.get(raes.Rental_Apply__r.WorkPlace__c + raes.Loaner_code_F__c)) {
                        // 确认分单后减去一分单的数量
                        // assetKeyMap.put(raes.Rental_Apply__r.WorkPlace__c + raes.Loaner_code_F__c , assetKeyMap.get(raes.Rental_Apply__r.WorkPlace__c + raes.Loaner_code_F__c) - raes.Rental_Num__c);
                        assetKeyMap.put(raes.Rental_Apply__r.WorkPlace__c + raes.Loaner_code_F__c , assetKeyMap.get(raes.Rental_Apply__r.WorkPlace__c + raes.Loaner_code_F__c) - 1);
                        // 把需要的数量换成1,每个一览只有一个配套 20231210 zyh end
                        // clone申请单
                        // 判定需要分单的配套,台车/监视器才可以分单
                        System.debug('zyhtest=====raes.Fixture_Set__r.Loaner_categoryII__c' + raes.Fixture_Set__r.Loaner_categoryII__c + raes.Id);
                        if (raes.Fixture_Set__r.Loaner_categoryII__c == '台车' || raes.Fixture_Set__r.Loaner_categoryII__c == '监视器') {
                            if(raIdMap.containsKey(raes.Rental_Apply__c)) {
                                raIdMap.get(raes.Rental_Apply__c).add(raes);
                                System.debug('zyhtest====raIdMap1'+raIdMap);
                            } else{
                                List<Rental_Apply_Equipment_Set__c> raesUpList = new List<Rental_Apply_Equipment_Set__c>();
                                raesUpList.add(raes);
                                raIdMap.put(raes.Rental_Apply__c,raesUpList);
                                System.debug('zyhtest====raIdMap2'+raIdMap);
                                System.debug('zyhtest====raIdMap2size'+raIdMap.size());
                            }
                            raSpIdList.add(raes.Rental_Apply__c);
                            raesSpList.add(raes);
                            System.debug('zyhtest====raSpIdList'+raSpIdList.size());
                            System.debug('zyhtest====raSpIdList'+raSpIdList);
                            System.debug('zyhtest====raIdMap.values()'+raIdMap.values());
                            System.debug('zyhtest====raIdMap.values()'+raIdMap);
                            raes_dIdList.add(raes.Id);
                        }
                    } else {
                        raesNoFdToFpList.add(raes.Id); // 存放有效库存不足而不能分单的一览
                    }
                }
                // raesIdList.add(ra.Id);
 
            }
            if(raSpIdList.size() > 0){
                List<Rental_Apply__c> raSpList = getRa(raSpIdList).clone(); // 用于存放需要克隆的申请单
                List<Rental_Apply__c> raSpZcList  = new List<Rental_Apply__c>(); // 用于存放要新建的申请单
                List<Rental_Apply__c> raSpOpdList  = new List<Rental_Apply__c>(); // 存放OPD来源的申请单
                List<String> raRootIdList  = new List<String>(); // 用于存放源申请单ID
                Map<String,List<String>> raRootMap = new Map<String,List<String>>(); // 用于一对多存放要分单的申请单/数量
                Map<String,String> raOPDMap = new Map<String,String>(); // 存放一对一的OPDID和申请单ID
                Integer num = 0; // 用于命名_num
                // 需要分单的申请单创建
                if (raSpList.size() > 0) {
                    // 遍历要克隆的申请单
                    for (Rental_Apply__c spRa : raSpList) {
                        // 判断是否有源申请单,没有的话赋Id
                        if (String.isNotBlank(spRa.Root_Rental_Apply__c)) {
                            raRootIdList.add(spRa.Root_Rental_Apply__c);
                        } else {
                            raRootIdList.add(spRa.Id);
                        }
                        raIdMap1.put(spRa.Id,spRa);
                        System.debug('zyhtest====raIdMap1====' + raIdMap1);
                        System.debug('zyhtest====raIdMap1.size()====' + raIdMap1.size());
                    }
                    if(raRootIdList.size() > 0){
                        System.debug('zyhtest====raRootIdList:' + raRootIdList.size());
                        System.debug('zyhtest====raRootIdList:' + raRootIdList);
                        List<Rental_Apply__c> raRootList = [SELECT Id,Name,Root_Rental_Apply__c FROM Rental_Apply__c WHERE Root_Rental_Apply__c IN :raRootIdList];
                        System.debug('zyhtest====raRootList:' + raRootList);
                        System.debug('zyhtest====raRootList:' + raRootList.size());
                        // 有源申请单的批量做成一对多的Map
                        if(raRootList.size() > 0){
                            for (Rental_Apply__c rootRa : raRootList) {
                                System.debug('zyhtest====rootRa.Root_Rental_Apply__c'+rootRa.Root_Rental_Apply__c);
                                // 源申请单有值的话判断Map里是否含有,没有的话value定义一个List
                                if(String.isNotBlank(rootRa.Root_Rental_Apply__c)){
                                    if(raRootMap.containsKey(rootRa.Root_Rental_Apply__c)){
                                        raRootMap.get(rootRa.Root_Rental_Apply__c).add(rootRa.Id);
                                    }else{
                                        List<String> rootList = new List<String>();
                                        rootList.add(rootRa.Id);
                                        raRootMap.put(rootRa.Root_Rental_Apply__c,rootList);
                                    }
                                }else{
                                    raRootMap.put(rootRa.Id,null);
                                }
                            }
                        }
                    }
                    System.debug('zyhtest=====raRootMap:'+raRootMap);
                    for (Rental_Apply__c raObj : raSpList) {
                        raObj.Split_Apply_Reason__c = '现地管理分单';
                        raObj.RecordTypeId = DEVELOPERNAMEMAP.get('AgencyRequest').getRecordTypeId(); // 记录类型
                        raObj.SalesdeptSelect__c = raObj.Salesdept__c; // 申请者销售本部
                        raObj.ToAgency__c = getOcmMgtProvMap().get(raObj.WorkPlace__c); // 分配办事处
                        // 判断有没有源申请单
                        if(String.isNotBlank(raObj.Root_Rental_Apply__c)){
                            raObj.Root_Rental_Apply__c = raObj.Root_Rental_Apply__c; // 源申请单
                            System.debug('zyhtest=====Root_Rental_Apply__c:'+raObj.Root_Rental_Apply__c);
                        }else {
                            raObj.Root_Rental_Apply__c = raObj.Id; // 源申请单
                            System.debug('zyhtest=====Root_Rental_Apply__c1:'+raObj.Root_Rental_Apply__c);
                        }
                        // 判断是整单分单还是部分分单
                        System.debug('zyhtest=====raIdMap.get(raObj.Id).size()='+raIdMap.get(raObj.Id).size());
                        System.debug('zyhtest=====raIdMap1.get(raObj.Id).Rental_Apply_Equipment_Set_Cnt__c='+raIdMap1.get(raObj.Id).Rental_Apply_Equipment_Set_Cnt__c);
                        if(raIdMap.get(raObj.Id).size() == raIdMap1.get(raObj.Id).Rental_Apply_Equipment_Set_Cnt__c){
                            // 如果是整单,就更新记录类型等
                            System.debug('zyhtest=====Update');
                            raObj.Id = raObj.Id;
                            raObj.Root_Rental_Apply__c = ''; // 整单不需要有源申请单
                            raZdIdList.add(raObj.Id); // 整单分单的申请单的ID
                            raUpList.add(raObj);
                        }else{
                            // 如果是部分分单,就新建申请单
                            System.debug('zyhtest=====Insert');
                            // 借用机会可视化-判断是不是分单后的数据 20240113 zyh start
                            // if(raRootMap.get(raObj.Id) == null){
                            if(raRootMap.get(raObj.Old_Rental_Apply__c) == null){ // 不是分单的没有旧申请单
                                // 可以根据当前申请单Id去做分单No后缀判断
                                if(raRootMap.get(raObj.Id) == null){
                                    num = 1;
                                } else {
                                    num = raRootMap.get(raObj.Id).size() + 1;
                                }
                                raObj.Name = raObj.Name + '_' + num;
                            }else{
                                // num = raRootMap.get(raObj.Id).size() + 1;
                                // 是分单数据的话根据原申请单去判断分单No后缀
                                num = raRootMap.get(raObj.Root_Rental_Apply__c).size() + 1;
                                raObj.Name = raObj.Old_Rental_Apply__r.Name + '_' + num;
                            }
                            // raObj.Name = raObj.Name + '_' + num;
                            // raObj.Name = raObj.Old_Rental_Apply__r.Name + '_' + num;
                            // 借用机会可视化-判断是不是分单后的数据 20240113 zyh end
                            raObj.Old_Rental_Apply__c = raObj.Id;
                            raObj.autoSplitContinue__c = true;
                            // if (String.isNotBlank(raObj.AWS_Data_Id__c)) {
                            //     raObj.AWS_Data_Id__c = raObj.AWS_Data_Id__c + 'X' + num;
                            // } else {
                            //     raObj.AWS_Data_Id__c = raObj.Name.subString(17,22) + 'X' + num;
                            // }
                            // raObj.AWS_Data_Id__c = raObj.AWS_Data_Id__c + 'X' + num;
                            raObj.Id = null;
                            if (raObj.OPDPlan__c != null) {
                                // 存放OPD来源的OPDId
                                opdSpIdList.add(raObj.OPDPlan__c);
                                // 存放OPD来源的申请单
                                raSpOpdList.add(raObj);
                            }else {
                                // 存放其他来源的申请单
                                raSpZcList.add(raObj);
                            }
                        }
                    }
                    System.debug('zyhtest=====Insert_opdSpIdList' + opdSpIdList);
                    System.debug('zyhtest=====Insert_raSpOpdList' + raSpOpdList.size());
                    if (opdSpIdList.size() > 0) {
                        List<OPDPlan__c> opdCloneList = getOpd(opdSpIdList).clone();
                        List<OPDPlan__c> opdCloneList1 = new List<OPDPlan__c>();
                        Map<String,String> opdSpMap = new Map<String,String>();
                        for (OPDPlan__c opdObj : opdCloneList) {
                            opdObj.OriginalOpdPlanRental__c = opdObj.Id;
                            opdObj.Status__c = '计划中';
                            opdObj.Id = null;
                            opdCloneList1.add(opdObj);
                        }
                        if (opdCloneList1.size() > 0){
                            System.debug('zyhtest=====opdCloneList1'+opdCloneList1);
                            FixtureUtil.withoutInsert(opdCloneList1);
                            for (OPDPlan__c opdObj : opdCloneList1) {
                                raOPDMap.put(opdObj.OriginalOpdPlanRental__c, opdObj.Id);
                            }
                            if (raOPDMap.size() > 0) {
                                for (Rental_Apply__c raopd : raSpOpdList) {
                                    raopd.OPDPlan__c = raOPDMap.get(raopd.OPDPlan__c);
                                }
                            }
                            System.debug('zyhtest=====opdCloneList1==1'+opdCloneList1);
                        }
                    }
                    // 整单分单更新
                    if (raUpList.size() > 0) {
                        FixtureUtil.withoutUpdate(raUpList);
                        List<Rental_Apply_Equipment_Set_Detail__c> raesdZdList = [SELECT Id, Rental_Apply_Equipment_Set__c,Asset__c,Rental_Apply__c
                                                                                        FROM Rental_Apply_Equipment_Set_Detail__c 
                                                                                        WHERE Rental_Apply__c in :raZdIdList];
                        if (raesdZdList.size() > 0) {
                            for (Rental_Apply_Equipment_Set_Detail__c raesdObj : raesdZdList) {
                                    // 清空排队信息 zyh start
                                    raesdObj.Queue_Conment__c = null;
                                    raesdObj.Queue_Day__c = null;
                                    raesdObj.Queue_Time__c = null;
                                    raesdObj.Queue_User__c = null;
                                // raesdObj.Queue_Day_Text__c = null;// 20210903 you SFDC-C6E3WQ 
                                    raesdObj.Queue_Number__c = null;
                                    // 清空排队信息 zyh end
                            }
                            FixtureUtil.withoutUpdate(raesdZdList);
                        }
                    }
                    // 部分分单新建
                    if (raSpZcList.size() > 0 || raSpOpdList.size() > 0) {
                        System.debug('zyhtest=====fendan2-1:'+raSpZcList);
                        raSpZcList.addAll(raSpOpdList);
                        System.debug('zyhtest=====fendan2-2:'+raSpZcList);
                        FixtureUtil.withoutInsert(raSpZcList); // 创建分单后的单子
                        System.debug('zyhtest=====fendan3:'+raSpZcList);
                        // Map<String,List<String>> raseSpUpMap = new Map<String,List<String>>(); // 多单情况
                        Map<String,String> raseSpUpMap = new Map<String,String>(); // 一对一
                        for (Rental_Apply__c spRa : raSpZcList) {
                            // 多单情况start
                            // if (raseSpUpMap.containsKey(spRa.Old_Rental_Apply__c)){
                            //     raseSpUpMap.get(spRa.Old_Rental_Apply__c).add(spRa.Id);
                            // } else {
                            //     List<String> tempList = new List<String>();
                            //     tempList.add(spRa.Id);
                            //     raseSpUpMap.put(spRa.Old_Rental_Apply__c,tempList);
                            // }
                            // 多单情况end
                            raseSpUpMap.put(spRa.Old_Rental_Apply__c,spRa.Id); // 一对一
                            raNoFdToFpList.add(spRa.Old_Rental_Apply__c);
                            System.debug('zyhtest=====raseSpUpMap'+raseSpUpMap);
                        }
 
                        if (raseSpUpMap.size() > 0){
                            List<Rental_Apply_Equipment_Set__c> tempUpRaesList = new List<Rental_Apply_Equipment_Set__c>();
                            // List<String> raesIdList = new List<String>();
                            for (Rental_Apply_Equipment_Set__c tempUpRaes : raesSpList){
                                System.debug('zyhtest=====raesSpList'+raesSpList.size());
                                if (raseSpUpMap.containsKey(tempUpRaes.Rental_Apply__c)){
                                    tempUpRaes.Old_Rental_Apply__c = tempUpRaes.Rental_Apply__c;
                                    tempUpRaes.Rental_Apply__c = raseSpUpMap.get(tempUpRaes.Rental_Apply__c);
                                    tempUpRaesList.add(tempUpRaes);
                                    raesIdList.add(tempUpRaes.Id);
                                    System.debug('zyhtest=====tempUpRaesList'+tempUpRaesList);
                                    System.debug('zyhtest=====tempUpRaesList'+tempUpRaesList.size());
                                }
                            }
                            if(raesIdList.size() > 0){
                                List<Rental_Apply_Equipment_Set_Detail__c> raesdList = [SELECT Id, Rental_Apply_Equipment_Set__c,Asset__c,Rental_Apply__c
                                                                                        FROM Rental_Apply_Equipment_Set_Detail__c 
                                                                                        WHERE Rental_Apply_Equipment_Set__c in :raesIdList];
                                if(raesdList.size() > 0){
                                    for(Rental_Apply_Equipment_Set_Detail__c raesdObj : raesdList){
                                        if (String.isNotBlank(raesdObj.Rental_Apply__c)) {
                                            raesdObj.Rental_Apply__c = raseSpUpMap.get(raesdObj.Rental_Apply__c);
                                            // 清空排队信息 zyh start
                                            raesdObj.Queue_Conment__c = null;
                                            raesdObj.Queue_Day__c = null;
                                            raesdObj.Queue_Time__c = null;
                                            raesdObj.Queue_User__c = null;
                                            // raesdObj.Queue_Day_Text__c = null;// 20210903 you SFDC-C6E3WQ 
                                            raesdObj.Queue_Number__c = null;
                                            // 清空排队信息 zyh end
                                        }
                                    }
                                }
                                FixtureUtil.withoutUpdate(raesdList); // 更新明细
                            }
                            if(tempUpRaesList.size() > 0){
                                FixtureUtil.withoutUpdate(tempUpRaesList); // 更新一览
                            }
                        }
                    }
                    
                }
            }
            
            if (raesNoFdToFpList.size() > 0) {
                List<Rental_Apply_Equipment_Set__c> raFpList = [SELECT Id,Name,Rental_Apply__c FROM Rental_Apply_Equipment_Set__c WHERE Id IN :raesNoFdToFpList];
                for (Rental_Apply_Equipment_Set__c fpRa : raFpList) {
                    raNoFdToFpList.add(fpRa.Rental_Apply__c); // 最终自动分配的申请单的Id(未去重)
                    AuthRentalApplySplitBatch.iflogLog3 += fpRa.Rental_Apply__c + ',\n';
                }
                // 借用机会可视化优化-2024-1-12 zyh start
                // for (String str : raNoFdToFpList) {
                //     if (raFpMap.containsKey(str)) {
                //         continue;
                //     } else {
                //         raFpMap.put(str , str);
                //     }
                // }
                // 借用机会可视化优化-2024-1-12 zyh end
            }
            // for (String str : raFpMap.keySet()) {
            //     raToFpList.add(str);
            // }
            // System.debug('zyhtest=====fendan2:'+raIdMap);
            
        }
        system.debug('zyhtest=====fenpeiold:' + raNoFdToFpList);
        // if (raToFpList.size() > 0) {
        if (raNoFdToFpList.size() > 0) {
            system.debug('zyhtest=====fenpei:' + raNoFdToFpList);
            // 借用机会可视化 - 单独分出调用分配的方法 2024-01-10 zyh start
            toFp(raNoFdToFpList,isFirst);
            // 借用机会可视化 - 单独分出调用分配的方法 2024-01-10 zyh end
            //自动分配raToFpList
            // 借用机会可视化 触发器走异步 zyh 20231225 start
            // if (!System.isBatch()) {
            //     // 不是Batch调用,同步进行分配 20231209 zyh add
            //     RentalFixtureSetAssignAndQueueWebService.setAssignAndQueue(raToFpList);
            // } else {
            // 借用机会可视化 触发器走异步 zyh 20231225 end
            // 借用机会可视化 - 单独分出调用分配的方法 2024-01-10 zyh start
                // 借用机会可视化--延迟推送分配/排队--zyh--start
                // DateTime startHold = Datetime.now();
                // DateTime endHold = startHold.addSeconds(60);
                // System.debug('20231212-isFirst-end'+isFirst);
                // // System.debug('20231212-whileOut-start'+startHold);
                // // System.debug('20231214-isFirst-start'+Datetime.now()+AuthRentalApplySplitBatch.isFirst);
                // if (isFirst) {
                //     System.debug('** isFirst');
                //     if (!Test.isRunningTest()) {
                //         System.enqueueJob(new RentalFixtureSetAssignAndQueueWebService(raToFpList));
                //     }
                // //     System.enqueueJob(new RentalFixtureSetAssignAndQueueWebService(raToFpList));
                // } else {
                //     System.debug('**Not isFirst');
                //     while (Datetime.now() < endHold) {
                //         // System.debug('20231212-while'+Datetime.now());
                //     }
                //     if (!Test.isRunningTest()) {
                //         System.enqueueJob(new RentalFixtureSetAssignAndQueueWebService(raToFpList));
                //     }
                // }
                // System.debug('20231212-whileOut-nowD'+Datetime.now());
                // Batch调用,异步进行分配 20231209 zyh add
            // 借用机会可视化 - 单独分出调用分配的方法 2024-01-10 zyh end
                // 借用机会可视化--延迟推送分配/排队--zyh--start
                // AuthRentalApplySplitBatch.isFirst = false;
                // System.debug('20231214-isFirst-end'+Datetime.now()+AuthRentalApplySplitBatch.isFirst);
            // 借用机会可视化 触发器走异步 zyh 20231225 start
            // }
            // 借用机会可视化 触发器走异步 zyh 20231225 end
            system.debug('zyhtest=====raToFpList:' + raNoFdToFpList.size());
            // RentalFixtureSetAssignAndQueueWebService rfsAndQ = new RentalFixtureSetAssignAndQueueWebService();
            // rfsAndQ.setAssignAndQueue(raToFpList);
        }
    }
    /**
    * @description 获取新建申请单时需要复制的字段
    **/
    private static List<Rental_Apply__c> getRa(List<String> idList) {
        return [SELECT Id,
                     OwnerId,
                     Status__c,
                     Cancel_Reason__c,
                     Old_Rental_Apply__c,
                     Old_Rental_Apply__r.Name,
                     Split_Apply_Reason__c,
                     // ------ 备品借出申请の詳細 ------
                     Name,                            // 申请No.
                     ToAgency__c,                     // 分配办事处 20201117 ljh add
                     SalesdeptSelect__c,              // 申请者销售本部 20201117 ljh add
                     Salesdept__c,                    // 申请者销售本部
                     WorkPlace__c,                    // 申请者办事处
                     ApplyPerson_Phone__c,            // 申请人电话
                     Loaner_centre_mail_address__c,   // 备品中心的邮箱地址
                     Select_Status__c,                // 分配状态
                     Queue_Status__c,                 // 排队状态
                     Rental_Assistant__c,             // 备品助理
                     RA_Status__c,                    // 备品借出状态
                     // OLY_OCM-504 不拷贝追加备品审批状态
                     //Add_Approval_Status__c,          // 追加备品审批状态
                     Person_In_Charge__c,             // 备品出借担当
                     applyUser__c,                    // 操作者
                     Foul_Points__c,                  // 备品出借担当累计犯规点数
                    //  First_Satisfied__c,              // 首满
                     loaner_Status__c,                // 出库状态
                     Cross_Region_Assign__c,          // 跨区域分配
                     // ------ 备品借用方 ------
                     Hospital__c,                     // 医院
                     Strategic_dept__c,               // 战略科室
                     OCM_dept_category__c,            // 战略科室分类
                     Account__c,                      // 科室
                     OCM_segmentation__c,             // OCM分类
                     Loaner_medical_Staff__c,         // 科室负责人
                     Phone_number__c,                 // 联系电话
                        Phone_Number_Encrypt__c,                   // 20220401 PI COPY by Bright
                     // ------ 借用备品的目的 ------
                     Demo_purpose1__c,                // 使用目的1
                     demo_purpose2__c,                // 使用目的2
                     // OLY_OCM-669 Start
                     Hope_Lonaer_date_Num__c,         // 希望借用天数
                     // OLY_OCM-669 End
                     Product_category__c,             // 产品分类(GI/SP)
                     Campaign__c,                     // 学会
                     //OPD__c,                          // OPD报告书   2021-12-28  mzy  OPD计划状态改善
                     OPD__c,                          // 20231030 备品智能化 zyh
                     QIS_number__c,                   // QIS
                     QIS_ID_Line__c,                  // QIS的ID值
                     QISRepair__c,                    // QIS修理
                     Demo_purpose_text__c,            // 申请理由
                     Repair__c,                       // 修理
                     Follow_UP_Opp__c,                // 跟进询价1
                     Follow_pcl_status2__c,           // 跟进询价状态
                     Follow_pcl_status2_Text__c,      // 跟进询价状态(申请时)
                     Follow_Inquiry_Level_Text__c,    // 询价等级(申请时) // 20211008 ljh SWAG-C7LCH2
                     Follow_Inquiry_Stage_Text__c,    // 询价阶段(申请时) // 20211008 ljh SWAG-C7LCH2
                     Statu_Achievements__c,           // 注残
                     Shipping_Finished_Day_Func__c,   // 最终发货日(已购待货)
                     CrinicalTrialName__c,            // 临床研究项目名称
                     DB_loaner_request__c,            // MA本部审核合同编号
                     // ------ 备品希望借出期限 ------
                     Request_shipping_day__c,         // 希望到货日
                     Return_dadeline_final__c,        // 最新预定归还日
                     Request_return_day__c,           // 预定归还日
                     Lonaer_date_not_working_date__c, // 希望借用天数
                     // ------ 发送信息 ------
                     Shipment_address__c,             // 办事处地址
                     Dealer__c,                       // 经销商
                     Loaner_received_staff__c,        // 收件者姓名 (销售或FSE)
                     Shippment_adress_detail__c,      // 发送办事处地址详细
                     direct_shippment_address__c,     // 直送发送地址
                        Direct_Shippment_Address_Encrypt__c,                   // 20220401 PI COPY by Bright
                     direct_send__c,                  // 发送方
                     pickup_time__c,                  // 自提时间
                     Loaner_received_staff_phone__c,  // 收件者电话(销售或FSE)
                     Post_Code__c,                    // 邮编
                     // ApprovedNo_Delivery__c,          // 决裁编号(发货时) 20220224 ljh add
                     // Approved_State_Delivery__c,      // 决裁状态(发货时)20220224 ljh add 
                     ApprovedNo_Create__c,            // 决裁编号(创建时) 20220301 ljh add
                     Approved_State_Create__c,        // 决裁状态(创建时) 20220301 ljh add
                     Response__c,                     // 应答沟通
                     Request_demo_time__c,            // 申请时间
                     Request_approval_time__c,        // 批准时间(申请提交时间)
                     Request_answer_time__c,          // 备品首次分配时间
                     Application_accept_time__c,      // 应答沟通申请受理时间(回答时间)
                     OPDPlan__c,                      // OPD计划
                     RecordTypeId,                    // 记录类型 1732 ljh add 20210528
                     Root_Rental_Apply__c,            // 源申请单(root) 1732 ljh add 20210609
                     First_level_actual_approver__c,  //一级实际审批人 20210908 ljh SFDC-C6A97F add
                     Second_level_actual_approver__c, //二级实际审批人 20210908 ljh SFDC-C6A97F add
                     OPDManager__c,                   // 20210926 ljh add SFDC-C6A97F add
                     OPDBuchang__c,                   // 20220722 zyh add SWAG-CGG7X9 add
                     Rental_Apply_Equipment_Set_Cnt__c, // 20231025 zyh add
                     NoDirectReason__c,               // 20231110 ljh DB202310484652 add
                     NoDirectNoteReason__c,           // 20231110 ljh DB202310484652 add
                     Medical_Institution_Address__c,  // 20231227 ljh DB202312530994 add
                     Medical_Institution_Address_sup__c,// 20231227 ljh DB202312530994 add
                    //  AWS_Data_Id__c,
                     // OLY_OCM-583 Start 分单时增加拷贝字段GI本部区分 
                     GI_Diff__c                       // GI本部区分
                     // OLY_OCM-583 End
                  FROM Rental_Apply__c
                 WHERE Id IN :idList];
     }
     
    private static List<OPDPlan__c> getOpd(List<String> idList) {
        return [SELECT Id,
                    OwnerId, //所有人
                    //Status__c, //状态
                    OPDPlan_ImplementDate__c, //OPD计划实施日期
                    OPDPlan_ImplementDate_temp__c, // OPD计划实施日期(Temp)
                    Activity_Type2__c, //拜访区分
                    Account_Laboratory__c, //科室
                    //OPDPlan_Report__c, //报告书  //2021-12-28  mzy OPD计划改善 
                    Campaign__c, //学会
                    Related_Opportunity1_ID__c, //跟进询价ID1
                    Related_Opportunity2_ID__c, //跟进询价ID2
                    NoOpp_Reason__c,//无询价申请理由
                    OPDType__c, //OPD计划来源
                    SalesManager__c, //推广经理
                    SalesManager_Txt__c, //推广经理(文本)
                    PlanProdDetail__c, //计划出借备品信息
                    DelayCancel_Reason__c, //延期取消理由
                    RentalReson__c, //出借目的     
                    noReportStatus__c, //无报告状态  
                    ModelLendingProduct__c, //模型出借产品  
                    ModelLending__c, //模型出借产品型号  
                    CorrespondingRepairNo__c, //对应修理维修NO
                    AttachmentCertificate__c, //附件证明
                    Meeting_Cooperate__c,  //会议合作本部1
                    Meeting_Cooperate2__c, //会议合作本部2
                    Meeting_Cooperate3__c, //会议合作本部3
                    Meeting_Cooperate4__c, //会议合作本部4
                    IF_Approved__c, // 是否申请决裁 20220218 ljh add
                    Approved_No__c, // 决裁编码 20220218 ljh add
                    Approved_Status__c,// 决裁状态 20220218 ljh add
                    EquipmentFromOpp__c, // 报价外产品 20240110 zyh add
                    EquipmentNotFromOpp__c, // 报价内产品  20240110 zyh add
                    PlanProdDetailSys__c, // 计划出借战略产品  20240110 zyh add
                    PlanProdDetailSysT__c, // 计划出借战略产品  20240110 zyh add
                    AdditionalSupport__c, //原OPD计划(追加配套用)
                    EquipmentFromOppNum__c,         //报价内产品数量 20240204 sx 报价外产品数量/报价内产品数量 赋值 
                    EquipmentNotFromOppNum__c       //报价外产品数量 20240204 sx 报价外产品数量/报价内产品数量 赋值 
                      FROM OPDPlan__c WHERE Id IN :idList];
    }
    /**
     * 从 Label.OCM_Management_Province_Mapping
     * 取出 存放地 → 省 的 Map
     */
    private static Map<String, String> getOcmMgtProvMap() {
        Map<String, String> ocm_Map = new Map<String, String>();
        String OCM_Management_Province_Mapping = System.Label.OCM_Management_Province_Mapping;
        for (String str : OCM_Management_Province_Mapping.split(',')) {
            List<String> strList = str.split(':');
            ocm_Map.put(strList[1].trim(), strList[0].trim());
        }
        return ocm_Map;
    }
 
    /**
     * 单独拎出分配方法
     * 2024-01-10 zyh
     */
    private static void toFp(List<String> raIdFpList,Boolean isFirst) {
        // 借用机会可视化--延迟推送分配/排队--zyh--start
        DateTime startHold = Datetime.now();
        // 借用机会可视化_延迟推送改为自定义标签 20240113 zyh start
        // DateTime endHold = startHold.addSeconds(60);
        Integer num = 60;
        if (String.isNotBlank(System.Label.SplitToFp)) {
            System.debug('System.Label.SplitToFp===' + System.Label.SplitToFp);
            num = Integer.valueOf(System.Label.SplitToFp);
        }
        DateTime endHold = startHold.addSeconds(num);
        // 借用机会可视化_延迟推送改为自定义标签 20240113 zyh end
        if (isFirst) {
            System.debug('** isFirst');
            if (!Test.isRunningTest()) {
                System.enqueueJob(new RentalFixtureSetAssignAndQueueWebService(raIdFpList));
            }
        } else {
            System.debug('**Not isFirst');
            while (Datetime.now() < endHold) {
 
            }
            if (!Test.isRunningTest()) {
                System.enqueueJob(new RentalFixtureSetAssignAndQueueWebService(raIdFpList));
            }
        }
    }
}