高章伟
2022-02-18 8b5f4c6c281cfa548f92de52c8021e37aa81901e
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
public without sharing class Consum_ApplyUtil {
 
        //借出备品配套一览状態
    public enum CaStatus {
            Qu_Xiao,
            Shan_Chu,
            Wan_Liao,
            Yi_Hui_Shou,
            Yi_Hui_Ji,
            Yi_Yuan_Yi_Zhuang_Ji_Que_Ren,
            Shen_Qing_Zhe_Yi_Shou_Huo,
            Yi_Chu_Ku,
            Chu_Ku_Qian_Yi_Jian_Ce,
            Yi_Xia_Jia,
            Yi_Chu_Ku_Zhi_Shi,
            Yi_Fen_Pei,
            Qian_Pin_Zhong,
            Cao_An_Zhong,
            Tian_Xie_Wan_Bi,
            Shen_Qing_Zhong,
            Yi_Pi_Zhun,
            Bu_Pi_Zhun
            //申请状态没有待分配
            // Dai_Fen_Pei
 
    }
 
    //借出备品配套一览状態
    public enum CaesStatus {
            Cao_An_Zhong,
            Qu_Xiao,
            Yi_Hui_Ku,
            Hui_Shou_Hou_Yi_Jian_Ce,
            Hui_Shou_Hou_Jian_Ce_NG,
            Hui_Shou_Hou_Yi_CDS,
            Yi_Hui_Shou,
            Yi_Hui_Ji,
            Yi_Yuan_Yi_Zhuang_Ji_Que_Ren,
            Shen_Qing_Zhe_Yi_Shou_Huo,
            Shen_Qing_Zhe_Shou_Huo_NG,
            Yi_Chu_Ku,
            Chu_Ku_Qian_Yi_Jian_Ce,
            Yi_Xia_Jia,
            Yi_Chu_Ku_Zhi_Shi,
            Yi_Fen_Pei,
            Dai_Fen_Pei,
            Pai_Dui_Zhong,
            Zan_Ding_Fen_Pei,
            Qian_Pin_Zhong
 
    }
 
    //借出备品配套一览明细状態
    public enum CaesdStatus {
            Qu_Xiao,
            Fei_Qi,
            Yi_Hui_Ku,
            Dai_Shang_Jia,
            Hui_Shou_Hou_Yi_CDS,
            Yi_Hui_Shou,
            Yi_Hui_Ji,
            Yi_Yuan_Yi_Zhuang_Ji_Que_Ren,
            Shen_Qing_Zhe_Yi_Shou_Huo,
            Shen_Qing_Zhe_Shou_Huo_NG,
            Yi_Chu_Ku,
            Chu_Ku_Qian_Yi_Jian_Ce,
            Yi_Xia_Jia,
            Yi_Chu_Ku_Zhi_Shi,
            Yi_Fen_Pei,
            Dai_Fen_Pei,
            Qian_Pin_Zhong,
            Yi_Xiao_Hao,
            Diu_Shi,
            Dai_Fei_Qi,
            Yi_Zhi_Bao_Fei_Qu,
            Pai_Dui_Zhong,
            Zan_Ding_Fen_Pei,
            Dai_Xiu_Li,
            Xiu_Li_Zhong
    }
 
 
    //备品借出申请
    //RA_Status__c
    public static Map<Integer, String> CaStatusMap = new Map<Integer, String> {
            CaStatus.Qu_Xiao.ordinal()                        => '取消',
            CaStatus.Shan_Chu.ordinal()                       => '删除',
            CaStatus.Wan_Liao.ordinal()                       => '完了', //全部已回库的意思
            CaStatus.Yi_Hui_Shou.ordinal()                    => '已回收',
            CaStatus.Yi_Hui_Ji.ordinal()                      => '已回寄', //old:'归还发送完了',
            CaStatus.Yi_Yuan_Yi_Zhuang_Ji_Que_Ren.ordinal()   => '医院已装机确认', //old:'医院收到确认完了',
            CaStatus.Shen_Qing_Zhe_Yi_Shou_Huo.ordinal()      => '申请者已收货', //old:'申请者收到确认完了',
            CaStatus.Yi_Chu_Ku.ordinal()                      => '已出库', //old:'出库完了',
            CaStatus.Chu_Ku_Qian_Yi_Jian_Ce.ordinal()         => '出库前已检测', //old:'出库前检查完了',
            CaStatus.Yi_Xia_Jia.ordinal()                     => '已下架', //old:'下架完了',
            CaStatus.Yi_Chu_Ku_Zhi_Shi.ordinal()              => '已出库指示', //old:'出库指示完了',
            CaStatus.Yi_Fen_Pei.ordinal()                     => '已分配',
            CaStatus.Qian_Pin_Zhong.ordinal()                 => '欠品中', //欠品确认中
            CaStatus.Cao_An_Zhong.ordinal()                   => '草案中',
            CaStatus.Tian_Xie_Wan_Bi.ordinal()                => '填写完毕',
            CaStatus.Shen_Qing_Zhong.ordinal()                => '申请中',
            CaStatus.Yi_Pi_Zhun.ordinal()                     => '已批准', //old:'批准完了',
            CaStatus.Bu_Pi_Zhun.ordinal()                     => '不批准' //old:'批准完了',
            //申请状态没有待分配
            // CaStatus.Dai_Fen_Pei.ordinal()                   => '待分配'
    };
 
    //借出备品配套一览状態
    //RAES_Status__c
    public static Map<Integer, String> CaesStatusMap = new Map<Integer, String> {
            CaesStatus.Cao_An_Zhong.ordinal()                 => '草案中',
            CaesStatus.Qu_Xiao.ordinal()                      => '取消',
            CaesStatus.Yi_Hui_Ku.ordinal()                    => '已回库', //old:'上架完了',
            CaesStatus.Hui_Shou_Hou_Yi_Jian_Ce.ordinal()      => '回收后已检测', //old:'归还后检查完了',
            CaesStatus.Hui_Shou_Hou_Jian_Ce_NG.ordinal()      => '回收后检测NG',   //old:'回收后检查NG'
            CaesStatus.Hui_Shou_Hou_Yi_CDS.ordinal()          => '回收后已CDS', //old:'归还后CDS完了',
            CaesStatus.Yi_Hui_Shou.ordinal()                  => '已回收',
            CaesStatus.Yi_Hui_Ji.ordinal()                    => '已回寄', //old:'归还发送完了',
            CaesStatus.Yi_Yuan_Yi_Zhuang_Ji_Que_Ren.ordinal() => '医院已装机确认', //old:'医院收到确认完了',
            CaesStatus.Shen_Qing_Zhe_Yi_Shou_Huo.ordinal()    => '申请者已收货', //old:'申请者收到确认完了',
            CaesStatus.Shen_Qing_Zhe_Shou_Huo_NG.ordinal()    => '申请者收货NG',
            CaesStatus.Yi_Chu_Ku.ordinal()                    => '已出库', //old:'出库完了',
            CaesStatus.Chu_Ku_Qian_Yi_Jian_Ce.ordinal()       => '出库前已检测', //old:'出库前检查完了',
            CaesStatus.Yi_Xia_Jia.ordinal()                   => '已下架', //old:'下架完了',
            CaesStatus.Yi_Chu_Ku_Zhi_Shi.ordinal()            => '已出库指示', //old:'出库指示完了',
            CaesStatus.Yi_Fen_Pei.ordinal()                   => '已分配',
            CaesStatus.Dai_Fen_Pei.ordinal()                  => '待分配',
            CaesStatus.Pai_Dui_Zhong.ordinal()                => '排队中',
            CaesStatus.Zan_Ding_Fen_Pei.ordinal()             => '暂定分配',
            CaesStatus.Qian_Pin_Zhong.ordinal()               => '欠品中'
    };
 
    //ヒストリ状態
    //RAESD_Status_F__c
    public static Map<Integer, String> raesdStatusMap = new Map<Integer, String> {
            CaesdStatus.Qu_Xiao.ordinal()                       => '取消',
            CaesdStatus.Fei_Qi.ordinal()                        => '废弃',
            CaesdStatus.Yi_Hui_Ku.ordinal()                     => '已回库', //old:'上架完了',
            CaesdStatus.Dai_Shang_Jia.ordinal()                 => '待上架',
            CaesdStatus.Hui_Shou_Hou_Yi_CDS.ordinal()           => '回收后已CDS', //old:'归还后CDS完了',
            CaesdStatus.Yi_Hui_Shou.ordinal()                   => '已回收',
            CaesdStatus.Yi_Hui_Ji.ordinal()                     => '已回寄', //old:'归还发送完了',
            CaesdStatus.Yi_Yuan_Yi_Zhuang_Ji_Que_Ren.ordinal()  => '医院已装机确认', //old:'医院收到确认完了',
            CaesdStatus.Shen_Qing_Zhe_Shou_Huo_NG.ordinal()     => '申请者收货NG',
            CaesdStatus.Shen_Qing_Zhe_Yi_Shou_Huo.ordinal()     => '申请者已收货', //old:'申请者收到确认完了',
            CaesdStatus.Yi_Chu_Ku.ordinal()                     => '已出库', //old:'出库完了',
            CaesdStatus.Chu_Ku_Qian_Yi_Jian_Ce.ordinal()        => '出库前已检测', //old:'出库前检查完了',
            CaesdStatus.Yi_Xia_Jia.ordinal()                    => '已下架', //old:'下架完了',
            CaesdStatus.Yi_Chu_Ku_Zhi_Shi.ordinal()             => '已出库指示', //old:'出库指示完了',
            CaesdStatus.Yi_Fen_Pei.ordinal()                    => '已分配',
            CaesdStatus.Dai_Fen_Pei.ordinal()                   => '待分配',
            CaesdStatus.Qian_Pin_Zhong.ordinal()                => '欠品中',
            CaesdStatus.Yi_Xiao_Hao.ordinal()                   => '已消耗',
            CaesdStatus.Diu_Shi.ordinal()                       => '丢失',
            CaesdStatus.Dai_Fei_Qi.ordinal()                    => '待废弃',
            CaesdStatus.Yi_Zhi_Bao_Fei_Qu.ordinal()             => '待移至报废区',
            CaesdStatus.Pai_Dui_Zhong.ordinal()                 => '排队中',
            CaesdStatus.Zan_Ding_Fen_Pei.ordinal()              => '暂定分配',
            CaesdStatus.Dai_Xiu_Li.ordinal()                    => '待修理',
            CaesdStatus.Xiu_Li_Zhong.ordinal()                  => '修理中'
    };
 
    public enum CUCUNTYPE {
        You_Xiao_Ku_Cun,
        Yi_Guo_Qi_Ku_Cun,
        You_Xiao_Qi_Ku_Cun
    }
 
    public static List<SelectOption> getPlickList(String objApi, String fieldApi) {
        Schema.DescribeFieldResult fieldResult = Schema.getGlobalDescribe().get(objApi).getDescribe().fields.getMap().get(fieldApi).getDescribe();
        List<SelectOption> pickListValuesList= new List<SelectOption>();
        List<Schema.PicklistEntry> ple = fieldResult.getPicklistValues();
        pickListValuesList.add(new SelectOption('', system.label.StartTrading_None));
        for( Schema.PicklistEntry pickListVal : ple){
            pickListValuesList.add(new SelectOption(pickListVal.getValue(), pickListVal.getLabel()));
        }
        return pickListValuesList;
    }
 
    public static void withoutUpsertCaesd(List<Consum_Apply_Equipment_Set_Detail__c> sobj) {
        if (!sobj.isEmpty()) upsert sobj UniqueKey__c;
    }
    public static List<sObject> withoutQueryList(String sqlStr) {
        return Database.query(sqlStr);
    }
    public static List<sObject> withoutQueryListWithConditionList(String sqlStr, List<String> conditionList) {
        return Database.query(sqlStr);
    }
    public static void withoutUpsertCaes(List<Consum_Apply_Equipment_Set__c> sobj) {
        if (!sobj.isEmpty()) upsert sobj UniqueKey__c;
    }
 
    public static void delCAESD_excludedUpserted(List<Consum_Apply_Equipment_Set__c> pList, List<Consum_Apply_Equipment_Set_Detail__c> upserted) {
        // ToDo 削除時、一部データのkeyを削除対象から外す
        // 一部データとは = Not(申請中) のこと
        List<Consum_Apply_Equipment_Set_Detail__c> dels = [select Id
                from Consum_Apply_Equipment_Set_Detail__c
               where Consum_Apply_Equipment_Set__c IN :pList
                 and Cancel_Select__c = False
                 and Id Not IN :upserted];
        if (!dels.isEmpty()) delete dels;
    }
 
    public static void delCAES_excludedUpserted(Consum_Apply__c ra, List<Consum_Apply_Equipment_Set__c> upserted) {
        List<Consum_Apply_Equipment_Set__c> dels = [select Id
                from Consum_Apply_Equipment_Set__c
               where Consum_Apply__c = :ra.Id
                 and Cancel_Select__c = False
                 and Id Not IN :upserted];
        if (!dels.isEmpty()) delete dels;
    }
 
    public static void withoutUpsert(List<Sobject> sobjs) {
        if (!sobjs.isEmpty()) upsert sobjs;
    }
 
    public static  Map<Date, OlympusCalendar__c> getOlympusCalendarMAp(Date minDate, Date maxDate) {
        Map<String, Schema.SObjectField> fsMap = OlympusCalendar__c.sObjectType.getDescribe().fields.getMap();
        List<String> allFiledList = new List<String>();
        allFiledList.addAll(fsMap.keySet());
        String soql = 'SELECT '
                  + String.join(allFiledList, ',')
                   + ' FROM OlympusCalendar__c'
                  + ' WHERE Date__c >= :minDate'
                     + ' AND Date__c <= :maxDate';
        List<OlympusCalendar__c> calendarList = Database.query(soql);
        Map<Date, OlympusCalendar__c> calendarMap = new Map<Date, OlympusCalendar__c>();
        for (OlympusCalendar__c calendar : calendarList) {
            calendarMap.put(calendar.Date__c, calendar);
        }
        return calendarMap;
    }
 
    /**
    * @description Get 開始日 + 何日後 的 平日 (只考虑 周六 周日)
    * @param pd 開始日
    * @param i 何日後(平日,+-可能)
    * @return 日付
    **/
    public static  Date getWD_addday(Date pd, Integer i) {
        if (null == pd) pd = System.today();
        if (null == i) i = 0;
        Date d = Date.newInstance(pd.year(), pd.month(), pd.day());
        // Day number of week (1 = Monday, ..., 7 = Sunday)
        Integer dayNumOfWeek = Integer.valueOf(Datetime.newInstance(d.year(), d.month(), d.day()).format('u'));
        if (dayNumOfWeek == 6) {
            if (i < 0) {
                d = d.addDays(2);
            }
            else {
                d = d.addDays(-1);
            }
        }
        else if (dayNumOfWeek == 7) {
            if (i < 0) {
                d = d.addDays(1);
            }
            else {
                d = d.addDays(-2);
            }
        }
 
        // 这里开始 已经没有 周六 周日 了
        dayNumOfWeek = Integer.valueOf(Datetime.newInstance(d.year(), d.month(), d.day()).format('u'));
        Integer targetAddWeek = Math.rint(i / 5).intValue();
        Integer dateMod = Math.mod(i, 5);
        Integer targetDayNumOfWeek = dayNumOfWeek + dateMod;
        // 这里 targetDayNumOfWeek 一定变成 1 ~ 5 之间
        if (targetDayNumOfWeek <= 0) {
            targetDayNumOfWeek += 5;
            targetAddWeek--;
        }
        else if (targetDayNumOfWeek > 5) {
            targetDayNumOfWeek -= 5;
            targetAddWeek++;
        }
        else {
            // 1, 2 ,3 ,4, 5 就是 平日了
        }
 
        d = d.addDays(targetAddWeek * 7);
        d = d.addDays(targetDayNumOfWeek - dayNumOfWeek);
        return d;
    }
 
    public static Map<CUCUNTYPE, Map<String, Integer>> getAssetKucun(List<Asset> assetList, Map<String, Date> dayMap) {
        return getAssetKucun1(assetList, dayMap, false, false);
    }
 
    public static Map<CUCUNTYPE, Map<String, Integer>> getAssetKucun1(List<Asset> assetList, Map<String, Date> dayMap, Boolean isSnum, Boolean haveTime) {
        Map<CUCUNTYPE, Map<String, Integer>> aMap = new Map<CUCUNTYPE, Map<String, Integer>>();
        Map<String, Integer> assetyouxiaoqiMap = new Map<String, Integer>();
        Map<String, Integer> assetguoqiMap = new Map<String, Integer>();
        Map<String, Integer> assetyouxiaoMap = new Map<String, Integer>();
        for (Asset ass : assetList) {
            String key;
            if (isSnum) {
                key = ass.GroupKey_F__c;
            }
            else {
                key = ass.Fixture_Model_No_F__c;
            }
            if (assetyouxiaoMap.containsKey(key) == false) {
                assetyouxiaoMap.put(key, 0);
            }
            if (ass.Consumable_Guaranteen_end__c != null) {
                if (assetyouxiaoqiMap.containsKey(key) == false) {
                    assetyouxiaoqiMap.put(key, 0);
                    assetguoqiMap.put(key, 0);
                }
                if (dayMap == null
                    || dayMap.containsKey(key) == false
                    || ass.Consumable_Guaranteen_end__c > dayMap.get(key)) {
                    assetyouxiaoqiMap.put(key, assetyouxiaoqiMap.get(key) + Integer.valueOf(ass.You_Xiao_Ku_Cun__c));
                }
                else {
                    assetguoqiMap.put(key, assetguoqiMap.get(key) + Integer.valueOf(ass.You_Xiao_Ku_Cun__c));
                }
            }
            assetyouxiaoMap.put(key, assetyouxiaoMap.get(key) + Integer.valueOf(ass.You_Xiao_Ku_Cun__c));
        }
        aMap.put(CUCUNTYPE.You_Xiao_Qi_Ku_Cun, assetyouxiaoqiMap);
        aMap.put(CUCUNTYPE.Yi_Guo_Qi_Ku_Cun, assetguoqiMap);
        aMap.put(CUCUNTYPE.You_Xiao_Ku_Cun, assetyouxiaoMap);
        return aMap;
    }
 
    public static List<Sobject> queryTempList(String sqlStr, List<SObject> tempList) {
        return Database.query(sqlStr);
    }
 
}