package com.engine.recruit.service.impl; import cn.hutool.core.convert.Convert; import com.engine.core.impl.Service; import com.engine.recruit.conn.RecruitRecordSet; import com.engine.recruit.enums.ApplicantOperateEnum; import com.engine.recruit.enums.ApplicationStatusEnum; import com.engine.recruit.service.ApplicantResumeService; import org.apache.commons.lang3.StringUtils; import weaver.common.DateUtil; import weaver.conn.RecordSet; import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil; import weaver.formmode.setup.ModeRightInfo; import weaver.general.Util; import weaver.hrm.resource.ResourceComInfo; import java.util.*; /** * @author:dxfeng * @createTime: 2023/09/20 * @version: 1.0 */ public class ApplicantResumeServiceImpl extends Service implements ApplicantResumeService { @Override public Map getApplicantsName(String ids) { Map returnMap = new HashMap<>(1); RecordSet rs = new RecordSet(); String[] split = ids.split(","); List> list = new ArrayList<>(); for (String id : split) { rs.executeQuery("select xm from uf_jcl_yppc where id = ?", id); if (rs.next()) { Map rowMap = new HashMap<>(); rowMap.put("id", id); rowMap.put("name", rs.getString("xm")); list.add(rowMap); } } returnMap.put("rows", list); return returnMap; } @Override public Map getInterviewInfoById(String id) { Map returnMap = new HashMap<>(16); String sql = "select a.ypz,b.xm,a.ypzw,b.tdsj,b.sjhm,b.dzyx,a.msfs,a.mshj ,a.msc,a.msg ,a.ptmsg,a.msrq,a.msdd ,a.msfkr from uf_jcl_ms a inner join uf_jcl_yppc b on a.ypz = b.id where a.id = ?"; RecordSet rs = new RecordSet(); rs.executeQuery(sql, id); if (rs.next()) { // 应聘者 returnMap.put("ypz", createApplicantBrowserMap(rs.getString("ypz"), rs.getString("xm"))); // 应聘职位 returnMap.put("ypzw", createAppliedPositionBrowserMap(rs.getString("ypzw"))); // 投递时间 returnMap.put("tdsj", createApplicantBrowserMap(rs.getString("tdsj"))); // 手机号码 returnMap.put("sjhm", createApplicantBrowserMap(rs.getString("sjhm"))); // 电子邮箱 returnMap.put("dzyx", createApplicantBrowserMap(rs.getString("dzyx"))); // 面试方式 returnMap.put("msfs", createApplicantBrowserMap(rs.getString("msfs"))); // 面试环节 returnMap.put("mshj", createApplicantBrowserMap(rs.getString("mshj"))); // 面试轮次 returnMap.put("msc", createApplicantBrowserMap(rs.getString("msc"))); // 面试官 returnMap.put("msg", createResourceBrowserMap(rs.getString("msg"))); // 陪同面试官 returnMap.put("ptmsg", createResourceBrowserMap(rs.getString("ptmsg"))); // 面试日期 returnMap.put("msrq", createApplicantBrowserMap(rs.getString("msrq"))); // 面试地址 returnMap.put("msdd", createApplicantBrowserMap(rs.getString("msdd"))); } return returnMap; } @Override public Map getDisplayLayoutId(Map params) { Map returnMap = new HashMap<>(); String layoutId = Util.null2String(params.get("layoutid")); String modeId = Util.null2String(params.get("modeId")); returnMap.put("layoutId", layoutId); RecordSet rs = new RecordSet(); rs.executeQuery("select layoutname from modehtmllayout where modeid = ? and id = ?", modeId, layoutId); if (rs.next()) { String layoutName = rs.getString("layoutname"); // 获取相同名称的显示布局ID rs.executeQuery("select id from modehtmllayout where type = 0 and modeid = ? and layoutname =?", modeId, layoutName); if (rs.next()) { returnMap.put("layoutId", rs.getString("id")); } } return returnMap; } @Override public Map getTabCount(Map params) { Map returnMap = new HashMap<>(); String billId = Util.null2String(params.get("billid")); List countList = new ArrayList<>(); RecordSet rs = new RecordSet(); // 部门筛选反馈 rs.executeQuery("select count(id) as num from uf_jcl_bmsxfk where ypz = ?", billId); if (rs.next()) { countList.add(rs.getInt("num")); } // 笔试 rs.executeQuery("select count(id) as num from uf_jcl_bs where ypz = ?", billId); if (rs.next()) { countList.add(rs.getInt("num")); } // 面试 rs.executeQuery("select count(id) as num from uf_jcl_ms where ypz = ?", billId); if (rs.next()) { countList.add(rs.getInt("num")); } // 背调 rs.executeQuery("select count(id) as num from uf_jcl_bd where ypz = ?", billId); if (rs.next()) { countList.add(rs.getInt("num")); } // 薪酬谈判 rs.executeQuery("select count(id) as num from uf_jcl_xctp where ypz = ?", billId); if (rs.next()) { countList.add(rs.getInt("num")); } // 历史投递记录 rs.executeQuery("select xm,sjhm from uf_jcl_yppc where id = ?", billId); if (rs.next()) { rs.executeQuery("select count(id) as num from uf_jcl_yppc where xm=? and sjhm =?", rs.getString("xm"), rs.getString("sjhm")); if (rs.next()) { countList.add(rs.getInt("num")); } } else { countList.add(0); } returnMap.put("countList", countList); return returnMap; } @Override public Map updateApplicantsInfo(Map params) { Map returnMap = new HashMap<>(); String operateType = Util.null2String(params.get("operateType")); RecordSet rs = new RecordSet(); if (ApplicantOperateEnum.ELIMINATE.getOperateType().equals(operateType)) { // 淘汰 String ids = Util.null2String(params.get("ids")); rs.executeUpdate("update uf_jcl_yppc set zt = ? where id in (" + ids + ")", ApplicationStatusEnum.OBSOLETE.getValue()); returnMap.put("msg", "操作成功"); } else if (ApplicantOperateEnum.TRANSFER.getOperateType().equals(operateType)) { // 转移阶段 String dqypjd = Util.null2String(params.get("dqypjd")); String billid = Util.null2String(params.get("billid")); rs.executeUpdate("update uf_jcl_yppc set zpjd = ? where id = ?", dqypjd, billid); returnMap.put("msg", "操作成功"); } else if (ApplicantOperateEnum.ASSIGN.getOperateType().equals(operateType)) { // 分配职位 String billid = Util.null2String(params.get("billid")); String ypzw = Util.null2String(params.get("ypzw")); rs.executeUpdate("update uf_jcl_yppc set ypzw = ? where id = ?", ypzw, billid); returnMap.put("msg", "操作成功"); } else if (ApplicantOperateEnum.ARCHIVE.getOperateType().equals(operateType)) { // 归档人才库 String gdyy = Util.null2String(params.get("gdyy")); String gdxxyy = Util.null2String(params.get("gdxxyy")); String ids = Util.null2String(params.get("ids")); if (StringUtils.isNotBlank(ids)) { String[] split = ids.split(","); for (String id : split) { rs.executeUpdate("update uf_jcl_yppc set gdyy = ?,gdxxyy = ? where id = ? ", gdyy, gdxxyy, id); // 建模推送建模 archiveTalentPool(id, false); // 更新应聘状态为已归档 rs.executeUpdate("update uf_jcl_yppc set zt = ? where id = ? ", ApplicationStatusEnum.ARCHIVED.getValue(), id); } } else { returnMap.put("msg", "请至少选择一条数据"); } } else if (ApplicantOperateEnum.REFERRAL.getOperateType().equals(operateType)) { // 转推其他职位 String sourceId = Util.null2String(params.get("sourceId")); String ypzw = Util.null2String(params.get("ypzw")); String zplc = null; rs.executeQuery("select zplc from uf_jcl_zp_zpzw where id = ?", ypzw); if (rs.next()) { zplc = rs.getString("zplc"); } rs.executeQuery("select * from uf_jcl_yppc where id = ?", sourceId); Map mainDataMap = RecruitRecordSet.getSingleRecordMap(rs); // 构建新数据 mainDataMap.put("ypzw", ypzw); mainDataMap.put("zplc", zplc); mainDataMap.put("zpjd", null); mainDataMap.put("dqypjd", null); mainDataMap.put("zt", ApplicationStatusEnum.CANDIDATE.getValue()); buildBaseFields(mainDataMap); String uuid = UUID.randomUUID().toString(); mainDataMap.put("modeuuid", uuid); // 移除不需要插入的字段 mainDataMap.remove("id"); mainDataMap.remove("requestId"); mainDataMap.remove("form_biz_id"); // 插入数据 RecruitRecordSet.insertData(mainDataMap, "uf_jcl_yppc"); // 权限重构 rs.executeQuery("select id,formmodeid from uf_jcl_yppc where modeuuid='" + uuid + "'"); if (rs.next()) { //建模数据的id int targetId = Util.getIntValue(rs.getString("id")); int formModeId = Util.getIntValue(rs.getString("formmodeid")); ModeRightInfo modeRightInfo = new ModeRightInfo(); modeRightInfo.setNewRight(true); //新建的时候添加共享 modeRightInfo.editModeDataShare(1, formModeId, targetId); // 复制明细表数据 rs.executeUpdate("insert into uf_jcl_yppc_dt1 (mainid,xxmc,xl,zy,kssj,jssj) select ?,xxmc,xl,zy,kssj,jssj from uf_jcl_yppc_dt1 where mainid = ?", targetId, sourceId); rs.executeUpdate("insert into uf_jcl_yppc_dt2 (mainid,gsmc,kssj,jssj,gw,sqyxk,lzyy,gzzz) select ?,gsmc,kssj,jssj,gw,sqyxk,lzyy,gzzz from uf_jcl_yppc_dt2 where mainid = ?", targetId, sourceId); rs.executeUpdate("insert into uf_jcl_yppc_dt3 (mainid,xmmc,kssj,jssj,drjs,xmms) select ?,xmmc,kssj,jssj,drjs,xmms from uf_jcl_yppc_dt3 where mainid = ?", targetId, sourceId); rs.executeUpdate("insert into uf_jcl_yppc_dt4 (mainid,yylx,zwcd) select ?,yylx,zwcd from uf_jcl_yppc_dt4 where mainid = ?", targetId, sourceId); } } return returnMap; } @Override public Map fullOriginalResumeId(Map params) { int imageFileId = Convert.toInt(params.get("imageFileId")); int resumeId = Convert.toInt(params.get("resumeId")); int secCategory = Convert.toInt(RecruitModeUtil.getRecruitPropValue("APPLICANTS_RESUMES_CATEGORY")); RecordSet rs = new RecordSet(); try { int docId = RecruitModeUtil.createDocId(secCategory, imageFileId, user); // 更新原始简历信息,设置应聘状态未待分配 rs.executeUpdate("update uf_jcl_yppc set ysjl=?,zt=? where id = ?", docId, ApplicationStatusEnum.DISTRIBUTION.getValue(), resumeId); } catch (Exception e) { throw new RuntimeException(e); } return new HashMap<>(); } /** * 构建普通数据格式 * * @param value * @return */ private Map createApplicantBrowserMap(String value) { if (StringUtils.isBlank(value)) { return null; } Map browserMap = new HashMap<>(1); browserMap.put("value", value); return browserMap; } /** * 构建应聘者浏览按钮值 * * @param id * @param name * @return */ private Map createApplicantBrowserMap(String id, String name) { Map browserMap = new HashMap<>(2); if (StringUtils.isBlank(id)) { return browserMap; } browserMap.put("value", id); List> objList = new ArrayList<>(); Map obj = new HashMap<>(2); obj.put("id", id); obj.put("name", name); objList.add(obj); browserMap.put("specialobj", objList); return browserMap; } /** * 构建应聘职位浏览按钮 * * @param id * @return */ private Map createAppliedPositionBrowserMap(String id) { Map browserMap = new HashMap<>(2); if (StringUtils.isBlank(id)) { return browserMap; } browserMap.put("value", id); RecordSet rs = new RecordSet(); rs.executeQuery("select zpzwmc from uf_jcl_zp_zpzw where id = ?", id); if (rs.next()) { List> objList = new ArrayList<>(); Map obj = new HashMap<>(2); obj.put("id", id); obj.put("name", rs.getString("zpzwmc")); objList.add(obj); browserMap.put("specialobj", objList); } return browserMap; } /** * 构建人员浏览按钮值 * * @param ids * @return */ private Map createResourceBrowserMap(String ids) { Map browserMap = new HashMap<>(2); if (StringUtils.isBlank(ids)) { return browserMap; } browserMap.put("value", ids); List> objList = new ArrayList<>(); String[] split = ids.split(","); try { ResourceComInfo resourceComInfo = new ResourceComInfo(); for (String s : split) { Map obj = new HashMap<>(2); obj.put("id", s); obj.put("name", resourceComInfo.getLastname(s)); objList.add(obj); } } catch (Exception e) { throw new RuntimeException(e); } browserMap.put("specialobj", objList); return browserMap; } /** * 归档人才库 * * @param applicantId 应聘者ID * @param joinBlacklist 是否加入黑名单 */ public void archiveTalentPool(String applicantId, boolean joinBlacklist) { RecordSet rs = new RecordSet(); String name = ""; String mobile = ""; String talentPoolId = ""; rs.executeQuery("select xm,sjhm from uf_jcl_yppc where id = ?", applicantId); if (rs.next()) { name = rs.getString("xm"); mobile = rs.getString("sjhm"); } rs.executeQuery("select id from uf_jcl_rck where xm = ? and sjhm = ?", name, mobile); if (rs.next()) { talentPoolId = rs.getString("id"); } // 推送建模主表数据 String insertSql = "insert into uf_jcl_rck (modeuuid, formmodeid, modedatacreater, modedatacreatedate, modedatacreatetime, modedatamodifier, modedatamodifydatetime, modedatacreatertype," + "sfz,jlzp,zhypzw,ysjl,jlly,xm,xb,sjhm,dzyx,csrq,nl,zgxl,zgxw,byyx,zy,hyzk,gzjy,zzzt,dqszd,zhtdsj,cjr,zwpj,mz,jg,zzmm,sgcm,tzkg,gdjd,gdyy,gdxxyy,lstdcs,sfjrhmd)" + " values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; List mainDataList = new ArrayList<>(); String uuid = UUID.randomUUID().toString(); mainDataList.add(uuid); int formModeId = -1; rs.executeQuery("select id from modeinfo where formid =( select id from workflow_bill where tablename = 'uf_jcl_rck' )"); if (rs.next()) { formModeId = rs.getInt("id"); } mainDataList.add(formModeId); // 构建建模表基本数据 buildBaseFields(mainDataList); rs.executeQuery("select * from uf_jcl_yppc where id = ?", applicantId); if (rs.next()) { mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("sfz"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("jlzp"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("ypzw"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("ysjl"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("jlly"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("xm"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("xb"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("sjhm"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("dzyx"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("csrq"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("nl"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("zgxl"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("zgxw"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("byyx"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("zy"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("hyzk"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("gzjy"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("zzzt"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("dqszd"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("tdsj"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("cjr"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("zwpj"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("mz"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("jg"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("zzmm"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("sgcm"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("tzkg"))); // 归档阶段 mainDataList.add(null); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("gdyy"))); mainDataList.add(RecruitModeUtil.parseBlankToNull(rs.getString("gdxxyy"))); } // 历史投递次数 rs.executeQuery("select count(id) as num from uf_jcl_yppc where xm=? and sjhm =?", rs.getString("xm"), rs.getString("sjhm")); if (rs.next()) { mainDataList.add(rs.getInt("num")); } // 是否加入黑名单 mainDataList.add(joinBlacklist ? 0 : 1); rs.executeUpdate(insertSql, mainDataList); refreshRight(uuid, formModeId, applicantId); // 删除人才库原来的数据 rs.executeUpdate("delete from uf_jcl_rck where id = ? ", talentPoolId); rs.executeUpdate("delete from uf_jcl_rck_dt1 where mainid = ? ", talentPoolId); rs.executeUpdate("delete from uf_jcl_rck_dt2 where mainid = ? ", talentPoolId); rs.executeUpdate("delete from uf_jcl_rck_dt3 where mainid = ? ", talentPoolId); rs.executeUpdate("delete from uf_jcl_rck_dt4 where mainid = ? ", talentPoolId); } /** * 构建建模表基本数据 * * @param mainDataList 参数集合 */ private void buildBaseFields(List mainDataList) { String dateTime = DateUtil.getFullDate(); String[] dateSplit = dateTime.split(" "); // modedatacreater mainDataList.add(user.getUID()); // modedatacreatedate mainDataList.add(dateSplit[0]); // modedatacreatetime mainDataList.add(dateSplit[1]); // modedatamodifier mainDataList.add(user.getUID()); // modedatamodifydatetime mainDataList.add(dateTime); // modedatacreatertype mainDataList.add("0"); } /** * 构建建模表基本数据 * * @param mainDataMap 参数集合 */ private void buildBaseFields(Map mainDataMap) { String dateTime = DateUtil.getFullDate(); String[] dateSplit = dateTime.split(" "); mainDataMap.put("modedatacreater", user.getUID()); mainDataMap.put("modedatacreatedate", dateSplit[0]); mainDataMap.put("modedatacreatetime", dateSplit[1]); mainDataMap.put("modedatamodifier", user.getUID()); mainDataMap.put("modedatamodifydatetime", dateTime); mainDataMap.put("modedatacreatertype", "0"); } /** * 权限重构 * * @param uuid UUID * @param formModeId 建模ID * @param applicantId 应聘者ID */ private void refreshRight(String uuid, int formModeId, String applicantId) { RecordSet rs = new RecordSet(); rs.executeQuery("select id from uf_jcl_rck where modeuuid='" + uuid + "'"); if (rs.next()) { //建模数据的id int bid = Util.getIntValue(rs.getString("id")); ModeRightInfo modeRightInfo = new ModeRightInfo(); modeRightInfo.setNewRight(true); //新建的时候添加共享 modeRightInfo.editModeDataShare(1, formModeId, bid); // 插入明细表数据 rs.executeQuery("select * from uf_jcl_yppc_dt1 where mainid = ? ", applicantId); List> insertList = new ArrayList<>(); while (rs.next()) { List paramList = new ArrayList<>(); // mainid paramList.add(bid); paramList.add(RecruitModeUtil.parseBlankToNull(rs.getString("xxmc"))); paramList.add(RecruitModeUtil.parseBlankToNull(rs.getString("xl"))); paramList.add(RecruitModeUtil.parseBlankToNull(rs.getString("zy"))); paramList.add(RecruitModeUtil.parseBlankToNull(rs.getString("kssj"))); paramList.add(RecruitModeUtil.parseBlankToNull(rs.getString("jssj"))); insertList.add(paramList); } for (List list : insertList) { rs.executeUpdate("insert into uf_jcl_rck_dt1 (mainid, xxmc, xl, zy, kssj, jssj) values (?, ?, ?, ?, ?, ?)", list); } rs.executeQuery("select * from uf_jcl_yppc_dt2 where mainid = ? ", applicantId); insertList = new ArrayList<>(); while (rs.next()) { List paramList = new ArrayList<>(); // mainid paramList.add(bid); paramList.add(RecruitModeUtil.parseBlankToNull(rs.getString("gsmc"))); paramList.add(RecruitModeUtil.parseBlankToNull(rs.getString("kssj"))); paramList.add(RecruitModeUtil.parseBlankToNull(rs.getString("jssj"))); paramList.add(RecruitModeUtil.parseBlankToNull(rs.getString("gw"))); paramList.add(RecruitModeUtil.parseBlankToNull(rs.getString("gzzz"))); paramList.add(RecruitModeUtil.parseBlankToNull(rs.getString("sqyxk"))); paramList.add(RecruitModeUtil.parseBlankToNull(rs.getString("lzyy"))); insertList.add(paramList); } for (List list : insertList) { rs.executeUpdate("insert into uf_jcl_rck_dt2 (mainid, gsmc, kssj, jssj, gw, gzzz, sqyxk, lzyy) values (?, ?, ?, ?, ?, ?, ?, ?)", list); } rs.executeQuery("select * from uf_jcl_yppc_dt3 where mainid = ? ", applicantId); insertList = new ArrayList<>(); while (rs.next()) { List paramList = new ArrayList<>(); // mainid paramList.add(bid); paramList.add(RecruitModeUtil.parseBlankToNull(rs.getString("xmmc"))); paramList.add(RecruitModeUtil.parseBlankToNull(rs.getString("kssj"))); paramList.add(RecruitModeUtil.parseBlankToNull(rs.getString("jssj"))); paramList.add(RecruitModeUtil.parseBlankToNull(rs.getString("drjs"))); paramList.add(RecruitModeUtil.parseBlankToNull(rs.getString("xmms"))); insertList.add(paramList); } for (List list : insertList) { rs.executeUpdate("insert into uf_jcl_rck_dt3 (mainid, xmmc, kssj, jssj, drjs, xmms) values (?, ?, ?, ?, ?, ?)", list); } rs.executeQuery("select * from uf_jcl_yppc_dt4 where mainid = ? ", applicantId); insertList = new ArrayList<>(); while (rs.next()) { List paramList = new ArrayList<>(); // mainid paramList.add(bid); paramList.add(RecruitModeUtil.parseBlankToNull(rs.getString("yylx"))); paramList.add(RecruitModeUtil.parseBlankToNull(rs.getString("zwcd"))); insertList.add(paramList); } for (List list : insertList) { rs.executeUpdate("insert into uf_jcl_rck_dt4 (mainid, yylx, zwcd) values (?, ?, ?)", list); } } } }