From d33ae54e232a2c2735aeeda73afa0d79da637c76 Mon Sep 17 00:00:00 2001 From: Administrator <704728292@qq.com> Date: Wed, 2 Jul 2025 19:42:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E5=8A=A8=E4=BD=9C=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../esb/InitializationEmployeeInfo.java | 542 ++++++++++++++++++ .../jcl/organization/esb/RemoveCache.java | 120 ++++ .../jcl/organization/util/SyncDataUtils.java | 5 +- 3 files changed, 665 insertions(+), 2 deletions(-) create mode 100644 jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/InitializationEmployeeInfo.java create mode 100644 jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/RemoveCache.java diff --git a/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/InitializationEmployeeInfo.java b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/InitializationEmployeeInfo.java new file mode 100644 index 0000000..8d71847 --- /dev/null +++ b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/InitializationEmployeeInfo.java @@ -0,0 +1,542 @@ +package com.weaver.seconddev.jcl.organization.esb; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.common.mybatis.util.DatabaseUtil; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.jcl.organization.util.DatabaseUtils; +import com.weaver.seconddev.jcl.organization.util.RecruitModuleUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +/** + * @use:初始化系统人员到员工信息表 + * @date 2025年7月2日 + * @author xuxy + */ +@Service("InitializationEmployeeInfo_jcl") +public class InitializationEmployeeInfo implements EsbServerlessRpcRemoteInterface { + + @Autowired + private DatabaseUtils databaseUtils; + + private static final Logger log = LoggerFactory.getLogger(InitializationEmployeeInfo.class); + + private static String nowData; + @Autowired + RecruitModuleUtils recruitModuleUtils; + + @Override + public WeaResult> execute(Map params) { + String formId = null!=params.get("formId")?String.valueOf(params.get("formId").toString()):""; + String layoutId = null!=params.get("layoutId")?String.valueOf(params.get("layoutId").toString()):""; + String objId = null!=params.get("objId")?String.valueOf(params.get("objId").toString()):""; + log.error("InitializationEmployeeInfo.formId:[{}],layoutId:{},objId:{}",formId,layoutId,objId); + Map result = new HashMap<>(); + String tenant_key = RecruitModuleUtils.getCurrentTenantKey(); + log.error("InitializationEmployeeInfo.tenant_key:{}", tenant_key); + + //当前时间 + // 获取当前时间 + LocalDateTime now = LocalDateTime.now(); + // 定义日期时间格式化器 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + // 格式化当前日期 + nowData = now.format(formatter); + log.error("InitializationEmployeeInfo.nowData:{}", nowData); + //根据ygxxid查询源数据 + /** + * 多租户查询主表名称 + */ + Map ebTableInfo = recruitModuleUtils.getEbTableInfo("uf_jcl_employee_information_apptag", "uf_jcl_employee_information_tag"); + String obj_Id = ebTableInfo.get("objId"); + String ebTableName = ebTableInfo.get("table_name"); + log.error("InitializationEmployeeInfo.ebTableName:{}", ebTableName); + /** + * 查询组织人员系统表新导入数据 + */ + String sql = " select a.id,a.id FORM_DATA_ID,0 as DATA_INDEX,a.CREATE_TIME,a.UPDATE_TIME,\n" + + " '"+tenant_key+"' as TENANT_KEY,a.DELETE_TYPE IS_DELETE,a.CREATOR,a.DELETE_TYPE,0 as FT_STATUS,0 as is_flow,\n" + + " 1 as data_status,0 as is_top,4 as classification,0 as dn_first,\n" + + " a.id glzzyg,b.child_status, b.first_work_date, b.work_year, b.family_contact,\n" + + " b.accumfundaccount, b.bank_accountname, b.bank_account, b.residence_place, b.native_place, b.marital_status,\n" + + " b.graduate_school, b.nation, b.education, b.politics_status, b.household_type, a.username, a.email, a.mobile, a.telephone, a.avatar,\n" + + " a.personnel_status personnel_status_jcl, a.superior, a.sec_level, a.position, a.grade, a.job_num, a.hiredate, a.jobset_level,\n" + + " b.id_no, b.birthday, b.age, b.graduate_date, b.degree degreename, a.department, a.sex,\n" + + " b.branch_bank_id, b.bankid\n" + + " from eteams.employee a left join ecology10.hr_userinfo b on a.id = b.user\n" + + " left join "+ebTableName+" as tgt on a.id = tgt.id\n" + + " where a.delete_type=0 and a.tenant_key ='"+tenant_key+"' and tgt.id IS NULL "; + log.error("InitializationEmployeeInfo.sql111:{}", sql); + Map rs2 = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> employee_infos = databaseUtils.getDataSourceList(rs2); + log.error("InitializationEmployeeInfo.employee_infos:{}", employee_infos); + /** + * 先同步系统主表信息 + */ + for (Map employeeInfo : employee_infos) { + cleanUpTime(employeeInfo); + insert(ebTableName,employeeInfo); + + /** + * 写入表单引擎数据大表 + */ + insertFormdata(employeeInfo,formId,layoutId); + + /** + * 写入EB表单数据大表 + */ + insertPhysical(employeeInfo,objId); + } + /** + * 员工信息表人员状态转换 + */ + sql=" UPDATE "+ebTableName+"\n" + + " SET personnel_status = CASE\n" + + " WHEN personnel_status_jcl = 1 THEN 1\n" + + " WHEN personnel_status_jcl = 3 THEN 2\n" + + " WHEN personnel_status_jcl = 6 THEN 5\n" + + " WHEN personnel_status_jcl = 7 THEN 6\n" + + " ELSE 4\n" + + " END\n" + + "WHERE 1=1 "; + List> info = getYgxxDetailInfo(sql); + log.error("InitializationEmployeeInfo.personnel_status:{}", info); + + /** + * 单独刷新一下所属公司字段 + */ + sql = " UPDATE "+ebTableName+" e\n" + + "JOIN eteams.employee a on e.id=a.id\n" + + "join eteams.department b\n" + + "on a.department = b.id\n" + + "SET e.subcompany = b.subcompanyid where a.tenant_key = '"+tenant_key+"' "; + List> info2 = getYgxxDetailInfo(sql); + log.error("InitializationEmployeeInfo.subcompany:{}", info2); + + /** + * 明细表同步 + */ + syncAllYgxxDetailInfo(Long.parseLong(obj_Id),tenant_key); + + + /** + * 映射表数据 + */ + Map mapping = getMapping(); + log.error("InitializationEmployeeInfo.mapping:{}", mapping); + + result.put("code",200); + result.put("msg","初始化数据成功!"); + log.error("InitializationEmployeeInfo.result:"+result); + return WeaResult.success(result); + } + + + + + /** + * 写入表单引擎数据大表 + * @return + */ + public void insertFormdata(Map map,String form_id, String layout_id){ + String sql="insert into formdata(id, form_id, layout_id, data_status, tenant_key, operator, create_time, update_time, " + + " module, client, is_delete, creator, delete_type)" + + " values('" + map.get("id") + "','" + form_id + "','" + layout_id + "','submit','" + map.get("tenant_key") + "','" + map.get("updater") + "','" + map.get("create_time") + "'," + + " '" + map.get("update_time") + "','ebuilderform','pc','" + map.get("delete_type") + "','" + map.get("creator") + "','" + map.get("delete_type") + "')"; + log.error("insertFormdata.sql:{}", sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> recordList = databaseUtils.getDataSourceList(rs); + log.error("insertFormdata.recordList:{}", recordList); + } + + /** + * 写入EB表单数据大表 + * @return + */ + public void insertPhysical(Map map,String obj_id){ + String sql="insert into ebdf_physical_data(id, tenant_key, obj_id, name, form_data_id, form_table_id, is_flow, data_status, creator, create_time)" + + " values('" + map.get("id") + "','" + map.get("tenant_key") + "','" + obj_id + "','" + map.get("name") + "','" + map.get("id") + "'," + + " '" + map.get("id") + "','" + map.get("is_flow") + "','" + map.get("data_status") + "','" + map.get("creator") + "','" + map.get("create_time") + "')"; + log.error("insertPhysical.sql:{}", sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> recordList = databaseUtils.getDataSourceList(rs); + log.error("insertPhysical.recordList:{}", recordList); + } + + /** + * 数据同步处理明细表 + * @return + */ + public void syncAllYgxxDetailInfo(long objId,String tenant_key){ + log.error("syncAllYgxxDetailInfo.objId:{},tenant_key:{}",objId,tenant_key); + String uf_jcl_emp_gzll = recruitModuleUtils.getDetailTableNameByMasterId(objId, "uf_jcl_emp_gzll"); + log.error("syncAllYgxxDetailInfo.uf_jcl_emp_gzll:{}", uf_jcl_emp_gzll); + /** + * 工作履历表 + * */ + String gzsql = " SELECT src.id, src.user_id FORM_DATA_ID, 1 as DATA_INDEX,src.create_time,src.update_time,'"+tenant_key+"' as TENANT_KEY,\n" + + " src.delete_type as IS_DELETE,src.creator,src.delete_type,src.position, src.department,src.company,\n" + + " src.end_date, src.start_date, src.dimiss_reason, src.prover, src.prover_mobile,\n" + + " src.job_name, src.job_remark FROM hr_employment_record AS src\n" + + " LEFT JOIN "+uf_jcl_emp_gzll+" AS tgt ON src.id = tgt.id\n" + + " WHERE tgt.id IS NULL and src.tenant_key = '"+tenant_key+"'"; + List> gzllInfo = getYgxxDetailInfo(gzsql); + log.error("getYgxxDetailInfo.gzllInfo:{}", gzllInfo); + for (Map map : gzllInfo) { + cleanUpTime(map); + map.remove("hiredate"); + insert(uf_jcl_emp_gzll,map); + } + /** + * 教育经历表 + * */ + String uf_jcl_emp_jyjl = recruitModuleUtils.getDetailTableNameByMasterId(objId, "uf_jcl_emp_jyjl"); + log.error("syncAllYgxxDetailInfo.uf_jcl_emp_jyjl:{}", uf_jcl_emp_jyjl); + String jysql = " SELECT src.id, src.employee_id FORM_DATA_ID, 1 as DATA_INDEX,src.create_time,src.update_time,'"+tenant_key+"' as TENANT_KEY,\n" + + " src.delete_type IS_DELETE,src.creator,src.delete_type,src.education, src.data_end, src.data_start,\n" + + " src.edu_degree, src.remark, src.data_name, src.emp_major FROM hr_education AS src\n" + + " LEFT JOIN "+uf_jcl_emp_jyjl+" AS tgt ON src.id = tgt.id\n" + + " WHERE tgt.id IS NULL and src.tenant_key = '"+tenant_key+"' "; + List> jyjlInfo = getYgxxDetailInfo(jysql); + log.error("getYgxxDetailInfo.jyjlInfo:{}", jyjlInfo); + for (Map map : jyjlInfo) { + //插入教育经历表 + cleanUpTime(map); + map.remove("hiredate"); + insert(uf_jcl_emp_jyjl,map); + } + /** + * 家庭信息表 + * */ + String uf_jcl_emp_jtxx = recruitModuleUtils.getDetailTableNameByMasterId(objId, "uf_jcl_emp_jtxx"); + log.error("syncAllYgxxDetailInfo.uf_jcl_emp_jtxx:{}", uf_jcl_emp_jtxx); + String jtxxsql = "SELECT src.id, src.employee_id as FORM_DATA_ID, 1 as DATA_INDEX,src.create_time,src.update_time,'"+tenant_key+"' as TENANT_KEY,\n" + + " src.delete_type IS_DELETE,src.creator,src.delete_type, src.job_name, src.fm_birthday,\n" + + " src.work_company, src.childrenflag, src.title, src.member_name, src.address_name FROM hr_family AS src\n" + + " LEFT JOIN "+uf_jcl_emp_jtxx+" AS tgt ON src.id = tgt.id\n" + + " WHERE tgt.id IS NULL and src.tenant_key = '"+tenant_key+"' "; + List> jtxxInfo = getYgxxDetailInfo(jtxxsql); + log.error("getYgxxDetailInfo.jtxxInfo:{}", jtxxInfo); + for (Map map : jtxxInfo) { + //插入家庭信息表 + cleanUpTime(map); + map.remove("hiredate"); + insert(uf_jcl_emp_jtxx,map); + } + /** + * 表彰与奖励 + * */ + String uf_jcl_emp_bzyjl = recruitModuleUtils.getDetailTableNameByMasterId(objId, "uf_jcl_emp_bzyjl"); + log.error("syncAllYgxxDetailInfo.uf_jcl_emp_bzyjl:{}", uf_jcl_emp_bzyjl); + String bzsql = "SELECT src.id,src. employeeid FORM_DATA_ID, 1 as DATA_INDEX,src.create_time,src.update_time,'"+tenant_key+"' as TENANT_KEY,\n" + + " src.delete_type IS_DELETE,src.creator,src.delete_type,src.reward_date, src.reward_remark, src.reward_name FROM hr_rewards_before AS src\n" + + " LEFT JOIN "+uf_jcl_emp_bzyjl+" AS tgt ON src.id = tgt.id\n" + + " WHERE tgt.id IS NULL and src.tenant_key = '"+tenant_key+"';"; + List> bzInfo = getYgxxDetailInfo(bzsql); + log.error("getYgxxDetailInfo.bzInfo:{}", bzInfo); + for (Map map : bzInfo) { + cleanUpTime(map); + map.remove("hiredate"); + //插入家庭信息表 + insert(uf_jcl_emp_bzyjl,map); + } + /** + * 培训经历 + * */ + String uf_jcl_emp_pxjl = recruitModuleUtils.getDetailTableNameByMasterId(objId, "uf_jcl_emp_pxjl"); + log.error("syncAllYgxxDetailInfo.uf_jcl_emp_pxjl:{}", uf_jcl_emp_pxjl); + String pxsql = "SELECT src.id, src.employee_id FORM_DATA_ID, 1 as DATA_INDEX,src.create_time,src.update_time,'"+tenant_key+"' as TENANT_KEY,\n" + + " src.delete_type IS_DELETE,src.creator,src.delete_type,src.train_company, src.remark, src.data_name, src.data_start, src.data_end FROM hr_train AS src\n" + + " LEFT JOIN "+uf_jcl_emp_pxjl+" AS tgt ON src.id = tgt.id\n" + + " WHERE tgt.id IS NULL and src.tenant_key = '"+tenant_key+"'"; + List> pxInfo = getYgxxDetailInfo(pxsql); + log.error("getYgxxDetailInfo.pxInfo:{}", pxInfo); + for (Map map : pxInfo) { + //插入培训表 + cleanUpTime(map); + map.remove("hiredate"); + insert(uf_jcl_emp_pxjl,map); + } + /** + * 语言能力 + * */ + String uf_jcl_emp_yynl = recruitModuleUtils.getDetailTableNameByMasterId(objId, "uf_jcl_emp_yynl"); + log.error("syncAllYgxxDetailInfo.uf_jcl_emp_yynl:{}", uf_jcl_emp_yynl); + String yysql = "SELECT src.id, src.employee_id FORM_DATA_ID, 1 as DATA_INDEX,src.create_time,src.update_time,'"+tenant_key+"' as TENANT_KEY,\n" + + " src.delete_type IS_DELETE,src.creator,src.delete_type\n" + + " ,src.user_language, src.lang_level, src.remark FROM hr_language AS src\n" + + " LEFT JOIN "+uf_jcl_emp_yynl+" AS tgt ON src.id = tgt.id\n" + + " WHERE tgt.id IS NULL and src.tenant_key = '"+tenant_key+"'"; + List> yyInfo = getYgxxDetailInfo(yysql); + log.error("getYgxxDetailInfo.yyInfo:{}", yyInfo); + for (Map map : yyInfo) { + //插入培训表 + cleanUpTime(map); + map.remove("hiredate"); + insert("hr_language",map); + } + /** + * 权威机构资格 + * */ + String uf_jcl_emp_qwjgzgrz = recruitModuleUtils.getDetailTableNameByMasterId(objId, "uf_jcl_emp_qwjgzgrz"); + log.error("syncAllYgxxDetailInfo.uf_jcl_emp_qwjgzgrz:{}", uf_jcl_emp_qwjgzgrz); + String qwsql = "SELECT src.id, src.employee_id FORM_DATA_ID, 1 as DATA_INDEX,src.create_time,src.update_time,'"+tenant_key+"' as TENANT_KEY,\n" + + " src.delete_type IS_DELETE,src.creator,src.delete_type, src.award_company, src.data_end, src.data_start,src.data_name FROM hr_certification AS src\n" + + " LEFT JOIN "+uf_jcl_emp_qwjgzgrz+" AS tgt ON src.id = tgt.id\n" + + " WHERE tgt.id IS NULL and src.tenant_key = '"+tenant_key+"'"; + List> qwInfo = getYgxxDetailInfo(qwsql); + log.error("getYgxxDetailInfo.qwInfo:{}", qwInfo); + for (Map map : qwInfo) { + //插入权威机构表 + cleanUpTime(map); + map.remove("hiredate"); + insert(uf_jcl_emp_qwjgzgrz,map); + } + + } + + /** + * 根据明细表名称和关联id查询员工信息明细表数据 + * @return + */ + public List> getYgxxDetailInfo(String sql){ + log.error("getYgxxDetailInfo.sql:{}", sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> recordList = databaseUtils.getDataSourceList(rs); + log.error("getYgxxDetailInfo.recordList:{}", recordList); + return recordList; + } + + /** + * 获得key名映射 + * @return + */ + public Map getMapping(){ + /** + * 多租户查询主表名称 + */ + Map ebTableInfo = recruitModuleUtils.getEbTableInfo("uf_jcl_employee_information_apptag", "uf_jcl_zdtbysb_tag"); + String ebTableName = ebTableInfo.get("table_name"); + log.error("InitializationEmployeeInfo.ebTableName:{}", ebTableName); + String sql = "select ygxxzdkey,rlxtzdkey from "+ebTableName; + List> recordList = databaseUtils.getSqlList(sql); + Map resultMap = recordList.stream().collect(Collectors.toMap(e->e.get("rlxtzdkey").toString(),e -> e.get("ygxxzdkey").toString())); + + return resultMap; + } + + + + public int insert(String tableName, Map setMap){ + int result = 400; + log.info("insert-setMap{}",setMap); + if (StringUtils.isBlank(tableName) || null==setMap || setMap.size() <= 0) { + return result; + } + List setkey = new ArrayList<>(); + List setvalue = new ArrayList<>(); + setMap.forEach((key1, value) -> { + setkey.add(key1); + setvalue.add(value); + }); + List setvalueNew = new ArrayList<>(); + for (Object obj : setvalue) { + if (obj == null) { + setvalueNew.add(""); + } else { + setvalueNew.add(obj.toString()); + } + } + String sql = " insert into " + tableName + "(" + String.join(",", setkey) + ") values('" + + String.join("','", setvalueNew)+ "')"; + log.info("insert-sql{}",sql); + //查询数据库类型 + String databaseId = DatabaseUtil.getDatabaseId(); + log.info("insert-databaseId{}",databaseId); + if(databaseId.equalsIgnoreCase("oracle")){ + // 正则表达式匹配日期格式 + Pattern pattern = Pattern.compile("'(\\d{4}-\\d{2}-\\d{2})'"); + Matcher matcher = pattern.matcher(sql); + // 使用 StringBuffer 进行替换 + StringBuffer sb = new StringBuffer(); + while (matcher.find()) { + matcher.appendReplacement(sb, "TO_DATE('" + matcher.group(1) + "', 'yyyy-mm-dd')"); + } + matcher.appendTail(sb); + String updatedSql = sb.toString(); + System.out.println(updatedSql); + // 示例字符串包含日期和时间 + // 正则表达式匹配日期和时间格式 + Pattern patternWithTime = Pattern.compile("'(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})'"); + Matcher matcherWithTime = patternWithTime.matcher(updatedSql); + // 使用 StringBuffer 进行替换 + StringBuffer sbWithTime = new StringBuffer(); + while (matcherWithTime.find()) { + matcherWithTime.appendReplacement(sbWithTime, "TO_DATE('" + matcherWithTime.group(1) + "', 'yyyy-mm-dd hh24:mi:ss')"); + } + matcherWithTime.appendTail(sbWithTime); + String updatedSqlWithTime = sbWithTime.toString(); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", updatedSqlWithTime); + log.error("insert.recordList:{}", rs); + result = Integer.parseInt(String.valueOf(rs.get("code"))); + }else{ + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + log.error("insert.recordList:{}", rs); + result = Integer.parseInt(String.valueOf(rs.get("code"))); + } + return result; + } + + + public int update(String tableName, Map setMap,String condition,String id){ + int result = 400; + if(StringUtils.isNotBlank(id)){ + log.info("update-setMap{},id{}",setMap,id); + if (StringUtils.isBlank(tableName) || setMap == null || setMap.size() <= 0) { + return result; + } + StringBuilder sql = new StringBuilder(); + sql.append("update "+tableName + " set "); + //查询数据库类型 + String databaseId = DatabaseUtil.getDatabaseId(); + log.info("update-databaseId{}",databaseId); + for (String key : setMap.keySet()) { + if(databaseId.equalsIgnoreCase("oracle")){ + //判断是否是日期类型 + if(isValidDateTime(String.valueOf(setMap.get(key)))){ + sql.append(key).append("=").append("TO_DATE('").append(setMap.get(key)).append("', 'yyyy-mm-dd hh24:mi:ss')").append(","); + }else if(isValidDate(String.valueOf(setMap.get(key)))){ + sql.append(key).append("=").append("TO_DATE('").append(setMap.get(key)).append("', 'yyyy-mm-dd')").append(","); + }else{ + sql.append(key).append("=").append("'").append(setMap.get(key)).append("'").append(","); + } + }else { + sql.append(key).append("=").append("'").append(setMap.get(key)).append("'").append(","); + } + } + if (sql.length() > 0) { + sql.deleteCharAt(sql.length() - 1); // 删除最后一个字符 + } + sql.append(" where "+condition+" = "+id); + log.info("update-sql{}",sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql.toString()); + log.error("update.recordList:{}", rs); + result = Integer.parseInt(String.valueOf(rs.get("code"))); + } + return result; + } + + public static boolean isValidDate(String dateTimeStr) { + // 定义日期时间格式 + String dateTimePattern = "yyyy-MM-dd"; + return isValidDate(dateTimeStr, dateTimePattern); + } + + public static boolean isValidDateTime(String dateTimeStr) { + // 定义日期时间格式 + String dateTimePattern = "yyyy-MM-dd HH:mm:ss"; + return isValidDate(dateTimeStr, dateTimePattern); + } + + private static boolean isValidDate(String dateStr, String pattern) { + try { + SimpleDateFormat sdf = new SimpleDateFormat(pattern); + sdf.setLenient(false); // 设置为严格模式,避免宽松解析 + sdf.parse(dateStr); + return true; + } catch (ParseException e) { + return false; + } + } + + private void cleanUpTime(Map employee_info){ + //特殊处理 + //try{ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); + long create_time =0L; + long update_time =0L; + long hiredate_time =0L; + String createDate =nowData; + String updateDate =nowData; + String hiredate =nowData; + if(StringUtils.isNotBlank(getIgnoreCase(employee_info, "create_time"))){ + String time = getIgnoreCase(employee_info, "create_time"); + if(!time.contains("-")){ + create_time = Long.parseLong(time); + Date date = new Date(create_time); + createDate = sdf.format(date); + }else { + createDate = time; + } + } + if(StringUtils.isNotBlank(getIgnoreCase(employee_info, "update_time"))){ + String time = getIgnoreCase(employee_info, "update_time"); + if(!time.contains("-")){ + update_time = Long.parseLong(time); + Date date = new Date(update_time); + updateDate = sdf.format(date); + }else { + updateDate = time; + } + } + if(StringUtils.isNotBlank(getIgnoreCase(employee_info, "hiredate"))){ + String time = getIgnoreCase(employee_info, "hiredate"); + if(!time.contains("-")){ + hiredate_time = Long.parseLong(time); + Date date = new Date(hiredate_time); + hiredate = sdf2.format(date); + }else { + hiredate = time; + } + } + if(StringUtils.isNotBlank(getIgnoreCase(employee_info, "ft_status"))){ + String ft_status = getIgnoreCase(employee_info, "ft_status"); + if("false".equalsIgnoreCase(ft_status)){ + employee_info.put("ft_status","0"); + } + } + if(StringUtils.isNotBlank(getIgnoreCase(employee_info, "is_delete"))){ + String is_delete = getIgnoreCase(employee_info, "is_delete"); + if("false".equalsIgnoreCase(is_delete)){ + employee_info.put("is_delete","0"); + } + } + if(StringUtils.isNotBlank(getIgnoreCase(employee_info, "delete_type"))){ + String delete_type = getIgnoreCase(employee_info, "delete_type"); + if("false".equalsIgnoreCase(delete_type)){ + employee_info.put("delete_type","0"); + } + } + employee_info.put("create_time",createDate); + employee_info.put("update_time",updateDate); + employee_info.put("hiredate",hiredate); +// }catch (ParseException e) { +// e.printStackTrace(); +// } + } + + + + public static String getIgnoreCase(Map map, String key) { + for (Map.Entry entry : map.entrySet()) { + if (entry.getKey().equalsIgnoreCase(key)) { + return entry.getValue().toString(); + } + } + return null; // 或者抛出异常,取决于你的需求 + } + + +} diff --git a/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/RemoveCache.java b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/RemoveCache.java new file mode 100644 index 0000000..2c69c31 --- /dev/null +++ b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/esb/RemoveCache.java @@ -0,0 +1,120 @@ +package com.weaver.seconddev.jcl.organization.esb; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.nacos.common.utils.CollectionUtils; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.jcl.organization.util.DatabaseUtils; +import com.weaver.seconddev.jcl.organization.util.RecruitModuleUtils; +import com.weaver.seconddev.jcl.organization.util.SyncDataUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @use:同步兼职信息到组织 + * @date 2025年6月18日 + * @author xuxy + */ +@Service("RemoveCache_jcl") +public class RemoveCache implements EsbServerlessRpcRemoteInterface { + + @Autowired + private DatabaseUtils databaseUtils; + @Autowired + RecruitModuleUtils recruitModuleUtils; + @Autowired + private SyncDataUtils syncDataUtils; + + public static String path = "/api/hrm/fix/removeCache"; + + private static final Logger log = LoggerFactory.getLogger(RemoveCache.class); + + @Override + public WeaResult> execute(Map params) { + Map result = new HashMap<>(); + + /** + * 多租户查询主表名称(JCL_开放平台接口配置表) + */ + Map ebTablePzInfo = recruitModuleUtils.getEbTableInfo("uf_jcl_employee_information_apptag", "uf_jcl_kfptjkpzb_tag"); + String objPzId = ebTablePzInfo.get("objId"); + String ebTablePzName = ebTablePzInfo.get("table_name"); + log.error("RemoveCache.objPzId:{},ebTablePzName:{}", objPzId,ebTablePzName); + + /** + * 获取token系统参数信息查询 + */ + Map apiInfo = getApiInfo(ebTablePzName); + String host = String.valueOf(apiInfo.get("ipdz")); + log.error("RemoveCache.apiInfo:{}", apiInfo); + + + /** + * 3.组装数据 + */ + /*** + * 数据规则 + */ + JSONObject jsonObject = new JSONObject(); + jsonObject.put("all",true); + log.error("RemoveCache.jsonObject:{}", jsonObject); + try { + String accessToken = syncDataUtils.getToken(apiInfo); + log.error("RemoveCache.accessToken:{}", accessToken); + if(StringUtils.isNotBlank(accessToken)){ + jsonObject.put("access_token",accessToken); + log.error("RemoveCache.result:jsonObject{},path:{},host:{}", jsonObject,path,host); + result = syncDataUtils.doPostHttp(jsonObject, path,host); + log.error("RemoveCache.result:111{}", result); + // 获取 responseBody + String responseBody = String.valueOf(result.get("responseBody")); + log.error("RemoveCache.responseBody:{}", responseBody); +// // 获取 data 列表 +// Gson gson = new Gson(); +// Type type = new TypeToken>() {}.getType(); +// Map responseBodyNew = gson.fromJson(responseBody, type); +// log.error("RemoveCache.responseBodyNew:{}", responseBodyNew); +// // 获取 data 列表 +// List> data = (List>) responseBodyNew.get("data"); +// log.error("RemoveCache.data:{}", data); +// // 获取第一个元素的 keyValue +// if (!data.isEmpty()) { +// String keyValue = (String) data.get(0).get("keyValue"); +// log.error("RemoveCache.keyValue:{}", keyValue); +// } + }else{ + result.put("status2","fail"); + } + log.error("RemoveCache.result:{}", result); + }catch (Exception e) { + result.put("status2","exception"); + log.error("RemoveCache:"+e); + } + return WeaResult.success(result); + } + + /** + * 根据接口标识查询开放平台接口参数 + * @return + */ + public Map getApiInfo(String ebTablePzName){ + Map map = new HashMap<>(); + String sql = "select id,ipdz,jkbs,app_key,app_sec,corpid from "+ebTablePzName+" where DELETE_TYPE=0 and tenant_key = '"+RecruitModuleUtils.getCurrentTenantKey()+"' and jkbs ='syncExtra' "; + log.error("getApiInfo.sql:{}", sql); + Map rs = databaseUtils.execute("LOGIC", "weaver-ebuilder-form-service", sql); + List> recordList = databaseUtils.getDataSourceList(rs); + log.error("getApiInfo.recordList:{}", recordList); + if(CollectionUtils.isNotEmpty(recordList)){ + map = recordList.get(0); + } + return map; + } + + +} diff --git a/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/util/SyncDataUtils.java b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/util/SyncDataUtils.java index 3b7e936..92c7848 100644 --- a/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/util/SyncDataUtils.java +++ b/jcl-hrmorganization/secondev-jcl-hrmorganization/src/main/java/com/weaver/seconddev/jcl/organization/util/SyncDataUtils.java @@ -44,10 +44,11 @@ public class SyncDataUtils { .method("POST", body) .addHeader("Content-Type", "application/json") .build(); - + log.error("RemoveCache.request:"+request); Response response = client.newCall(request).execute(); + log.error("RemoveCache.response:"+response); int code = response.code(); - log.error("code:"+code); + log.error("RemoveCache.code:"+code); returnMap.put("code",code+""); if (code == 200) { String responseBody = response.body().string();