| trigger MaintenanceContractHpDeptUpd on Maintenance_Contract__c (before insert, before update) { | 
|     List<String> accIds = new List<String>(); | 
|     List<String> userIds = new List<String>(); | 
|     String profiledStr = UserInfo.getProfileId(); | 
|     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; | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|     } | 
| } |