高章伟
2023-03-02 e3c02c03dd2de442bbced87236f60a13a1cd154e
force-app/main/default/classes/InquiryFormHandler.cls
@@ -40,6 +40,10 @@
        Inquiry_form__c oObj = null;
        List<String> depIDList = new List<String>();
        List<Account> accList = new List<Account>();
        //20220511 you SWAG-CBUB2W start
        Map<String, OCM_Management_Province__c> mpMap = new Map<String, OCM_Management_Province__c>();
        Set<String> accOCSMset = new Set<String>();
        //20220511 you SWAG-CBUB2W end
        for(Inquiry_form__c nnObj : newList) {
            if (oldMap != null && oldMap.containsKey(nnObj.Id)) {
@@ -56,7 +60,45 @@
                nnObj.Hospital__c = null;         //医院
                nnObj.CreateDate__c = null;      //创建日
            }
            //20220507  SWAG-CBUB2W you start
            if(Trigger.isInsert || oObj.Request1__c != nnObj.Request1__c){
                if(String.isNotBlank(nnObj.Request1__c) && '服务对应' == nnObj.Request1__c && String.isBlank(nnObj.Follow_Content__c)){
                   nnObj.Status__c ='';
                }else if( String.isBlank(nnObj.Status__c) && (nnObj.Request1__c.indexOf('需要报价')!=-1 || nnObj.Request1__c.indexOf('OPD')!=-1 || nnObj.Request1__c.indexOf('产品说明')!=-1 || nnObj.Request1__c.indexOf('寄送产品资料')!=-1)){
                   nnObj.Status__c ='01.未跟进';
                }
            }
            //20220507  SWAG-CBUB2W you end
            //20220511 you SWAG-CBUB2W start
            if(Trigger.isUpdate){
                /** 挪到营业跟进页面
                if(false != nnObj.Redistribution__c && String.isBlank(nnObj.GotoDepartment__c)){
                    nnObj.GotoDepartment__c.addError('勾选时必须填写转至科室');
                }
                if(false == nnObj.Redistribution__c && String.isNotBlank(nnObj.GotoDepartment__c)){
                    nnObj.GotoDepartment__c.addError('未勾选时不能填写转至科室');
                }
                **/
                if(String.isNotBlank(nnObj.GotoDepartment__c) && nnObj.GotoDepartment__c != oObj.GotoDepartment__c){
                   nnObj.RedistributionDate__c = System.now();
                   accOCSMset.add(nnObj.OCM_man_province_cus__c);
                }
                if(String.isNotBlank(nnObj.Hospital_Name__c) && String.isNotBlank(oObj.Hospital_Name__c) && nnObj.Hospital_Name__c !=  oObj.Hospital_Name__c ){
                   nnObj.AssistantRedistributionDate__c = System.now();
                }
                //20221130 you DB202211530484 start
                if(null!= nnObj.Product_Owner__c && nnObj.Product_Owner__c != oObj.Product_Owner__c){
                   nnObj.ProductAssumeDate__c = System.now();
                   accOCSMset.add(nnObj.OCM_man_province_cus__c);
                }
                if(null!= nnObj.OwnerId && nnObj.OwnerId != oObj.OwnerId){
                   nnObj.AssistantChangeOwnerTime__c = System.now();
                }
                //20221130 you DB202211530484 end
           }
           //20220511 you SWAG-CBUB2W end
        }
        if (depIDList.size()>0) {
@@ -70,11 +112,25 @@
                }
            }   
        }
        //20220511 you SWAG-CBUB2W start
        if(null !=accOCSMset){
            List<OCM_Management_Province__c> mpList =
                    [select id, Name, GI_assistant__c,SP_assistant__c from OCM_Management_Province__c where Name =: accOCSMset];
            // 取得OCSM管理省的GI,SP 助理
            for (OCM_Management_Province__c mp : mpList) {
                mpMap.put(mp.Name, mp);
            }
        }
        //20220511 you SWAG-CBUB2W end
        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;                          //所有人
                //20221128 you DB202211530484  当勾选 转产品担当时,所有人可以手动更改,不需要同步跟科室所有人一致
                if(nObj.Product_Owner__c == false){
                    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;                 //医院
@@ -136,7 +192,17 @@
                    nObj.CreateDate__c = Date.today();
                }
                //20220419 you SWAG-CBUB2W end
                //20220511 you SWAG-CBUB2W start
                system.debug(mpMap+'===='+nObj.OCM_man_province_cus__c);
                if(null!=mpMap && mpMap.containsKey(nObj.OCM_man_province_cus__c)){
                   OCM_Management_Province__c omp = mpMap.get(nObj.OCM_man_province_cus__c);
                    if (omp != null) {
                        nObj.GI_assistant__c = omp.GI_assistant__c;
                        nObj.SP_assistant__c = omp.SP_assistant__c;
                        //nObj.OCSM_ID__c = omp.id;
                    }
                }
                //20220511 you SWAG-CBUB2W end
                //不需要日期,跟进日期,服务跟进日期,创建意向日期,比较最早日期
                String date1;
                String date2;
@@ -165,15 +231,9 @@
                         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');
                    }
                   
@@ -187,11 +247,6 @@
                       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);
@@ -201,25 +256,21 @@
        }
    }
    //20220419 you SWAG-CBUB2W start
    private void shareToFSEMain() {
         //存放用于新增的共享数据
         List<Inquiry_form__Share> insertList = new List<Inquiry_form__Share>();
         //存放(产品咨询单id,共享对象)
         Map<Id,Inquiry_form__Share> insertMap = new Map<Id,Inquiry_form__Share>();
         //存放最后需要新增的共享数据
         List<Inquiry_form__Share> lastInsertList = new List<Inquiry_form__Share>();
         //存放已有的相同的共享原因的数据
         List<Id> deleteTargetAOIdList = new List<Id>();
        List<Id> deleteTargetAOIdList = new List<Id>();
        //存放(产品咨询单id,共享对象)
         Map<Id,Inquiry_form__Share> insertMap1 = new Map<Id,Inquiry_form__Share>();
         Map<Id,Inquiry_form__Share> insertMap2 = new Map<Id,Inquiry_form__Share>();
         Map<Id,Inquiry_form__Share> insertMap3 = new Map<Id,Inquiry_form__Share>();
         //存放用于的id
         List<Id> userIdList = new List<Id>();
         // String rowCause = 'Manual';
         //存放用于的id 用来删除
         List<Id> userIdListold = new List<Id>();
         //新增一个共享原因
         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) {
         for(Inquiry_form__c nObj : newList) {
             Inquiry_form__c oObj = null; 
             if (oldMap != null && oldMap.containsKey(nObj.Id)) {
                     oObj = oldMap.get(nObj.Id);
@@ -227,30 +278,89 @@
             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);
                     RowCause = rowCause,
                     ParentId = nObj.Id,
                     UserOrGroupId = nObj.FSE_Owner__c,
                     AccessLevel = 'Edit');
                 //存放(产品咨询单id,共享对象);
                 insertMap.put(nObj.Id,aos);
                 insertMap1.put(nObj.Id,aos);
                 //存放用户id 用作检索条件
                 userIdList.add(nObj.FSE_Owner__c);
                 if(oObj != null && oObj.FSE_Owner__c != nObj.FSE_Owner__c){
                   userIdListold.add(oObj.FSE_Owner__c);
                   deleteTargetAOIdList.add(nObj.Id);
                 }
                 System.debug('insertMap1:'+insertMap1);
                 System.debug('IDlIST:'+deleteTargetAOIdList);
                 //shareToFSEMainPublicMethod(insertMap,userIdList,deleteTargetAOIdList,rowCause,userIdListold);
             }
             if(oObj != null && oObj.FSE_Owner__c != nObj.FSE_Owner__c){
                deleteTargetAOIdList.add(nObj.Id);
             if( nObj.GI_assistant__c != null && oObj.GI_assistant__c != nObj.GI_assistant__c){
                  Inquiry_form__Share aos = new Inquiry_form__Share(
                     RowCause = rowCause,
                     ParentId = nObj.Id,
                     UserOrGroupId = nObj.GI_assistant__c,
                     AccessLevel = 'Edit');
                 //存放(产品咨询单id,共享对象);
                 insertMap2.put(nObj.Id,aos);
                 //存放用户id 用作检索条件
                 userIdList.add(nObj.GI_assistant__c);
                 if(oObj != null && oObj.GI_assistant__c != nObj.GI_assistant__c){
                   userIdListold.add(oObj.GI_assistant__c);
                   deleteTargetAOIdList.add(nObj.Id);
                 }
                 System.debug('insertMap2:'+insertMap2);
                 System.debug('IDlIST:'+deleteTargetAOIdList);
                 //shareToFSEMainPublicMethod(insertMap,userIdList,deleteTargetAOIdList,rowCause,userIdListold);
             }
             if( nObj.SP_assistant__c != null && oObj.SP_assistant__c != nObj.SP_assistant__c){
                  Inquiry_form__Share aos = new Inquiry_form__Share(
                     RowCause = rowCause,
                     ParentId = nObj.Id,
                     UserOrGroupId = nObj.SP_assistant__c,
                     AccessLevel = 'Edit');
                 //存放(产品咨询单id,共享对象);
                 insertMap3.put(nObj.Id,aos);
                 //存放用户id 用作检索条件
                 userIdList.add(nObj.SP_assistant__c);
                 if(oObj != null && oObj.SP_assistant__c != nObj.SP_assistant__c){
                   userIdListold.add(oObj.SP_assistant__c);
                   deleteTargetAOIdList.add(nObj.Id);
                 }
                 System.debug('insertMap3:'+insertMap3);
                 System.debug('IDlIST:'+deleteTargetAOIdList);
             }
        }
         System.debug('insertList:'+insertList);
         System.debug('insertMap1:'+insertMap);
         System.debug('IDlIST:'+deleteTargetAOIdList);
        if(null!= insertMap1){
           shareToFSEMainPublicMethod(insertMap1,userIdList,deleteTargetAOIdList,rowCause,userIdListold);
        }
        if(null!= insertMap2){
           shareToFSEMainPublicMethod(insertMap2,userIdList,deleteTargetAOIdList,rowCause,userIdListold);
        }
        if(null!= insertMap3){
           shareToFSEMainPublicMethod(insertMap3,userIdList,deleteTargetAOIdList,rowCause,userIdListold);
        }
    }
    public void shareToFSEMainPublicMethod(Map<Id,Inquiry_form__Share> insertMap,List<Id> userIdList,List<Id> deleteTargetAOIdList,String rowCause, List<Id> userIdListold) {
         //存放最后需要新增的共享数据
         List<Inquiry_form__Share> lastInsertList = new List<Inquiry_form__Share>();
         //存放已有的相同的共享原因的数据
         // String rowCause = 'Manual';
         System.debug('rowCause:'+rowCause);
         String ownerCause = 'Owner';
         // 先 Delete 后 Insert
         if (deleteTargetAOIdList.size() > 0) {
             List<Inquiry_form__Share> deleteList = [SELECT Id
                 FROM Inquiry_form__Share
                 WHERE RowCause = :rowCause
                   AND UserOrGroupId in : userIdListold
                   AND ParentId IN :deleteTargetAOIdList
             ];
             delete deleteList;
@@ -470,6 +580,7 @@
    //     }
        
    // }
     @TestVisible private static void test() {
        Integer i = 0;
@@ -626,6 +737,45 @@
        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++;
        //可以多写点
    }
}