/** * wangweipeng 2021/09/02 * update 2021/11/10 * 用于把ods__c表的数据同步到 user表中 */ public with sharing class UpsertContactHandler { //新增或修改user表数据 public static void UpsertContact(List newList, Map newMap, List oldList, Map oldMap){ Map updateMap = new Map(); if(newList != null && newList.size() > 0){ //用于存放触发trigger的ods数据的员工编号 List employeeNoList = new List(); //获取自定义标签,自己定义,用来空更新数据或处理历史数据 Integer buffer = Integer.valueOf(System.Label.ODS_Null_Update_Sign); for (ODS__c os : newList) { if(String.isNotBlank(os.Employee_No__c) && os.Job_Type__c != '劳务-派遣' && os.Job_Type__c != '劳务-临时' && os.Job_Type__c != '无' && String.isNotBlank(os.Job_Type__c) && String.isNotBlank(os.Stay_or_not__c) && os.Stay_or_not__c != '待入职'){ //如果为update,那么判断值是否发生变化 //判断值数据发生变化 if(Trigger.isUpdate){ //统括本部、本部、部、课、员工编码、入职日期、电子邮件、手机号码、职位、职种、负责产品(主)、销售工作内容、工作地、在职/已离职、离职日期 //以上字段的值是否发生变换 //如果发生变化,那么更新user表数据,user表更新contact表数据 if(buffer == 1 || os.Category3__c != oldMap.get(os.id).Category3__c || os.Category4__c != oldMap.get(os.id).Category4__c || os.Category5__c != oldMap.get(os.id).Category5__c || os.Category6__c != oldMap.get(os.id).Category6__c || os.Employee_No__c != oldMap.get(os.id).Employee_No__c || os.Hire_Date__c != oldMap.get(os.id).Hire_Date__c || os.Email__c != oldMap.get(os.id).Email__c || os.MobilePhone__c != oldMap.get(os.id).MobilePhone__c || os.Post__c != oldMap.get(os.id).Post__c || os.Job_Category__c != oldMap.get(os.id).Job_Category__c || os.Product_specialist_incharge_product__c != oldMap.get(os.id).Product_specialist_incharge_product__c || os.Sales_Speciality__c != oldMap.get(os.id).Sales_Speciality__c || os.Work_Location__c != oldMap.get(os.id).Work_Location__c || os.Stay_or_not__c != oldMap.get(os.id).Stay_or_not__c || os.LeaveDate__c != oldMap.get(os.id).LeaveDate__c ) { employeeNoList.add(os.Employee_No__c.trim()); } }else{ employeeNoList.add(os.Employee_No__c.trim()); } } } //判断是否有需要更新的数据 if(employeeNoList.size() > 0){ //存放需要修改的user表数据 List updateUserDate = new List(); //存放需要新增的user数据 List insertUserDate = new List(); //查询user List userList = [SELECT ID,NAME,Group_sales_dept__c,Dept__c,Category5__c,Category6__c,Employee_No__c,Hire_Date__c,Email,Mobile_Phone__c,Post__c,Job_Category__c,Product_specialist_incharge_product__c,Sales_Speciality__c,Work_Location__c,Stay_or_not__c,QuitDate__c,IsMEBG__c FROM USER WHERE Employee_No__c IN : employeeNoList and Employee_No__c != null ]; //以下根据ods传过来的数据来判断user表到底是update还是insert if(userList != null && userList.size() > 0){ for(ODS__c osc : newList){ if(String.isNotBlank(osc.Employee_No__c) && osc.Job_Type__c != '劳务-派遣' && osc.Job_Type__c != '劳务-临时' && osc.Job_Type__c != '无' && String.isNotBlank(osc.Job_Type__c) && String.isNotBlank(osc.Stay_or_not__c) && osc.Stay_or_not__c != '待入职'){ User userData = new User(); boolean falg = true; //循环user表 for(User us : userList){ //判断员工编码在user表中是否存在 if(osc.Employee_No__c.trim() == us.Employee_No__c.trim()){ userData = setUserData(osc,us); if(String.isNotBlank(userData.Employee_No__c)){ updateUserDate.add(userData); } falg = false; break; } } //判断user表中是否有这个员工编码,如果没有,那么就需要新增user if(falg){ userData = setUserData(osc,new User()); if(String.isNotBlank(userData.Employee_No__c)){ insertUserDate.add(userData); } } } } }else{ //防止直接没有在user查到数据 for(ODS__c osc : newList){ if(String.isNotBlank(osc.Employee_No__c) && osc.Job_Type__c != '劳务-派遣' && osc.Job_Type__c != '劳务-临时' && osc.Job_Type__c != '无' && String.isNotBlank(osc.Job_Type__c) && String.isNotBlank(osc.Stay_or_not__c) && osc.Stay_or_not__c != '待入职'){ User userData = setUserData(osc,new User()); if(String.isNotBlank(userData.Employee_No__c)){ insertUserDate.add(userData); } } } } Savepoint sp = Database.setSavepoint(); try{ StaticParameter.EscapeContactInsUpdUser = true; System.debug('**1*****************'+updateUserDate.size()); //修改用户信息 if(updateUserDate.size() > 0){ update updateUserDate; /*Database.SaveResult[] lsr = Database.update(updateUserDate, false); if(lsr.size() > 0){ for (Integer tIdx = 0; tIdx < lsr.size(); tIdx++) { Database.SaveResult sr = lsr[tIdx]; if (!sr.isSuccess()) { System.debug('-------------ods数据保存到user表时修改报错:'+updateUserDate[tIdx].Employee_No__c+'。报错日志为:' + sr.getErrors()[0]); } } }*/ } //新增用户信息 if(insertUserDate.size() > 0){ insert insertUserDate; /*Database.SaveResult[] lsr2 = Database.insert(insertUserDate, false); for (Integer tIdx = 0; tIdx < lsr2.size(); tIdx++) { Database.SaveResult sr = lsr2[tIdx]; if (!sr.isSuccess()) { System.debug('-------------ods数据保存到user表时新增报错:'+updateUserDate[tIdx].Employee_No__c+'。报错日志为:' + sr.getErrors()[0]); } }*/ } StaticParameter.EscapeContactInsUpdUser = false; }catch(exception e){ //失败提示 System.debug('----------------------出错了'+e.getMessage()); newList[0].addError( e.getMessage()); //ApexPages.addMessages(e); Database.rollback(sp); } } } } /** * ODS__c USER * Category3 统括本部 * Category4 本部 * Category5 部 * Category6 课 * Employee_No 员工编码 * Hire_Date 入职日期 * FirstName * LastName * Name 别名 * Email 电子邮件 * MobilePhone 手机号码 * Post 职位 * Job_Category 职种 * Job_Type * Product_specialist_incharge_product 负责产品(主) * Sales_Speciality 销售工作内容 * Work_Location 工作地 * Stay_or_not 在职/已离职 * LeaveDate 离职日期 */ public static user setUserData(ODS__c odsc,User u){ User userData = new User(); //判断是否要新增 //如果为空,那么就需要新增,不为空更新 if(String.isNotBlank(u.Employee_No__c)){//修改user表数据 //判断值是否发生变化 /*if(odsc.Category3__c != u.Group_sales_dept__c || odsc.Category4__c != u.Dept__c || odsc.Category5__c != u.Category5__c || odsc.Category6__c != u.Category6__c || odsc.Employee_No__c != u.Employee_No__c || odsc.Hire_Date__c != u.Hire_Date__c || odsc.Email__c != u.Email || odsc.MobilePhone__c != u.Mobile_Phone__c || odsc.Post__c != u.Post__c || odsc.Job_Category__c != u.Job_Category__c || odsc.Product_specialist_incharge_product__c != u.Product_specialist_incharge_product__c || odsc.Sales_Speciality__c != u.Sales_Speciality__c || odsc.Work_Location__c != u.Work_Location__c || odsc.Stay_or_not__c != u.Stay_or_not__c || odsc.LeaveDate__c != u.QuitDate__c || !u.IsMEBG__c) { userData.Group_sales_dept__c = odsc.Category3__c;//统括本部 userData.Dept__c = odsc.Category4__c;//本部 userData.Category5__c = odsc.Category5__c;//部 userData.Category6__c = odsc.Category6__c;//课 userData.Employee_No__c = odsc.Employee_No__c;//员工编码 userData.Hire_Date__c = odsc.Hire_Date__c;//入职日期 //userData.Email = odsc.Email__c;//电子邮件 userData.Mobile_Phone__c = odsc.MobilePhone__c;//手机号码 userData.Post__c = odsc.Post__c;//职位 userData.Job_Category__c = odsc.Job_Category__c;//职种 userData.Product_specialist_incharge_product__c = odsc.Product_specialist_incharge_product__c;//负责产品(主) userData.Sales_Speciality__c = odsc.Sales_Speciality__c;//销售工作内容 userData.Work_Location__c = odsc.Work_Location__c;//工作地 userData.Stay_or_not__c = odsc.Stay_or_not__c;//在职/已离职 userData.QuitDate__c = odsc.LeaveDate__c;//离职日期 //userData.Alias = odsc.Name__c;//别名 userData.Username_Proxy__c = odsc.Email__c;//用户名 userData.IsMEBG__c=true;//是否MEBG userData.id = u.id; }*/ userData.Group_sales_dept__c = odsc.Category3__c;//统括本部 userData.Dept__c = odsc.Category4__c;//本部 userData.Category5__c = odsc.Category5__c;//部 userData.Category6__c = odsc.Category6__c;//课 userData.Employee_No__c = odsc.Employee_No__c;//员工编码 userData.Hire_Date__c = odsc.Hire_Date__c;//入职日期 //userData.Email = odsc.Email__c;//电子邮件 userData.Mobile_Phone__c = odsc.MobilePhone__c;//手机号码 userData.Post__c = odsc.Post__c;//职位 userData.Job_Category__c = odsc.Job_Category__c;//职种 userData.Product_specialist_incharge_product__c = odsc.Product_specialist_incharge_product__c;//负责产品(主) userData.Sales_Speciality__c = odsc.Sales_Speciality__c;//销售工作内容 userData.Work_Location__c = odsc.Work_Location__c;//工作地 userData.Stay_or_not__c = odsc.Stay_or_not__c;//在职/已离职 userData.QuitDate__c = odsc.LeaveDate__c;//离职日期 //userData.Alias = odsc.Name__c;//别名 userData.Username_Proxy__c = odsc.Email__c;//用户名 userData.IsMEBG__c=true;//是否MEBG userData.id = u.id; }else{//新增user userData.Group_sales_dept__c = odsc.Category3__c;//统括本部 userData.Dept__c = odsc.Category4__c;//本部 userData.Category5__c = odsc.Category5__c;//部 userData.Category6__c = odsc.Category6__c;//课 userData.Employee_No__c = odsc.Employee_No__c;//员工编码 userData.Hire_Date__c = odsc.Hire_Date__c;//入职日期 userData.Email_Proxy__c = odsc.Email__c;//电子邮件,新建时,填写电子邮件 userData.Username_Proxy__c = odsc.Employee_No__c+odsc.FirstName__c + odsc.LastName__c+'@prec-tech1.com';//用户名 userData.Mobile_Phone__c = odsc.MobilePhone__c;//手机号码 userData.Post__c = odsc.Post__c;//职位 userData.Job_Category__c = odsc.Job_Category__c;//职种 userData.Product_specialist_incharge_product__c = odsc.Product_specialist_incharge_product__c;//负责产品(主) userData.Sales_Speciality__c = odsc.Sales_Speciality__c;//销售工作内容 userData.Work_Location__c = odsc.Work_Location__c;//工作地 userData.Stay_or_not__c = odsc.Stay_or_not__c;//在职/已离职 userData.QuitDate__c = odsc.LeaveDate__c;//离职日期 userData.IsMEBG__c=true;//是否MEBG //由于ods的姓和名都是拼音,所以获取name__c的值,并且首字母第一位为姓,其余为名 if(String.isNotBlank(odsc.Name__c)){ if(odsc.Name__c.length() > 1){ userData.LastName = odsc.Name__c.substring(0,1); userData.FirstName = odsc.Name__c.substring(1,odsc.Name__c.length()); userData.Alias = odsc.Name__c; } } //以下是系统默认 userData.FederationIdentifier_Proxy__c = odsc.Employee_No__c + '@olympus.com.cn'; userData.EmailEncodingKey = 'UTF-8';//电子邮件编码 userData.IsActive_Proxy__c = false; userData.TimeZoneSidKey = 'Asia/Shanghai';//时区 userData.LocaleSidKey = 'ja_JP';//区域 userData.LanguageLocaleKey = 'zh_CN';//语言 //userData.DefaultCurrencyIsoCode = 'CNY';//默认币种 ISO 代码 //userData.CurrencyIsoCode = 'CNY';//信息币种 //默认ods创建的user用户的简档为 999_看不见Profile userData.Profileid_Proxy__c = '00e10000000dFYJ'; } return userData; /*ctc.ODS__c = odsc.Id; ctc.Isactive__c = '有效'; ctc.AccountId = '0011000000eTSPC';//Olympus社内 其他 社内用户 ctc.RecordTypeId = Schema.SObjectType.Contact.getRecordTypeInfosByDeveloperName().get('Internal_staff').getRecordTypeId(); if(!''.equals(idStr)){ ctc.Id = idStr; } return ctc;*/ } }