package com.engine.recruit.conn; import com.engine.recruit.enums.ApplicationStatusEnum; import org.apache.commons.collections.CollectionUtils; import weaver.conn.RecordSet; import weaver.general.Util; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; /** * @author:dxfeng * @createTime: 2023/10/26 * @version: 1.0 */ public class CheckRepeatResume { private static CheckRepeatResume instance = new CheckRepeatResume(); private CheckRepeatResume() { // 私有化构造方法 } public static CheckRepeatResume getInstance() { return instance; } /** * 校验简历是否加入黑名单 * * @param name 姓名 * @param mobile 手机号 * @return */ public static boolean joinBlackList(String name, String mobile) { // 在这里编写你的方法逻辑 RecordSet rs = new RecordSet(); rs.executeQuery("select id from uf_jcl_rck where sfjrhmd =0 and xm = ? and sjhm = ?", name, mobile); return rs.next(); } public static List> getRepeatPositionResumeList(String name, String mobile, String positionId) { return getRepeatPositionResumeList(name, mobile, positionId, ""); } public static List> getRepeatPositionResumeList(String name, String mobile, String positionId, String billId) { RecordSet rs = new RecordSet(); // 查询状态为待分配、候选中的且未隐藏的数据 rs.executeQuery("select * from uf_jcl_yppc where formmodeid is not null and zt != 2 and zt != 3 and xm = ? and sjhm = ? and ypzw = ? and id != ? order by zt", name, mobile, positionId, billId); return RecruitRecordSet.getRecordMapList(rs); } /** * 根据姓名、手机号查询重复的简历数据 * * @param name 姓名 * @param mobile 手机号 * @return */ private List> getRepeatResumeList(String name, String mobile) { RecordSet rs = new RecordSet(); // 查询状态为待分配、候选中的且未隐藏的数据 rs.executeQuery("select * from uf_jcl_yppc where formmodeid is not null and zt != 2 and zt != 3 and xm = ? and sjhm =? order by zt", name, mobile); return RecruitRecordSet.getRecordMapList(rs); } /** * 插入简历数据 * * @param param 数据集合 * @return 新插入简历的ID */ public int insertResumeMainTable(Map param) { Map map = insertResumeAndReturn(param); return Util.getIntValue(Util.null2String(map.get("mainId"))); } /** * 插入简历数据 * * @param param 数据集合 * @return 简历插入信息 */ public Map insertResumeAndReturn(Map param) { Map returnMap = new HashMap<>(); int mainId = -1; String sourceId; String name = Util.null2String(param.get("xm")); String mobile = Util.null2String(param.get("sjhm")); String status = Util.null2String(param.get("zt")); String positionId = Util.null2String(param.get("ypzw")); // 黑名单校验,黑名单人员不入库 boolean joinBlackList = joinBlackList(name, mobile); returnMap.put("joinBlackList", joinBlackList); returnMap.put("isUpdate", false); returnMap.put("mainId", mainId); if (joinBlackList) { return returnMap; } // 按照姓名+手机号查询正常展示的简历数据 List> repeatResumeList = getRepeatResumeList(name, mobile); if (CollectionUtils.isEmpty(repeatResumeList)) { // 不存在重复数据,直接插入数据库 mainId = insertData(param); returnMap.put("mainId", mainId); return returnMap; } // 新接收的简历为待分配 if (ApplicationStatusEnum.DISTRIBUTION.getValue().equals(status)) { Map sourceResume = repeatResumeList.get(0); if (ApplicationStatusEnum.DISTRIBUTION.getValue().equals(Util.null2String(sourceResume.get("zt")))) { // 当前存在待分配的简历 sourceId = Util.null2String(sourceResume.get("id")); //取新简历有值的字段,更新已入库简历没有值的字段,已入库简历有值的字段不做更新,新简历入库并隐藏 mainId = updateSourceResume(param, sourceResume); returnMap.put("mainId", mainId); returnMap.put("sourceId", sourceId); returnMap.put("isUpdate", true); return returnMap; } else { // 直接入库,不做任何处理 mainId = insertData(param); returnMap.put("mainId", mainId); return returnMap; } } else if (ApplicationStatusEnum.CANDIDATE.getValue().equals(status)) { // 新简历为候选中 boolean hasSamePosition = false; for (Map sourceResume : repeatResumeList) { if (positionId.equals(Util.null2String(sourceResume.get("ypzw")))) { hasSamePosition = true; } } if (hasSamePosition) { // 若有相同职位的数据,新简历直接入库并隐藏 mainId = insertHideData(param); returnMap.put("mainId", mainId); return returnMap; } else { // 没有相同职位的数据,新简历直接入库,不做任何处理 mainId = insertData(param); returnMap.put("mainId", mainId); return returnMap; } } return returnMap; } /** * 直接插入简历信息 * * @param dataMap 数据集合 * @return */ private int insertData(Map dataMap) { String uuid = UUID.randomUUID().toString(); dataMap.put("modeuuid", uuid); RecordSet rs = new RecordSet(); int formModeId = -1; rs.executeQuery("select id from modeinfo where formid =( select id from workflow_bill where tablename = 'uf_jcl_yppc' )"); if (rs.next()) { formModeId = rs.getInt("id"); } dataMap.put("formmodeid", formModeId); RecruitRecordSet.buildModeInsertFields(dataMap, 1); RecruitRecordSet.insertData(dataMap, "uf_jcl_yppc"); return RecruitRecordSet.refreshRight(uuid, "uf_jcl_yppc", formModeId, 1); } /** * 插入数据库并隐藏 * * @param dataMap 数据集合 * @return */ private int insertHideData(Map dataMap) { String uuid = UUID.randomUUID().toString(); dataMap.put("modeuuid", uuid); RecordSet rs = new RecordSet(); RecruitRecordSet.buildModeInsertFields(dataMap, 1); RecruitRecordSet.insertData(dataMap, "uf_jcl_yppc"); rs.executeQuery("select id from uf_jcl_yppc where modeuuid='" + uuid + "'"); if (rs.next()) { return Util.getIntValue(rs.getString("id")); } return -1; } /** * 更新简历信息 * * @param param 新简历数据集合 * @param sourceResume 源简历数据集合 * @return */ private int updateSourceResume(Map param, Map sourceResume) { replaceNullValues(param, sourceResume); // 处理操作人员、操作时间 RecruitRecordSet.buildModeUpdateFields(sourceResume, 1); RecruitRecordSet.updateDataById(sourceResume, "uf_jcl_yppc"); // 更新数据 RecruitRecordSet.buildModeInsertFields(param, 1); return insertHideData(param); } /** * 替换sourceResume中为null或者为空的值 * * @param param 新简历数据集合 * @param sourceResume 源简历数据集合 */ private void replaceNullValues(Map param, Map sourceResume) { for (Map.Entry entry : sourceResume.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); if (value == null || "".equals(value)) { if (param.containsKey(key)) { sourceResume.put(key, param.get(key)); } } } } }