weaver-hrm-recruit/src/com/engine/recruit/service/impl/ResumeRecognitionServiceImp...

760 lines
29 KiB
Java
Raw Normal View History

2023-12-13 17:09:46 +08:00
package com.engine.recruit.service.impl;
2024-01-09 18:06:31 +08:00
import cn.hutool.core.convert.Convert;
2023-12-13 17:09:46 +08:00
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.engine.core.impl.Service;
import com.engine.recruit.conn.*;
import com.engine.recruit.constant.RecruitConstant;
2024-01-09 18:06:31 +08:00
import com.engine.recruit.enums.ApplicationStatusEnum;
2023-12-13 17:09:46 +08:00
import com.engine.recruit.exception.CustomizeRunTimeException;
import com.engine.recruit.service.ResumeRecognitionService;
2024-01-09 18:06:31 +08:00
import com.weaver.formmodel.data.model.Formfield;
import org.apache.commons.collections.CollectionUtils;
2023-12-13 17:09:46 +08:00
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
2024-06-04 17:17:17 +08:00
import weaver.common.DateUtil;
2024-01-09 18:06:31 +08:00
import weaver.conn.RecordSet;
2023-12-13 17:09:46 +08:00
import weaver.file.ImageFileManager;
2024-01-09 18:06:31 +08:00
import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil;
import weaver.general.BaseBean;
2023-12-13 17:09:46 +08:00
import weaver.general.Util;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
2024-01-09 18:06:31 +08:00
import java.util.*;
import java.util.function.Function;
2024-01-09 18:06:31 +08:00
import java.util.stream.Collectors;
2023-12-13 17:09:46 +08:00
/**
* @author:dxfeng
* @createTime: 2023/12/12
* @version: 1.0
*/
public class ResumeRecognitionServiceImpl extends Service implements ResumeRecognitionService {
2024-01-09 18:06:31 +08:00
2023-12-13 17:09:46 +08:00
@Override
public Map<String, Object> resumeUpload(Map<String, Object> param) {
Map<String, Object> returnMap = new HashMap<>(16);
2023-12-13 17:09:46 +08:00
String resumeId = Util.null2String(param.get("resumeId"));
int imageField = ApplicantCommonInfo.getImageFieldByDocId(resumeId);
if (-1 == imageField) {
throw new CustomizeRunTimeException("原始简历文件获取失败,请重新上传原始简历");
2023-12-13 17:09:46 +08:00
}
2024-01-09 18:06:31 +08:00
qllResumeUpload(imageField, returnMap, true);
returnMap.put("isOcr", true);
2023-12-13 17:09:46 +08:00
return returnMap;
}
2024-01-05 10:59:43 +08:00
@Override
public Map<String, Object> importResume(Map<String, Object> param) {
2024-01-09 18:06:31 +08:00
Map<String, Object> returnMap = new HashMap<>();
2024-01-05 10:59:43 +08:00
String resumeId = Util.null2String(param.get("resumeId"));
2024-01-09 18:06:31 +08:00
Map<String, Object> uploadDataMap = new HashMap<>();
qllResumeUpload(Convert.toInt(resumeId), uploadDataMap, false);
Map<String, Object> resumeData = (Map<String, Object>) uploadDataMap.get("data");
2024-01-05 10:59:43 +08:00
// 添加原始附件字段信息
int secCategory = Convert.toInt(RecruitConstant.APPLICANTS_RESUMES_CATEGORY);
2024-01-09 18:06:31 +08:00
try {
int docId = RecruitModeUtil.createDocId(secCategory, Convert.toInt(resumeId), user);
resumeData.put("ysjl", docId);
} catch (Exception e) {
throw new RuntimeException(e);
}
List<RecruitDataMap<Object>> studyList = (List<RecruitDataMap<Object>>) resumeData.remove("jyjl");
List<RecruitDataMap<Object>> workList = (List<RecruitDataMap<Object>>) resumeData.remove("gzjl");
2024-01-09 18:06:31 +08:00
// 状态
resumeData.put("zt", ApplicationStatusEnum.DISTRIBUTION.getValue());
2024-01-05 10:59:43 +08:00
2024-01-09 18:06:31 +08:00
List<Formfield> fieldList = RecruitModeUtil.getFieldList("uf_jcl_yppc");
Set<String> keySet = fieldList.stream().map(Formfield::getFieldname).collect(Collectors.toSet());
2024-01-05 10:59:43 +08:00
2024-01-09 18:06:31 +08:00
// 移除不在 keySet 中的键值对
resumeData.entrySet().removeIf(entry -> !keySet.contains(entry.getKey()));
// 判断简历信息
CheckRepeatResume instance = CheckRepeatResume.getInstance();
Map<String, Object> map = instance.insertResumeAndReturn(resumeData);
2024-01-09 18:06:31 +08:00
String mainId = Util.null2String(map.get("mainId"));
String sourceId = Util.null2String(map.get("sourceId"));
returnMap.put("mainId", mainId);
returnMap.put("sourceId", sourceId);
returnMap.put("id", StringUtils.isNotBlank(sourceId) ? sourceId : mainId);
instance.insertResumeDetailTable(studyList, "uf_jcl_yppc_dt1", mainId, sourceId);
instance.insertResumeDetailTable(workList, "uf_jcl_yppc_dt2", mainId, sourceId);
2024-01-09 18:06:31 +08:00
return returnMap;
2024-01-05 10:59:43 +08:00
}
@Override
public Map<String, Object> fetchResume(Map<String, Object> param) {
2024-01-09 18:06:31 +08:00
String id = Util.null2String(param.get("id"));
String sql = "select * from uf_jcl_yppc where id = ? ";
RecordSet rs = new RecordSet();
rs.executeQuery(sql, id);
Map<String, Object> dataMap = RecruitRecordSet.getSingleRecordMap(rs);
List<Formfield> fieldList = RecruitModeUtil.getFieldList("uf_jcl_yppc");
Map<String, Formfield> fieldMap = fieldList.stream().collect(Collectors.toMap(Formfield::getFieldname, item -> item, (k1, k2) -> k1));
for (String key : dataMap.keySet()) {
Object value = dataMap.get(key);
if (StringUtils.isBlank(Convert.toStr(value))) {
continue;
}
// 计算新的value值
Formfield formfield = fieldMap.get(key);
value = RecruitModeUtil.getFieldShowName(formfield, Convert.toStr(value)).replaceAll("<[^>]*>", "");
// 更新value值
dataMap.put(key, value);
}
return dataMap;
2024-01-05 10:59:43 +08:00
}
2023-12-13 17:09:46 +08:00
/**
* @param resumeId 简历ID
* @param returnMap 响应集合
*/
2024-01-09 18:06:31 +08:00
private void qllResumeUpload(int resumeId, Map<String, Object> returnMap, boolean isCard) {
2023-12-13 17:09:46 +08:00
String response = doQllPost(resumeId);
if (StringUtils.isBlank(response)) {
throw new CustomizeRunTimeException("千里聆接口调用失败,响应结果为空");
}
BaseBean baseBean = new BaseBean();
2023-12-13 17:09:46 +08:00
JSONObject all = JSONObject.parseObject(response);
if (!all.getBoolean("isSuccess")) {
baseBean.writeLog("千里聆响应数据:" + all);
2023-12-13 17:09:46 +08:00
throw new CustomizeRunTimeException("千里聆接口调用失败,接口不通");
}
JSONObject resultall = all.getJSONObject("data");
String status = resultall.getString("state");
if ("fail".equals(status)) {
throw new CustomizeRunTimeException("调用千里聆接口失败,失败原因:" + resultall.getString("info"));
}
JSONObject result = resultall.getJSONObject("result");
baseBean.writeLog("千里聆OCR解析数据" + result);
Map<String, Object> dataMap = parseQllJsonToMapV2(result, isCard);
2023-12-13 17:09:46 +08:00
returnMap.put("data", dataMap);
}
/**
* 千里聆解析字段内容处理
*
* @param obj
* @return
*/
2024-01-09 18:06:31 +08:00
private Map<String, Object> parseQllJsonToMap(JSONObject obj, boolean isCard) {
Map<String, Object> dataMap = new HashMap<>(16);
2023-12-13 17:09:46 +08:00
// 姓名
String xm = parseArray(obj.getJSONArray("姓名"));
dataMap.put("xm", xm);
2023-12-13 17:09:46 +08:00
// 电子邮箱
String dzyx = parseArray(obj.getJSONArray("电子邮箱"));
dataMap.put("dzyx", dzyx);
2023-12-13 17:09:46 +08:00
// 手机号码
String sjhm = parseArray(obj.getJSONArray("手机号"));
dataMap.put("sjhm", sjhm);
2023-12-13 17:09:46 +08:00
// 年龄
String nl = parseArray(obj.getJSONArray("年龄"));
dataMap.put("nl", nl);
2023-12-13 17:09:46 +08:00
// 出生日期
String csrq = parseArray(obj.getJSONArray("出生日期"));
dataMap.put("csrq", parseDateObject(csrq));
// 民族
2024-01-09 18:06:31 +08:00
// 性别 默认为男
String xb = "".equals(parseArray(obj.getJSONArray("性别"))) ? "1" : "0";
dataMap.put("xb", xb);
2023-12-13 17:09:46 +08:00
// 体重KG
// 身高CM
// 籍贯
2024-03-22 16:53:30 +08:00
//dataMap.put("jg", parseArray(obj.getJSONArray("籍贯")));
2023-12-13 17:09:46 +08:00
// 婚姻状况
// 当前所在地
2024-03-22 16:53:30 +08:00
//dataMap.put("jzd", parseArray(obj.getJSONArray("现居住地")));
2023-12-13 17:09:46 +08:00
// 政治面貌
// 在职状态
2024-03-25 16:26:49 +08:00
2023-12-13 17:09:46 +08:00
// 工作经验
2024-03-25 16:26:49 +08:00
List<Map<String, String>> gzjy = getBrowserArray(parseArray(obj.getJSONArray("工作经验")), this::getWorkExperienceArray);
if (CollectionUtils.isNotEmpty(gzjy)) {
dataMap.put("gzjy", gzjy);
if (!isCard) {
dataMap.put("gzjy", gzjy.stream().map(item -> item.get("id")).collect(Collectors.joining(",")));
}
}
2023-12-13 17:09:46 +08:00
// 最高学位
2024-01-09 18:06:31 +08:00
List<Map<String, String>> zgxw = getBrowserArray(parseArray(obj.getJSONArray("最高学位")), this::getDegreeArray);
2024-03-22 16:53:30 +08:00
if (CollectionUtils.isNotEmpty(zgxw)) {
dataMap.put("zgxw", zgxw);
if (!isCard) {
dataMap.put("zgxw", zgxw.stream().map(item -> item.get("id")).collect(Collectors.joining(",")));
}
2024-01-09 18:06:31 +08:00
}
2023-12-13 17:09:46 +08:00
// 最高学历
2024-01-09 18:06:31 +08:00
List<Map<String, String>> zgxl = getBrowserArray(parseArray(obj.getJSONArray("最高学历")), this::getEducationLevelArray);
2024-03-22 16:53:30 +08:00
if (CollectionUtils.isNotEmpty(zgxl)) {
dataMap.put("zgxl", zgxl);
if (!isCard) {
dataMap.put("zgxl", zgxl.stream().map(item -> item.get("id")).collect(Collectors.joining(",")));
}
2024-01-09 18:06:31 +08:00
}
2023-12-13 17:09:46 +08:00
// 专业
String zy = parseArray(obj.getJSONArray("专业"));
dataMap.put("zy", zy);
2023-12-13 17:09:46 +08:00
// 毕业院校
String byyx = parseArray(obj.getJSONArray("毕业院校"));
dataMap.put("byyx", byyx);
2023-12-13 17:09:46 +08:00
// 期望税前月薪K
String qwxz = parseArray(obj.getJSONArray("期望薪资"));
dataMap.put("qwxz", qwxz);
2023-12-13 17:09:46 +08:00
// 现税前月薪K
// 自我评价
String zwpj = parseArray(obj.getJSONArray("个人评价"));
dataMap.put("zwpj", zwpj);
// 民族
dataMap.put("mz", parseArray(obj.getJSONArray("民族")));
2023-12-13 17:09:46 +08:00
// 明细表数据
// 教育经历
JSONArray jyjl = obj.getJSONArray("学业信息");
List<RecruitDataMap<Object>> studyList = new ArrayList<>();
if (null != jyjl && jyjl.size() > 0) {
for (int i = 0; i < jyjl.size(); i++) {
JSONObject o = (JSONObject) jyjl.get(i);
String studyDate = o.getString("就读时期");
RecruitDataMap<Object> studyMap = new RecruitDataMap<>();
studyMap.putAll(getDateRange(studyDate, true));
studyMap.put("xxmc", o.getString("院校"));
2024-01-09 18:06:31 +08:00
List<Map<String, String>> xl = getBrowserArray(o.getString("学历"), this::getEducationLevelArray);
studyMap.put("xl", xl);
if (!isCard && CollectionUtils.isNotEmpty(xl)) {
studyMap.put("xl", xl.stream().map(item -> item.get("id")).collect(Collectors.joining(",")));
}
studyMap.put("zy", o.getString("专业"));
studyList.add(studyMap);
}
}
dataMap.put("jyjl", studyList);
2023-12-13 17:09:46 +08:00
// 工作经历
JSONArray gzjl = obj.getJSONArray("工作信息");
List<RecruitDataMap<Object>> workList = new ArrayList<>();
if (null != gzjl && gzjl.size() > 0) {
for (int i = 0; i < gzjl.size(); i++) {
JSONObject o = (JSONObject) gzjl.get(i);
String workDate = o.getString("工作时间");
RecruitDataMap<Object> workMap = new RecruitDataMap<>();
workMap.putAll(getDateRange(workDate, false));
workMap.put("gsmc", o.getString("工作单位"));
workMap.put("gw", o.getString("工作岗位"));
workMap.put("gzzz", o.getString("工作内容"));
workList.add(workMap);
}
}
dataMap.put("gzjl", workList);
2023-12-13 17:09:46 +08:00
// 项目经验
// 语言能力
// 目前表单暂无字段
2024-01-10 09:29:45 +08:00
//dataMap.put("wx", parseArray(obj.getJSONArray("微信")));
//dataMap.put("qq", parseArray(obj.getJSONArray("QQ")));
//dataMap.put("ah", parseArray(obj.getJSONArray("爱好")));
//dataMap.put("bysj", parseArray(obj.getJSONArray("毕业时间")));
//
//
//dataMap.put("zyjn", parseArray(obj.getJSONArray("专业技能")));
//dataMap.put("sxjl", parseArray(obj.getJSONArray("实习经历")));
//dataMap.put("yysp", parseArray(obj.getJSONArray("英语水平")));
//dataMap.put("jnzs", parseArray(obj.getJSONArray("技能证书")));
//dataMap.put("xyjl", parseArray(obj.getJSONArray("校园经历")));
//dataMap.put("qwcsgw", parseArray(obj.getJSONArray("期望从事岗位")));
//
//dataMap.put("qwgzdd", parseArray(obj.getJSONArray("期望工作地点")));
//dataMap.put("xmjl", parseArray(obj.getJSONArray("项目经历")));
2023-12-13 17:09:46 +08:00
return dataMap;
}
/**
* 千里聆解析字段内容处理(V2)
*
* @param obj
* @return
*/
private Map<String, Object> parseQllJsonToMapV2(JSONObject obj, boolean isCard) {
new BaseBean().writeLog(obj.toJSONString());
Map<String, Object> dataMap = new HashMap<>(16);
JSONObject personalInformation = obj.getJSONObject("个人信息");
2024-06-04 17:17:17 +08:00
// 投递时间
dataMap.put("tdsj", DateUtil.getDateTime());
// 姓名
String xm = personalInformation.getString("姓名");
dataMap.put("xm", xm);
// 电子邮箱
String dzyx = personalInformation.getString("电子邮箱");
dataMap.put("dzyx", dzyx);
// 手机号码
String sjhm = personalInformation.getString("手机号");
dataMap.put("sjhm", sjhm);
// 年龄
String nl = personalInformation.getString("年龄");
dataMap.put("nl", nl);
// 出生日期
String csrq = personalInformation.getString("出生日期");
dataMap.put("csrq", parseDateObject(csrq));
// 性别 默认为男
String xb = "".equals(personalInformation.getString("性别")) ? "1" : "0";
dataMap.put("xb", xb);
// 体重KG
String tz = personalInformation.getString("体重");
dataMap.put("tzkg", Convert.toDouble(tz));
// 身高CM
String sg = personalInformation.getString("身高");
dataMap.put("sgcm", Convert.toDouble(sg));
// 籍贯(字段类型不支持)
String jg = personalInformation.getString("籍贯");
//dataMap.put("jg", parseArray(obj.getJSONArray("籍贯")));
// 婚姻状况
List<Map<String, String>> hyzk = getBrowserArray(personalInformation.getString("婚姻状况"), ModeBrowserCommonInfo.TYPE_MARITAL_STATUS);
if (CollectionUtils.isNotEmpty(hyzk)) {
dataMap.put("hyzk", hyzk);
if (!isCard) {
dataMap.put("hyzk", hyzk.stream().map(item -> item.get("id")).collect(Collectors.joining(",")));
}
}
// 当前所在地(字段类型不支持)
String jdz = personalInformation.getString("现居住地");
//dataMap.put("jzd", parseArray(obj.getJSONArray("现居住地")));
// 政治面貌
List<Map<String, String>> zzmm = getBrowserArray(personalInformation.getString("政治面貌"), ModeBrowserCommonInfo.TYPE_POLITICAL_LANDSCAPE);
if (CollectionUtils.isNotEmpty(zzmm)) {
dataMap.put("zzmm", zzmm);
if (!isCard) {
dataMap.put("zzmm", zzmm.stream().map(item -> item.get("id")).collect(Collectors.joining(",")));
}
}
// 在职状态
List<Map<String, String>> zzzt = getBrowserArray(personalInformation.getString("在职状态"), ModeBrowserCommonInfo.TYPE_ON_THE_JOB_STATUS);
if (CollectionUtils.isNotEmpty(zzzt)) {
dataMap.put("zzzt", zzzt);
if (!isCard) {
dataMap.put("zzzt", zzzt.stream().map(item -> item.get("id")).collect(Collectors.joining(",")));
}
}
// 工作经验
String gzjyStr = personalInformation.getString("工作经验");
if (gzjyStr.contains("")) {
String[] split = gzjyStr.split("");
if (split.length == 2) {
gzjyStr = split[1];
}
}
List<Map<String, String>> gzjy = getBrowserArray(gzjyStr, ModeBrowserCommonInfo.TYPE_WORK_EXPERIENCE);
if (CollectionUtils.isNotEmpty(gzjy)) {
dataMap.put("gzjy", gzjy);
if (!isCard) {
dataMap.put("gzjy", gzjy.stream().map(item -> item.get("id")).collect(Collectors.joining(",")));
}
}
// 最高学位
List<Map<String, String>> zgxw = getBrowserArray(personalInformation.getString("最高学位"), ModeBrowserCommonInfo.TYPE_DEGREE);
if (CollectionUtils.isNotEmpty(zgxw)) {
dataMap.put("zgxw", zgxw);
if (!isCard) {
dataMap.put("zgxw", zgxw.stream().map(item -> item.get("id")).collect(Collectors.joining(",")));
}
}
// 最高学历
String highestEduLevel = personalInformation.getString("最高学历");
List<Map<String, String>> zgxl = getBrowserArray(highestEduLevel, this::getEducationLevelArray);
if (CollectionUtils.isNotEmpty(zgxl)) {
dataMap.put("zgxl", zgxl);
if (!isCard) {
dataMap.put("zgxl", zgxl.stream().map(item -> item.get("id")).collect(Collectors.joining(",")));
}
}
// 毕业院校
String byyx = personalInformation.getString("毕业院校");
dataMap.put("byyx", byyx);
// 现税前月薪K
// 自我评价
String zwpj = personalInformation.getString("个人评价");
dataMap.put("zwpj", zwpj);
// 民族
dataMap.put("mz", personalInformation.getString("民族"));
JSONObject jobSearchInformation = obj.getJSONObject("求职信息");
// 期望税前月薪K
String qwxz = jobSearchInformation.getString("期望薪资");
dataMap.put("qwxz", qwxz);
// 明细表数据
// 教育经历
JSONArray jyjl = obj.getJSONArray("学业信息");
List<RecruitDataMap<Object>> studyList = new ArrayList<>();
if (null != jyjl && jyjl.size() > 0) {
for (int i = 0; i < jyjl.size(); i++) {
JSONObject o = (JSONObject) jyjl.get(i);
String studyDate = o.getString("就读时期");
RecruitDataMap<Object> studyMap = new RecruitDataMap<>();
studyMap.putAll(getDateRange(studyDate, true));
String schoolName = o.getString("学校名称");
studyMap.put("xxmc", schoolName);
String educationLevel = o.getString("学历");
List<Map<String, String>> xl = getBrowserArray(educationLevel, this::getEducationLevelArray);
studyMap.put("xl", xl);
if (!isCard && CollectionUtils.isNotEmpty(xl)) {
studyMap.put("xl", xl.stream().map(item -> item.get("id")).collect(Collectors.joining(",")));
}
String professionalName = o.getString("专业名称");
studyMap.put("zy", professionalName);
// 主表 专业字段
if (byyx.equals(schoolName) && highestEduLevel.equals(educationLevel)) {
dataMap.put("zy", professionalName);
}
studyList.add(studyMap);
}
}
dataMap.put("jyjl", studyList);
// 工作经历
JSONArray gzjl = obj.getJSONArray("工作经历");
List<RecruitDataMap<Object>> workList = new ArrayList<>();
if (null != gzjl && gzjl.size() > 0) {
for (int i = 0; i < gzjl.size(); i++) {
JSONObject o = (JSONObject) gzjl.get(i);
String workDate = o.getString("工作时间");
RecruitDataMap<Object> workMap = new RecruitDataMap<>();
workMap.putAll(getDateRange(workDate, false));
workMap.put("gsmc", o.getString("工作单位"));
workMap.put("gw", o.getString("岗位名称"));
workMap.put("gzzz", o.getString("工作内容"));
workList.add(workMap);
}
}
dataMap.put("gzjl", workList);
// 项目经验
// 语言能力
// 目前表单暂无字段
//dataMap.put("wx", parseArray(obj.getJSONArray("微信")));
//dataMap.put("qq", parseArray(obj.getJSONArray("QQ")));
//dataMap.put("ah", parseArray(obj.getJSONArray("爱好")));
//dataMap.put("bysj", parseArray(obj.getJSONArray("毕业时间")));
//
//
//dataMap.put("zyjn", parseArray(obj.getJSONArray("专业技能")));
//dataMap.put("sxjl", parseArray(obj.getJSONArray("实习经历")));
//dataMap.put("yysp", parseArray(obj.getJSONArray("英语水平")));
//dataMap.put("jnzs", parseArray(obj.getJSONArray("技能证书")));
//dataMap.put("xyjl", parseArray(obj.getJSONArray("校园经历")));
//dataMap.put("qwcsgw", parseArray(obj.getJSONArray("期望从事岗位")));
//
//dataMap.put("qwgzdd", parseArray(obj.getJSONArray("期望工作地点")));
//dataMap.put("xmjl", parseArray(obj.getJSONArray("项目经历")));
return dataMap;
}
2023-12-13 17:09:46 +08:00
/**
* @param resumeId
* @return
*/
private String doQllPost(int resumeId) {
String url = RecruitConstant.OCR_URL;
String appId = RecruitConstant.APP_ID;
String appSecret = RecruitConstant.APP_SECRET;
2024-01-09 18:06:31 +08:00
if (StringUtils.isAnyBlank(url, appId, appSecret)) {
throw new CustomizeRunTimeException("千里聆配置出错,请检查配置文件");
}
2023-12-13 17:09:46 +08:00
long currentTime = System.currentTimeMillis();
ImageFileManager manager = new ImageFileManager();
manager.getImageFileInfoById(resumeId);
HttpPost postRequest = new HttpPost(url);
postRequest.addHeader("sign", getSign(appId, appSecret, currentTime));
postRequest.addHeader("appId", appId);
postRequest.addHeader("timestamp", String.valueOf(currentTime));
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
String fileName = manager.getImageFileName();
builder.addTextBody("type", fileName.substring(fileName.lastIndexOf('.') + 1));
// 对接新版抽取服务
builder.addTextBody("version", "V2");
2023-12-13 17:09:46 +08:00
builder.addBinaryBody("resume", manager.getInputStream(), ContentType.APPLICATION_OCTET_STREAM, manager.getImageFileName());
HttpEntity entity = builder.build();
postRequest.setEntity(entity);
try {
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = httpClient.execute(postRequest);
HttpEntity responseEntity = response.getEntity();
return EntityUtils.toString(responseEntity);
} catch (Exception e) {
throw new CustomizeRunTimeException(e);
2023-12-13 17:09:46 +08:00
}
}
/**
* 千里聆签名
*
* @param appId 开发者AppId
* @param appSecret 开发者appSecret
* @param timestamp 当前时间戳(毫秒数)
* @return
*/
private static String getSign(String appId, String appSecret, long timestamp) {
if (appId != null && appId.length() != 0) {
if (appSecret != null && appSecret.length() != 0) {
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(appId.getBytes());
md5.update((timestamp + "").getBytes());
md5.update(appSecret.getBytes());
byte[] bytes = md5.digest();
return (new BigInteger(1, bytes)).toString(16);
} catch (NoSuchAlgorithmException var8) {
throw new CustomizeRunTimeException("不支持的加密算法", var8);
}
} else {
throw new CustomizeRunTimeException("appSecret不能为空");
}
} else {
throw new CustomizeRunTimeException("appId不能为空");
}
}
/**
* 文本转换
*
* @param ar
* @return
*/
private String parseArray(JSONArray ar) {
StringBuilder rs = new StringBuilder();
if (ar != null && ar.size() > 0) {
for (int i = 0; i < ar.size(); ++i) {
if (i == ar.size() - 1) {
rs.append(ar.get(i));
} else {
rs.append(ar.get(i)).append(",");
}
}
}
2024-01-09 18:06:31 +08:00
return StringUtils.isBlank(rs) ? null : rs.toString();
2023-12-13 17:09:46 +08:00
}
/**
* 转换日期对象
2023-12-13 17:09:46 +08:00
*
* @param value
* @return
*/
private String parseDateObject(String value) {
if (StringUtils.isBlank(value)) {
return null;
}
value = value.replace(".", "-");
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
sdf.setLenient(false);
try {
sdf.parse(value);
} catch (Exception e) {
new BaseBean().writeLog("日期格式化失败", e);
value = null;
}
2023-12-13 17:09:46 +08:00
return value;
}
/**
* 获取开始时间和结束时间
*
* @param date
* @return
*/
private RecruitDataMap<Object> getDateRange(String date, boolean isStudy) {
2024-06-04 17:17:17 +08:00
RecruitDataMap<Object> dataRangeMap = new RecruitDataMap();
if (StringUtils.isBlank(date)) {
return dataRangeMap;
2024-06-04 17:17:17 +08:00
} else {
String[] split = date.split("-");
String end;
if (split.length > 0) {
end = getFormatDate(split[0]);
if (end.length() == 4) {
if (isStudy) {
end = end + "-09-01";
} else {
end = "";
}
}
2024-06-04 17:17:17 +08:00
dataRangeMap.put("kssj", end);
}
2024-06-04 17:17:17 +08:00
if (split.length > 1) {
end = getFormatDate(split[1]);
if (end.length() == 4) {
if (isStudy) {
end = end + "-07-01";
} else {
end = "";
}
}
2024-06-04 17:17:17 +08:00
dataRangeMap.put("jssj", end);
}
2024-06-04 17:17:17 +08:00
return dataRangeMap;
}
}
2023-12-13 17:09:46 +08:00
/**
* 获取yyyy-MM-dd时间格式日期
*
* @param dateStr
* @return
*/
private String getFormatDate(String dateStr) {
dateStr = dateStr.replace(".", "-").replace("\\/", "-");
if (dateStr.length() == 7) {
return dateStr + "-01";
} else if (dateStr.length() == 10) {
return dateStr;
} else if (dateStr.length() == 4) {
return dateStr;
}
return "";
2023-12-13 17:09:46 +08:00
}
/**
* 构建学位字段信息
2023-12-13 17:09:46 +08:00
*
* @param text
2023-12-13 17:09:46 +08:00
* @return
*/
private Map<String, String> getDegreeArray(String text) {
Map<String, String> map = new HashMap<>(2);
if (StringUtils.isNotBlank(text)) {
String id = ModeBrowserCommonInfo.getDegreeId(text);
if (StringUtils.isNotBlank(id)) {
map.put("id", id);
map.put("name", text);
}
}
return map;
}
2024-03-25 16:26:49 +08:00
/**
* 构建工作经验字段信息
*
* @param text
* @return
*/
private Map<String, String> getWorkExperienceArray(String text) {
Map<String, String> map = new HashMap<>(2);
if (StringUtils.isNotBlank(text)) {
String id = ModeBrowserCommonInfo.getWorkExperience(text);
if (StringUtils.isNotBlank(id)) {
map.put("id", id);
map.put("name", text);
}
}
return map;
}
/**
* 构建浏览按钮字段信息格式
*
* @param text
* @param fun
* @return
*/
private List<Map<String, String>> getBrowserArray(String text, Function<String, Map<String, String>> fun) {
List<Map<String, String>> list = new ArrayList<>();
if (StringUtils.isNotBlank(text)) {
String[] split = text.split(",");
for (String s : split) {
Map<String, String> apply = fun.apply(s);
list.add(apply);
}
}
return list;
}
/**
* 构建浏览按钮字段信息格式
*
* @param text
* @param browserType
* @return
*/
private List<Map<String, String>> getBrowserArray(String text, String browserType) {
List<Map<String, String>> list = new ArrayList<>();
if (StringUtils.isNotBlank(text)) {
String[] split = text.split(",");
for (String s : split) {
Map<String, String> map = new HashMap<>(2);
if (StringUtils.isNotBlank(text)) {
String id = ModeBrowserCommonInfo.getBrowserId(browserType, text);
if (StringUtils.isNotBlank(id)) {
map.put("id", id);
map.put("name", text);
}
}
list.add(map);
}
}
return list;
}
/**
* 构建学历字段信息
*
* @param text
* @return
*/
private Map<String, String> getEducationLevelArray(String text) {
Map<String, String> map = new HashMap<>(2);
if (StringUtils.isNotBlank(text)) {
String id = ModeBrowserCommonInfo.getEducationLevelId(text);
if (StringUtils.isNotBlank(id)) {
map.put("id", id);
map.put("name", text);
}
2023-12-13 17:09:46 +08:00
}
return map;
2023-12-13 17:09:46 +08:00
}
2023-12-13 17:09:46 +08:00
}