高章伟
2022-02-24 2aa8da8af66aa8ae00f25831aed6bb0364176e7b
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
global without sharing class RentalApplyEquipmentSetWebService {
 
    //借出备品一览单位重新分配
    WebService static String rentalApplyEquipmentSetReassign(Id raesID) {
 
        Savepoint sp = Database.setSavepoint();
        try{
 
            //ToDo IndexFromUniqueKey__c要清除吗
            //applyUser__c loginuser?
            List<Rental_Apply_Equipment_Set__c> raess = [Select Id, Loaner_centre_mail_address__c, Fixture_Set__c,
                    Rental_Apply__c, Irreplaceable_flag__c, Same_Accessory_flag__c, Received_Confirm__c, IndexFromUniqueKey__c,
                    Rental_Num__c, Groupby_SortInt__c, Old_Rental_Apply__c
                    From Rental_Apply_Equipment_Set__c
                    Where id = :raesID AND Cancel_Select__c = false
                    for update];
            if (raess.isEmpty()) {
                return '没有检索到可以重新分配的借出备品配套一览';
            }
 
            if (raess[0].Received_Confirm__c != 'NG') {
                return '这个按钮只能重新分配现场收到确认结果NG的一览';
            }
            
            // Lock申请书
            List<Rental_Apply__c> ras = [SELECT Id
                                          FROM Rental_Apply__c
                                         WHERE Id = :raess[0].Rental_Apply__c
                                         FOR UPDATE];
            if (ras.isEmpty()) {
                return '没有检索到备品借出申请';
            }
            Rental_Apply__c ra = ras[0];
            // // 20211125 ljh 排队 重新分配的配套自动带有“插队”标识 add Is_Body__c
            List<Rental_Apply_Equipment_Set_Detail__c> raesds = [Select Id,StockDown__c, Rental_Apply__c,
                    Fixture_Set_Detail__c, IndexFromUniqueKey__c, Rental_Apply_Equipment_Set__c,Is_Body__c, 
                    Rental_Num__c, IndexFromUniqueKey_Text__c
                    From Rental_Apply_Equipment_Set_Detail__c
                    Where Rental_Apply_Equipment_Set__c = :raesID
                    // RAESD_SortInt_F__c -> IndexFromUniqueKey_Text__c(备品配套明细.SortInt__c)
                    // 1应该是主体
                    AND Cancel_Select__c = false order by IndexFromUniqueKey_Text__c ASC nulls last];
 
            if (raesds.isEmpty()) {
                return '没有明细或者全部取消了不能重新分配';
            }
            // 防止一览更新后发送全部归还邮件   OLY_OCM-409
            ra.NotSendMessageFlag__c = true;
            update ra;
 
            Rental_Apply_Equipment_Set__c craes = raess[0];
            //OLY_OCM-163 只设置NG_Select_Again__C和Cancel_Select__c取消理由取消时间不设值
            craes.Cancel_Select__c = true;
            craes.NG_Select_Again__C = true;
            // craes.Cancel_Reason__c = '重新分配';
            // craes.Loaner_cancel_Remarks__c = '申请者收货NG';
            update craes;
 
            Rental_Apply_Equipment_Set__c raes = new Rental_Apply_Equipment_Set__c();
            raes.Rental_Apply__c = craes.Rental_Apply__c;
            raes.Fixture_Set__c = craes.Fixture_Set__c;
            raes.Canceled__c = craes.Id;
            raes.Canceled_Id__c = craes.Id;
            raes.IndexFromUniqueKey__c = craes.IndexFromUniqueKey__c;
            raes.Rental_Num__c = craes.Rental_Num__c;
            raes.Same_Accessory_flag__c = craes.Same_Accessory_flag__c;
            raes.Groupby_SortInt__c = craes.Groupby_SortInt__c;
            raes.Old_Rental_Apply__c = craes.Old_Rental_Apply__c; // OLY_OCM-251 分单后的新申请单Name是从其下一览处取,所以一览的源申请单也要clone
            raes.Received_NG_ReAssign_Text__c = true;
 
            insert raes;
 
            Rental_Apply_Equipment_Set_Detail__c firstraesd;
 
            List<Rental_Apply_Equipment_Set_Detail__c> cloneraesd = new List<Rental_Apply_Equipment_Set_Detail__c>();
 
            for (Rental_Apply_Equipment_Set_Detail__c raesd : raesds) {
                Rental_Apply_Equipment_Set_Detail__c raesdc = new Rental_Apply_Equipment_Set_Detail__c();
                raesdc.Rental_Apply_Equipment_Set__c = raes.Id;
                raesdc.Rental_Apply__c = raesd.Rental_Apply__c;
                raesdc.Fixture_Set_Detail__c = raesd.Fixture_Set_Detail__c;
                raesdc.IndexFromUniqueKey__c = raesd.IndexFromUniqueKey__c;
                raesdc.IndexFromUniqueKey_Text__c = raesd.IndexFromUniqueKey_Text__c;
                raesdc.Rental_Num__c  = raesd.Rental_Num__c ;
                // 20211125 ljh 排队 重新分配的配套自动带有“插队”标识 add start
                if(raesd.Is_Body__c){
                    raesdc.Allow_Adjust_Queue_Flag__c = true;
                }
                // 20211125 ljh 排队 重新分配的配套自动带有“插队”标识 add end
                //cancel重新分配的不算追加附属品 272チケット
                raesdc.Create_State__c = 0;
                // 20180126 MTG时确定,NG重新分配时下面两个字段不设值,为了扫描主机二维码时,不检索出来NG重新分配的数据
                //raesdc.Canceled__c = raesd.Id;
                //raesdc.Canceled_Id__c = raesd.Id;
                if (firstraesd == null) {
                    firstraesd = raesdc;
                }
                cloneraesd.add(raesdc);
            }
 
            // update raesds;
 
            insert cloneraesd;
            raes.First_RAESD__c = firstraesd.Id;
            update raes;
            // 一览更新完后恢复触发WorkFlow OLY_OCM-409
            ra.NotSendMessageFlag__c = false;
            update ra;
        }
        catch (Exception e) {
            System.debug(e.getStackTraceString());
            Database.rollback(sp);
            return e.getMessage();
        }
 
        return '1';
    }
 
 
}