public without sharing class InquiryFormHandler extends Oly_TriggerHandler { private Map newMap; private Map oldMap; private List newList; private List oldList; public InquiryFormHandler(){ this.newMap = (Map) Trigger.newMap; this.oldMap = (Map) Trigger.oldMap; this.newList = (List) Trigger.new; this.oldList = (List) Trigger.old; } protected override void beforeInsert() { beforeExecute(); //客户人员录入后,【电话】【邮箱】自动录入 thh 20220321 start // getContactInformation(); //客户人员录入后,【电话】【邮箱】自动录入 thh 20220321 end } protected override void beforeUpdate() { beforeExecute(); //客户人员录入后,【电话】【邮箱】自动录入 thh 20220321 start // getContactInformation(); //客户人员录入后,【电话】【邮箱】自动录入 thh 20220321 end } protected override void afterInsert() { //FSE主担当共享 shareToFSEMain(); } protected override void afterUpdate() { shareToFSEMain(); } //Before処理 private void beforeExecute() { Map accMap = new Map(); Inquiry_form__c oObj = null; List depIDList = new List(); List accList = new List(); for(Inquiry_form__c nnObj : newList) { if (oldMap != null && oldMap.containsKey(nnObj.Id)) { oObj = oldMap.get(nnObj.Id); } if (String.isNotBlank(nnObj.Hospital_Name__c) && (Trigger.isInsert || oObj.Hospital_Name__c != nnObj.Hospital_Name__c)) {// || System.Label.Inquiry_form_flag == 'True') depIDList.add(nnObj.Hospital_Name__c); } if (Trigger.isUpdate && String.isBlank(nnObj.Hospital_Name__c)){ nnObj.Depart_Owner__c = null; //战略科室所有人 nnObj.OwnerId = nnObj.CreatedById; //所有人 nnObj.Department_Class__c = null; //战略科室 nnObj.HospitalName__c = null; //医院名 nnObj.Hospital__c = null; //医院 nnObj.CreateDate__c = null; //创建日 } } if (depIDList.size()>0) { accList = [Select Id,OwnerId, Hospital__c,Hospital__r.Name, Department_Class__c from Account where Id =: depIDList]; if (accList.size()>0) { for(Account acc : accList){ accMap.put(acc.Id, acc); } } } for(Inquiry_form__c nObj : newList) { if (accMap.containsKey(nObj.Hospital_Name__c)){ nObj.Depart_Owner__c = accMap.get(nObj.Hospital_Name__c).OwnerId; //战略科室所有人 nObj.OwnerId = accMap.get(nObj.Hospital_Name__c).OwnerId; //所有人 nObj.Department_Class__c = accMap.get(nObj.Hospital_Name__c).Department_Class__c; //战略科室 nObj.HospitalName__c = accMap.get(nObj.Hospital_Name__c).Hospital__r.Name; //医院名 nObj.Hospital__c = accMap.get(nObj.Hospital_Name__c).Hospital__c; //医院 } //产品信息的拼接 if (String.isNotBlank(nObj.Product1__c) && String.isNotBlank(nObj.Product1_Manual__c)){ nObj.Product1__c = nObj.Product1__c +';'+nObj.Product1_Manual__c; }else if (String.isBlank(nObj.Product1__c) && String.isNotBlank(nObj.Product1_Manual__c)){ nObj.Product1__c = nObj.Product1_Manual__c; }else if (String.isNotBlank(nObj.Product1__c) && String.isBlank(nObj.Product1_Manual__c)) { nObj.Product1__c = nObj.Product1__c; }else { nObj.Product1__c = ''; } //产品咨询单名称 if (String.isNotBlank(nObj.Product1__c)&& String.isNotBlank(nObj.HospitalName__c)){ nObj.Name = nObj.HospitalName__c+'-'+nObj.Product1__c; }else if (String.isBlank(nObj.HospitalName__c)&& String.isNotBlank(nObj.Product1__c)) { nObj.Name = nObj.Product1__c; }else if (String.isNotBlank(nObj.HospitalName__c)&& String.isBlank(nObj.Product1__c)){ nObj.Name = nObj.HospitalName__c; }else{ nObj.Name = '*'; } nObj.Product1_Manual__c = ''; //20220419 you SWAG-CBUB2W start //公式考文本 给FSE担当赋值 这段必须放在这,因为新创建的数据,存在科室为空的情况, System.debug(nObj.FSE_Owner_id__c+'==123=='+nObj.FSE_Owner__c); if(nObj.FSE_Owner_id__c != nObj.FSE_Owner__c){ nObj.FSE_Owner__c = nObj.FSE_Owner_id__c; } if(Trigger.isInsert){ if( nObj.Request1__c.indexOf('服务对应') !=-1 || nObj.ServiceCorrespond__c ==true){ nObj.Service_Status__c ='01.未跟进'; } if(String.isBlank(nObj.Hospital_Name__c)){ nObj.CreateDate__c = null; //创建日 }else{ nObj.CreateDate__c = Date.today(); } } if(Trigger.isUpdate){ if((nObj.Request1__c != oldMap.get(nObj.Id).Request1__c && nObj.Request1__c.indexOf('服务对应') !=-1) || (nObj.ServiceCorrespond__c != oldMap.get(nObj.Id).ServiceCorrespond__c && nObj.ServiceCorrespond__c ==true)){ if(String.isBlank(nObj.Service_Status__c)){ nObj.Service_Status__c ='01.未跟进'; }else{ } }else if( nObj.Request1__c.indexOf('服务对应') ==-1 && nObj.ServiceCorrespond__c ==false){ nObj.Service_Status__c =''; } if(nObj.Hospital_Name__c != oldMap.get(nObj.Id).Hospital_Name__c && String.isBlank(oldMap.get(nObj.Id).Hospital_Name__c)){ nObj.CreateDate__c = Date.today(); } //20220419 you SWAG-CBUB2W end //不需要日期,跟进日期,服务跟进日期,创建意向日期,比较最早日期 String date1; String date2; String date3; String date4; if(null != nObj.No_Need_Date__c){ date1=String.valueOf(nObj.No_Need_Date__c); } if(null != nObj.Follow_Date__c){ date2=String.valueOf(nObj.Follow_Date__c); } if(null != nObj.Confirmation_Date__c){ date3=String.valueOf(nObj.Confirmation_Date__c); } if(null != nObj.Service_Follow_Date__c){ date4=String.valueOf(nObj.Service_Follow_Date__c); } //方法调用 Date date_MD; if((String.isNotBlank(date1) && nObj.No_Need_Date__c !=oldMap.get(nObj.Id).No_Need_Date__c) || (String.isNotBlank(date2) && nObj.Follow_Date__c !=oldMap.get(nObj.Id).Follow_Date__c) || (String.isNotBlank(date3) && nObj.Confirmation_Date__c !=oldMap.get(nObj.Id).Confirmation_Date__c) || (String.isNotBlank(date4) && nObj.Service_Follow_Date__c !=oldMap.get(nObj.Id).Service_Follow_Date__c)){ date_MD =getBigTime(date1,date2,date3,date4); nObj.MinimumDate__c = date_MD;//最小日期 String date5 = nObj.CreateDate__c==null?'':String.valueOf(nObj.CreateDate__c); if(null != nObj.CreateDate__c){ String confdate=calendarUtil.getWorkDayNum(date5,String.valueOf(date_MD)); //nObj.addError(s+'=='+date5+'==='+String.valueOf(date_MD)+'=='+e+'=='+confdate); nObj.Confirmation_days__c =Integer.valueOf(confdate); if(Integer.valueOf(confdate) > 5){ nObj.TimeoutDays__c = Integer.valueOf(confdate)-5; }else{ nObj.TimeoutDays__c = null; } system.debug('跑这了3'); }else{ nObj.Confirmation_days__c = null; nObj.TimeoutDays__c = null; system.debug('跑这了1'); } } //处理老数据 if( System.Label.Inquiry_form_flag == 'True' && null != nObj.CreateDate__c){ if(String.isNotBlank(date1) || String.isNotBlank(date2) || String.isNotBlank(date3) || String.isNotBlank(date4)){ date_MD =getBigTime(date1,date2,date3,date4); nObj.MinimumDate__c = date_MD;//最小日期 String date5 = nObj.CreateDate__c==null?'':String.valueOf(nObj.CreateDate__c); String confdate=calendarUtil.getWorkDayNum(date5,String.valueOf(date_MD)); system.debug('跑这了2'+date5+'==='+String.valueOf(date_MD)+'=='+confdate); nObj.Confirmation_days__c =Integer.valueOf(confdate); if(Integer.valueOf(confdate) > 5){ nObj.TimeoutDays__c = Integer.valueOf(confdate)-5; }else{ nObj.TimeoutDays__c = null; } } } system.debug('==='+date_MD); } } } //20220419 you SWAG-CBUB2W start private void shareToFSEMain() { //存放用于新增的共享数据 List insertList = new List(); //存放(产品咨询单id,共享对象) Map insertMap = new Map(); //存放最后需要新增的共享数据 List lastInsertList = new List(); //存放已有的相同的共享原因的数据 List deleteTargetAOIdList = new List(); //存放用于的id List userIdList = new List(); // String rowCause = 'Manual'; //新增一个共享原因 String rowCause = Schema.Inquiry_form__Share.RowCause.FSE_Owner_c_User__c; System.debug('rowCause:'+rowCause); String ownerCause = 'Owner'; //Apex共有の理由名OCSM_Owner_c_User for(Inquiry_form__c nObj : newList) { Inquiry_form__c oObj = null; if (oldMap != null && oldMap.containsKey(nObj.Id)) { oObj = oldMap.get(nObj.Id); } if ( nObj.FSE_Owner__c != null && (oObj == null || oObj.FSE_Owner__c != nObj.FSE_Owner__c)) { Inquiry_form__Share aos = new Inquiry_form__Share( RowCause = rowCause, ParentId = nObj.Id, UserOrGroupId = nObj.FSE_Owner__c, AccessLevel = 'Edit'); //存放要新增的共享数据 insertList.add(aos); System.debug('key:'+nObj.Id); //存放(产品咨询单id,共享对象); insertMap.put(nObj.Id,aos); //存放用户id 用作检索条件 userIdList.add(nObj.FSE_Owner__c); } if(oObj != null && oObj.FSE_Owner__c != nObj.FSE_Owner__c){ deleteTargetAOIdList.add(nObj.Id); } } System.debug('insertList:'+insertList); System.debug('insertMap1:'+insertMap); System.debug('IDlIST:'+deleteTargetAOIdList); // 先 Delete 后 Insert if (deleteTargetAOIdList.size() > 0) { List deleteList = [SELECT Id FROM Inquiry_form__Share WHERE RowCause = :rowCause AND ParentId IN :deleteTargetAOIdList ]; delete deleteList; } //判断需要共享的人 是不是创建人 如果是则说明有一条这个人的owner数据 则不新增 if (insertMap!= null) { List ownerList = [SELECT Id,ParentId,UserOrGroupId FROM Inquiry_form__Share WHERE RowCause = :ownerCause AND ParentId IN :insertMap.keySet() AND UserOrGroupId IN :userIdList ]; System.debug('ownerList:'+ownerList); if(ownerList.size() > 0){ for( Inquiry_form__Share inq:ownerList){ String id = String.valueOf(inq.ParentId); System.debug('id:'+id); if(insertMap.containsKey(id)){ insertMap.remove(inq.ParentId); } } } } System.debug('insertMap2:'+insertMap); if(insertMap != null){ for(Inquiry_form__Share inquiry : insertMap.values()){ lastInsertList.add(inquiry); } } System.debug('共享内容:' +lastInsertList); if(lastInsertList.size() > 0){ insert lastInsertList; } } //20220419 you SWAG-CBUB2W end //多个日期比较最小日期 public static Date getBigTime(String date1, String date2, String date3, String date4) { system.debug(date1+'======'+date2+'====='+date3); long millis1 =0; Long millis2 =0; Long millis3 =0; Long millis4 =0; List list_dateDecimal = new List(); if(String.isNotBlank(date1)){ millis1 = Datetime.valueOf(date1+' 08:00:05').getTime(); list_dateDecimal.add(millis1); } if(String.isNotBlank(date2)){ millis2 = Datetime.valueOf(date2+' 08:00:05').getTime(); list_dateDecimal.add(millis2); } if(String.isNotBlank(date3)){ millis3 = Datetime.valueOf(date3+' 08:00:05').getTime(); list_dateDecimal.add(millis3); } if(String.isNotBlank(date4)){ millis4 = Datetime.valueOf(date4+' 08:00:05').getTime(); list_dateDecimal.add(millis4); } list_dateDecimal.sort(); Date date_Mid; if(null !=list_dateDecimal && list_dateDecimal.size()>0){ Long aaa=list_dateDecimal[0]; DateTime dt =DateTime.newInstance(aaa); date_Mid = dt.dateGmt(); // DateTime.newInstance system.debug('最小的==='+date_Mid+list_dateDecimal); } return date_Mid; } //俩个日期之间的工作日 public integer diff(Datetime sdate, Datetime edate){ integer count=0; Date d1 = Date.valueOf(sdate); Date d2 = Date.valueOf(edate); integer wDay = d1.daysBetween(d2) ; do{ if(sdate.format('EEEE') == 'Saturday') { count++; } if(sdate.format('EEEE') == 'Sunday') { count++; } sdate= sdate.adddays(1); }while(sdate<=edate); wDay = wDay-count+1; system.debug('*************'+wDay); return wDay; } //客户人员录入后,【电话】【邮箱】自动录入 thh 20220321 start // private void getContactInformation(){ // List ContactIdList = new List(); // List ContactList = new List(); // Map ContactMap = new Map(); // for(Inquiry_form__c nnObj : newList) { // if(String.isNotBlank(nnObj.Contact_Name__c)){ // ContactIdList.add(nnObj.Contact_Name__c); // } // } // if(ContactIdList.size() > 0){ // ContactList = [select id, Phone, Email from Contact where Id IN :ContactIdList]; // for(Contact contact : ContactList){ // ContactMap.put(contact.Id, contact); // } // } // for(Inquiry_form__c nnObj : newList) { // if(String.isNotBlank(nnObj.Contact_Name__c)){ // if(String.isNotBlank(ContactMap.get(nnObj.Contact_Name__c).Phone)){ // nnObj.Phone__c = ContactMap.get(nnObj.Contact_Name__c).Phone; // } // if(String.isNotBlank(ContactMap.get(nnObj.Contact_Name__c).Email)){ // nnObj.Email__c = ContactMap.get(nnObj.Contact_Name__c).Email; // } // } // } // } //客户人员录入后,【电话】【邮箱】自动录入 thh 20220321 end // 战略科室的主担当 を取得、Inquiry_form__Shareに設定(Read) // private void shareToOSCM() { // //存放用于新增的共享数据 // List insertList = new List(); // //存放(会议询问单id,共享对象) // Map insertMap = new Map(); // //存放最后需要新增的共享数据 // List lastInsertList = new List(); // //存放已有的相同的共享原因的数据 // List deleteTargetAOIdList = new List(); // //存放用于的id // List userIdList = new List(); // // String rowCause = 'Manual'; // //新增一个共享原因 // String rowCause = Schema.Inquiry_form__Share.RowCause.OCSM_Owner_c_User__c; // System.debug('rowCause:'+rowCause); // String ownerCause = 'Owner'; // //Apex共有の理由名OCSM_Owner_c_User // for(Inquiry_form__c nObj : newList) { // Inquiry_form__c oObj = null; // System.debug('战略科室担当:'+nObj.Depart_Owner__c); // if (oldMap != null && oldMap.containsKey(nObj.Id)) { // oObj = oldMap.get(nObj.Id); // } // if ( nObj.Depart_Owner__c != null && (oObj == null || oObj.Depart_Owner__c != nObj.Depart_Owner__c)) { // Inquiry_form__Share aos = new Inquiry_form__Share( // RowCause = rowCause, // ParentId = nObj.Id, // UserOrGroupId = nObj.Depart_Owner__c, // AccessLevel = 'Edit'); // //存放要新增的共享数据 // insertList.add(aos); // System.debug('key:'+nObj.Id); // //存放(会议询问单id,共享对象); // insertMap.put(nObj.Id,aos); // //存放用户id 用作检索条件 // userIdList.add(nObj.Depart_Owner__c); // if (oObj != null && oObj.Depart_Owner__c != nObj.Depart_Owner__c) { // deleteTargetAOIdList.add(nObj.Id); // } // } // } // System.debug('insertList:'+insertList); // System.debug('insertMap1:'+insertMap); // System.debug('IDlIST:'+deleteTargetAOIdList); // // 先 Delete 后 Insert // if (deleteTargetAOIdList.size() > 0) { // List deleteList = [SELECT Id // FROM Inquiry_form__Share // WHERE RowCause = :rowCause // AND ParentId IN :deleteTargetAOIdList // ]; // delete deleteList; // } // //判断需要共享的人 是不是创建人 如果是则说明有一条这个人的owner数据 则不新增 // if (insertMap!= null) { // List ownerList = [SELECT Id,ParentId,UserOrGroupId // FROM Inquiry_form__Share // WHERE RowCause = :ownerCause // AND ParentId IN :insertMap.keySet() // AND UserOrGroupId IN :userIdList // ]; // System.debug('ownerList:'+ownerList); // if(ownerList.size() > 0){ // for( Inquiry_form__Share inq:ownerList){ // String id = String.valueOf(inq.ParentId); // System.debug('id:'+id); // if(insertMap.containsKey(id)){ // insertMap.remove(inq.ParentId); // } // } // } // } // System.debug('insertMap2:'+insertMap); // if(insertMap != null){ // for(Inquiry_form__Share inquiry : insertMap.values()){ // lastInsertList.add(inquiry); // } // } // System.debug('共享内容:' +lastInsertList); // if(lastInsertList.size() > 0){ // insert lastInsertList; // } // } @TestVisible private static void test() { Integer i = 0; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++;//可以多写点 } }