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
global without sharing class ConsumApplyWebService {
    // TODO please use public okStatus
    public final static Integer okStatus = 99;
 
    // 备品借出时间check
    @AuraEnabled
    WebService static String approvalCheck(String ConsumApplyId) {
        try {
            // check结果
            String returnStr = '';
 
            //备品借出申请
            Consum_Apply__c[] ConsumApply = [select Id
                                                //,repair__r.Repair_Final_Inspection_Date__c
                                                ,Bollow_Date__c
                                                //,repair__r.Return_Without_Repair_Date__c
                                                ,CreatedDate
                                                ,Consum_Apply_Equipment_Set_Detail_Cnt__c
                                                //,Prepare_Day__c 
                                            from Consum_Apply__c 
                                            where Id = :ConsumApplyId];
            if (ConsumApply.size() == 0) {
                returnStr = '没有备品借出申请,请确认。';
                return returnStr;
            }
            Consum_Apply__c ra = ConsumApply[0];
            if (ra.Consum_Apply_Equipment_Set_Detail_Cnt__c <= 0) {
                returnStr = '没有耗材一览,请确认。';
                return returnStr;
            }
 
            String message = '';
            List<Consum_Apply_Equipment_Set_Detail__c> caesdList = [SELECT Id
                        , Asset__c
                        , Consum_Can_Request_approval_Date__c
                        , Fixture_Model_No_F__c
                     FROM Consum_Apply_Equipment_Set_Detail__c
                    WHERE Consum_Apply__c = :ConsumApplyId
                      AND Cancel_Select__c = false
                    ORDER BY Id];
            for (Consum_Apply_Equipment_Set_Detail__c caesd : caesdList) {
                caesd.InputCheck__c = true;
                if (String.isBlank(caesd.Asset__c)) {
                    return '有没有暂定分配的明细,不能提交申请';
                }
                message += caesd.Fixture_Model_No_F__c + '\n';
            }
            message = message.removeEnd('\n');
            update caesdList;
            ra.Consum_Apply_Detail_ForEmail__c = message;
            if (Trigger.isExecuting == false) {
                update ra;
            }
            else {
                return '1' + message;
            }
            //20231101  ymh  SIT bug add  start
        }catch (DmlException de) {
            String errormessage = de.getDmlMessage(0);
            return errormessage; 
        } catch (Exception e) {
            String errormessage = e.getMessage();
            return errormessage;
        }
        //20231101  ymh  SIT bug add  end
 
        return '1';
    }
 
    WebService static String getwkDate(String date1, String number1) {
        if (String.isBlank(date1)) {
            return '没有时间,无法检测工作日';
        }
        else {
            date1 = date1.replaceAll('/', '-');
        }
        Date d = Date.valueOf(date1);
        Map<Date, OlympusCalendar__c> calendarMap = Consum_ApplyUtil.getOlympusCalendarMAp(d, d);
        OlympusCalendar__c can = calendarMap.get(d);
        Integer num = Integer.valueOf(number1);
        Integer num1 = 1;
        String key = 'After';
        if (num < 0) {
            key = 'Before';
            num1 = -1;
        }
        String api = key + '_' +  (num * num1) + '_WorkDay__c';
        if (can.get(api) != null) {
            return ((Date)can.get(api)).format();
        }
        else {
            return Consum_ApplyUtil.getWD_addday(d, num).format();
        }
    }
 
    // 分配验证
    Webservice static String AssignBtn(String Rid){
        List<Consum_Apply__c> raList = [select Id
                                              //,repair__r.Repair_Final_Inspection_Date__c
                                              //,repair__r.Return_Without_Repair_Date__c
                                          from Consum_Apply__c
                                         where id = :Rid];
        if(raList.size()>0){
            //Consum_Apply__c Ra = raList[0];
            //if(Ra.repair__r.Repair_Final_Inspection_Date__c!=null){
            //    return '修理最终检测日不为空,不能分配';
            //}else if(Ra.repair__r.Return_Without_Repair_Date__c !=null){
            //    return '未修理归还日不为空,不能分配';
            //}else{
                return 'Fin';
            //}
        }else{
            return '该借出申请不存在';
        }
    }
 
    Webservice static String postponeCheck(String endDate, Integer d) {
        Date before5day = getWD_addday(date.parse(endDate), d);
        if (Date.today() > before5day) {
            return System.Label.EquipmentRentalPostponeOverDeadline;
        }
        return 'OK';
    }
 
    // FIXME 仇yj please use public
    public static Date getWD_now(Date d) {
        List<OlympusCalendar__c> workday = [
                select Id, Date__c, IsWorkDay__c 
                  from OlympusCalendar__c 
                 where Date__c >= :d 
                   and IsWorkDay__c = 1
                 order by Date__c
                 limit 1];
        Date selectDate = workday[0].Date__c;
        return selectDate;
    }
 
    // FIXME 仇yj please use public
    public static Date getWD_addday(Date d, Integer i) {
        if (d == Date.valueOf('4000-12-31')) {
            return d;
        }
        if (i >= 0) {
            List<OlympusCalendar__c> workday = [
                    select Id, Date__c, IsWorkDay__c 
                      from OlympusCalendar__c 
                     where Date__c >= :d 
                       and IsWorkDay__c = 1
                     order by Date__c
                     limit :(i+1)];
            Date selectDate = workday[i].Date__c;
            return selectDate;
        } else {
            i = Math.abs(i);
            List<OlympusCalendar__c> workday = [
                    select Id, Date__c, IsWorkDay__c 
                      from OlympusCalendar__c 
                     where Date__c <= :d 
                       and IsWorkDay__c = 1
                     order by Date__c desc
                     limit :(i+1)];
            Date selectDate = workday[i].Date__c;
            return selectDate;
        }
    }
 
    // pd:0代表当天,1代表第二天
    public Map<Date, Map<String, String>> getDateMap(Date sd, Date ed, Integer pd) {
        Map<Date, Map<String, String>> returnMap = new Map<Date, Map<String, String>>();
        List<OlympusCalendar__c> workdayList = [
                select Id, Date__c, IsWorkDay__c 
                  from OlympusCalendar__c 
                 where Date__c >= :sd
                   and Date__c <= :ed.addDays(15 + pd)                  // +15 的目的是、为了取得ed の 下一个工作日
                 order by Date__c];
        for (Integer i = 0; i < workdayList.size(); i++) {
            OlympusCalendar__c wd = workdayList[i];
            if (wd.Date__c > ed) break;
            Integer nextWordDays = 0;
            Map<String, String> valueMap = new Map<String, String>();
            valueMap.put('WorkDay', String.valueOf(wd.IsWorkDay__c));
            Integer maxJ = 15 + i + pd;
            if (maxJ > workdayList.size()) maxJ = workdayList.size();
            for (Integer j = i; j < maxJ; j++) {
                OlympusCalendar__c oc = workdayList[j];
                if (oc.IsWorkDay__c == 1) {
                    nextWordDays++;
                    if (nextWordDays == pd + 1) {
                        valueMap.put('Next', String.valueOf(oc.Date__c));
                        break;
                    }
                }
            }
 
            returnMap.put(wd.Date__c, valueMap);
        }
        return returnMap;
    }
 
    WebService static String ConsumApplyCancel(String raid, Boolean autoCancel) {
        List<Consum_Apply__c> raList = [select id
                                             , Shipment_request_Cnt__c
                                             , Status__c
                                             , RA_Status__c
                                             //, Shippment_loaner_cnt__c
                                             , Loaner_cancel_request__c
                                             , Arrival_wh_cnt__c
                                             , Cancel_Reason__c
                                          from Consum_Apply__c
                                         where id = :raid];
        List<Consum_Apply_Equipment_Set__c> raesList = [select id
                                                             //, StockDown_time__c
                                                          from Consum_Apply_Equipment_Set__c
                                                         where Consum_Apply__c = :raid
                                                           and Cancel_Select__c = false];
 
        List<Consum_Apply_Equipment_Set__c> updList = new List<Consum_Apply_Equipment_Set__c>();
        // List<Consum_Apply_Equipment_Set_Detail__c> delList = new List<Consum_Apply_Equipment_Set_Detail__c>();
        Set<Id> esIdSet = new Set<Id>();
 
        if (raList.size() <= 0) {
            return '备品申请书不存在。';
        }
        Consum_Apply__c ra = raList[0];
        if (ra.Status__c == '取消') {
            return '备品申请书已经取消。';
        }
        if (ra.Status__c == '删除') {
            return '备品申请书已经删除。';
        }
        if (ra.RA_Status__c == FixtureUtil.raStatusMap.get(FixtureUtil.RaStatus.Yi_Chu_Ku.ordinal()) || ra.Arrival_wh_cnt__c > 0) {
            return '备品已经出库,不能取消。';
        }
 
        User loginUser = [Select Id, Name, ProfileId From User where Id = :Userinfo.getUserId()];
        if(loginUser.ProfileId != System.Label.ProfileId_SystemAdmin 
                && loginUser.ProfileId != System.Label.ProfileId_EquipmentCenter 
                    && !System.Label.ProfileId_EquCenCheckAndDepot.contains(loginUser.ProfileId)
                        && !System.Label.ProfileId_EquCenAdmin.contains(loginUser.ProfileId)
                            && loginUser.ProfileId != System.Label.ProfileId_IThelp
                                && ra.Shipment_request_Cnt__c > 0
        ){
            return '不能取消申请,请联系备品中心窗口取消。';
        }
 
        if (autoCancel == false && String.isBlank(ra.Cancel_Reason__c)) {
            return '必须输入取消理由。';
        }
 
        if (autoCancel) {
            if (ra.Status__c == '申请中') {
                List<Approval.ProcessWorkitemRequest> requests = new List<Approval.ProcessWorkitemRequest> ();
                Map<ID,ProcessInstance> piMap = New Map<ID,ProcessInstance>([Select Id from ProcessInstance where TargetObjectId = :ra.Id]);
                for(ProcessInstanceWorkItem wi : [Select Id from ProcessInstanceWorkItem where ProcessInstanceId IN :piMap.keySet()]){
                    Approval.ProcessWorkitemRequest req2 = new Approval.ProcessWorkitemRequest();
                    req2.setAction('Removed');
                    req2.setWorkitemId(wi.Id);
                    requests.add(req2);
                }
                if (requests.size() > 0) {
                    Approval.ProcessResult[] processResults = null;
                    processResults = Approval.process(requests, true);
                }
            }
            ra.Cancel_Reason__c = '主动取消';
            ra.Loaner_cancel_request__c = '本申请审批超时自动关闭申请单';
        }
        ra.Status__c = '取消';
 
        Savepoint sp = Database.setSavepoint();
        try {
            Set<Id> selectAssetIdSet = new Set<Id>();
            for (Consum_Apply_Equipment_Set_Detail__c caesd : [SELECT Id, Asset__c
                                                                 FROM Consum_Apply_Equipment_Set_Detail__c
                                                                WHERE Consum_Apply__c = :raid]
            ) {
                if (String.isNotBlank(caesd.Asset__c)) {
                    selectAssetIdSet.add(caesd.Asset__c);
                }
            }
            if (selectAssetIdSet.size() > 0) {
                List<Asset> assList = [SELECT Id
                             FROM Asset
                            WHERE Id = :selectAssetIdSet FOR UPDATE];
            }
            update ra;
        } catch (Exception ex) {
            Database.rollback(sp);
            return ex.getMessage();
        }
 
        return '1';
    }
 
    // 一覧単位
    WebService static String setRaesShipment_request(String raesid) {
      return setShipment_requests(null, raesid);
    }
 
    // 申請書単位
    @AuraEnabled
    WebService static String setShipment_request(String raid) {
      System.debug(raid);
      return setShipment_requests(raid, null);
    }
 
    //出库指示按钮js一次最多更新200条,所以改在WebService做出库指示
    WebService static String setShipment_requests(String raid, String raesid) {
    Savepoint sp = Database.setSavepoint();
    try {
        System.debug(raid);
        //一览情况下检索一览对应的申请书Id,soql子查询不能和主查询是同一个表,单独检索一次
        if (String.isBlank(raid)) {
            List<Consum_Apply_Equipment_Set__c> raesList = [select Id, Consum_Apply__c from Consum_Apply_Equipment_Set__c where id = :raesid];
            if (raesList.size() > 0) {
                raid = raesList[0].Consum_Apply__c;
            } else {
                //应该不会到这里
                return '没有可以出库指示的一览';
            }
        }
        //String soql = 'SELECT Id, Wei_Assigned_Cnt__c, Yi_Assigned_Cnt__c'
        //        + ' FROM Consum_Apply_Equipment_Set__c '
        //        + ' WHERE Shippment_loaner_time2__c <> null '
        //        + ' AND Consum_Apply__c = :raid '
        //        + ' ORDER BY Id' ;
        //List<Consum_Apply_Equipment_Set__c> shippedRaesList = Database.query(soql);
        //String raesStrShipped = '';
        //for (Consum_Apply_Equipment_Set__c raes : shippedRaesList) {
        //    raesStrShipped += raes.Id;
        //    if (raes.Wei_Assigned_Cnt__c > 0 || raes.Yi_Assigned_Cnt__c == 0) {
        //        return '不能做出库指示,需要分单后再操作';
        //    }
        //}
 
        //Srring soql = "SELECT Id FROM Consum_Apply_Equipment_Set_Detail__c WHERE Consum_Apply__c = '{!Consum_Apply__c.Id}' AND Cancel_Select__c = false AND Consum_Num__c > 0 AND Consum_Apply_Equipment_Set__r.Wei_Assigned_Cnt__c = 0 AND Consum_Apply_Equipment_Set__r.Yi_Assigned_Cnt__c > 0 AND Shipment_request__c  = false";
        String soql = 'SELECT Id, Consum_Apply__c, Consum_Apply_Equipment_Set__c, Asset__c, Select_Time__c'
                + ' FROM Consum_Apply_Equipment_Set_Detail__c '
                + ' WHERE ' + (String.isNotBlank(raesid) ? 'Consum_Apply_Equipment_Set__c = :raesid ' : 'Consum_Apply__c = :raid ')
                + ' AND Cancel_Select__c = false '
                // + ' AND Consum_Num__c > 0 '
                //+ ' AND Consum_Apply_Equipment_Set__r.Wei_Assigned_Cnt__c = 0 '
                //+ ' AND Consum_Apply_Equipment_Set__r.Yi_Assigned_Cnt__c > 0 '
                + ' AND Shipment_request__c  = false'
                + ' ORDER BY Consum_Apply_Equipment_Set__c, Id';
        System.debug(soql);
        System.debug(raesid);
        System.debug(raid);
        List<Consum_Apply_Equipment_Set_Detail__c> raesds = Database.query(soql);
 
        Map<Id, List<String>> Consum_Asset_SerialNumberMap = new Map<Id, List<String>>();
 
        if (raesds.size() < 1) {
            return '没有可以出库指示的明细';
        } else {
            //Set<Id> raesSet = new Set<Id>();
            //String raesStrRequest = '';
            for (Consum_Apply_Equipment_Set_Detail__c raesd : raesds) {
                //if (false == raesSet.contains(raesd.Consum_Apply_Equipment_Set__c)) {
                //    raesSet.add(raesd.Consum_Apply_Equipment_Set__c);
                //    raesStrRequest += raesd.Consum_Apply_Equipment_Set__c;
                //}
                if(raesd.Asset__c == null || raesd.Select_Time__c == null){
                    return '申请单内存在未分配的耗材,请分配或分割申请单';
                }
                raesd.Shipment_request_time2__c = Datetime.now();
                raesd.Shipment_request__c = true;
            }
            // 出库后, 再次做出库指示的一览, 一定要个出过库的一览一样
            //if (false == String.isBlank(raesStrShipped) && raesStrRequest != raesStrShipped) {
            //    return '不能做出库指示,需要分单后再操作';
            //}
        }
 
        Consum_Apply__c ra = new Consum_Apply__c(Id = raesds[0].Consum_Apply__c, Status__c = '已出库指示');
        update ra;
        Database.SaveResult[] results = Database.update(raesds);
        Database.SaveResult dmlResult = results[0];
        if (dmlResult.isSuccess()) {
            //明细更新成功后才更新一览的Consum_Asset_SerialNumber__c
            soql = 'SELECT Id, SerialNumber_text__c, Consum_Apply_Equipment_Set__c '
                    +'FROM Consum_Apply_Equipment_Set_Detail__c '
                    +'WHERE Consum_Apply__c = \'' + raesds[0].Consum_Apply__c + '\''
                    +'AND Shipment_request_time2__c != null '
                    +'AND Shipment_request__c = true '
                    +'AND SerialNumber_text__c != null '
                    +'ORDER BY Consum_Apply_Equipment_Set__c ';
 
 
            List<Consum_Apply_Equipment_Set_Detail__c> raesdSerialNumbers = Database.query(soql);
 
            for (Consum_Apply_Equipment_Set_Detail__c raesd : raesdSerialNumbers) {
 
                if (!Consum_Asset_SerialNumberMap.containsKey(raesd.Consum_Apply_Equipment_Set__c)) {
                    // Asset__r.SerialNumber + ','
                    Consum_Asset_SerialNumberMap.put(raesd.Consum_Apply_Equipment_Set__c, new List<String>());
                }
                Consum_Asset_SerialNumberMap.get(raesd.Consum_Apply_Equipment_Set__c).add(raesd.SerialNumber_text__c);
            }
 
            List<Consum_Apply_Equipment_Set__c> raess = new List<Consum_Apply_Equipment_Set__c>();
            for (Id key : Consum_Asset_SerialNumberMap.keySet()) {
                raess.add(new Consum_Apply_Equipment_Set__c(Id = key,
                        Consum_Asset_SerialNumber__c = ',' + String.join(Consum_Asset_SerialNumberMap.get(key), ',') + ','));
            }
            if (!raess.isEmpty()) {
                update raess;
            }
            return '状态更新到已出库指示';
        } else {
            Database.rollback(sp);
            Database.Error emsg = dmlResult.getErrors()[0];
            return 'failed to update:' + emsg.getFields() +  ' ' + emsg.getMessage();
        }
    } catch (Exception ex) {
        Database.rollback(sp);
        return ex.getMessage();
    }}
 
    /**
     * 注残申请备品的管控
     */
    WebService static String ConsumApplyCheckForSAoneEle(String SaID) {
        Statu_Achievements__c Sac = [select id,
            SalesChannel__c,
            Opportunity__r.Sales_Root__c,
            Status_1__c,
            Status_2_Formula__c,
            Opp_Number__c,
            ContractNO__c,
            FirstApproveDate__c,
            CreatedDate,
            X30_Deposit_Day__c,
            Deposit_In_Full_Day__c,
            DeliveryDate__c
        from Statu_Achievements__c where id = :SaID];
        if(Sac.Opportunity__r.Sales_Root__c == '販売店'){
            if(Sac.Opp_Number__c.contains('GI')||Sac.Opp_Number__c.contains('BF')||Sac.Opp_Number__c.contains('ET') ){
                if(Sac.Status_1__c == '注残' && (Sac.Status_2_Formula__c == '12 已订货・付全款'||Sac.Status_2_Formula__c == '13 待发货')){
                    if((Date.today().addDays(-30)>Sac.Deposit_In_Full_Day__c)&&Sac.DeliveryDate__c == null){
                        return 'Fin';
                    }else{
                        return '经销商内科订单不在申请期内,不能申请备品';
                    }
                }else{
                    return '经销商内科订单状态不符合备品申请资格,不能申请备品';
                }
            }else if(Sac.Opp_Number__c.contains('SP')){
                if(Sac.Status_1__c == '注残' && (Sac.Status_2_Formula__c == '11 已订货・付订金'||Sac.Status_2_Formula__c == '12 已订货・付全款'||Sac.Status_2_Formula__c == '13 待发货')){
                    if((Date.today().addDays(-60)>Sac.X30_Deposit_Day__c )&&Sac.DeliveryDate__c == null){
                        return 'Fin';
                    }else{
                        return '经销商SP订单不在申请期内,不能申请备品';
                    }
                }else{
                    return '经销商SP订单状态不符合备品申请资格,不能申请备品';
                }
            }else{
                return '注残销售渠道类别不在可申请备品范围内';
            }
        }else if(Sac.Opportunity__r.Sales_Root__c == 'OCM直接販売'){
            if(Sac.Opp_Number__c.contains('GI')||Sac.Opp_Number__c.contains('BF')||Sac.Opp_Number__c.contains('ET')){
                if(Sac.Status_1__c == '注残' && (Sac.Status_2_Formula__c == '09 已录入订单未付款'||Sac.Status_2_Formula__c == '10 库存已预留・未付款'||Sac.Status_2_Formula__c == '11 已订货・付订金'||Sac.Status_2_Formula__c == '12 已订货・付全款'||Sac.Status_2_Formula__c == '13 待发货')){
                    if((Date.today().addDays(-30)>Sac.FirstApproveDate__c )&&Sac.DeliveryDate__c == null){
                        return 'Fin';
                    }else{
                        return 'OCM直销内科订单不在申请期内,不能申请备品';
                    }
                }else{
                    return 'OCM直销内科订单状态不符合备品申请资格,不能申请备品';
                }
            }else if(Sac.Opp_Number__c.contains('SP')){
                    if(Sac.Status_1__c == '注残' && (Sac.Status_2_Formula__c == '09 已录入订单未付款'||Sac.Status_2_Formula__c == '10 库存已预留・未付款'||Sac.Status_2_Formula__c == '11 已订货・付订金'||Sac.Status_2_Formula__c == '12 已订货・付全款'||Sac.Status_2_Formula__c == '13 待发货')){
                        if((Date.today().addDays(-60)>Sac.FirstApproveDate__c )&&Sac.DeliveryDate__c == null){
                            return 'Fin';
                        }else{
                            return 'OCM直销SP订单不在申请期内,不能申请备品';
                        }
                    }else{
                        return 'OCM直销SP订单状态不符合备品申请资格,不能申请备品';
                    }
                }else{
                    return '注残销售渠道类别不在可申请备品范围内。';
                }
        }else{
            return '销售渠道未知,不能新建';
        }
    }
 
    @AuraEnabled
    Webservice static String all_received_fse(String caId) {
        Savepoint sp = Database.setSavepoint();
        try {
            List<Consum_Apply_Equipment_Set_Detail__c> caesdList = [SELECT Id
                        , RAESD_Status__c
                        , Loaner_received_time__c
                        , Consum_Apply__r.Loaner_received_ng_num__c
                     FROM Consum_Apply_Equipment_Set_Detail__c
                    WHERE DeliverySlip__c !=null
                      AND Cancel_Select__c = false
                      AND Consum_Apply__c = :caId];
            if (caesdList.size() == 0) {
                return '未发货';
            }
            else if (caesdList[0].Consum_Apply__r.Loaner_received_ng_num__c == 0) {
                return '现场已经全部收到实物了';
            }
            else {
                List<Consum_Apply_Equipment_Set_Detail__c> caesdL = new List<Consum_Apply_Equipment_Set_Detail__c>();
                for (Consum_Apply_Equipment_Set_Detail__c caesd : caesdList) {
                    if (caesd.Loaner_received_time__c == null && caesd.RAESD_Status__c=='已出库') {
                        Consum_Apply_Equipment_Set_Detail__c caesd1 = new Consum_Apply_Equipment_Set_Detail__c();
                        caesd1.Id = caesd.Id;
                        caesd1.Received_Confirm__c = 'OK';
                        caesdL.add(caesd1);
                    }
                }
                if (caesdL.size() > 0) {
                    update caesdL;
                }
                return '现场已全部收货';
            }
        }
        catch (Exception e) {
            Database.rollback(sp);
            return e.getMessage();
        }
    }
 
    @TestVisible private static void test() {
        if (false == Test.isRunningTest()) return;
        
    }
 
    
}