高章伟
2022-03-10 1312ba82d4c880bdb5357d28e0d4af5b285f610f
force-app/main/default/classes/NFM704Rest.cls
@@ -14,13 +14,21 @@
    public static final String LOG_TYPE = 'NFM704';
    global class GeData {
        public String StaffMCode;   //SFDC人员管理编码
        public String StaffMCode;   //人员管理编码OBPM
        public String HospitalMCode;     //医院管理编码
        public String OfficeMCode;   //科室管理编码
        public String OfficeMCode;   //OBPM科室
        public String HcpNo;    //HPC编码
        public String HCPLevel; //HCP等级
        public String Name;    //姓名
        public String Mobile;   //电话
        public String State;    //省
        public String City;     //市
        public String WorkingSeniority; //临床工作年限
        public String TechnicalTitle; //技术职称
        public String Speciality;   //擅长的手术
        public String ProfessionalField;    //专业领域
        public String Society1;  //学会名称
        public String EventStatus; //学会职称
    }
    @HttpPost
@@ -89,10 +97,11 @@
            List<String> DoctorNoList = new List<String>();
            //待更新的客户人员List
            List<Contact> updateList = new List<Contact>();
            List<Contact> upsertList = new List<Contact>();
            //科室编码List
            List<String> officeMCodeList = new List<String>();
            //医院编码List
            List<String> HospitalMCodeList = new List<String>();
            for(GeData ged : itemMasterList){
                String dataComplete = verify(ged);
@@ -101,69 +110,86 @@
                    continue;
                }
                DoctorNoList.add(ged.StaffMCode);
                officeMCodeList.add(ged.OfficeMCode);
                //officeMCodeList.add(ged.OfficeMCode);
                HospitalMCodeList.add(ged.HospitalMCode);
            }
            system.debug('HospitalMCodeList=============>'+HospitalMCodeList);
            system.debug('DoctorNoList=============>'+DoctorNoList);
            //Map<String, Map<String,Contact>> hospitalMap = new Map<String, Map<String,Contact>>();
            Map<String, Contact> conListMap = new Map<String, Contact>();
            List<Contact> conList = [select Id,
                                            CManageCode__c,     //人员管理编码
                                            Account.Hospital_Name__c,       //医院名称
                                            Account.Department_Name__c,       //科室名称
                                            Name,       //姓名
                                            Phone,      //电话
                                            HcpNo__c,       //HCP编码
                                            Isactive__c,    //是否有效
                                            UpdateStatus__c            //操作类型
                                            from Contact WHERE CManageCode__c IN:DoctorNoList order by AccountId];
                                            Management_Code__c, //医院管理编码
                                            CManageCode__c     //人员管理编码
                                            from Contact WHERE CManageCode__c IN:DoctorNoList];
            system.debug('conList============>'+conList);
            
            for(Contact con : conList ){
                conListMap.put(con.CManageCode__c, con);
                //hospitalMap.put(con.Management_Code__c,conListMap);
            }
            //Management_Code__c
            List<Account> accList = [select Id, Name, Management_Code__c from Account where Management_Code__c in :officeMCodeList];
            List<Account> accList = [select Id, Name,GI_Main__c,Management_Code__c from Account where Management_Code__c in :HospitalMCodeList];
            system.debug('accList=============>'+accList);
            Map<String, Account> accMap = new Map<String, Account>();
            for(Account acc : accList){
                accMap.put(acc.Management_Code__c, acc);
               accMap.put(acc.Management_Code__c, acc);
            }
            for( GeData ged : itemMasterList ){
                Contact con = new Contact();
                logstr += conListMap.get(ged.StaffMCode).Id;
                if(conListMap.containsKey(ged.StaffMCode)){
                    logstr += '已存在客户人员\n';
                    con.Id = conListMap.get(ged.StaffMCode).Id;
                }else {
                    logstr += '不存在的客户人员\n';
                //Map<String, Contact> tempMap = new Map<String, Contact>();
                if(accMap.containsKey(ged.HospitalMCode)){//医院编码是否存在 是
                    Contact con = new Contact();
                    if(conListMap.containsKey(ged.StaffMCode)){
                        //存在则更新
                        system.debug('更新联系人');
                        logstr += conListMap.get(ged.StaffMCode).Id + '\n';
                        logstr += '已存在客户人员\n';
                        con.Id = conListMap.get(ged.StaffMCode).Id;
                        system.debug('request'+conListMap.get(ged.StaffMCode).Management_Code__c.equals(ged.HospitalMCode));
                        if(conListMap.get(ged.StaffMCode).Management_Code__c.equals(ged.HospitalMCode)){//判断联系人上的管理编码和接口传输过来的管理编码是否一致
                            system.debug('request'+conListMap.get(ged.StaffMCode).Management_Code__c.equals(ged.HospitalMCode));
                        }else{
                            con.OBPMHospital__c = accMap.get(ged.HospitalMCode).Id;//接收的管理编码对应的医院写到OBPM医院上
                        }
                        con = assignment(ged,con);
                    }else{
                        //不存在则新建
                        system.debug('新建联系人');
                        //logstr += '不存在的客户人员\n';
                        con.OwnerId = accMap.get(ged.HospitalMCode).GI_Main__c;//所有人取医院上的消化科担当
                        con.AccountId = accMap.get(ged.HospitalMCode).Id;//新建联系人放到医院下
                        con.LastName = ged.Name;
                        con.FirstName = '';
                        con = assignment(ged,con);
                    }
                    upsertList.add(con);
                }else{//否
                    continue;
                    logstr += '不存在的医院管理编码:['+accMap.get(ged.HospitalMCode)+']/n';
                }
                //AccountId
                if( accMap.get(ged.OfficeMCode) != null ){
                    con.AccountId = accMap.get(ged.OfficeMCode).Id;
                }else {
                    logstr += '当前科室id有误或不存在';
                }
                // //AccountId
                // if( accMap.get(ged.OfficeMCode) != null ){
                //     con.AccountId = accMap.get(ged.OfficeMCode).Id;
                // }else {
                //     logstr += '当前科室id有误或不存在';
                // }
                con.HcpNo__c = ged.HcpNo;
                con.HCPLevel__c = ged.HCPLevel;
                con.LastName = ged.Name;
                con.MobilePhone = ged.Mobile;
                // con.HcpNo__c = ged.HcpNo;
                // con.HCPLevel__c = ged.HCPLevel;
                // con.LastName = ged.Name;
                // con.MobilePhone = ged.Mobile;
                conListMap.put(ged.StaffMCode, con);
                // conListMap.put(ged.StaffMCode, con);
            }
            if(conListMap.size() > 0 ){
            system.debug('upsertList==================>'+upsertList);
            if(upsertList.size() > 0 ){
                // Update updateList;
                UpSert conListMap.values();
                Oly_TriggerHandler.bypass('ConsumableOrderTrigger');
                UpSert upsertList;
            }
            rowData.retry_cnt__c = 0;
@@ -191,9 +217,9 @@
        if (ged.HospitalMCode == null) {
            result += 'DataError: 医院管理编码 [ HospitalMCode ] is null!\n';
        }
        if (ged.OfficeMCode == null) {
            result += 'DataError: 科室管理编码 [ OfficeMCode ] is null!\n';
        }
        // if (ged.OfficeMCode == null) {
        //     result += 'DataError: 科室管理编码 [ OfficeMCode ] is null!\n';
        // }
        if (ged.HcpNo == null) {
            result += 'DataError: HCP编码 [ HcpNo ] is null!\n';
        }
@@ -210,4 +236,45 @@
        return result;
    }
    public static Contact assignment(GeData ged,Contact con){//联系人数据赋值方法
        List<String> societyList = Breakup(ged.Society1);
        List<String> eventStatusList = Breakup(ged.EventStatus);
        con.NameOBPM__c             = ged.Name;//姓名
        con.MobileOBPM__c           = ged.Mobile;//电话
        con.stateOBPM__c            = ged.State;//省OBPM
        con.CityOBPM__c             = ged.City;//市OBPM
        con.HcpNo__c                = ged.HcpNo;//HPC编码
        con.HCPLevel__c             = ged.HCPLevel;//HCP等级
        con.OBPMDepartment__c       = ged.OfficeMCode;//OBPM科室
        con.WorkingSeniorityOBPM__c = ged.WorkingSeniority;  //临床工作年限
        con.TechnicalTitleOBPM__c   = ged.TechnicalTitle;//技术职称
        con.SpecialityOBPM__c       = ged.Speciality;//擅长的手术
        con.ProfessionalField__c    = ged.ProfessionalField;//专业领域
        if(societyList.size()>0){
            con.Learn_name1__c          = societyList[0];//学会名称1
        }
        if(societyList.size()>1){
            con.Learn_name2__c          = societyList[1];//学会名称2
        }
        if(societyList.size()>2){
            con.Learn_name3__c          = societyList[2];//学会名称3
        }
        if(eventStatusList.size()>0){
            con.Learn_serve1__c         = eventStatusList[0];//学会职称1
        }
        if(eventStatusList.size()>1){
            con.Learn_serve2__c         = eventStatusList[1];//学会职称2
        }
        if(eventStatusList.size()>2){
            con.Learn_serve3__c         = eventStatusList[2];//学会职称3
        }
        return con;
    }
    public static List<String> Breakup (String str){
        // List<string> over = new List<string>();
        // over = str.split('↑');
        List<string> over = str.split('↑');
        return over;
    }
}