Commit 3fc684ce by 284718418@qq.com

导入简历,同步人才信息 教育资讯 基本信息 其他信息 项目信息 工作信息

parent ff02c0b1
...@@ -435,8 +435,14 @@ public class ZpglController { ...@@ -435,8 +435,14 @@ public class ZpglController {
@PostMapping("/resume_import_candidate") @PostMapping("/resume_import_candidate")
@ApiOperation(value = "招聘-导入候选人简历", httpMethod = "POST", notes = "招聘-导入候选人简历") @ApiOperation(value = "招聘-导入候选人简历", httpMethod = "POST", notes = "招聘-导入候选人简历")
public Result<Object> resumeImportCandidate(@CurrentUser UserBean userBean, @RequestParam(required = true) MultipartFile file, public Result<Object> resumeImportCandidate(@CurrentUser UserBean userBean, @RequestParam(required = true) MultipartFile file,
@RequestBody ImportCandidateDto importCandidateDto, HttpServletRequest request) { @ApiParam("招聘渠道ID") @RequestParam(required = false) Integer zpglZpqdId,
@ApiParam("职位信息Id") @RequestParam(required = true) Integer zpglZwxxId,
@ApiParam("状态") @RequestParam(required = true) Integer status,HttpServletRequest request) {
try { try {
ImportCandidateDto importCandidateDto = new ImportCandidateDto();
importCandidateDto.setStatus(status);
importCandidateDto.setZpglZpqdId(zpglZpqdId);
importCandidateDto.setZpglZwxxId(zpglZwxxId);
// 获取文件 文档类型,目前支持pdf,doc,docx,wps,txt,jpg,jpeg,png,bmp,tif格式 // 获取文件 文档类型,目前支持pdf,doc,docx,wps,txt,jpg,jpeg,png,bmp,tif格式
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1); String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
if(StringUtils.isEmpty(suffix)){ if(StringUtils.isEmpty(suffix)){
...@@ -445,8 +451,12 @@ public class ZpglController { ...@@ -445,8 +451,12 @@ public class ZpglController {
if("pdf,doc,docx,wps,txt,jpg,jpeg,png,bmp,tif".indexOf(suffix) == -1){ if("pdf,doc,docx,wps,txt,jpg,jpeg,png,bmp,tif".indexOf(suffix) == -1){
return ResultUtil.error("导入简历失败,目前支持pdf,doc,docx,wps,txt,jpg,jpeg,png,bmp,tif格式~"); return ResultUtil.error("导入简历失败,目前支持pdf,doc,docx,wps,txt,jpg,jpeg,png,bmp,tif格式~");
} }
importCandidateDto.setSuffix(suffix);
boolean flag = zpglService.addResumeImportCandidate(userBean, file, importCandidateDto); boolean flag = zpglService.addResumeImportCandidate(userBean, file, importCandidateDto);
return flag?ResultUtil.success("操作成功"):ResultUtil.error("操作失败"); return flag?ResultUtil.success("操作成功"):ResultUtil.error("操作失败");
} catch (CustomException e) {
e.printStackTrace();
throw e;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
throw new CustomException("招聘-导入候选人简历失败"); throw new CustomException("招聘-导入候选人简历失败");
......
...@@ -8,14 +8,16 @@ import cn.timer.api.bean.zpgl.ZpglRcxx; ...@@ -8,14 +8,16 @@ import cn.timer.api.bean.zpgl.ZpglRcxx;
import cn.timer.api.config.annotation.UserBean; import cn.timer.api.config.annotation.UserBean;
import cn.timer.api.config.enuminterface.JxglEnumInterface; import cn.timer.api.config.enuminterface.JxglEnumInterface;
import cn.timer.api.config.exception.CustomException; import cn.timer.api.config.exception.CustomException;
import cn.timer.api.controller.kqgl.ClockInTool;
import cn.timer.api.dto.baidu.BaiduTicResumeDto; import cn.timer.api.dto.baidu.BaiduTicResumeDto;
import cn.timer.api.dto.baidu.ResumeExtract; import cn.timer.api.dto.baidu.ResumeExtract;
import cn.timer.api.bean.clazz.NationClass;
import cn.timer.api.dto.zpgl.ImportCandidateDto; import cn.timer.api.dto.zpgl.ImportCandidateDto;
import cn.timer.api.dto.zpgl.ZpglRcxxDto; import cn.timer.api.dto.zpgl.ZpglRcxxDto;
import cn.timer.api.utils.ResultUtil;
import cn.timer.api.utils.ZpglMessageTemplate; import cn.timer.api.utils.ZpglMessageTemplate;
import cn.timer.api.utils.baidu.BaiduTicUtil; import cn.timer.api.utils.baidu.BaiduTicUtil;
import cn.timer.api.utils.baidu.Base64; import cn.timer.api.utils.baidu.Base64;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -159,16 +161,77 @@ public class ZpglServiceImpl implements ZpglService { ...@@ -159,16 +161,77 @@ public class ZpglServiceImpl implements ZpglService {
ResponseEntity<String> resumeString = baiduTicUtil.getResumeByCvParser(baiduTicResumeDto); ResponseEntity<String> resumeString = baiduTicUtil.getResumeByCvParser(baiduTicResumeDto);
JSONObject json = (JSONObject) JSONObject.parse(resumeString.getBody()); JSONObject json = (JSONObject) JSONObject.parse(resumeString.getBody());
log.info("招聘-导入候选人简历{}",resumeString.getBody()); log.info("招聘-导入候选人简历{}",resumeString.getBody());
ResumeExtract resumeExtract = null;
if("success".equals(json.get("error_msg"))){ if("success".equals(json.get("error_msg"))){
if("results".equals(json.get("results"))){ if(StringUtils.isEmpty(json.get("results"))){
JSONObject jsonObject = (JSONObject)JSONObject.parse(json.get("results").toString()); log.info("招聘-导入候选人简历:results is null");
ResumeExtract resumeExtract = JSONObject.toJavaObject(jsonObject, ResumeExtract.class); throw new CustomException("导入简历失败,请检查是否为简历文件~");
}else { }
JSONArray array = (JSONArray)json.get("results");
if(StringUtils.isEmpty(array.get(0))){
log.info("招聘-导入候选人简历:results is null");
throw new CustomException("导入简历失败,请检查是否为简历文件~"); throw new CustomException("导入简历失败,请检查是否为简历文件~");
} }
JSONObject resultsJsonObject = (JSONObject) array.get(0);
resumeExtract = JSONObject.toJavaObject((JSONObject)resultsJsonObject.get("extract"), ResumeExtract.class);
}else { }else {
throw new CustomException("导入简历失败,请检查是否为简历文件~"); throw new CustomException("导入简历失败,请检查是否为简历文件~");
} }
return false; if(StringUtils.isEmpty(resumeExtract) || StringUtils.isEmpty(resumeExtract.getBasic_infos())){
throw new CustomException("导入简历失败,请检查是否为简历文件~");
}
this.addZpglRcxx(userBean, resumeExtract, importCandidateDto);
return true;
}
/**
* 导入简历
* 同步人才信息 教育资讯 基本信息 其他信息 项目信息 工作信息
* @param resumeExtract
* @param importCandidateDto
*/
private void addZpglRcxx(UserBean userBean,ResumeExtract resumeExtract, ImportCandidateDto importCandidateDto){
ZpglRcxx zpglRcxx = ZpglRcxx.builder().build();
zpglRcxx.setZpglZwxxId(importCandidateDto.getZpglZwxxId());
zpglRcxx.setStatus(importCandidateDto.getStatus());
zpglRcxx.setZpglZpqdId(importCandidateDto.getZpglZpqdId());
zpglRcxx.setOrgCode(userBean.getOrgCode().toString());
if(!StringUtils.isEmpty(resumeExtract.getBasic_infos())){
zpglRcxx.setName(resumeExtract.getBasic_infos().getName());
zpglRcxx.setMobile(resumeExtract.getBasic_infos().getPhone_numbers());
zpglRcxx.setMail(resumeExtract.getBasic_infos().getEmail_address());
zpglRcxx.setWeixin(resumeExtract.getBasic_infos().getWechat());
zpglRcxx.setIdCard(resumeExtract.getBasic_infos().getId_number());
if(!StringUtils.isEmpty(resumeExtract.getBasic_infos().getGender())){
zpglRcxx.setSex(resumeExtract.getBasic_infos().getGender().indexOf("男") != -1?0:1);
}
//出生日期,格式化为 年-月,如2000-01,若只有年,则只显示年,如2000
if(!StringUtils.isEmpty(resumeExtract.getBasic_infos().getBirth_date())&&resumeExtract.getBasic_infos().getBirth_date().length() > 0){
String datebirth = "";
String[] num = resumeExtract.getBasic_infos().getBirth_date().split("-");
if(num.length == 1){
datebirth = num[0]+"-1-1";
}else if(num.length == 2){
datebirth = num[0]+"-"+num[1]+"-1";
}
if(datebirth.length()>0){
zpglRcxx.setDatebirth(ClockInTool.strToDateLong(datebirth));
}
}
//nation_class_id
if(!StringUtils.isEmpty(resumeExtract.getBasic_infos().getNation())){
NationClass nationClass = NationClass.builder().build().selectOne(new QueryWrapper<NationClass>().lambda().like(NationClass::getName,resumeExtract.getBasic_infos().getNation()));
if(!StringUtils.isEmpty(nationClass)){
zpglRcxx.setNationClassId(nationClass.getId());
}
}
zpglRcxx.setAddress(resumeExtract.getBasic_infos().getHome_location());
zpglRcxx.setUniversitie(resumeExtract.getBasic_infos().getSchool());
if(!StringUtils.isEmpty(resumeExtract.getBasic_infos().getCur_duration())){
zpglRcxx.setWorkyears(Integer.parseInt(resumeExtract.getBasic_infos().getCur_duration()));
}
zpglRcxx.setCompany(resumeExtract.getBasic_infos().getCur_company());
zpglRcxx.insert();
}
} }
} }
...@@ -20,20 +20,31 @@ import java.io.Serializable; ...@@ -20,20 +20,31 @@ import java.io.Serializable;
@AllArgsConstructor @AllArgsConstructor
public class BasicInfo implements Serializable { public class BasicInfo implements Serializable {
private String name; // 姓名:中文姓名
private String gender; // 性别:男/女
// 姓名:中文姓名
private String name;
// 性别:男/女
private String gender;
private String age; // 年龄:当前年龄,整数 private String age; // 年龄:当前年龄,整数
private String cur_duration; // 工作年限:当前工作年限,整数,多段工作年限会累加并向下取整 // 工作年限:当前工作年限,整数,多段工作年限会累加并向下取整
private String cur_duration;
private String highest_degree; // 学历:最高学历(包括在读),格式统一为博士/硕士/学士 private String highest_degree; // 学历:最高学历(包括在读),格式统一为博士/硕士/学士
private String work_begin_year; // 开始工作年限:第一份工作的开始年份,四位数年份,如2013 private String work_begin_year; // 开始工作年限:第一份工作的开始年份,四位数年份,如2013
private String id_number; // 身份证号:中国居民身份证号码,纯数字 private String id_number; // 身份证号:中国居民身份证号码,纯数字
private String birth_date; // 生日:出生日期,格式化为 年-月,如2000-01,若只有年,则只显示年,如2000 // 生日:出生日期,格式化为 年-月,如2000-01,若只有年,则只显示年,如2000
private String nation; // 民族:中国56个民族, 如 汉族,壮族 private String birth_date;
// 民族:中国56个民族, 如 汉族,壮族
private String nation;
private String location; // 所在地:所在地城市或区域,如 深圳市,深圳市南山区 private String location; // 所在地:所在地城市或区域,如 深圳市,深圳市南山区
private String home_location; // 详细地址:具体家庭居住地,如 深圳市南山区华联花园6栋2-224 // 详细地址:具体家庭居住地,如 深圳市南山区华联花园6栋2-224
private String cur_company; // 当前公司 private String home_location;
// 当前公司
private String cur_company;
private String cur_job; // 当前职位 private String cur_job; // 当前职位
private String school; // 毕业学校:最高学历学校 // 毕业学校:最高学历学校
private String school;
private String major; // 专业:最高学历对应的专业 private String major; // 专业:最高学历对应的专业
private String job_intention; // 求职意向 private String job_intention; // 求职意向
private String cur_package; // 当前薪水:当前工资或当前工资范围,如10-20万人民币等,以简历为准 private String cur_package; // 当前薪水:当前工资或当前工资范围,如10-20万人民币等,以简历为准
...@@ -45,9 +56,11 @@ public class BasicInfo implements Serializable { ...@@ -45,9 +56,11 @@ public class BasicInfo implements Serializable {
private String birth_place; // 籍贯:籍贯地区,如 广东汕头,上海,江苏南通。以简历描述为准,输出为原文 private String birth_place; // 籍贯:籍贯地区,如 广东汕头,上海,江苏南通。以简历描述为准,输出为原文
private String desire_loc; // 期望工作地区:期望工作城市或区域,多个地区则以英文逗号分隔,如 北京,上海,广州,深圳,输出为原文 private String desire_loc; // 期望工作地区:期望工作城市或区域,多个地区则以英文逗号分隔,如 北京,上海,广州,深圳,输出为原文
private String phone_numbers; // 联系方式:国内11位手机号,格式化为纯数字 private String phone_numbers; // 联系方式:国内11位手机号,格式化为纯数字
private String email_address; // 邮箱:合格邮箱地址 // 邮箱:合格邮箱地址
private String email_address;
private String landline; // 固定电话:国内8位座机号 private String landline; // 固定电话:国内8位座机号
private String qq; // QQ号:QQ号码 private String qq; // QQ号:QQ号码
private String wechat; // 微信号:微信账号 // 微信号:微信账号
private String wechat;
} }
...@@ -29,11 +29,12 @@ public class ImportCandidateDto implements Serializable{ ...@@ -29,11 +29,12 @@ public class ImportCandidateDto implements Serializable{
*/ */
@NotNull(message = ValidationMsg.NOTNULL) @NotNull(message = ValidationMsg.NOTNULL)
@ApiModelProperty(value = "职位信息Id") @ApiModelProperty(value = "职位信息Id")
private Integer id; private Integer zpglZwxxId;
/** /**
* 状态 1:待初筛 2:初筛通过 3:已安排面试 4:已面试 5:面试通过 6:拟录用 7:已发Offer 8:待入职 9已淘汰 10已入职 * 状态 1:待初筛 2:初筛通过 3:已安排面试 4:已面试 5:面试通过 6:拟录用 7:已发Offer 8:待入职 9已淘汰 10已入职
*/ */
@NotNull(message = ValidationMsg.NOTNULL)
@ApiModelProperty(value = "状态 1:待初筛 2:初筛通过 3:已安排面试 4:已面试 5:面试通过 6:拟录用 7:已发Offer 8:待入职 9已淘汰 10已入职") @ApiModelProperty(value = "状态 1:待初筛 2:初筛通过 3:已安排面试 4:已面试 5:面试通过 6:拟录用 7:已发Offer 8:待入职 9已淘汰 10已入职")
private Integer status; private Integer status;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment