package weaver.formmode.recruit.modeexpand.position; import cn.hutool.core.convert.Convert; import com.engine.recruit.constant.ModeTable; import com.engine.recruit.enums.ApplicationStatusEnum; import com.engine.recruit.enums.CommonBrowserTypeEnum; import com.engine.recruit.enums.HighestDegreeEnum; import com.weaver.rpa.sdk.clients.application.resume.ERPAResumeSDKClient; import com.weaver.rpa.sdk.clients.core.ERPASDKClients; import com.weaver.util.threadPool.entity.LocalRunnable; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import weaver.common.DateUtil; import weaver.conn.RecordSet; import weaver.erpa.apps.entity.application.resume.dto.*; import weaver.formmode.recruit.modeexpand.util.ApplicantCommonInfo; import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil; import weaver.hrm.User; import java.util.*; /** * @author:dxfeng * @createTime: 2023/10/16 * @version: 1.0 */ public class ResumeSavedThread extends LocalRunnable { private ResumeMqMessage resumeMqMessage; private static final int SEC_CATEGORY = Convert.toInt(RecruitModeUtil.getRecruitPropValue("APPLICANTS_RESUMES_CATEGORY")); public ResumeSavedThread(ResumeMqMessage resumeMqMessage) { this.resumeMqMessage = resumeMqMessage; } @Override public void execute() throws Exception { parseResume(resumeMqMessage); } /** * 解析建立,并入库 * * @param resumeMqMessage * @throws Exception */ private void parseResume(ResumeMqMessage resumeMqMessage) throws Exception { String userId = resumeMqMessage.getUserId(); User user = new User(); if (StringUtils.isNotBlank(userId)) { user.setUid(Convert.toInt(userId)); } else { user.setUid(1); } // 千里聆简历ID Long resumeId = resumeMqMessage.getResumeId(); ResumeInfoDto resumeInfoDto = resumeMqMessage.getResumeInfoDto(); Map params = new HashMap<>(); // 姓名 params.put("xm", resumeInfoDto.getName()); // 性别 params.put("xb", resumeInfoDto.getSex()); // 年龄 params.put("nl", resumeInfoDto.getAge()); // 工作经验 params.put("gzjy", getCommonBrowserKey(getExperienceText(resumeInfoDto.getExperience()), CommonBrowserTypeEnum.WORK_EXPERIENCE.getDesc())); // 手机号码 params.put("sjhm", resumeInfoDto.getPhone()); // 电子邮箱 params.put("dzyx", resumeInfoDto.getEmail()); // 期望税前月薪 params.put("qwsqyxk", resumeInfoDto.getExpectSalaryStart()); // 最高学历 params.put("zgxl", HighestDegreeEnum.getDegreeId(resumeInfoDto.getHighestDegree()).getId()); // 原始简历 params.put("ysjl", convertStreamToE9DocId(resumeMqMessage.getResumeInfoDto().getResumeFileId(), user)); // 千里聆简历ID params.put("qlljl", resumeId); // 状态,指定待分配 params.put("zt", ApplicationStatusEnum.DISTRIBUTION.getValue()); // 填充建模数据基本信息 int formModeId = ApplicantCommonInfo.getModeIdByTableName(ModeTable.UF_JCL_YPPC); params.put("formmodeid", formModeId); params.put("modedatacreater", user.getUID()); String dateTime = DateUtil.getFullDate(); String[] split = dateTime.split(" "); params.put("modedatacreatedate", split[0]); params.put("modedatacreatetime", split[1]); params.put("modedatamodifier", user.getUID()); params.put("modedatamodifydatetime", dateTime); params.put("modedatacreatertype", "0"); String uuid = UUID.randomUUID().toString(); params.put("modeuuid", uuid); // 插入主表 RecordSet rs = new RecordSet(); List fieldList = new ArrayList<>(); List fieldValueList = new ArrayList<>(); params.forEach((key, value) -> { fieldList.add(key); fieldValueList.add(RecruitModeUtil.parseBlankToNull(value)); }); rs.executeUpdate("insert into " + ModeTable.UF_JCL_YPPC + " (" + StringUtils.join(fieldList, ",") + ") values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); Thread.sleep(1000); int mainId = ApplicantCommonInfo.refreshRight(rs, uuid, ModeTable.UF_JCL_YPPC, formModeId); // 插入明细表数据 List educationExperience = resumeInfoDto.getEducationExperience(); String sql = "insert into " + ModeTable.getDetailTableName(ModeTable.UF_JCL_YPPC, 1) + " (mainId,xxmc,xl,zy,kssj,jssj) values (?,?,?,?,?,?) "; for (ResumeInfoEducationExperienceDto educationExperienceDto : educationExperience) { List data = new ArrayList<>(); data.add(mainId); data.add(educationExperienceDto.getSchoolName()); data.add(HighestDegreeEnum.getDegreeId(educationExperienceDto.getDegree()).getId()); data.add(educationExperienceDto.getMajor()); data.add(DateUtil.getDate(educationExperienceDto.getBeginTime())); data.add(DateUtil.getDate(educationExperienceDto.getEndTime())); rs.executeUpdate(sql, data); } sql = "insert into " + ModeTable.getDetailTableName(ModeTable.UF_JCL_YPPC, 2) + " (mainId,gsmc,gw,gzzz,kssj,jssj) values (?,?,?,?,?,?) "; List workExperience = resumeInfoDto.getWorkExperience(); for (ResumeInfoWorkExperienceDto workExperienceDto : workExperience) { List data = new ArrayList<>(); data.add(mainId); data.add(workExperienceDto.getCompanyName()); data.add(workExperienceDto.getJobName()); data.add(workExperienceDto.getContent()); data.add(DateUtil.getDate(workExperienceDto.getBeginTime())); data.add(DateUtil.getDate(workExperienceDto.getEndTime())); rs.executeUpdate(sql, data); } sql = "insert into " + ModeTable.getDetailTableName(ModeTable.UF_JCL_YPPC, 3) + " (mainId,xmmc,xmms,kssj,jssj) values (?,?,?,?,?) "; List projectExperience = resumeInfoDto.getProjectExperience(); for (ResumeInfoProjectExperienceDto projectExperienceDto : projectExperience) { List data = new ArrayList<>(); data.add(mainId); data.add(projectExperienceDto.getProjectName()); data.add(projectExperienceDto.getContent()); data.add(DateUtil.getDate(projectExperienceDto.getBeginTime())); data.add(DateUtil.getDate(projectExperienceDto.getEndTime())); rs.executeUpdate(sql, data); } } private String getCommonBrowserKey(String value, String commonBrowserType) { RecordSet rs = new RecordSet(); rs.executeQuery("select id from uf_sjzd where zdlxmc = (select id from uf_zdlx where zdmc = ?) and xxnr =?", commonBrowserType, value); if (rs.next()) { return rs.getString("id"); } return ""; } private String getExperienceText(Integer experience) { String experienceText = "不限"; switch (experience) { case -1: experienceText = "不限"; break; case 1: experienceText = "1年以内"; break; case 2: experienceText = "1-3年"; break; case 3: experienceText = "3-5年"; break; case 5: experienceText = "5-10年"; break; case 6: experienceText = "10年以上"; break; default: break; } return experienceText; } /** * 将文件流转换为文档ID * * @param resumeFileId * @param user * @return */ private String convertStreamToE9DocId(Long resumeFileId, User user) { List docIdList = new ArrayList<>(); ERPAResumeSDKClient client = ERPASDKClients.getResumeSDKClient(); client.start(); client.downloadResumeFile(resumeFileId, (fileName, stream) -> { try { int imageFileId = RecruitModeUtil.generateImageFileId(stream, fileName); docIdList.add(RecruitModeUtil.createDocId(SEC_CATEGORY, imageFileId, user)); } catch (Exception e) { throw new RuntimeException(e); } }); return CollectionUtils.isNotEmpty(docIdList) ? Integer.toString(docIdList.get(0)) : ""; } public ResumeMqMessage getResumeMqMessage() { return this.resumeMqMessage; } public void setResumeMqMessage(ResumeMqMessage resumeMqMessage) { this.resumeMqMessage = resumeMqMessage; } }