| trigger SolutionProjectRequirementsTrigger on SolutionProjectRequirements__c(before insert,before update,after insert) { | 
|      | 
|     if((trigger.isBefore && trigger.isInsert)||(trigger.isBefore && trigger.isUpdate)){ | 
|         Set<String> accId = new Set<String>(); | 
|         Set<String> userId = new Set<String>(); | 
|   | 
|         for(SolutionProjectRequirements__c sol :Trigger.new){ | 
|   | 
|             // LZHU-BR94XT 20200707 赵赐 start | 
|             //修改内容: 医院名称为空,从科室获取对应医院名称 | 
|             if (sol.Hospital__c == null) { | 
|                 // 获取赋值 | 
|                 sol.Hospital__c = sol.GetIdFromDepartment__c;  | 
|             } | 
|             // LZHU-BR94XT 20200707 赵赐 end | 
|   | 
|             // LZHU-BR94XT 20200707 赵赐 start | 
|             //修改内容: 从科室获取对应医院名称 | 
|             // sol.Hospital__c = sol.GetIdFromDepartment__c;  | 
|             // LZHU-BR94XT 20200707 赵赐 end | 
|   | 
|             if(sol.Hospital__c != null){ | 
|                 accId.add(sol.Hospital__c); | 
|             } | 
|   | 
|              | 
|             if(sol.Submitter__c != null){ | 
|                 userId.add(sol.Submitter__c); | 
|                 // if(sol.CreatedById != null){ | 
|                 //     userId.add(sol.CreatedById); | 
|                 // } | 
|                  | 
|             } | 
|             // 为营业担当赋值为创建人 | 
|             if(trigger.isBefore && trigger.isInsert){ | 
|                 // if(sol.HospitalOwner__c == null ){ | 
|                 sol.HospitalOwner__c = UserInfo.getUserId(); | 
|                 if(sol.Submit_Date_YouWant__c < Date.today().addDays(3)){ | 
|                     sol.Submit_Date_YouWant__c.addError('希望提交日期不得小于三天,如紧急需求请邮件联络Solution担当'); | 
|                 } | 
|                 // } | 
|             } | 
|              | 
|         } | 
|   | 
|   | 
|         List<Account> acclist = [select id,Province_formula__c,GI_Main__c,BF_owner__c,Salesdepartment_HP__c from Account where id = :accId]; | 
|         List<User> usrList = [select id,name,SalesManager__c from User where id = :userId]; | 
|         Map<String,User> usrMap = new Map<String,User>(); | 
|         Map<String,Account> accProMap = new Map<String,Account>(); | 
|         // Map<String,User> userMap = new Map<String,User>(); | 
|         for(Account acc :acclist){ | 
|             accProMap.put(acc.Id, acc); | 
|         } | 
|         for(User usr : usrList){ | 
|             usrMap.put(usr.Id, usr); | 
|         } | 
|         // 获取大区的最新编号 | 
|         List<GIRSolutionAreaNumber__c> girAreaList = [select Id,Name,GIRSolutionXN__c,GIRSolutionXB__c,GIRSolutionDB__c,GIRSolutionHN__c,GIRSolutionHB__c,GIRSolutionHD__c from GIRSolutionAreaNumber__c]; | 
|         Map<String,GIRSolutionAreaNumber__c> girAreaMap = new Map<String,GIRSolutionAreaNumber__c>(); | 
|         for(GIRSolutionAreaNumber__c girarea : girAreaList){ | 
|             // 根据OCSM期来找对应编号。 | 
|             girAreaMap.put(girarea.Name, girarea); | 
|         } | 
|         for(SolutionProjectRequirements__c sol :Trigger.new){             | 
|   | 
|             // 判断OCSM期 | 
|             Datetime ocsmDate = Datetime.now(); | 
|             String ocsmPeriod = ''; | 
|   | 
|             if(sol.CreatedDate != null){ | 
|                 ocsmDate = sol.CreatedDate; | 
|             } | 
|             // 根据创建日期判断ocsm期 | 
|             if(ocsmDate.month() == 1 || ocsmDate.month() == 2 || ocsmDate.month() == 3){ | 
|                 ocsmPeriod = ocsmPeriod = ocsmDate.year()-1868+'P'; | 
|             }else{ | 
|                 ocsmPeriod = ocsmDate.year()-1867+'P'; | 
|             } | 
|             if(accProMap.containsKey(sol.Hospital__c)){ | 
|                 // 为省字段赋值 | 
|                 sol.Province__c = accProMap.get(sol.Hospital__c).Province_formula__c; | 
|                 // 为营业经理赋值 | 
|                 if(sol.Submitter__c != null){ | 
|                      | 
|                     // 为营业经理赋值 | 
|                     if(usrMap.containsKey(sol.Submitter__c)){ | 
|                         if(usrMap.get(sol.Submitter__c).SalesManager__c != null){ | 
|                             sol.sale_Manager__c = usrMap.get(sol.Submitter__c).SalesManager__c; | 
|                         }else{ | 
|                             sol.sale_Manager__c = sol.Submitter__c; | 
|                         } | 
|                          | 
|                     } | 
|                      | 
|   | 
|                 } | 
|                 // 为大区编号赋值 | 
|                 String salesdepartmentHP = accProMap.get(sol.Hospital__c).Salesdepartment_HP__c; | 
|                 if(sol.Area_Number__c == '' || sol.Area_Number__c == null){ | 
|                     if(salesdepartmentHP == '1.华北'){ | 
|                         Decimal areaHB = girAreaMap.get(ocsmPeriod).GIRSolutionHB__c; | 
|                         if(areaHB >= 1 && areaHB < 10){ | 
|                             sol.Area_Number__c = '00'+areaHB; | 
|                         }else if(areaHB >= 10 && areaHB < 100){ | 
|                             sol.Area_Number__c = '0'+areaHB; | 
|                         }else{ | 
|                             sol.Area_Number__c = ''+areaHB; | 
|                         } | 
|                         areaHB++; | 
|                         girAreaMap.get(ocsmPeriod).GIRSolutionHB__c = areaHB; | 
|                     }else if(salesdepartmentHP == '2.东北'){ | 
|                         Decimal areaDB = girAreaMap.get(ocsmPeriod).GIRSolutionDB__c; | 
|                         if(areaDB >= 1 && areaDB < 10){ | 
|                             sol.Area_Number__c = '00'+areaDB; | 
|                         }else if(areaDB >= 10 && areaDB < 100){ | 
|                             sol.Area_Number__c = '0'+areaDB; | 
|                         }else{ | 
|                             sol.Area_Number__c = ''+areaDB; | 
|                         } | 
|                         areaDB++; | 
|                         girAreaMap.get(ocsmPeriod).GIRSolutionDB__c = areaDB; | 
|                     }else if(salesdepartmentHP == '3.西北'){ | 
|                         Decimal areaXB = girAreaMap.get(ocsmPeriod).GIRSolutionXB__c; | 
|                         if(areaXB >= 1 && areaXB < 10){ | 
|                             sol.Area_Number__c = '00'+areaXB; | 
|                         }else if(areaXB >= 10 && areaXB < 100){ | 
|                             sol.Area_Number__c = '0'+areaXB; | 
|                         }else{ | 
|                             sol.Area_Number__c = ''+areaXB; | 
|                         } | 
|                         areaXB++; | 
|                         girAreaMap.get(ocsmPeriod).GIRSolutionXB__c = areaXB; | 
|                     }else if(salesdepartmentHP == '4.西南'){ | 
|                         Decimal areaXN = girAreaMap.get(ocsmPeriod).GIRSolutionXN__c; | 
|                         if(areaXN >= 1 && areaXN < 10){ | 
|                             sol.Area_Number__c = '00'+areaXN; | 
|                         }else if(areaXN >= 10 && areaXN < 100){ | 
|                             sol.Area_Number__c = '0'+areaXN; | 
|                         }else{ | 
|                             sol.Area_Number__c = ''+areaXN; | 
|                         } | 
|                         areaXN++; | 
|                         girAreaMap.get(ocsmPeriod).GIRSolutionXN__c = areaXN; | 
|                     }else if(salesdepartmentHP == '5.华东'){ | 
|                         Decimal areaHD = girAreaMap.get(ocsmPeriod).GIRSolutionHD__c; | 
|                         if(areaHD >= 1 && areaHD < 10){ | 
|                             sol.Area_Number__c = '00'+areaHD; | 
|                         }else if(areaHD >= 10 && areaHD < 100){ | 
|                             sol.Area_Number__c = '0'+areaHD; | 
|                         }else{ | 
|                             sol.Area_Number__c = ''+areaHD; | 
|                         } | 
|                         areaHD++; | 
|                         girAreaMap.get(ocsmPeriod).GIRSolutionHD__c = areaHD; | 
|                     }else if(salesdepartmentHP == '6.华南'){ | 
|                         Decimal areaHN = girAreaMap.get(ocsmPeriod).GIRSolutionHN__c; | 
|                         if(areaHN >= 1 && areaHN < 10){ | 
|                             sol.Area_Number__c = '00'+areaHN; | 
|                         }else if(areaHN >= 10 && areaHN < 100){ | 
|                             sol.Area_Number__c = '0'+areaHN; | 
|                         }else{ | 
|                             sol.Area_Number__c = ''+areaHN; | 
|                         } | 
|                         areaHN++; | 
|                         girAreaMap.get(ocsmPeriod).GIRSolutionHN__c = areaHN; | 
|                     }else{ | 
|                         // sol.Area_Number__c = 'ERROR'; | 
|                     } | 
|                 } | 
|                  | 
|             } | 
|              | 
|             //为GIR窗口赋值 | 
|             if(sol.GIR_ID__c != '' && sol.GIR_ID__c != null){ | 
|                 sol.GIR_Assistant__c = sol.GIR_ID__c; | 
|             } | 
|             // 名称赋值 | 
|             if(sol.NoHand_Writing__c != '' && sol.NoHand_Writing__c != null ){ | 
|                 sol.Name = sol.NoHand_Writing__c; | 
|                 System.debug('=====1'+sol.OCM_period__c + '-' + sol.ProvinceAbbreviation__c + '-' + sol.Area_Number__c); | 
|             }else{ | 
|             //20201225 you WLIG-BV8CHF start | 
|                 System.debug('=====2'+sol.OCM_period_New__c+ '-' + sol.ProvinceAbbreviation__c + '-' + sol.Area_Number__c); | 
|                 sol.Name = sol.OCM_period_New__c + '-' + sol.ProvinceAbbreviation__c + '-' + sol.Area_Number__c; | 
|             //20201225 you WLIG-BV8CHF end | 
|             } | 
|             // 营业项目窗口赋值 | 
|             if(sol.Salesdepartment_HP__c == '1.华北'){ | 
|                 sol.Sales_Assistant__c ='00510000001OOLj'; | 
|                 // urlStr += '&CF00Np00000045HcO=' + encodeURI("肖 娜"); | 
|             }else if(sol.Salesdepartment_HP__c == '2.东北'){ | 
|                 sol.Sales_Assistant__c ='00510000001OOSZ'; | 
|                 // urlStr += '&CF00Np00000045HcO=' + encodeURI("金 丽华"); | 
|             }else if(sol.Salesdepartment_HP__c == '3.西北'){ | 
|                 sol.Sales_Assistant__c ='00510000007kteE'; | 
|                 // urlStr += '&CF00Np00000045HcO=' + encodeURI("王 喆"); | 
|             }else if(sol.Salesdepartment_HP__c == '4.西南'){ | 
|                 sol.Sales_Assistant__c ='00510000001OORm'; | 
|                 // urlStr += '&CF00Np00000045HcO=' + encodeURI("李 娟"); | 
|             }else if(sol.Salesdepartment_HP__c == '5.华东'){ | 
|                 sol.Sales_Assistant__c ='00510000000gW9G'; | 
|                 // urlStr += '&CF00Np00000045HcO=' + encodeURI("杨 剑清"); | 
|             }else if(sol.Salesdepartment_HP__c == '6.华南'){ | 
|                 sol.Sales_Assistant__c ='00510000001OOJy'; | 
|                 // urlStr += '&CF00Np00000045HcO=' + encodeURI("王 志锋"); | 
|             }else{ | 
|                 //  | 
|             } | 
|   | 
|         } | 
|         // 更新大区最新编号 | 
|         // girAreaList[0].GIRSolutionHB__c = areaHB; | 
|         // girAreaList[0].GIRSolutionDB__c = areaDB; | 
|         // girAreaList[0].GIRSolutionXB__c = areaXB; | 
|         // girAreaList[0].GIRSolutionXN__c = areaXN; | 
|         // girAreaList[0].GIRSolutionHD__c = areaHD; | 
|         // girAreaList[0].GIRSolutionHN__c = areaHN; | 
|         List<GIRSolutionAreaNumber__c> girUpAreaList = new List<GIRSolutionAreaNumber__c>(); | 
|         girUpAreaList = girAreaMap.values(); | 
|         update girUpAreaList; | 
|   | 
|     } | 
|     if(trigger.isBefore && trigger.isInsert){ | 
|         Set<String> accId = new Set<String>(); | 
|         Set<String> userId = new Set<String>(); | 
|         for(SolutionProjectRequirements__c sol :Trigger.new){ | 
|             if(sol.Hospital__c != null){ | 
|                 accId.add(sol.Department_Class__c); | 
|             } | 
|             // if(sol.CreatedById != null){ | 
|             //     userId.add(sol.CreatedById); | 
|             // } | 
|   | 
|             // 为营业担当赋值为创建人 | 
|             // if(sol.HospitalOwner__c == null ){ | 
|             //     sol.HospitalOwner__c = sol.CreatedById; | 
|             // } | 
|         } | 
|         // 取科室的战略科室担当 | 
|         List<Account> acclist = [select id,Department_Class__r.Department_Class_Label__c,Department_Class__r.OwnerId,Department_Class__r.Owner.SalesManager__c,Hospital__r.GI_Main__c,Hospital__r.BF_Product_Leader__c,Hospital__r.BF_owner__c,Hospital__r.GI_Product_Leader__c,Hospital__r.ET_owner__c,Hospital__r.ET_Product_Leader__c,Hospital__r.SP_Main__c,Hospital__r.GS_Product_Leader__c,Hospital__r.URO_owner_ID__c,Hospital__r.URO_Produc_Leader__c,Hospital__r.GYN_owner__c,Hospital__r.GYN_Product_Leader__c,Hospital__r.ENT_owner_ID__c,Hospital__r.ENT_Product_Leader__c  from Account where id = :accId]; | 
|         // List<User> userList = [select id,name,SalesManager__c from User where id = :userId]; | 
|         Map<String,Account> accProMap = new Map<String,Account>(); | 
|         Map<String,String> accDepartMap = new Map<String,String>(); | 
|         // Map<String,User> userMap = new Map<String,User>(); | 
|         for(Account acc :acclist){ | 
|             accProMap.put(acc.Id, acc); | 
|             if(acc.Department_Class__r.Department_Class_Label__c == '消化科'){ | 
|                 accDepartMap.put(acc.Id, acc.Hospital__r.GI_Product_Leader__c); | 
|             }else if(acc.Department_Class__r.Department_Class_Label__c == '呼吸科'){ | 
|                 accDepartMap.put(acc.Id, acc.Hospital__r.BF_Product_Leader__c); | 
|             }else if(acc.Department_Class__r.Department_Class_Label__c == '普外科' || acc.Department_Class__r.Department_Class_Label__c == '其他'){ | 
|                 accDepartMap.put(acc.Id, acc.Hospital__r.GS_Product_Leader__c); | 
|             }else if(acc.Department_Class__r.Department_Class_Label__c == '泌尿科'){ | 
|                 accDepartMap.put(acc.Id, acc.Hospital__r.URO_Produc_Leader__c); | 
|             }else if(acc.Department_Class__r.Department_Class_Label__c == '妇科'){ | 
|                 accDepartMap.put(acc.Id, acc.Hospital__r.GYN_Product_Leader__c); | 
|             }else if(acc.Department_Class__r.Department_Class_Label__c == '耳鼻喉科'){ | 
|                 accDepartMap.put(acc.Id, acc.Hospital__r.ENT_Product_Leader__c); | 
|             }else if(acc.Department_Class__r.Department_Class_Label__c == 'ET'){ | 
|                 accDepartMap.put(acc.Id, acc.Hospital__r.ET_Product_Leader__c); | 
|             }else{ | 
|   | 
|             } | 
|         } | 
|         // for(User usr : userList){ | 
|         //     userMap.put(usr.Id, usr); | 
|         // } | 
|         for(SolutionProjectRequirements__c sol :Trigger.new){ | 
|             // 科室对应的产品担当 | 
|             String departProLeader = ''; | 
|             if(accDepartMap.containsKey(sol.Department_Class__c)){ | 
|                 departProLeader = accDepartMap.get(sol.Department_Class__c); | 
|                 sol.Product_Leader__c = departProLeader; | 
|             } | 
|              | 
|             // 判断是否有权新建solution项目需求 | 
|             // System.debug('======'+sol.CreatedById+'======'+accProMap.get(sol.Department_Class__c).Department_Class__r.OwnerId+'======'+accProMap.get(sol.Department_Class__c).Department_Class__r.Owner.SalesManager__c); | 
|             if(accProMap.containsKey(sol.Department_Class__c)){ | 
|                 // 如果不等于战略科室担当并且不等于战略科室担当经理推广的,报错不能创建。System.UserInfo.getUserId() | 
|                 if(System.UserInfo.getUserId() != accProMap.get(sol.Department_Class__c).Department_Class__r.OwnerId && System.UserInfo.getUserId() != accProMap.get(sol.Department_Class__c).Department_Class__r.Owner.SalesManager__c && !departProLeader.contains(System.UserInfo.getName().replace(' ', ''))){ | 
|                     sol.addError('只允其战略科室主担当、产品担当及省经理创建solution项目需求!'); | 
|                 } | 
|   | 
|             } | 
|         } | 
|     } | 
|      | 
|   | 
| } |