weaver-hrm-recruit/src/com/engine/recruit/thread/SdkResumeSavedThread.java

211 lines
8.2 KiB
Java
Raw Normal View History

2023-10-27 09:27:47 +08:00
package com.engine.recruit.thread;
2023-10-17 15:18:53 +08:00
import cn.hutool.core.convert.Convert;
import com.engine.recruit.conn.CheckRepeatResume;
2023-10-27 09:27:47 +08:00
import com.engine.recruit.conn.PositionCommonInfo;
import com.engine.recruit.conn.RecruitDataMap;
2023-10-19 18:13:58 +08:00
import com.engine.recruit.enums.ApplicationStatusEnum;
2023-10-17 15:18:53 +08:00
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;
2023-10-27 09:27:47 +08:00
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
2023-10-17 15:18:53 +08:00
/**
* @author:dxfeng
* @createTime: 2023/10/16
* @version: 1.0
*/
2023-10-27 09:27:47 +08:00
public class SdkResumeSavedThread extends LocalRunnable {
2023-10-17 15:18:53 +08:00
private ResumeMqMessage resumeMqMessage;
private static final int SEC_CATEGORY = Convert.toInt(RecruitModeUtil.getRecruitPropValue("APPLICANTS_RESUMES_CATEGORY"));
2023-10-27 09:27:47 +08:00
public SdkResumeSavedThread(ResumeMqMessage resumeMqMessage) {
2023-10-17 15:18:53 +08:00
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();
2023-10-27 09:27:47 +08:00
Map<String, Object> params = new RecruitDataMap<>();
2023-10-17 15:18:53 +08:00
// 姓名
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);
2023-10-27 09:27:47 +08:00
// 判断是否有发布职位信息,如有发布职位信息,完善招聘流程信息,并指定为待分配状态
String positionId = PositionCommonInfo.getPositionIdByQll(resumeInfoDto.getJobId());
if (StringUtils.isNotBlank(positionId)) {
2024-01-10 10:14:03 +08:00
params.put("ypzw", positionId);
2023-10-27 09:27:47 +08:00
params.put("zplc", PositionCommonInfo.getRecruitFlowId(positionId));
params.put("zt", ApplicationStatusEnum.CANDIDATE.getValue());
} else {
// 状态,指定待分配
params.put("zt", ApplicationStatusEnum.DISTRIBUTION.getValue());
}
// 判断简历是否重复,插入主表
2023-11-16 17:02:34 +08:00
int mainId = CheckRepeatResume.getInstance().insertResumeMainTable(params);
2023-10-17 15:18:53 +08:00
Thread.sleep(1000);
2023-10-27 09:27:47 +08:00
if (-1 == mainId) {
return;
}
2023-10-17 15:18:53 +08:00
2023-10-27 09:27:47 +08:00
RecordSet rs = new RecordSet();
2023-10-17 15:18:53 +08:00
// 插入明细表数据
List<ResumeInfoEducationExperienceDto> educationExperience = resumeInfoDto.getEducationExperience();
2023-10-24 10:32:30 +08:00
String sql = "insert into uf_jcl_yppc_dt1 (mainId,xxmc,xl,zy,kssj,jssj) values (?,?,?,?,?,?) ";
2023-10-17 15:18:53 +08:00
for (ResumeInfoEducationExperienceDto educationExperienceDto : educationExperience) {
List<Object> 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);
}
2023-10-24 10:32:30 +08:00
sql = "insert into uf_jcl_yppc_dt2 (mainId,gsmc,gw,gzzz,kssj,jssj) values (?,?,?,?,?,?) ";
2023-10-17 15:18:53 +08:00
List<ResumeInfoWorkExperienceDto> workExperience = resumeInfoDto.getWorkExperience();
for (ResumeInfoWorkExperienceDto workExperienceDto : workExperience) {
List<Object> 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);
}
2023-10-24 10:32:30 +08:00
sql = "insert into uf_jcl_yppc_dt3 (mainId,xmmc,xmms,kssj,jssj) values (?,?,?,?,?) ";
2023-10-17 15:18:53 +08:00
List<ResumeInfoProjectExperienceDto> projectExperience = resumeInfoDto.getProjectExperience();
for (ResumeInfoProjectExperienceDto projectExperienceDto : projectExperience) {
List<Object> 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<Integer> 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;
}
}