generated from dxfeng/secondev-chapanda-feishu
216 lines
8.8 KiB
Java
216 lines
8.8 KiB
Java
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<String, Object> 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<String> fieldList = new ArrayList<>();
|
|
List<String> 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<ResumeInfoEducationExperienceDto> 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<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);
|
|
}
|
|
sql = "insert into " + ModeTable.getDetailTableName(ModeTable.UF_JCL_YPPC, 2) + " (mainId,gsmc,gw,gzzz,kssj,jssj) values (?,?,?,?,?,?) ";
|
|
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);
|
|
}
|
|
sql = "insert into " + ModeTable.getDetailTableName(ModeTable.UF_JCL_YPPC, 3) + " (mainId,xmmc,xmms,kssj,jssj) values (?,?,?,?,?) ";
|
|
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;
|
|
}
|
|
}
|