package com.engine.recruit.thread; import cn.hutool.core.convert.Convert; import com.engine.recruit.conn.PositionCommonInfo; import com.engine.recruit.conn.RecruitDataMap; 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.RecruitModeUtil; import weaver.hrm.User; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * @author:dxfeng * @createTime: 2023/10/16 * @version: 1.0 */ public class SdkResumeSavedThread extends LocalRunnable { private ResumeMqMessage resumeMqMessage; private static final int SEC_CATEGORY = Convert.toInt(RecruitModeUtil.getRecruitPropValue("APPLICANTS_RESUMES_CATEGORY")); public SdkResumeSavedThread(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 RecruitDataMap<>(); // 姓名 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); // 判断是否有发布职位信息,如有发布职位信息,完善招聘流程信息,并指定为待分配状态 String positionId = PositionCommonInfo.getPositionIdByQll(resumeInfoDto.getJobId()); if (StringUtils.isNotBlank(positionId)) { params.put("ypzw", "positionId"); params.put("zplc", PositionCommonInfo.getRecruitFlowId(positionId)); params.put("zt", ApplicationStatusEnum.CANDIDATE.getValue()); } else { // 状态,指定待分配 params.put("zt", ApplicationStatusEnum.DISTRIBUTION.getValue()); } // 判断简历是否重复,插入主表 int mainId = new CheckRepeatResume().insertResumeMainTable(params); Thread.sleep(1000); if (-1 == mainId) { return; } RecordSet rs = new RecordSet(); // 插入明细表数据 List educationExperience = resumeInfoDto.getEducationExperience(); String sql = "insert into uf_jcl_yppc_dt1 (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 uf_jcl_yppc_dt2 (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 uf_jcl_yppc_dt3 (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; } }