高章伟
2022-03-10 1312ba82d4c880bdb5357d28e0d4af5b285f610f
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
public without sharing class InventoryHeaderCopyHandler extends Oly_TriggerHandler {
    private Map<Id, Inventory_Header_Copy__c> newMap;
    private Map<Id, Inventory_Header_Copy__c> oldMap;
    private List<Inventory_Header_Copy__c> newList;
    private List<Inventory_Header_Copy__c> oldList;
 
    private Set<Id> checkedApprovalIHIdSet = new Set<Id>();
 
    // 需要追加共享的共享Object
    private static List<SObject> shareList = new List<SObject>();
    // 已经放在追加共享List的Key
    private static Set<String> shareSet = new Set<String>();
 
    private static List<Inventory_Detail_Copy__c> idList = new List<Inventory_Detail_Copy__c>();
    // private static List<Consum_Inventory_Detail_Copy__c> cidList = new List<Consum_Inventory_Detail_Copy__c>();
 
    private static Set<Id> updateAssetIdSet = new Set<Id>();
    private static Map<Id, Asset> updateAssetMap = new Map<Id, Asset>();
    // 20210427 you start
    public static Integer FIELDMAX = 35;
    // 20210427 you end
    public InventoryHeaderCopyHandler() {
        this.newMap = (Map<Id, Inventory_Header_Copy__c>) Trigger.newMap;
        this.oldMap = (Map<Id, Inventory_Header_Copy__c>) Trigger.oldMap;
        this.newList = (List<Inventory_Header_Copy__c>) Trigger.new;
        this.oldList = (List<Inventory_Header_Copy__c>) Trigger.old;
    }
 
    protected override void beforeInsert() {
        genInventoryReportNo(); // 盘点报告书编号生成
        assignApprovalUsers(); // 分配审批用户 -- 经理(备品) & 部长(备品) & 总监(备品)
    }
 
    protected override void beforeUpdate() {
        idList = new List<Inventory_Detail_Copy__c>();
        updateAssetMap = new Map<Id, Asset>();
        assignApprovalUsers();  // 分配审批用户 -- 经理(备品) & 部长(备品) & 总监(备品)
    }
 
    protected override void afterUpdate() {
        // approvalIHD();
        setShare();
        if (shareList.size() > 0) {
            insert shareList;
        }
        System.debug(updateAssetMap);
        if (updateAssetMap.isEmpty() == false) {
            update updateAssetMap.values();
        }
 
 
        if (idList.size() > 0) {
            //update by rentx 2021-05-13 start 1625
            // LostReportHandler.Loaner_AutoGiveup(null, null, idList);
            // 20220224 ljh 113盘点
            // LostReportHandler.Loaner_AutoGiveup(null, null, idList, null);
            //update by rentx 2021-05-13 end 1635
        }
        /*if(cidList.size()>0){
            for (Consum_Inventory_Detail_Copy__c id1 : cidList) {
                id1.Auto_Lost_item_giveup__c = true;
            }
            update cidList;
        }*/
    }
 
    private void setShare() {
        for (Inventory_Header_Copy__c nObj: newList) {
            Inventory_Header_Copy__c oObj = oldMap.get(nObj.Id);
            if (nObj.Inventory_Status__c != nObj.Inventory_Status__c
                    && nObj.Inventory_Status__c == '填写完毕') {
                List<String> userList = new List<String>();
                userList.add(nObj.Jingli_Equipment_Id__c + '_Read');
                userList.add(nObj.Buzhang_Equipment_Id__c + '_Read');
                userList.add(nObj.Zongjian_Equipment_Id__c + '_Read');
                // userList.add(nObj.RA_TongkuoZongjian_F__c + '_Read');
                LostReportHandler.setSObjectShare('Inventory_Header__Share', 'Manual', nObj.Id, userList, nObj.OwnerId, shareSet, shareList);
            }
        }
    }
 
    /**
     * 盘点报告书编号生成规则
     * [OCMA-自动生成年度-自动生成BJ-01(开始盘点日期对应的月份)]
     * 年度 可参考申请No的生成方式
     * BJ 根据备品存放地来生成 (北京 备品中心:BJ  上海 备品中心:SH  广州 备品中心:GZ)
     */
    private void genInventoryReportNo() {
        //20210427 you 1650 start
        SS_Batch_Column_Mapping__c mpdMapping = SS_Batch_Column_Mapping__c.getValues('Inventory_Header_Name');//盘点编码              
        Map<String,String> HeaderMap = new Map<String,String>();
        for (Integer i = 1; i <= FIELDMAX; i++) {
            String lpadI = ('00' + i).right(3);
            String fromColumn = 'From_Column_' + lpadI + '__c';
            String apiStr = String.valueOf(mpdMapping.get(fromColumn));
            if (String.isBlank(apiStr) == false) {
                String ssColumn = 'SS_Column_' + lpadI + '__c';
                String ssApiStr = String.valueOf(mpdMapping.get(ssColumn));
                HeaderMap.put(apiStr,ssApiStr);  
            }
 
        }
        //20210427 you 1650 end
        String reportNo = '', location = '', month = '',day = '';
        for (Inventory_Header_Copy__c nObj : this.newList) {
            // 20210223 you WLIG-BV8CHF start
            // reportNo = 'OCMA-' + nObj.Report_No_Year__c + '-';
            reportNo = 'OCMA-' + nObj.Report_No_Year_New__c + '-';
            // 20210223 you WLIG-BV8CHF end
            //20210427 you 1650 start
            if(HeaderMap.containsKey(nObj.Internal_asset_location__c)){
                
                if (nObj.Internal_asset_location__c == '北京 备品中心') {
                    reportNo += 'BJ-';
                } else if (nObj.Internal_asset_location__c == '上海 备品中心') {
                    if(String.isBlank(nObj.Fixture_Header__c)){
                        reportNo += 'SH-';
                    }
                    // Fixture_Header__c有值的是耗材的盘点表头
                    else{
                        reportNo += 'ET/DISP-';
                    }
 
                } else if (nObj.Internal_asset_location__c == '广州 备品中心') {
                    reportNo += 'GZ-';
                }else{
                    reportNo += 'BSC-'+HeaderMap.get(nObj.Internal_asset_location__c)+'-';
                }
            }    
            /**
            if (nObj.Internal_asset_location__c == '北京 备品中心') {
                reportNo += 'BJ-';
            } else if (nObj.Internal_asset_location__c == '上海 备品中心') {
                if(String.isBlank(nObj.Fixture_Header__c)){
                    reportNo += 'SH-';
                }
                // Fixture_Header__c有值的是耗材的盘点表头
                else{
                    reportNo += 'ET/DISP-';
                }
 
            } else if (nObj.Internal_asset_location__c == '广州 备品中心') {
                reportNo += 'GZ-';
            } else if (nObj.Internal_asset_location__c == '青岛') {//20210423 you 1650
                reportNo += 'QD-';
            }
            **/
            //20210427 you 1650 end
            month  = String.valueOf(nObj.Inventory_Start_Date__c.month());
            if(String.isNotBlank(month) && month.length() == 1){
                month = '0' + month;
            }
            day  = String.valueOf(nObj.Inventory_Start_Date__c.day());
            if(String.isNotBlank(day) && day.length() == 1){
                day = '0' + day;
            }
            reportNo += month+'-'+day;
            nObj.Name = reportNo;
        }
    }
 
    /**
     * 分配审批用户 -- 经理(备品) & 部长(备品) & 总监(备品)
     */
    private void assignApprovalUsers() {
        for (Inventory_Header_Copy__c nObj : this.newList) {
            Inventory_Header_Copy__c oObj;
            if (Trigger.isUpdate) {
                oObj = this.oldMap.get(nObj.Id);
            }
            if (Trigger.isInsert || nObj.InventorySubmit_PIC__c != oObj.InventorySubmit_PIC__c
                || (oObj.Inventory_Status__c != '填写完毕' && nObj.Inventory_Status__c == '填写完毕')) {
                bp3_Setting__c conf = bp3_Setting__c.getOrgDefaults();
                if (String.isNotBlank(nObj.Jingli_Equipment_Id__c)) {
                    nObj.Jingli_Equipment__c = nObj.Jingli_Equipment_Id__c;
                }
                if (String.isNotBlank(nObj.Buzhang_Equipment_Id__c)) {
                    nObj.Buzhang_Equipment__c = nObj.Buzhang_Equipment_Id__c;
                }
                /**
                20210701 1650 you 华东得办事处是副总监
                if (String.isNotBlank(nObj.Zongjian_Equipment_Id__c)) {
                    nObj.Zongjian_Equipment__c = nObj.Zongjian_Equipment_Id__c;
                }**/
                if(nObj.InventoryBenbu__c  == '医疗华东营业本部' &&nObj.Internal_asset_location__c!= '广州 备品中心' && nObj.Internal_asset_location__c!= '北京 备品中心' && nObj.Internal_asset_location__c!= '上海 备品中心') {
                    nObj.Zongjian_Equipment__c = conf.FuZongJian__c;
                }
                else {
                    if (String.isNotBlank(nObj.Zongjian_Equipment_Id__c)) {
                       nObj.Zongjian_Equipment__c = nObj.Zongjian_Equipment_Id__c;
                     }
                } 
            }
        }
    }
 
    // 20220224 ljh 113盘点
    /*private void approvalIHD() {
        Set<Id> checkedApprovalIDSet = new Set<Id>();
        for (Inventory_Header_Copy__c nObj : newList) {
            Inventory_Header_Copy__c oObj = oldMap.get(nObj.Id);
            System.debug(oObj.Inventory_Status__c);
            System.debug(nObj.Inventory_Status__c);
            if (oObj.Inventory_Status__c != '已批准'
                    && nObj.Inventory_Status__c == '已批准'
                    && !checkedApprovalIHIdSet.contains(nObj.Id)) {
                checkedApprovalIDSet.add(nObj.Id);
                checkedApprovalIHIdSet.add(nObj.Id);
                // TODO Header 1件ずつ呼び出すしかないですか?
                if(String.isBlank(nObj.Fixture_Header__c)){ 
                    InventoryReportDetailArchiveBatch mBatch = new InventoryReportDetailArchiveBatch(nObj);
                    Database.executeBatch(mBatch);
                    // 借出明细
                    Integer fileNo = 0;
                    Integer totalCount = 0;
                    Integer totalCountDone = 0;
                    InventoryReportDtlArcRaesdBatch raesdBatch = new InventoryReportDtlArcRaesdBatch(nObj, fileNo, totalCount, totalCountDone);
                    Database.executeBatch(raesdBatch);
                }
                // 耗材盘点表头
                else {
                    ConsumInventoryReportDetailArchiveBatch mBatch = new ConsumInventoryReportDetailArchiveBatch(nObj);
                    Database.executeBatch(mBatch);
                    // 借出明细
                    Integer fileNo = 0;
                    Integer totalCount = 0;
                    Integer totalCountDone = 0;
                    ConsumInventoryReportDtlArcRaesdBatch raesdBatch = new ConsumInventoryReportDtlArcRaesdBatch(nObj, fileNo, totalCount, totalCountDone);
                    Database.executeBatch(raesdBatch);
                }
            }
        }
        List<Inventory_Detail_Copy__c> idList1 = [SELECT Id,
                                                    Appended_Inventory_Frozen_Quantity_F__c,
                                                    Inventory_Deviation__c,
                                                    Asset__c,
                                                    Internal_Asset_Flg__c,
                                                    Asset__r.Inventory_Frozen_Quantity__c,
                                                    Asset__r.Inventory_Profit_Quantity__c
                                               FROM Inventory_Detail_Copy__c
                                              WHERE Inventory_Header_Copy__c = :checkedApprovalIDSet
                                                AND Auto_Lost_item_giveup__c = false
                                                AND Inventory_Deviation__c != 0
                                                AND Inventory_Time__c != null];
        List<Consum_Inventory_Detail_Copy__c> idList2 = [SELECT Id,
                                                    Appended_Inventory_Frozen_Quantity_F__c,
                                                    Inventory_Deviation__c,
                                                    Asset__c,
                                                    Internal_Asset_Flg__c,
                                                    Asset__r.Inventory_Frozen_Quantity__c,
                                                    Asset__r.Inventory_Profit_Quantity__c
                                               FROM Consum_Inventory_Detail_Copy__c
                                              WHERE Inventory_Header_Copy__c = :checkedApprovalIDSet
                                                AND Inventory_Deviation__c != 0
                                                AND Inventory_Time__c != null];
        for (Inventory_Detail_Copy__c id1 : idList1) {
            if (!updateAssetIdSet.contains(id1.Asset__c)) {
                updateAssetIdSet.add(id1.Asset__c);
                updateAssetMap.put(id1.Asset__c, new Asset(Id = id1.Asset__c,
                                                            Appended_Inventory_Frozen_Quantity__c = id1.Asset__r.Inventory_Frozen_Quantity__c,
                                                            Inventory_Frozen_Quantity__c = 0,
                                                            Appended_Inventory_Profit_Quantity__c = id1.Asset__r.Inventory_Profit_Quantity__c,
                                                            Inventory_Profit_Quantity__c = 0
                                                            ));
            }
            if (id1.Internal_Asset_Flg__c == false && id1.Inventory_Deviation__c < 0) {
                idList.add(id1);
            }
        }
        for (Consum_Inventory_Detail_Copy__c id1 : idList2) {
            if (!updateAssetIdSet.contains(id1.Asset__c)) {
                updateAssetIdSet.add(id1.Asset__c);
                updateAssetMap.put(id1.Asset__c, new Asset(Id = id1.Asset__c,
                                                            Appended_Inventory_Frozen_Quantity__c = id1.Asset__r.Inventory_Frozen_Quantity__c,
                                                            Inventory_Frozen_Quantity__c = 0,
                                                            Appended_Inventory_Profit_Quantity__c = id1.Asset__r.Inventory_Profit_Quantity__c,
                                                            Inventory_Profit_Quantity__c = 0
                                                            ));
            }
            if (id1.Internal_Asset_Flg__c == false && id1.Inventory_Deviation__c < 0) {
                cidList.add(id1);
            }
        }
    }*/
}