高章伟
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
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
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
public with sharing class TaskObjectTriggerHandle {
    public TaskObjectTriggerHandle() {
        
    }
 
    public void afterUpdateTask(List<task__c> newList,List<task__c> oldList,Map<Id,task__c> newMap,Map<Id,task__c> oldMap){
        List<task__c> updList = new List<task__c>();
        List<Id> compeleteIdList = new List<Id>();
        List<Id> cancelIdList = new List<Id>();
        List<Id> closeIdList = new List<Id>();
        List<Id> postponeIdList = new List<Id>();
        List<Id> unexecutedIdList = new List<Id>();
        List<Id> takeIdList = new List<Id>();
 
        for(task__c tsk : newList){
            if(tsk.taskStatus__c != oldMap.get(tsk.Id).taskStatus__c){
                if(tsk.taskStatus__c == '03 完成'){
                    compeleteIdList.add(tsk.Id);
                }else if(tsk.taskStatus__c == '04 取消'){
                    cancelIdList.add(tsk.Id);
                }else if(tsk.taskStatus__c == '05 延期'){
                    postponeIdList.add(tsk.Id);
                }else if(tsk.taskStatus__c == '06 关闭'){
                    closeIdList.add(tsk.Id);
                }else if(tsk.taskStatus__c == '07 未执行'){
                    unexecutedIdList.add(tsk.Id);
                }else if(tsk.taskStatus__c == '02 接受'){
                    takeIdList.add(tsk.Id);
                }
 
            }
        }
        /*List<task__c> compeleteList = [select Id,taskStatus__c,mergeTaskMain__c from task__c where    mergeTaskMain__c in :compeleteIdList];
        
        if(compeleteList != null){
            for(task__c tsk : compeleteList){
                tsk.taskStatus__c = '03 完成';
            }
            update compeleteList;
        }*/
 
        /*
        2021-12-28  注释处理不同类型任务合并内容,只上线相同类型任务合并
        List<task__c> cancelList = [select Id,taskStatus__c,mergeTaskMain__c from task__c where     mergeTaskMain__c in :cancelIdList];
        if(cancelList != null){
            for(task__c tsk : cancelList){
                tsk.mergeTaskMain__c = null;
            }
            update cancelList;
        }
 
        List<task__c> postponeList = [select Id,taskStatus__c,mergeTaskMain__c from task__c where   mergeTaskMain__c in :postponeIdList];
        if(postponeList != null){
            for(task__c tsk : postponeList){
                tsk.mergeTaskMain__c = null;
            }
            update postponeList;
        }
 
        List<task__c> takeList = [select Id,taskStatus__c,mergeTaskMain__c from task__c where   mergeTaskMain__c in :takeIdList];
        if(takeList != null){
            for(task__c tsk : takeList){
                tsk.taskStatus__c = '02 接受';
                tsk.ConfirmDate__c = newMap.get(tsk.mergeTaskMain__c).ConfirmDate__c;
            }
            update takeList;
        }*/
 
 
        /*List<task__c> closeList = [select Id,taskStatus__c,mergeTaskMain__c from task__c where    mergeTaskMain__c in :closeIdList];
        if(closeList != null){
            for(task__c tsk : closeList){
                tsk.taskStatus__c = '06 关闭';
            }
            update closeList;
        }
 
        List<task__c> unexecutedList = [select Id,taskStatus__c,mergeTaskMain__c from task__c where     mergeTaskMain__c in :unexecutedIdList];
        
        if(unexecutedList != null){
            for(task__c tsk : unexecutedList){
                tsk.taskStatus__c = '07 未执行';
            }
            update unexecutedList;
        }*/
        
 
    }
 
    //2021-11-04  mzy  任务管理改善 start
    //当任务新建时,任务名称为*时,根据规则重新修改任务名称
    public void updateTaskNameAndOwner(List<task__c> newList,List<task__c> oldList,Map<Id,task__c> newMap,Map<Id,task__c> oldMap){
        System.debug('进入任务触发器');
        //定义变量保存记录类型
        
        Id Hcen_TaskId = Schema.SObjectType.task__c.getRecordTypeInfosByDeveloperName().get('HAccountVisit').getRecordTypeId();
        Map<String,String> taskPREMap = gettaskPREMap();
        List<Task__c> needUpdate = new List<Task__c>();
        Set<String> searchTaskId = new Set<String>();
        Set<String> tempSet = new Set<String>(); //2022-01-12  mzy  上级分配的记录类型为其他 的任务可能没有客户,需要把名称变为 其他:任务名称
        Set<String> OtherLeadAssig = new Set<String>();  //2022-01-12  mzy  上级分配的记录类型为其他 的任务可能没有客户,需要把名称变为 其他:任务名称
        for(Task__c task :newList){
            if(task.Id!=null){
                //任务名称为*时,且客户不为空时
                if('*'.equals(task.Name)&&task.account__c!=null){
                    searchTaskId.add(task.Id);
                }
 
                //2022-01-12 mzy  上级分配的记录类型为其他 的任务可能没有客户,需要把名称变为 其他:任务名称
                if('上级分配任务'.equals(task.TaskDifferent__c)&&task.account__c == null){
                    tempSet.add(task.Id);
                }
            }
        } 
        //2022-01-12 mzy  上级分配的记录类型为其他 的任务可能没有客户,需要把名称变为 其他:任务名称  start
        if(tempSet.size()>0){
            List<Task__c> tempResult = [SELECT Id,TaskDifferent__c,RecordType.Name FROM Task__c WHERE Id in :tempSet];
 
            if(tempResult.size()>0){
                for(Task__c t:tempResult){
                    if('上级分配任务'.equals(t.TaskDifferent__c)&&'其他'.equals(t.RecordType.Name)){
                        searchTaskId.add(t.id);
                        OtherLeadAssig.add(t.id);
                    }
                }
            }
        }
        //2022-01-12 mzy  上级分配的记录类型为其他 的任务可能没有客户,需要把名称变为 其他:任务名称  end
        System.debug('进入任务触发器的任务:'+searchTaskId);
        if(searchTaskId.size()>0){
           List<Task__c> taskResult = [SELECT Id,Name,TaskDifferent__c,OpportunityId__c,RecordType.Name,taskType__c,OwnerId,account__c,assignee__c,account__r.Name,account__r.OCM_Category__c FROM Task__c WHERE Id in :searchTaskId];
           if(taskResult.size()>0){
                for(Task__c t :taskResult){
                    System.debug('类型:'+t.RecordType.Name);
                    System.debug('任务类型:'+taskPREMap.get(t.RecordType.Name));
                    //2022-01-12 mzy  上级分配的记录类型为其他 的任务可能没有客户,需要把名称变为 其他:任务名称
                    if(taskPREMap.get(t.RecordType.Name)!=null&&(!OtherLeadAssig.contains(t.Id))){
                        Task__c tempTsk = new Task__c();
                        tempTsk.Id = t.Id;
                        //任务的原所有人变为分配者
                        tempTsk.Assignmenter__c = t.OwnerId;
                        //被分配者变为任务的所有人
                        if(t.assignee__c!=null){
                            tempTsk.OwnerId = t.assignee__c;
                        }
                        //如果页面选择询价了,则将询价的以下字段赋值给任务                        
                        //询价等级(分配):记录分配时点的询价等级
                        //预测OCSM签约日(分配):记录分配时点的预测签约日
                        //询价状态 (分配) : 记录分配时点的询价状态
                        //询价创建日 (分配) : 记录分配时点的询价创建日
                        //询价招标日 (分配) : 记录分配时点的询价招标日
                        //询价中标日 (分配) : 记录分配时点的询价中标日
                        if(t.OpportunityId__c != null){                         
                            Opportunity op = [SELECT Id,Competitor__c,Close_Forecasted_Date__c,Created_Day__c,StageName__c,
                            Bid_Date__c,Closing_Bid_Date__c FROM Opportunity WHERE Id  = :t.OpportunityId__c];
                            if(op!=null){
                                tempTsk.OppCompetitorDbt__c = op.Competitor__c;
                                tempTsk.CloseForecastedDateDbt__c = op.Close_Forecasted_Date__c;
                                tempTsk.OpportunityStatusDbt__c = op.StageName__c;
                                tempTsk.OppCreateDateDbt__c =op.Created_Day__c;
                                tempTsk.Bid_DateDbt__c =op.Bid_Date__c;
                                tempTsk.Closing_Bid_DateDbt__c =op.Closing_Bid_Date__c;
                            }
                        }
                        //任务类型(如果任务类型为日常拜访时,后台自动判断是否修改为H层拜访)
                        String typetask = t.RecordType.Name;
                        String OCMCategory = t.account__r.OCM_Category__c;
                        if('日常拜访'.equals(typetask)&&('H1'.equals(OCMCategory)||'H0'.equals(OCMCategory))){
                            tempTsk.RecordTypeId = Hcen_TaskId;
                        }
                        //任务状态
                        tempTsk.taskStatus__c = '01 分配';
                        //是否需要反馈
                        if('上级分配任务'.equals(t.TaskDifferent__c)){
                            tempTsk.NeedFeedback__c = true;
                        }
                        //任务名称
                        String tempAcName = t.account__r.Name;
                        tempTsk.Name = taskPREMap.get(typetask).replace('AccountName',tempAcName);
                        needUpdate.add(tempTsk);
                    }
                    //2022-01-12 mzy  上级分配的记录类型为其他 的任务可能没有客户,需要把名称变为 其他:任务名称
                    if (taskPREMap.get(t.RecordType.Name)!=null&&OtherLeadAssig.contains(t.Id)){
                        //需要变为 其他:任务名称
                        Task__c tempTsk = new Task__c();
                        tempTsk.Id = t.Id;
                        //任务的原所有人变为分配者
                        tempTsk.Assignmenter__c = t.OwnerId;
                        //被分配者变为任务的所有人
                        if(t.assignee__c!=null){
                            tempTsk.OwnerId = t.assignee__c;
                        }
                        //如果页面选择询价了,则将询价的以下字段赋值给任务                        
                        //询价等级(分配):记录分配时点的询价等级
                        //预测OCSM签约日(分配):记录分配时点的预测签约日
                        //询价状态 (分配) : 记录分配时点的询价状态
                        //询价创建日 (分配) : 记录分配时点的询价创建日
                        //询价招标日 (分配) : 记录分配时点的询价招标日
                        //询价中标日 (分配) : 记录分配时点的询价中标日
                        if(t.OpportunityId__c != null){                         
                            Opportunity op = [SELECT Id,Competitor__c,Close_Forecasted_Date__c,Created_Day__c,StageName__c,
                            Bid_Date__c,Closing_Bid_Date__c FROM Opportunity WHERE Id  = :t.OpportunityId__c];
                            if(op!=null){
                                tempTsk.OppCompetitorDbt__c = op.Competitor__c;
                                tempTsk.CloseForecastedDateDbt__c = op.Close_Forecasted_Date__c;
                                tempTsk.OpportunityStatusDbt__c = op.StageName__c;
                                tempTsk.OppCreateDateDbt__c =op.Created_Day__c;
                                tempTsk.Bid_DateDbt__c =op.Bid_Date__c;
                                tempTsk.Closing_Bid_DateDbt__c =op.Closing_Bid_Date__c;
                            }
                        }
                        //任务状态
                        tempTsk.taskStatus__c = '01 分配';
                        //是否需要反馈
                        if('上级分配任务'.equals(t.TaskDifferent__c)){
                            tempTsk.NeedFeedback__c = true;
                        }
                        //任务名称
                        String tempTskName = '其他:' + t.Name;
                        tempTsk.Name = tempTskName;
                        needUpdate.add(tempTsk);
                    }
                }
                if(needUpdate.size()>0){
                  update needUpdate;
                }
           }
        }
    }
    @TestVisible
    private Map<String,String> gettaskPREMap(){
        Map<String,String> taskPREMap = new Map<String,String>();
        taskPREMap.put('多年保修任务',' 多年保修消费率预警任务(AccountName)');
        taskPREMap.put('询价跟进','用户拜访:AccountName');
        taskPREMap.put('H层拜访','用户拜访:AccountName');
        taskPREMap.put('OPD','用户拜访:AccountName');
        taskPREMap.put('SLA报告书任务','服务合同发放报告书任务(AccountName)');
        taskPREMap.put('经销商支持','经销商支持:AccountName');
        taskPREMap.put('学术会议跟进','学术会议:CampaignName');
        taskPREMap.put('服务季报','用户拜访:AccountName');
        taskPREMap.put('目标客户拜访','用户拜访:AccountName');
        taskPREMap.put('维修合同任务','用户拜访:AccountName');
        taskPREMap.put('日常拜访','用户拜访:AccountName');
        taskPREMap.put('其他','其他:AccountName');
        return taskPREMap;
    }
    //2021-11-04  mzy  任务管理改善  end
    //2021-11-17  mzy  任务管理改善  start    
    public void updateOverFeedback(List<task__c> newList,List<task__c> oldList,Map<Id,task__c> newMap,Map<Id,task__c> oldMap){
        //需要反馈并且反馈内容不为空,则算反馈完成
 
        Id OPDID = Schema.SObjectType.task__c.getRecordTypeInfosByDeveloperName().get('OPD').getRecordTypeId();
        List<Id> taskIdList = new List<Id>();//2021-12-14 Yjk 完成反馈任务id集合
        for(task__c tsk : newList){
            if(tsk.NeedFeedback__c&&tsk.FeedbackDescription__c!=null&&tsk.OverFeedback__c != true){
                tsk.OverFeedback__c = true;
                
                taskIdList.add(tsk.id);
            }
            //是否需要反馈
            if('上级分配任务'.equals(tsk.TaskDifferent__c)){
                tsk.NeedFeedback__c = true;
            }
 
 
            //2021-11-17 yjk opd类型新建时给产品明细赋值
            if(OPDID.equals(tsk.RecordTypeId) && '上级分配任务'.equals(tsk.TaskDifferent__c) && tsk.HopeCompletionDate__c != null && tsk.PlanProdDetail__c != null){
                Integer hopeMonth = tsk.HopeCompletionDate__c.month();
                String[] details = tsk.PlanProdDetail__c.split(';');
                String prodectDetail = '';
                for(String dtl : details){
                    prodectDetail =prodectDetail+dtl +':'+hopeMonth+'月;';
                }
                tsk.ProductDetails__c  = prodectDetail;
            }
 
            
 
        }
 
        //发送邮件
        List<Messaging.SingleEmailMessage> sendMails = new List<Messaging.SingleEmailMessage>();
        if(taskIdList.size() > 0){
            List<task__c> newTaskList = [select id,Name,TaskDifferent__c,PlanProdDetail__c,HopeCompletionDate__c,taskType__c,Assignmenter__r.email,NeedFeedback__c ,FeedbackDescription__c,OverFeedback__c from task__c where id in :taskIdList];
 
            for(task__c tsk : newTaskList){
                
                String title = '';
                String body = '';
                title = tsk.name + ' 任务已反馈';
                body += '您好:<br/>';
                body += '任务名为"'+tsk.name+'"的任务已反馈,<br/>';              
                //body += System.Label.OPD_Report;
                body += '具体结果请查阅链接,<a href="' + URL.getSalesforceBaseUrl().toExternalForm() + Label.feedbackTaskId+'">'
                        +URL.getSalesforceBaseUrl().toExternalForm() + Label.feedbackTaskId+ '</a><br/>'; 
                body += '谢谢!';
        
                Messaging.SingleEmailMessage messageNEW = new Messaging.SingleEmailMessage();
                messageNEW.setSubject(title);
                messageNEW.setHtmlBody(body);
                messageNEW.setCharset('UTF-8');
                System.debug('用户邮箱112212:'+tsk.Assignmenter__r.Email);
                messageNEW.setToAddresses(new list<String>{tsk.Assignmenter__r.Email}); 
                //messageNEW.setCcAddresses(new list<String>{'yangjieke@prec-tech.com','miaoziyang@prec-tech.com'});
                //setCcAddresses
                if(tsk.Assignmenter__r.Email != null){
                    sendMails.add(messageNEW);
                }
 
            }
        }
        if (sendMails.size() > 0) {
            Messaging.Email[] allMails = new Messaging.Email[]{};
            for(Integer j = 0; j < sendMails.size(); j++) {
                allMails.add(sendMails.get(j));
            }
            
            System.debug('所有邮件:'+allMails);
            Messaging.SendEmailResult[] results = Messaging.sendEmail(allMails);
            System.debug('results 结果 :'+results);
 
            for (Integer i = 0; i < results.size(); i++) {
                if (results[i].success == false) {
                    system.debug('=====send mail error:' + results[i].errors[0].message);
                }   
            }
        }
        
    }
    //2021-11-17  mzy  任务管理改善  end
 
    //2021-11-29  mzy  任务管理改善  start
    public void BeforeCheck(List<task__c> newList,List<task__c> oldList,Map<Id,task__c> newMap,Map<Id,task__c> oldMap){
        //分配者:
        //  对当前医院有权限的人(主担当,产品担当,FSE),保存检查是否有权限  ——   请协助确认是否只能选科室担当人
        //客户Id
        Set<String> accountIdset = new Set<String>();
        //客户List
        List<Account> alist = new List<Account>();
        //客户Map
        //key:科室Id v:担当
        Map<String,List<String>> amap = new Map<String,List<String>>();
        //key:科室Id v:产品担当
        Map<String,List<String>> amap_product = new Map<String,List<String>>();
        //key:科室Id v:产品担当文本名
        Map<String,Set<String>> amap_productSet = new Map<String,Set<String>>();
        //定义Set存放所有产品担当文本名
        Set<String> largeSet = new Set<String>();
        //科室
        //key:科室Id v:科室
        Map<String,Account> amap_Act = new Map<String,Account>();
        for(task__c tsk : newList){
            if('上级分配任务'.equals(tsk.TaskDifferent__c)&&tsk.account__c != null){
                accountIdset.add(tsk.account__c);
            }
            if('上级分配任务'.equals(tsk.TaskDifferent__c)){
                tsk.distributeReason__c = '上级分配';
            }
        }
        //查询当前客户的主担当,产品担当,FSE
        if(accountIdset.size()>0){              
            alist = [SELECT Id,Hospital__c,Hospital__r.OwnerId,Hospital__r.GI_Main__c,Hospital__r.GI_Main__r.isActive,
            Hospital__r.BF_owner__c,Hospital__r.BF_owner__r.isActive ,Hospital__r.ET_owner__c ,Hospital__r.ET_owner__r.isActive ,
            Hospital__r.SP_Main__c ,Hospital__r.SP_Main__r.isActive,Hospital__r.URO_owner_ID__c,Hospital__r.URO_owner_ID__r.isActive ,
            Hospital__r.GYN_owner__c,Hospital__r.GYN_owner__r.isActive,Hospital__r.ENT_owner_ID__c,Hospital__r.ENT_owner_ID__r.isActive,
            Hospital__r.FSE_SP_Main_Leader__c,Hospital__r.FSE_SP_Main_Leader__r.isActive,
            Hospital__r.FSE_GI_Main_Leader__c,Hospital__r.FSE_GI_Main_Leader__r.isActive ,Department_Class__c,Department_Class__r.Department_Class_Label__c,
            Hospital__r.GI_Product_Leader__c,Hospital__r.BF_Product_Leader__c,Hospital__r.ET_Product_Leader__c,
            Hospital__r.GS_Product_Leader__c,Hospital__r.URO_Produc_Leader__c,Hospital__r.Energy_LeaderStr__c,
            Hospital__r.GYN_Product_Leader__c,Hospital__r.ENT_Product_Leader__c,Hospital__r.FSE_SP_Vice_Leader__c,
            Hospital__r.FSE_GI_Vice_Leader__c 
            FROM Account WHERE Id in :accountIdset];
 
            if(alist.size()>0){
 
                for(Account tempa:alist){
                    String deptlabel = tempa.Department_Class__r.Department_Class_Label__c;
                    List<String> tempAlist = new List<String>();
 
                    if('消化科'.equals(deptlabel)){
                        //用户启用
                        if(tempa.Hospital__r.GI_Main__r.isActive){
                            tempAlist.add(tempa.Hospital__r.GI_Main__c);
                        }
                        String tempProd = tempa.Hospital__r.GI_Product_Leader__c;
                        if(String.isNotBlank(tempProd)){
                            if(tempProd.contains(',')){
                                largeSet.addAll(tempProd.split(','));
                            }else{
                                largeSet.add(tempProd);
                            }
                        }
                    }
                    if('呼吸科'.equals(deptlabel)){
                        //用户启用
                        if(tempa.Hospital__r.BF_owner__r.isActive){
                            tempAlist.add(tempa.Hospital__r.BF_owner__c); 
                        }
                        String tempProd = tempa.Hospital__r.BF_Product_Leader__c;
                        if(String.isNotBlank(tempProd)){
                            if(tempProd.contains(',')){
                                largeSet.addAll(tempProd.split(','));
                            }else{
                                largeSet.add(tempProd);
                            }
                        }
                    }
                    if('普外科'.equals(deptlabel)){
                        //用户启用
                        if(tempa.Hospital__r.SP_Main__r.isActive){
                            tempAlist.add(tempa.Hospital__r.SP_Main__c); 
                        }
                        String tempProd = tempa.Hospital__r.GS_Product_Leader__c;
                        if(String.isNotBlank(tempProd)){
                            if(tempProd.contains(',')){
                                largeSet.addAll(tempProd.split(','));
                            }else{
                                largeSet.add(tempProd);
                            }
                        }
                    }
                    if('泌尿科'.equals(deptlabel)){
                        //用户启用
                        if(tempa.Hospital__r.URO_owner_ID__r.isActive){
                            tempAlist.add(tempa.Hospital__r.URO_owner_ID__c);
                        }
                        String tempProd = tempa.Hospital__r.URO_Produc_Leader__c;
                        if(String.isNotBlank(tempProd)){
                            if(tempProd.contains(',')){
                                largeSet.addAll(tempProd.split(','));
                            }else{
                                largeSet.add(tempProd);
                            }
                        }
                    }
                    if('妇科'.equals(deptlabel)){
                        //用户启用
                        if(tempa.Hospital__r.GYN_owner__r.isActive){
                            tempAlist.add(tempa.Hospital__r.GYN_owner__c);
                        }
                        String tempProd = tempa.Hospital__r.GYN_Product_Leader__c;
                        if(String.isNotBlank(tempProd)){
                            if(tempProd.contains(',')){
                                largeSet.addAll(tempProd.split(','));
                            }else{
                                largeSet.add(tempProd);
                            }
                        }
                    }
                    if('耳鼻喉科'.equals(deptlabel)){
                        //用户启用
                        if(tempa.Hospital__r.ENT_owner_ID__r.isActive){
                            tempAlist.add(tempa.Hospital__r.ENT_owner_ID__c);
                        }
                        String tempProd = tempa.Hospital__r.ENT_Product_Leader__c;
                        if(String.isNotBlank(tempProd)){
                            if(tempProd.contains(',')){
                                largeSet.addAll(tempProd.split(','));
                            }else{
                                largeSet.add(tempProd);
                            }
                        }
                    }
                    if('ET'.equals(deptlabel)){
                        //用户启用
                        if(tempa.Hospital__r.ET_owner__r.isActive){
                            tempAlist.add(tempa.Hospital__r.ET_owner__c);
                        }
                        String tempProd = tempa.Hospital__r.ET_Product_Leader__c;
                        if(String.isNotBlank(tempProd)){
                            if(tempProd.contains(',')){
                                largeSet.addAll(tempProd.split(','));
                            }else{
                                largeSet.add(tempProd);
                            }
                        }
                    }
                    tempAlist.add(tempa.Hospital__r.OwnerId); 
                    // if(tempa.Hospital__r.FSE_SP_Main_Leader__r.isActive){
                    //  tempAlist.add(tempa.Hospital__r.FSE_SP_Main_Leader__c); 
                    // }
                    amap.put(tempa.Id,tempAlist);
                    amap_Act.put(tempa.Id,tempa);
                }
 
                if(largeSet.size()>0){
                    //根据别名查询启用的用户
                    List<User> uselist = [SELECT Id,Alias FROM User Where IsActive = true and Alias in :largeSet];
                    if(uselist.size()>0){                           
                        for(Account tempa:alist){                           
                            String deptlabel = tempa.Department_Class__r.Department_Class_Label__c;
                            List<String> uids = new List<String>();
                            for(User u :uselist){
                                if('消化科'.equals(deptlabel)
                                && tempa.Hospital__r.GI_Product_Leader__c.contains(u.Alias) ){
                                    uids.add(u.Id);
                                }
                                if('呼吸科'.equals(deptlabel)
                                &&tempa.Hospital__r.BF_Product_Leader__c.contains(u.Alias)){
                                    uids.add(u.Id);
                                }
                                if('普外科'.equals(deptlabel)
                                &&tempa.Hospital__r.GS_Product_Leader__c.contains(u.Alias)){
                                    uids.add(u.Id);
                                }
                                if('泌尿科'.equals(deptlabel)
                                &&tempa.Hospital__r.URO_Produc_Leader__c.contains(u.Alias)){
                                    uids.add(u.Id);
                                }
                                if('妇科'.equals(deptlabel)
                                &&tempa.Hospital__r.GYN_Product_Leader__c.contains(u.Alias)){
                                    uids.add(u.Id);
                                }
                                if('耳鼻喉科'.equals(deptlabel)
                                &&tempa.Hospital__r.ENT_Product_Leader__c.contains(u.Alias)){
                                    uids.add(u.Id);
                                }
                                if('ET'.equals(deptlabel)
                                &&tempa.Hospital__r.ET_Product_Leader__c.contains(u.Alias)){
                                    uids.add(u.Id);
                                }
                            }
 
                            if(amap.get(tempa.Id)!=null){
                                List<String> tempList = amap.get(tempa.Id);
                                if(uids.size()>0){
                                    tempList.addAll(uids);
                                }
                                amap.put(tempa.Id,tempList);
                            }
                        }
                    }
                }
            }
        }
        for(task__c tsk : newList){
            if('上级分配任务'.equals(tsk.TaskDifferent__c)&&tsk.account__c != null){
                if(amap_Act.get(tsk.account__c)!=null){
                    List<String> ActlistV= amap.get(tsk.account__c);
                    if(!ActlistV.contains(tsk.assignee__c)){
                        tsk.assignee__c.addError('请选择对当前科室有权限的人员进行分配!');
                        break;
                    }
                }
            }
        }
 
    }
    //2021-11-29  mzy  任务管理改善  end
 
}