buli
2023-07-14 36d15f189de2e83ce2576715dac30c3c260388dd
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
/**
 * キャンペーンのトリガーです。
 */
trigger CampaignTriggerBefIns on Campaign (before insert, before update,after insert, after update) {
    //可以多次执行trigger,触发多次 thh 2021-11-12 start
    // 服务技师 2018/12/24  Start
    CampaignTriggerBefInsHandler handler = new CampaignTriggerBefInsHandler();
    handler.run();
    //可以多次执行trigger,触发多次 thh 2021-11-12 end
    // 服务技师 2018/12/24  end
    //CHAN-BC69RE start 减少检索
    // キャンペーン:内部トレーニングのレコードタイプを取得
    ID campaignRC = Schema.SObjectType.Campaign.getRecordTypeInfosByDeveloperName().get('Internal_training').getRecordTypeId();
    
    // キャンペーンメンバー:内部向けのレコードタイプを取得FV
    id campaignMemberRC =
    Schema.SObjectType.CampaignMember.getRecordTypeInfosByDeveloperName().get('Internal_training_participants').getRecordTypeId();
    // キャンペーンメンバー:外部向けのレコードタイプを取得
    id campaignMemberOuterRC =
    Schema.SObjectType.CampaignMember.getRecordTypeInfosByDeveloperName().get('Workshop').getRecordTypeId();
    //CHAN-BC69RE end 减少检索
    //SWAG-BSZ3VQ 【委托】学会导致取消申请单报错 精琢技术 wql 2020/08/31 start
    //设置只进一次trigger
    if(!StaticParameter.EscapeCampain){
 
    List<Id> userIdList = new List<Id>();
    if (Trigger.isBefore
     // CHAN-BAN5BS 2019/03/27 start
     //&& Trigger.isInsert
     // CHAN-BAN5BS 2019/03/27 end
     ) {
        for ( Campaign target : Trigger.New) {
            userIdList.add(target.OwnerId);
        }
    }
    Map<Id, User> userMap = new Map<Id, User>();
    List<user> OwnerList = New List<user>();
    // 服务技师 2018/12/24  Start
    OwnerList = [SELECT Id, SalesManager__c, BuchangApprovalManagerSales__c,
                 JingliApprovalManager__c, BuchangApprovalManager__c, ZongjianApprovalManager__c,
                 OCM_man_province__c, Province__c
                 FROM user WHERE id = :userIdList];
    // 服务技师 2018/12/24  end
    for (User u : OwnerList) {
        userMap.put(u.Id, u);
    }
    // キャンペーンのレコードタイプに応じて、キャンペーンメンバーの
    // レコードタイプを自動的に決定します。
    list<ID> TargetOwnerId = new list<ID>();
 
    if (Trigger.isBefore && Trigger.isInsert) {
 
        for ( Campaign target : Trigger.New) {
            target.LoadNum__c=''; //2020-10-23 zh 计划出借备品信息清空
            if (String.isNotBlank(target.OwnerId)) {
                TargetOwnerId.add(target.OwnerId);
            }
            if ( target.RecordTypeId == CampaignRC) {
                // 内部トレーニングだった
                target.CampaignMemberRecordTypeId = campaignMemberRC;
            } else {
                // 外部向けだった
                target.CampaignMemberRecordTypeId = campaignMemberOuterRC;
            }
            // 经理、部长、总监审批
            /**
             * 服务技师 2018/12/24  Start
             * 1、分别设置审批的经理、部长、总监是谁
             * 2、设置服务技师的服务企划部窗口是谁
             * 3、对应所在省为非直辖市的城市进行一一对应
             */
            if (target.RecordTypeid != (ID) system.label.RecordType_CampaignService ) {
                target.JingliApprovalManager__c = userMap.get(target.OwnerId).SalesManager__c;
                target.BuchangApprovalManager__c = userMap.get(target.OwnerId).BuchangApprovalManagerSales__c;
                target.ZongjianApprovalManager__c = userMap.get(target.OwnerId).ZongjianApprovalManager__c;
            } else {
                target.JingliApprovalManager__c = userMap.get(target.OwnerId).JingliApprovalManager__c == null ? target.OwnerId :  userMap.get(target.OwnerId).JingliApprovalManager__c;
                target.BuchangApprovalManager__c = userMap.get(target.OwnerId).BuchangApprovalManager__c == null ? target.OwnerId :  userMap.get(target.OwnerId).BuchangApprovalManager__c;
                target.ZongjianApprovalManager__c = userMap.get(target.OwnerId).ZongjianApprovalManager__c == null ? target.OwnerId :  userMap.get(target.OwnerId).ZongjianApprovalManager__c;
 
                if (target.Salesdepartment__c != null && target.Salesdepartment__c.equals('1.华北')) {
                    target.ServiceDesignDep__c = System.Label.ServiceDesignDep_NC;
                }
                if (target.Salesdepartment__c != null && target.Salesdepartment__c.equals('2.东北')) {
                    target.ServiceDesignDep__c = System.Label.ServiceDesignDep_NE;
                }
                if (target.Salesdepartment__c != null && target.Salesdepartment__c.equals('3.西北')) {
                    target.ServiceDesignDep__c = System.Label.ServiceDesignDep_NW;
                }
                if (target.Salesdepartment__c != null && target.Salesdepartment__c.equals('4.西南')) {
                    target.ServiceDesignDep__c = System.Label.ServiceDesignDep_SW;
                }
                if (target.Salesdepartment__c != null && target.Salesdepartment__c.equals('5.华东')) {
                    target.ServiceDesignDep__c = System.Label.ServiceDesignDep_EC;
                }
                if (target.Salesdepartment__c != null && target.Salesdepartment__c.equals('6.华南')) {
                    target.ServiceDesignDep__c = System.Label.ServiceDesignDep_SC;
                } else {
                    target.ServiceDesignDep__c = System.Label.ServiceDesignDep_NC;
                }
                target.Society_Type__c = '区域';
                target.Open_scope__c = userMap.get(target.OwnerId).Province__c;
                switch on userMap.get(target.OwnerId).Province__c {
                    when '深圳市' {
                        target.Open_scope__c = '广东省';
                    }
                    when '大连市' {
                        target.Open_scope__c = '辽宁省';
                    }
                    when '青岛市' {
                        target.Open_scope__c = '山东省';
                    }
                    when '海南省' {
                        target.Open_scope__c = '广东省';
                    }
                    when '西藏自治区' {
                        target.Open_scope__c = '四川省';
                    }
                }
            }
 
            // 服务技师 2018/12/24  end
        }
 
    }
 
    if (Trigger.isBefore && Trigger.isUpdate) {
        List<String> CampaignId = new List<String>();
        for ( Campaign campaign : Trigger.New) {
            //判断状态变更时,才走更新的逻辑 SWAG-BSZ3VQ 【委托】学会导致取消申请单报错 精琢技术 wql start
            //服务企划部窗口 只有新建的时候会设置 根据会议的8个审批流进行判断·
            Campaign oldC = Trigger.oldMap.get(campaign.Id);
            if(oldC.Status != Campaign.Status || Campaign.Status== '草案中'
             ||Campaign.Status== '计划提交' ||Campaign.Status=='报告提交' || Campaign.Status=='取消申请中'
             ||Campaign.Status=='时间修改申请中'||oldC.CostStatus__c != Campaign.CostStatus__c
             ||Campaign.CostStatus__c=='费用已提交'){
                // CHAN-BAN5BS 2019/03/27 start
                if (campaign.RecordTypeid != (ID) system.label.RecordType_CampaignService ) {
                    campaign.JingliApprovalManager__c = userMap.get(campaign.OwnerId).SalesManager__c;
                    campaign.BuchangApprovalManager__c = userMap.get(campaign.OwnerId).BuchangApprovalManagerSales__c;
                    campaign.ZongjianApprovalManager__c = userMap.get(campaign.OwnerId).ZongjianApprovalManager__c;
                }else {
                    campaign.JingliApprovalManager__c = userMap.get(campaign.OwnerId).JingliApprovalManager__c == null ? campaign.OwnerId :  userMap.get(campaign.OwnerId).JingliApprovalManager__c;
                    campaign.BuchangApprovalManager__c = userMap.get(campaign.OwnerId).BuchangApprovalManager__c == null ? campaign.OwnerId :  userMap.get(campaign.OwnerId).BuchangApprovalManager__c;
                    campaign.ZongjianApprovalManager__c = userMap.get(campaign.OwnerId).ZongjianApprovalManager__c == null ? campaign.OwnerId :  userMap.get(campaign.OwnerId).ZongjianApprovalManager__c;
                }
                // CHAN-BAN5BS 2019/03/27 end
 
                //SWAG-B3U63C 2018/8/21 更新 OCM管理省的备品助理(提醒借用备品用) start
                if (String.isNotBlank(campaign.OwnerId)) {
                    TargetOwnerId.add(campaign.OwnerId);
                }
                //SWAG-B3U63C 2018/8/21 更新 OCM管理省的备品助理(提醒借用备品用) end
 
                Campaign old = Trigger.oldMap.get(campaign.Id);
                if (campaign.Status != old.Status && campaign.Status == '取消申请中') {
                    CampaignId.add(campaign.Id);
                }
            }
            //判断状态变更时,才走更新的逻辑 SWAG-BSZ3VQ 【委托】学会导致取消申请单报错 精琢技术 wql end
        }
        //wwp   减少SQL的使用                2021/08/26      start
        if(CampaignId != null && CampaignId.size() > 0){
            String userId = UserInfo.getUserId();
            List<user> Useracc = New List<user>();
            Useracc = [SELECT Id, ZongjianApprovalManager__c, BuchangApprovalManager__c FROM user WHERE id = :userId];
            if(Useracc.size() > 0){
                for(String cId : CampaignId){
                    Trigger.newMap.get(cId).ZongjianApprovalManager_CancleShen__c = Useracc[0].ZongjianApprovalManager__c;
                    Trigger.newMap.get(cId).BuchangApprovalManager_CancleShen__c = Useracc[0].BuchangApprovalManager__c;
                }
            }
        }
        //wwp   减少SQL的使用                2021/08/26      end
    }
 
    if (TargetOwnerId.size() > 0 ) {
        //SWAG-B3U63C 2018/8/21 更新 OCM管理省的备品助理(提醒借用备品用) start
 
        list<User> users = [select id, OCM_man_province_Rental__c
                            //OBPM 增加展示平台窗口LY 20211224 start
                            ,OCM_man_province__c
                            //OBPM 增加展示平台窗口LY 20211224 end
                            from User where id in :TargetOwnerId];
        //list<string> OCM_man_province_RentalName = new list<string>();
        //OBPM 增加展示平台窗口LY 20211224 start
        Map<ID, User> userProvinceMap = new Map<ID, User>();
        //OBPM 增加展示平台窗口LY 20211224 end
        if (users.size() > 0) {
            for (User temUser : users ) {
                //OCM_man_province_RentalName.add(temUser.OCM_man_province_Rental__c);
                //OBPM 增加展示平台窗口LY 20211224 start
                userProvinceMap.put(temUser.Id,temUser);
                //OBPM 增加展示平台窗口LY 20211224 end
            }
        }
        
        // Map<string, ID> OCM_Management_ProvinceMap = new Map<string, ID>();
        //OBPM 增加展示平台窗口LY 20211224 start
        Map<string, OCM_Management_Province__c> ocsmMap = new Map<string, OCM_Management_Province__c>();
        List<OCM_Management_Province__c> temOCMList =[select ID, Name, Admin_assistant__c,
                    OnlinePlatformWindow1__c,
                    OnlinePlatformWindow2__c,
                    OnlinePlatformWindow3__c
                    from OCM_Management_Province__c];     
        //OBPM 增加展示平台窗口LY 20211224 end
        // if (users.size() > 0) {
        //     for (OCM_Management_Province__c temOCMMP : [select ID, Name, Admin_assistant__c
        //             from OCM_Management_Province__c
        //             where Name in: OCM_man_province_RentalName]) {
        //         OCM_Management_ProvinceMap.put(temOCMMP.Name, temOCMMP.Admin_assistant__c);
        //     }
        // }
        if (temOCMList.size()>0) {
            for (OCM_Management_Province__c ocmTemp :temOCMList) {
                ocsmMap.put(ocmTemp.Name, ocmTemp);
            }
        }
        // map<ID, ID> UserToAdmin_assistantMap = new map<ID, ID>();
        // for (User temUser : users ) {
        //     UserToAdmin_assistantMap.put(temUser.id, OCM_Management_ProvinceMap.get(temUser.OCM_man_province_Rental__c));
 
        // }
        for ( Campaign target : Trigger.New) {
            // ID Admin_assistantID = UserToAdmin_assistantMap.get(target.OwnerId);
            // target.OCM_MP_Admin_assistant__c = Admin_assistantID;
            target.OCM_MP_Admin_assistant__c = userProvinceMap.get(target.OwnerId) != null && ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province_Rental__c) != null ? ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province_Rental__c).Admin_assistant__c : null;
            target.OnlinePlatformWindow1__c = userProvinceMap.get(target.OwnerId) != null && ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province__c) != null ? ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province__c).OnlinePlatformWindow1__c : null;
            target.OnlinePlatformWindow2__c = userProvinceMap.get(target.OwnerId) != null && ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province__c) != null ? ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province__c).OnlinePlatformWindow2__c : null;
            target.OnlinePlatformWindow3__c = userProvinceMap.get(target.OwnerId) != null && ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province__c) != null ? ocsmMap.get(userProvinceMap.get(target.OwnerId).OCM_man_province__c).OnlinePlatformWindow3__c : null;
        }
 
        //SWAG-B3U63C 2018/8/21 更新 OCM管理省的备品助理(提醒借用备品用) end
    }
    
        //设置跳过学会·培训trigger
        StaticParameter.EscapeCampain =true;
        //SWAG-BSZ3VQ 【委托】学会导致取消申请单报错 精琢技术 wql 2020/08/31 end
    }
    //SWAG-BSW9CP 【委托】紧急-南方分割申请单出现报错 精琢技术wql 2020/08/28 end
 
    //LJPH-BSMB3M <委托>新疆领导无法审批当地OJT报告 精琢技术 wql 2020/08/19  start
    if(!StaticParameter.shareToOSCMFlag){
            if ((Trigger.isAfter && Trigger.isUpdate) ||(Trigger.isAfter && Trigger.isInsert)  ) {
                //共享
                shareToOSCM();
                StaticParameter.shareToOSCMFlag =true;
        }
    }
    
 
     // 共享给经理 を取得、CampaignShareに設定(Read)
    private void shareToOSCM() { 
        
        //存放(学会id,共享对象)
        //Map<Id,CampaignShare> insertMap = new Map<Id,CampaignShare>();
        Map<Id,List<CampaignShare>> insertMap = new Map<Id,List<CampaignShare>>();
        //存放最后需要新增的共享数据
        List<CampaignShare> lastInsertList = new List<CampaignShare>();
        //存放已有的相同的共享原因的数据
        List<Id> deleteTargetAOIdList = new List<Id>();
        //存放用于的id
        List<Id> userIdList = new List<Id>();
        String rowCause = 'Manual';
        //新增一个共享原因
        // String rowCause = Schema.CampaignShare.RowCause.shareToUser__c;
        System.debug('rowCause:'+rowCause);
        String ownerCause = 'Owner';
        //Apex共有の理由名shareToUser
        for(Campaign nObj : Trigger.new) {
            System.debug('经理:'+nObj.JingliApprovalManager__c);
            //存放用于新增的共享数据
            List<CampaignShare> insertList = new List<CampaignShare>();
            if(nObj.JingliApprovalManager__c != null){
 
                //SFDC-C54AWQ  【委托】 【phase5上线课题65】-紧急-审批备品申请时提示“保存记录时发生验证错误”  wql 2021/07/20 start
                //用户是否启用
                CampaignShare aos = null;
                CampaignShare aos1 = null;
                if(nObj.JingliIsActive__c ==true){
                    //存放经理
                    aos = new CampaignShare(
                        RowCause = rowCause,
                        CampaignId = nObj.Id,
                        UserOrGroupId = nObj.JingliApprovalManager__c,
                        CampaignAccessLevel = 'Edit');
                    //存放要新增的共享数据
                    insertList.add(aos);
                }
                //用户是否启用
                if(nObj.BuZhangIsActive__c==true){
                    //存放部长
                    aos1 = new CampaignShare(
                        RowCause = rowCause,
                        CampaignId = nObj.Id,
                        UserOrGroupId = nObj.BuchangApprovalManager__c,
                        CampaignAccessLevel = 'Edit');
                    //如果经理部长不相等 则需要共享部长 否则共享给一个人就行了
                    if(nObj.Is_JingliEqualBuzhang__c ==false){
                        insertList.add(aos1);
                        userIdList.add(nObj.BuchangApprovalManager__c);
                    }
                }
                //SFDC-C54AWQ  【委托】 【phase5上线课题65】-紧急-审批备品申请时提示“保存记录时发生验证错误”  wql 2021/07/20 end
                System.debug('key:'+nObj.Id);
                //存放(学会id,共享对象);
                //insertMap.put(nObj.Id,aos);
                System.debug('insertList:'+insertList);
                insertMap.put(nObj.Id,insertList);
                
                //存放已有的相同的共享原因的数据
                deleteTargetAOIdList.add(nObj.Id);
                //存放用于的id
                userIdList.add(nObj.JingliApprovalManager__c);
            }
         }   
         System.debug('insertMap:'+insertMap);  
        if(deleteTargetAOIdList.size()>0){
            List<CampaignShare> deleteList = [SELECT Id FROM CampaignShare WHERE RowCause = :rowCause AND CampaignId IN :deleteTargetAOIdList];
            // 先 Delete 后 Insert
            if(deleteList.size() > 0){
                delete deleteList;
            }
        }
        
 
        //判断需要共享的人  是不是创建人 如果是则说明有一条这个人的owner数据 则不新增
        if (insertMap!= null) {
            List<CampaignShare> ownerList = [SELECT Id,CampaignId,UserOrGroupId
                FROM CampaignShare
                WHERE RowCause = :ownerCause
                  AND CampaignId IN :insertMap.keySet()
                  AND UserOrGroupId IN : userIdList
            ];
            System.debug('ownerList:'+ownerList);
            if(ownerList.size() > 0){
                for( CampaignShare  inq:ownerList){
                    String id = String.valueOf(inq.CampaignId);
                    System.debug('id:'+id);
                    if(insertMap.containsKey(id)){
                        insertMap.remove(inq.CampaignId);
                    }
                }
            }
            
        }
 
        //如果map为空的话,则说明不用新增,已经共享给所有人了
        if(insertMap != null){
            for(List<CampaignShare> qscrsList:insertMap.values()){
                for(CampaignShare qscrs : qscrsList){
                    lastInsertList.add(qscrs);
                }
            }
        }
        System.debug('共享内容:' +lastInsertList);
        if(lastInsertList.size() > 0){
            insert lastInsertList;
        }
 
    }
    //LJPH-BSMB3M <委托>新疆领导无法审批当地OJT报告 精琢技术 wql 2020/08/19  end
    
}