binxie
2024-01-18 0e0dd1e20e7211f3c3c11d77a41090d998dfd06c
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
trigger MaintenanceContractHpDeptUpd on Maintenance_Contract__c (before insert, before update) {
 
    //deloitte-zhj 20231124 本地化导入 start
    if((!Test.isRunningTest())&&System.Label.ByPassTrigger.contains(UserInfo.getUserId())){
        return;
    }
    //deloitte-zhj 20231124 本地化导入 end
    
    if (StaticParameter.MaintenanceContractHpDeptUpdTrigger) {
        List<String> accIds = new List<String>();
        List<String> userIds = new List<String>();
        for(Maintenance_Contract__c mc : Trigger.new) {
            if (Trigger.isInsert) {
                accIds.add(mc.Department__c);
                userIds.add(mc.Service_Contract_Staff__c);
            }
            // LJPH-BYZ8PP gwy start
            if (Trigger.isBefore) {
                if (Trigger.isUpdate) {
                    if (Trigger.oldMap.get(mc.Id).get('Contract_Conclusion_Date__c') != mc.Contract_Conclusion_Date__c 
                        && mc.Maintenance_Contract_No__c == null) {
                        accIds.add(mc.Maintenance_Contract_No__c= mc.Management_Code__c);
                    }
                }
            }
            // LJPH-BYZ8PP gwy end
            if (Trigger.isUpdate) {
                if (Trigger.oldMap.get(mc.Id).get('Department__c') != mc.Department__c && String.isBlank(mc.Department__c) == false) {
                    accIds.add(mc.Department__c);
                }
                if(Trigger.oldMap.get(mc.Id).get('Service_Contract_Staff__c') != mc.Service_Contract_Staff__c 
                    || Trigger.oldMap.get(mc.Id).get('Mail_Staff_JingliManager__c') == null
                    || Trigger.oldMap.get(mc.Id).get('Mail_Staff_BuzhangManager__c') == null) {
                    userIds.add(mc.Service_Contract_Staff__c);
                }
            }
        }
        
        if (accIds.size() > 0) {
            // 診療科レコードタイプ
 
            //  LD 20200807 优化account record type ID 读取方法 Start
            String[] deptTypes = new String[] {'病院', '診療科 その他', '診療科 呼吸科', '診療科 婦人科', '診療科 普外科', '診療科 泌尿科', '診療科 消化科', '診療科 耳鼻喉科'};
            
            // 原逻辑
            // List<RecordType> deptRects = [select Id, Name from RecordType where IsActive = true and SobjectType = 'Account' and Name IN :deptTypes];
            // Map<String, String> deptRectMap = new Map<String, String>();
            // for (RecordType rect : deptRects) {
            //     deptRectMap.put(rect.Id, rect.Name);
            // }
 
            // 新逻辑
            String [] RecordTypeId = new String[] {System.Label.HP , System.Label.Department_OTH , System.Label.Department_BF , System.Label.Department_GYN , System.Label.Department_GS , System.Label.Department_URO , System.Label.Department_GI , System.Label.Department_ENT };
            Map<String, String> deptRectMap = new Map<String, String>();
            deptRectMap.put(RecordTypeId[0], deptTypes[0]);
            deptRectMap.put(RecordTypeId[1], deptTypes[1]);
            deptRectMap.put(RecordTypeId[2], deptTypes[2]);
            deptRectMap.put(RecordTypeId[3], deptTypes[3]);
            deptRectMap.put(RecordTypeId[4], deptTypes[4]);
            deptRectMap.put(RecordTypeId[5], deptTypes[5]);
            deptRectMap.put(RecordTypeId[6], deptTypes[6]);
            deptRectMap.put(RecordTypeId[7], deptTypes[7]);
 
            //  LD 20200807 优化account record type ID 读取方法 End
 
            Map<Id, Account> accMap = new Map<Id, Account>();
            List<Account> accs = ControllerUtil.selectAccountForTrigger(accIds);
            for(Account acc : accs) {
                accMap.put(acc.Id, acc);
            }
            
            for(Maintenance_Contract__c mc : Trigger.new) {
                // 「診療科」に診療科を選択する場合
                Account acc = accMap.get(mc.Department__c);
                if (acc != null
                        && deptRectMap.get(acc.RecordTypeId) != null) {
                    if (deptRectMap.get(acc.RecordTypeId) == '病院') {
                        mc.Department_Class__c = null;
                        mc.Hospital__c = acc.Id;
                    } else {
                        mc.Department_Class__c = acc.ParentId;
                        mc.Hospital__c = acc.Parent.ParentId;
                    }
                }
            }
        }
 
        // 邮件用主担当部长、邮件用主担当经理 设置
        if (userIds.size() > 0) {
            List<User> retList = [select Id, JingLifuwuId__c, BuZhangFuwuId__c from User where Id in : userIds];
            Map<Id, User> userMap = new Map<Id, User>();
            for (User u : retList) {
                userMap.put(u.Id, u);
            }
            for(Maintenance_Contract__c mc : Trigger.new) {
                if (Trigger.isInsert) {
                    User us = userMap.get(mc.Service_Contract_Staff__c);
                    if (us != null) {
                        mc.Mail_Staff_JingliManager__c = us.JingLifuwuId__c;
                        mc.Mail_Staff_BuzhangManager__c = us.BuZhangFuwuId__c;
                    }
                }
                if (Trigger.isUpdate) {
                    if(Trigger.oldMap.get(mc.Id).get('Service_Contract_Staff__c') != mc.Service_Contract_Staff__c
                        || Trigger.oldMap.get(mc.Id).get('Mail_Staff_JingliManager__c') == null
                        || Trigger.oldMap.get(mc.Id).get('Mail_Staff_BuzhangManager__c') == null) {
                        User us = userMap.get(mc.Service_Contract_Staff__c);
                        if (us != null) {
                            mc.Mail_Staff_JingliManager__c = us.JingLifuwuId__c;
                            mc.Mail_Staff_BuzhangManager__c = us.BuZhangFuwuId__c;
                        }
                    }
                }
            }
        }
             
    }
    
}