weaver-hrm-recruit/src/weaver/interfaces/recruit/thread/ExtractQllResumeThread.java

188 lines
8.1 KiB
Java
Raw Normal View History

package weaver.interfaces.recruit.thread;
import cn.hutool.core.convert.Convert;
import com.alibaba.fastjson.JSON;
import com.engine.recruit.conn.*;
import com.engine.recruit.entity.resume.QllResumePo;
import com.engine.recruit.enums.ApplicationStatusEnum;
import com.engine.recruit.util.RecruitUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author:dxfeng
* @createTime: 2023/11/10
* @version: 1.0
*/
public class ExtractQllResumeThread extends Thread {
BaseBean baseBean = new BaseBean();
@Override
public void run() {
RecordSet rs = new RecordSet();
rs.executeQuery("select id,xm,xb,nl,gzjy,xjzd,sjhm,yx,ypzw,grys,qzyx,gzjl,xmjl,jyjl,zgxl,zyjn,yynl,zs,jlfj,rksj,tdsj,lyqd,gjrsjh from uf_jcl_jlzjb where ocr is null and cqzt is null order by modedatacreatedate, modedatacreatetime");
List<Map<String, Object>> mapList = RecruitRecordSet.getRecordMapList(rs);
if (CollectionUtils.isEmpty(mapList)) {
return;
}
for (Map<String, Object> map : mapList) {
QllResumePo qllResumePo = RecruitUtil.parseMap2Object(map, QllResumePo.class);
try {
2024-11-26 13:48:41 +08:00
String email = "";
rs.executeQuery("select lyyx from uf_jcl_jlzjb where id = ? ", qllResumePo.getId());
if (rs.next()) {
email = rs.getString("lyyx");
}
int creator = getCreator(rs, qllResumePo.getGjrsjh(), email);
qllResumePo.setUserId(creator);
baseBean.writeLog("千里聆简历解析开始中间表ID=【" + qllResumePo.getId() + "");
RecruitDataMap<Object> dataMap = buildApplicantMap(qllResumePo);
baseBean.writeLog("千里聆简历主表数据解析完成==" + JSON.toJSONString(dataMap));
// 校验简历信息、并插入
CheckRepeatResume instance = CheckRepeatResume.getInstance();
2024-11-26 13:48:41 +08:00
Map<String, Object> checkMap = instance.insertResumeAndReturn(creator, dataMap);
String mainId = Util.null2String(checkMap.get("mainId"));
String sourceId = Util.null2String(checkMap.get("sourceId"));
baseBean.writeLog("千里聆简历主表数据插入完成mainId==【" + mainId + "sourceId==【" + sourceId + "");
// 数据写入完成后更新抽取状态为新插入的数据ID
rs.executeUpdate("update uf_jcl_jlzjb set cqzt = 1 ,mainid = ? ,sourceid = ? where id = ? ", Convert.toInt(mainId), Convert.toInt(sourceId), qllResumePo.getId());
// 插入明细表数据
instance.insertResumeDetailTable(qllResumePo.getJyjl(), "uf_jcl_yppc_dt1", mainId, sourceId);
instance.insertResumeDetailTable(qllResumePo.getGzjl(), "uf_jcl_yppc_dt2", mainId, sourceId);
instance.insertResumeDetailTable(qllResumePo.getXmjl(), "uf_jcl_yppc_dt3", mainId, sourceId);
baseBean.writeLog("千里聆简历解析完成mainId==【" + mainId + "sourceId==【" + sourceId + "");
} catch (Exception e) {
baseBean.writeLog("简历解析失败" + JSON.toJSONString(qllResumePo), e);
}
}
}
/**
* 构建应聘者数据集合
*
* @param qllResumePo
* @return
*/
private RecruitDataMap<Object> buildApplicantMap(QllResumePo qllResumePo) {
RecruitDataMap<Object> insertMap = new RecruitDataMap<>();
// 姓名
insertMap.put("xm", qllResumePo.getXm());
// 性别
insertMap.put("xb", qllResumePo.getXb());
// 年龄
insertMap.put("nl", qllResumePo.getNl());
// 工作经验
insertMap.put("gzjy", qllResumePo.getGzjy());
// 手机号码
insertMap.put("sjhm", qllResumePo.getSjhm());
// 电子邮箱
insertMap.put("dzyx", qllResumePo.getYx());
// 自我评价
insertMap.put("zwpj", qllResumePo.getGrys());
// 最高学历
insertMap.put("zgxl", qllResumePo.getZgxl());
// 简历来源
insertMap.put("jlly", qllResumePo.getLyqd());
// 投递时间
insertMap.put("tdsj", DateUtil.getDateTime());
// 原始简历
insertMap.put("ysjl", qllResumePo.getJlfj());
// 投递职位(第三方)
insertMap.put("tdzwdsf", qllResumePo.getYpzw());
String zt = ApplicationStatusEnum.DISTRIBUTION.getValue();
// 应聘职位
String ypzw = PositionCommonInfo.getPositionIdByName(qllResumePo.getYpzw(), qllResumePo.getGjrsjh());
baseBean.writeLog("投递职位==【" + qllResumePo.getYpzw() + "】,投递职位ID==【" + ypzw + "");
if (StringUtils.isNotBlank(ypzw)) {
String flowId = PositionCommonInfo.getRecruitFlowId(ypzw);
Map<String, String> initialStage = ApplicantCommonInfo.getInitialStage(flowId);
if (null != initialStage) {
baseBean.writeLog("initialStage===" + JSON.toJSONString(initialStage));
2023-11-20 18:33:57 +08:00
String zpjd = initialStage.get("zpjd");
String dqypjd = initialStage.get("jdlx");
if (StringUtils.isNotBlank(zpjd) && StringUtils.isNotBlank(dqypjd)) {
insertMap.put("ypzw", ypzw);
insertMap.put("zplc", flowId);
insertMap.put("zpjd", zpjd);
insertMap.put("dqypjd", dqypjd);
zt = ApplicationStatusEnum.CANDIDATE.getValue();
}
}
}
// 应聘状态
insertMap.put("zt", zt);
// 更新毕业院校
List<RecruitDataMap<Object>> studyList = qllResumePo.getJyjl();
if (CollectionUtils.isNotEmpty(studyList)) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
List<RecruitDataMap<Object>> sortedList = studyList.stream()
.sorted((map1, map2) -> {
String dateStr1 = Util.null2String(map1.get("bysj"));
String dateStr2 = Util.null2String(map2.get("bysj"));
if (StringUtils.isBlank(dateStr1)&& StringUtils.isBlank(dateStr2)) {
return 0;
}
if (StringUtils.isBlank(dateStr1)) {
return 1;
}
if (StringUtils.isBlank(dateStr2)) {
return -1;
}
try {
Date date1 = dateFormat.parse(dateStr1);
Date date2 = dateFormat.parse(dateStr2);
return date1.compareTo(date2);
} catch (ParseException e) {
throw new RuntimeException(e);
}
})
.collect(Collectors.toList());
RecruitDataMap<Object> lastMap = sortedList.get(sortedList.size() - 1);
String xxmc = Util.null2String(lastMap.get("xxmc"));
if(StringUtils.isNotBlank(xxmc)){
insertMap.put("byyx",xxmc);
}
}
return insertMap;
}
2024-11-26 13:48:41 +08:00
private int getCreator(RecordSet rs, String phone, String email) {
int uid = 1;
if (StringUtils.isNotBlank(phone)) {
rs.executeQuery("select id from hrmresource where mobile = ?", phone);
if (rs.next()) {
uid = Math.max(uid, rs.getInt("id"));
}
}
if (StringUtils.isNotBlank(email)) {
rs.executeQuery("select id from hrmresource where email = ?", email);
if (rs.next()) {
uid = Math.max(uid, rs.getInt("id"));
}
}
return uid;
}
}