package cn.timer.api.controller.zpgl.sevice; import cn.timer.api.bean.clazz.SysRegion; import cn.timer.api.bean.wechat.MessageTemplate; import cn.timer.api.bean.yggl.YgglMainEmp; import cn.timer.api.bean.zpgl.*; import cn.timer.api.bean.zzgl.ZzglBmgwM; import cn.timer.api.config.annotation.UserBean; import cn.timer.api.config.enuminterface.JxglEnumInterface; import cn.timer.api.controller.kqgl.ClockInTool; import cn.timer.api.dto.baidu.*; import cn.timer.api.bean.clazz.NationClass; import cn.timer.api.dto.resumesdk.*; import cn.timer.api.dto.resumesdk.enumresume.ResumeSdk; import cn.timer.api.dto.template.InterviewNotice; import cn.timer.api.dto.zpgl.ImportCandidateDto; import cn.timer.api.dto.zpgl.ZpglRcxxDto; import cn.timer.api.service.OSSService; import cn.timer.api.utils.Result; import cn.timer.api.utils.ResultUtil; import cn.timer.api.utils.ZpglMessageTemplate; import cn.timer.api.utils.baidu.BaiduTicUtil; import cn.timer.api.utils.baidu.Base64; import cn.timer.api.utils.resumesdk.ResumeSDKUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import org.springframework.web.multipart.MultipartFile; import javax.transaction.Transactional; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; /** * @author wuqingjun * @email 284718418@qq.com * @date 2022/3/18 */ @Slf4j @Service @Transactional(rollbackOn = Exception.class) public class ZpglServiceImpl implements ZpglService { @Value("${spring.mail.username}") private String username; @Autowired private BaiduTicUtil baiduTicUtil; @Autowired private ResumeSDKUtil resumeSDKUtil; @Autowired private JavaMailSender mailSender; @Autowired private ZpglMslcLogService zpglMslcLogService; @Autowired private ZpglWxgzptServiceImpl zpglWxgzptService; @Autowired private OSSService ossService; @Value("${config-8timer.Aliyun.RESUMESDK_APPCODE}") private String RESUMESDK_APPCODE; @Override public boolean updateZpglRcxx(UserBean userBean, ZpglRcxxDto zpglRcxxDto) { boolean count = false; ZpglRcxx zpglRcxxEntity = ZpglRcxx.builder().id(zpglRcxxDto.getId()).build().selectById(); if (StringUtils.isEmpty(zpglRcxxEntity)) { return count; } zpglRcxxDto.setName(zpglRcxxEntity.getName()); ZpglRcxx zpglRcxx = ZpglRcxx.builder().id(zpglRcxxDto.getId()).status(zpglRcxxDto.getStatus()).build(); ZpglMslcLog zpglMslcLog = new ZpglMslcLog(); zpglMslcLog.setZpglRcxxId(zpglRcxxDto.getId()); zpglMslcLog.setUserId(userBean.getEmpNum()); zpglMslcLog.setUserName(userBean.getQyzxEmpLogin().getUsername()); if (!StringUtils.isEmpty(zpglRcxxDto.getIfrck()) && zpglRcxxDto.getIfrck().intValue() == 1) { zpglRcxx.setIfrckTime(new Date()); } if(!StringUtils.isEmpty(zpglRcxxDto.getCreateTime())){ zpglRcxx.setCreateTime(zpglRcxxDto.getCreateTime()); } String detail = ""; // 类型,1状态变更,2面试,3Offer,4讨论,5其他 int zpglRcxxStatus = 0; switch (zpglRcxxDto.getStatus()) { case 1: zpglRcxxStatus = JxglEnumInterface.MslcLogStatus.CHANGEING.getType(); //待初筛 填充字段 detail = ZpglMessageTemplate.print(ZpglMessageTemplate.FILTERING, new String[]{ userBean.getQyzxEmpLogin().getUsername()}); break; case 2: zpglRcxxStatus = JxglEnumInterface.MslcLogStatus.CHANGEING.getType(); //初筛通过 填充字段 zpglRcxx.setIfrck(zpglRcxxDto.getIfrck()); detail = ZpglMessageTemplate.print(ZpglMessageTemplate.FILTER_PASS, new String[]{ userBean.getQyzxEmpLogin().getUsername()}); break; case 3: zpglRcxxStatus = JxglEnumInterface.MslcLogStatus.INTERVIEW.getType(); //安排面试 填充字段 zpglRcxx.setInterviewNum(zpglRcxxDto.getInterviewNum()); zpglRcxx.setInterviewWay(zpglRcxxDto.getInterviewWay()); zpglRcxx.setInterviewerId(zpglRcxxDto.getInterviewerId()); zpglRcxx.setInterviewTime(zpglRcxxDto.getInterviewTime()); zpglRcxx.setNoticeWay(zpglRcxxDto.getNoticeWay()); YgglMainEmp ygglMainEmp = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().select("name").lambda().eq(YgglMainEmp::getEmpNum, zpglRcxxDto.getInterviewerId())); detail = ZpglMessageTemplate.print(ZpglMessageTemplate.INTERVIEW, new String[]{ userBean.getQyzxEmpLogin().getUsername(), zpglRcxxDto.getInterviewNum().toString(), new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss").format(zpglRcxxDto.getInterviewTime()), ygglMainEmp.getName()}); break; case 4: zpglRcxxStatus = JxglEnumInterface.MslcLogStatus.INTERVIEW.getType(); detail = ZpglMessageTemplate.print(ZpglMessageTemplate.INTERVIEWED, new String[]{ userBean.getQyzxEmpLogin().getUsername(), zpglRcxxEntity.getInterviewNum().toString()}); break; case 5: zpglRcxxStatus = JxglEnumInterface.MslcLogStatus.INTERVIEW.getType(); detail = ZpglMessageTemplate.print(ZpglMessageTemplate.INTERVIEW_PASS, new String[]{ userBean.getQyzxEmpLogin().getUsername()}); break; case 6: zpglRcxxStatus = JxglEnumInterface.MslcLogStatus.INTERVIEW.getType(); detail = ZpglMessageTemplate.print(ZpglMessageTemplate.EMPLOY, new String[]{ userBean.getQyzxEmpLogin().getUsername()}); break; case 7: zpglRcxxStatus = JxglEnumInterface.MslcLogStatus.OFFER.getType(); //发送offer 填充字段 zpglRcxx.setBmgwId(zpglRcxxDto.getBmgwId()); zpglRcxx.setJobType(zpglRcxxDto.getJobType()); zpglRcxx.setYjrzTime(zpglRcxxDto.getYjrzTime()); detail = ZpglMessageTemplate.print(ZpglMessageTemplate.OFFER, new String[]{ userBean.getQyzxEmpLogin().getUsername()}); //发送offer ZpglRcxxOffer zpglRcxxOffer = this.insertZpglRcxxOffer(userBean, zpglRcxxDto); zpglRcxxOffer.setReceiverEmail(zpglRcxxEntity.getMail()); Thread pthread = new Thread(new ZpglSendMessageThread(mailSender, zpglRcxxOffer)); pthread.start(); break; case 8: zpglRcxxStatus = JxglEnumInterface.MslcLogStatus.OTHER.getType(); //待入职 填充字段 zpglRcxx.setBmgwId(zpglRcxxDto.getBmgwId()); zpglRcxx.setJobType(zpglRcxxDto.getJobType()); zpglRcxx.setYjrzTime(zpglRcxxDto.getYjrzTime()); detail = ZpglMessageTemplate.print(ZpglMessageTemplate.WAIT, new String[]{ userBean.getQyzxEmpLogin().getUsername()}); break; case 9: //淘汰 填充字段 if(!StringUtils.isEmpty(zpglRcxxDto.getIfrck())){ zpglRcxx.setIfrck(zpglRcxxDto.getIfrck()); zpglRcxx.setIfrckTime(new Date()); } zpglRcxx.setZpglFailId(zpglRcxxDto.getZpglFailId()); zpglRcxx.setRemarks(zpglRcxxDto.getRemarks()); ZpglFail zpglFail = ZpglFail.builder().id(zpglRcxxDto.getZpglFailId()).build().selectById(); String messageTemplate = ZpglMessageTemplate.ENTRYING, titleLabel = ""; if (!StringUtils.isEmpty(zpglFail)) { if (zpglFail.getZpglRcxxStatus().equals(JxglEnumInterface.ResumeStatus.INTERVIEWED.getType())) { titleLabel = JxglEnumInterface.ResumeStatus.INTERVIEWED.getName(); zpglRcxxStatus = JxglEnumInterface.MslcLogStatus.OTHER.getType(); messageTemplate = ZpglMessageTemplate.INTERVIEWED_ENTRYING; } if (zpglFail.getZpglRcxxStatus().equals(JxglEnumInterface.ResumeStatus.INTERVIEW_PASS.getType())) { titleLabel = JxglEnumInterface.ResumeStatus.INTERVIEW_PASS.getName(); zpglRcxxStatus = JxglEnumInterface.MslcLogStatus.OTHER.getType(); messageTemplate = ZpglMessageTemplate.INTERVIEWED_ENTRYING; } if (zpglFail.getZpglRcxxStatus().equals(JxglEnumInterface.ResumeStatus.INTERVIEW.getType())) { titleLabel = JxglEnumInterface.ResumeStatus.INTERVIEW.getName(); zpglRcxxStatus = JxglEnumInterface.MslcLogStatus.OTHER.getType(); messageTemplate = ZpglMessageTemplate.INTERVIEWED_ENTRYING; } if (zpglFail.getZpglRcxxStatus().equals(JxglEnumInterface.ResumeStatus.EMPLOY.getType())) { titleLabel = JxglEnumInterface.ResumeStatus.EMPLOY.getName(); zpglRcxxStatus = JxglEnumInterface.MslcLogStatus.OTHER.getType(); messageTemplate = ZpglMessageTemplate.OFFER_ENTRYING; } if (zpglFail.getZpglRcxxStatus().equals(JxglEnumInterface.ResumeStatus.OFFER.getType())) { titleLabel = JxglEnumInterface.ResumeStatus.OFFER.getName(); zpglRcxxStatus = JxglEnumInterface.MslcLogStatus.OTHER.getType(); messageTemplate = ZpglMessageTemplate.OFFER_ENTRYING; } if (zpglFail.getZpglRcxxStatus().equals(JxglEnumInterface.ResumeStatus.ENTRYING.getType())) { titleLabel = JxglEnumInterface.ResumeStatus.ENTRYING.getName(); zpglRcxxStatus = JxglEnumInterface.MslcLogStatus.OTHER.getType(); messageTemplate = ZpglMessageTemplate.OFFER_ENTRYING; } if (zpglFail.getZpglRcxxStatus().equals(JxglEnumInterface.ResumeStatus.ENTRY.getType())) { titleLabel = JxglEnumInterface.ResumeStatus.ENTRY.getName(); zpglRcxxStatus = JxglEnumInterface.MslcLogStatus.OTHER.getType(); messageTemplate = ZpglMessageTemplate.OFFER_ENTRYING; } detail = ZpglMessageTemplate.print(messageTemplate, new String[]{ userBean.getUserInfo().getName(), zpglFail.getFailCause(), StringUtils.isEmpty(zpglRcxxDto.getRemarks())?"":zpglRcxxDto.getRemarks(), titleLabel}); } break; case 10: zpglRcxxStatus = JxglEnumInterface.MslcLogStatus.OTHER.getType(); //确认入职 detail = ZpglMessageTemplate.print(ZpglMessageTemplate.ENTRY, new String[]{ userBean.getQyzxEmpLogin().getUsername()}); break; default: break; } zpglMslcLog.setZpglRcxxStatus(zpglRcxxStatus); zpglMslcLog.setDetail(detail); count = zpglRcxx.updateById(); zpglMslcLogService.addZpglMslcLog(zpglMslcLog); // 发送面试通知 if (count && JxglEnumInterface.ResumeStatus.INTERVIEW.getType().equals(zpglRcxxDto.getStatus()) && JxglEnumInterface.NoticeWay.WECHAT_PUBLIC.getType().equals(zpglRcxxDto.getNoticeWay())) { InterviewNotice interviewNotice = new InterviewNotice(); ZpglZwxx zpglZwxx = ZpglZwxx.builder().id(zpglRcxxEntity.getZpglZwxxId()).build().selectById(); if (!StringUtils.isEmpty(zpglZwxx)) { interviewNotice.setZpglZwxxName(zpglZwxx.getName()); } interviewNotice.setName(zpglRcxxEntity.getName()); interviewNotice.setType(zpglRcxxDto.getNoticeWay()); interviewNotice.setEmail(zpglRcxxEntity.getMail()); //公众号类型 1:8小时企业管理 2:优领人才网 interviewNotice.setWxgzhType(1); //0 即时发送,1 定时发送 interviewNotice.setTiming(0); interviewNotice.setInterviewTime(zpglRcxxDto.getInterviewTime()); // 通知面试官 YgglMainEmp ygglMainEmp = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().select("phone").lambda() .eq(YgglMainEmp::getOrgCode, userBean.getOrgCode()).eq(YgglMainEmp::getEmpNum, zpglRcxxDto.getInterviewerId())); if (!StringUtils.isEmpty(ygglMainEmp)) { interviewNotice.setMobile(ygglMainEmp.getPhone()); interviewNotice.setYgglMainEmpId(ygglMainEmp.getId()); } interviewNotice.setTemplateId(MessageTemplate.TEMPLATE_ID_TO_INTERVIEWER); interviewNotice.setContentStr(ZpglMessageTemplate.print(ZpglMessageTemplate.TO_INTERVIEWER, new String[]{interviewNotice.getName()})); log.info("TO_INTERVIEWER addInterviewMessageQueue info:{}", zpglWxgzptService.addInterviewMessageQueue(interviewNotice)); // 通知面试者 interviewNotice.setZpglRcxxId(zpglRcxxEntity.getId()); interviewNotice.setMobile(zpglRcxxEntity.getMobile()); interviewNotice.setRemark("请您提前做好准备,妥善安排接面试的时间~如有疑问,请联系 HR"); interviewNotice.setContentStr(ZpglMessageTemplate.print(ZpglMessageTemplate.TO_INTERVIEWEE, new String[]{interviewNotice.getName(), interviewNotice.getZpglZwxxName()})); log.info("TO_INTERVIEWEE addInterviewMessageQueue info:{}", zpglWxgzptService.addInterviewMessageQueue(interviewNotice)); } return count; } @Override public SysRegion getSysRegion(Integer keyId) { return SysRegion.builder().build() .selectOne(new QueryWrapper<SysRegion>().lambda().eq(SysRegion::getKeyId, keyId).select( SysRegion::getRegionName, SysRegion::getKeyId, SysRegion::getZipCode, SysRegion::getRegionCode)); } @Override public Result<Object> addResumeImportCandidate(UserBean userBean, MultipartFile file, ImportCandidateDto importCandidateDto) { BaiduTicResumeDto baiduTicResumeDto = BaiduTicResumeDto.builder().filename(file.getOriginalFilename()).filetype(importCandidateDto.getSuffix()).filedata(Base64.getStrFromPath(file)).build(); ResponseEntity<String> resumeString = baiduTicUtil.getResumeByCvParser(baiduTicResumeDto); JSONObject json = (JSONObject) JSONObject.parse(resumeString.getBody()); log.info("招聘-导入候选人简历{}", resumeString.getBody()); ResumeExtract resumeExtract = null; if ("success".equals(json.get("error_msg"))) { if (StringUtils.isEmpty(json.get("results"))) { log.info("招聘-导入候选人简历:results is null"); return ResultUtil.error("导入简历失败,请检查是否为简历文件~"); } JSONArray array = (JSONArray) json.get("results"); if (StringUtils.isEmpty(array.get(0))) { log.info("招聘-导入候选人简历:results is null"); return ResultUtil.error("导入简历失败,请检查是否为简历文件~"); } JSONObject resultsJsonObject = (JSONObject) array.get(0); resumeExtract = JSONObject.toJavaObject((JSONObject) resultsJsonObject.get("extract"), ResumeExtract.class); } else { return ResultUtil.error("导入简历失败,请检查是否为简历文件~"); } if (StringUtils.isEmpty(resumeExtract) || StringUtils.isEmpty(resumeExtract.getBasic_infos())) { return ResultUtil.error("导入简历失败,请检查是否为简历文件~"); } Result<String> data = ossService.upload(userBean.getOrgCode(), "zpgl", file); if(!StringUtils.isEmpty(data) && !StringUtils.isEmpty(data.getData())){ importCandidateDto.setFilePath(data.getData()); importCandidateDto.setFileName(file.getOriginalFilename()); } return this.addZpglRcxx(userBean, resumeExtract, importCandidateDto); } @Override public Result<Object> addCandidateByResumeSDK(UserBean userBean, MultipartFile file, ImportCandidateDto importCandidateDto) { ResumeSdkDto resumeSdkDto = ResumeSdkDto.builder().ocr_type(1).need_avatar(0).file_name(file.getOriginalFilename()).file_cont(Base64.getStrFromPath(file)).build(); String resumeString = ""; try { resumeString = resumeSDKUtil.getResumeByCvParser(resumeSdkDto, RESUMESDK_APPCODE); }catch (Exception e){ e.printStackTrace(); } JSONObject json = (JSONObject) JSONObject.parse(resumeString); log.info("招聘-导入候选人简历{}", resumeString); if(StringUtils.isEmpty(json)){ log.error("招聘-导入候选人简历: resumeSDKUtil.getResumeByCvParser return null. "); return ResultUtil.error("导入简历失败,请检查是否为简历文件~"); } Status statusEntity = JSONObject.toJavaObject((JSONObject) json.get("status"), Status.class); if(StringUtils.isEmpty(statusEntity) || !ResumeSdk.StatusCodeEnum.SUCCESSS.getType().equals(statusEntity.getCode())){ log.error("招聘-导入候选人简历:{}",ResumeSdk.StatusCodeEnum.getName(statusEntity.getCode())); return ResultUtil.error("导入简历失败,请联系管理员~("+ResumeSdk.StatusCodeEnum.getName(statusEntity.getCode())+")"); } Result<String> data = ossService.upload(userBean.getOrgCode(), "zpgl", file); if(!StringUtils.isEmpty(data) && !StringUtils.isEmpty(data.getData())){ importCandidateDto.setFilePath(data.getData()); importCandidateDto.setFileName(file.getOriginalFilename()); } return this.addZpglRcxx(userBean, json, importCandidateDto); } @Override public boolean updateZpglRcxxZwxx(UserBean userBean, ZpglRcxxDto zpglRcxxDto) { ZpglRcxx zpglRcxx = ZpglRcxx.builder().id(zpglRcxxDto.getId()).zpglZwxxId(zpglRcxxDto.getZpglZwxxId()).build(); ZpglMslcLog zpglMslcLog = new ZpglMslcLog(); zpglMslcLog.setZpglRcxxId(zpglRcxxDto.getId()); zpglMslcLog.setUserId(userBean.getEmpNum()); zpglMslcLog.setUserName(userBean.getQyzxEmpLogin().getUsername()); zpglMslcLog.setZpglRcxxStatus(JxglEnumInterface.MslcLogStatus.OTHER.getType()); zpglMslcLog.setDetail(userBean.getQyzxEmpLogin().getUsername() + " 更改候选人应聘职位."); zpglRcxx.updateById(); return zpglMslcLogService.addZpglMslcLog(zpglMslcLog); } @Override public boolean updateZpglOther(UserBean userBean, ZpglRcxxDto zpglRcxxDto,Integer ygglMainEmpId) { // 招聘-变更人才信息状态 // 添加面试流程记录 this.updateZpglRcxx(userBean,zpglRcxxDto); // 职位信息已入职人数+1 ZpglZwxx zpglZwxx = ZpglZwxx.builder().id(zpglRcxxDto.getZpglZwxxId()).build().selectById(); if(!StringUtils.isEmpty(zpglZwxx)){ zpglZwxx.setEntryNum(zpglZwxx.getEntryNum()+1); zpglZwxx.updateById(); } // 维护微信公众平台表 ZpglRcxx zpglRcxx = ZpglRcxx.builder().id(zpglRcxxDto.getId()).build().selectById(); if(!StringUtils.isEmpty(zpglRcxx) && !StringUtils.isEmpty(zpglRcxx.getMobile())){ ZpglWxgzptEmpRcxx zpglWxgzptEmpRcxx = ZpglWxgzptEmpRcxx.builder().build().selectOne( new QueryWrapper<ZpglWxgzptEmpRcxx>().select("id","zpgl_rcxx_id").lambda().eq(ZpglWxgzptEmpRcxx::getMobile,zpglRcxx.getMobile()) .eq(ZpglWxgzptEmpRcxx::getDeleteFlag,0) ); if(!StringUtils.isEmpty(zpglWxgzptEmpRcxx) && (StringUtils.isEmpty(zpglWxgzptEmpRcxx.getZpglRcxxId()) || zpglWxgzptEmpRcxx.getZpglRcxxId() <= 0)){ zpglWxgzptEmpRcxx.setOrgCode(userBean.getOrgCode()); zpglWxgzptEmpRcxx.setZpglRcxxId(zpglRcxx.getId()); zpglWxgzptEmpRcxx.setYgglMainEmpId(ygglMainEmpId); zpglWxgzptEmpRcxx.updateById(); } if(StringUtils.isEmpty(zpglWxgzptEmpRcxx)){ zpglWxgzptEmpRcxx = new ZpglWxgzptEmpRcxx(); zpglWxgzptEmpRcxx.setOrgCode(userBean.getOrgCode()); zpglWxgzptEmpRcxx.setZpglRcxxId(zpglRcxx.getId()); zpglWxgzptEmpRcxx.setYgglMainEmpId(ygglMainEmpId); zpglWxgzptEmpRcxx.setMobile(zpglRcxx.getMobile()); zpglWxgzptEmpRcxx.insert(); } } return true; } /** * 导入简历 * 同步人才信息 教育资讯 基本信息 其他信息 项目信息 工作信息 * * @param resumeExtract * @param importCandidateDto */ private Result<Object> 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()); zpglRcxx.setFileName(importCandidateDto.getFileName()); zpglRcxx.setFilePath(importCandidateDto.getFilePath()); Integer highesteducation = null; // 添加人才信息 if (!StringUtils.isEmpty(resumeExtract.getBasic_infos())) { zpglRcxx.setName(resumeExtract.getBasic_infos().getName()); String phone = resumeExtract.getBasic_infos().getPhone_numbers(); if (StringUtils.isEmpty(phone)) { return ResultUtil.error("导入简历失败,手机号码不存在~"); } // 查询简历是否重复导入 ZpglRcxx zpglRcxxEntiyt = ZpglRcxx.builder().build().selectOne(new QueryWrapper<ZpglRcxx>().lambda().eq(ZpglRcxx::getMobile, phone).eq(ZpglRcxx::getDeleteFlag, 0)); if (!StringUtils.isEmpty(zpglRcxxEntiyt)) { return ResultUtil.error("简历已入库,请勿重复导入"); } zpglRcxx.setMobile(phone); 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) { zpglRcxx.setDatebirth(this.getDate(resumeExtract.getBasic_infos().getBirth_date())); } 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(); } if (!StringUtils.isEmpty(zpglRcxx.getId())) { // 添加教育经历 if (!StringUtils.isEmpty(resumeExtract.getEducation_infos())) { ZpglRcxxStudy zpglRcxxStudy = ZpglRcxxStudy.builder().zpglRcxxId(zpglRcxx.getId()).build(); List<EducationInfo> list = resumeExtract.getEducation_infos(); for (EducationInfo entity : list) { if (!StringUtils.isEmpty(entity.getStart_time()) && entity.getStart_time().length() > 0) { zpglRcxxStudy.setStartTime(this.getDate(entity.getStart_time())); } if (!StringUtils.isEmpty(entity.getEnd_time()) && entity.getEnd_time().length() > 0) { zpglRcxxStudy.setEndTime(this.getDate(entity.getEnd_time())); } zpglRcxxStudy.setSubject(entity.getMajor()); zpglRcxxStudy.setSchoolName(StringUtils.isEmpty(entity.getSchool()) ? entity.getCollege() : entity.getSchool()); zpglRcxxStudy.setEducation(this.getEducation(entity.getSchooling_record())); highesteducation = zpglRcxxStudy.getEducation(); zpglRcxxStudy.insert(); } } // 添加工作经验 if (!StringUtils.isEmpty(resumeExtract.getWork_infos())) { ZpglRcxxExperience zpglRcxxExperience = ZpglRcxxExperience.builder().zpglRcxxId(zpglRcxx.getId()).build(); List<WorkInfo> list = resumeExtract.getWork_infos(); for (WorkInfo entity : list) { zpglRcxxExperience.setCompany(entity.getCompany()); zpglRcxxExperience.setJobName(entity.getJob()); zpglRcxxExperience.setDepartment(entity.getDepartment()); zpglRcxxExperience.setWorkContent(entity.getDescribe()); if (!StringUtils.isEmpty(entity.getEnd_time()) && entity.getEnd_time().length() > 0) { zpglRcxxExperience.setEndTime(this.getDate(entity.getEnd_time())); } if (!StringUtils.isEmpty(entity.getStart_time()) && entity.getStart_time().length() > 0) { zpglRcxxExperience.setStartTime(this.getDate(entity.getStart_time())); } zpglRcxxExperience.insert(); } } // 添加项目信息 if (!StringUtils.isEmpty(resumeExtract.getProject_infos())) { ZpglRcxxProject zpglRcxxProject = ZpglRcxxProject.builder().zpglRcxxId(zpglRcxx.getId()).build(); List<ProjectInfo> list = resumeExtract.getProject_infos(); for (ProjectInfo entity : list) { zpglRcxxProject.setProjectDescribe(entity.getDescribe()); zpglRcxxProject.setDuty(entity.getDuty()); zpglRcxxProject.setJob(entity.getJob()); zpglRcxxProject.setLocation(entity.getLocation()); zpglRcxxProject.setProjectName(entity.getProject_name()); if (!StringUtils.isEmpty(entity.getStart_time()) && entity.getStart_time().length() > 0) { zpglRcxxProject.setStartTime(this.getDate(entity.getStart_time())); } if (!StringUtils.isEmpty(entity.getEnd_time()) && entity.getEnd_time().length() > 0) { zpglRcxxProject.setEndTime(this.getDate(entity.getEnd_time())); } zpglRcxxProject.insert(); } } if (!StringUtils.isEmpty(highesteducation)) { ZpglRcxx.builder().id(zpglRcxx.getId()).highesteducation(highesteducation.toString()).build().updateById(); } } return ResultUtil.success(); } /** * 导入简历 * 同步人才信息 教育资讯 基本信息 其他信息 项目信息 工作信息 * @sdkdocs http://www.resumesdk.com/docs/rs-parser.html * @param json * @param importCandidateDto */ private Result<Object> addZpglRcxx(UserBean userBean, JSONObject json, ImportCandidateDto importCandidateDto) { ReumeSdkResult reumeSdkResult = JSONObject.toJavaObject((JSONObject) json.get("result"), ReumeSdkResult.class); if(StringUtils.isEmpty(reumeSdkResult)){ log.info("招聘-导入候选人简历:results is null"); return ResultUtil.error("导入简历失败,请检查是否为简历文件~"); } /** 基础信息开始 */ ZpglRcxx zpglRcxx = ZpglRcxx.builder().build(); zpglRcxx.setZpglZwxxId(importCandidateDto.getZpglZwxxId()); zpglRcxx.setStatus(importCandidateDto.getStatus()); zpglRcxx.setZpglZpqdId(importCandidateDto.getZpglZpqdId()); zpglRcxx.setOrgCode(userBean.getOrgCode().toString()); zpglRcxx.setFileName(importCandidateDto.getFileName()); zpglRcxx.setFilePath(importCandidateDto.getFilePath()); // 添加人才信息 zpglRcxx.setName(reumeSdkResult.getName()); String phone = reumeSdkResult.getPhone(); if (StringUtils.isEmpty(phone)) { return ResultUtil.error("导入简历失败,手机号码不存在~"); } // 查询简历是否重复导入 ZpglRcxx zpglRcxxEntiyt = ZpglRcxx.builder().build().selectOne(new QueryWrapper<ZpglRcxx>().lambda().eq(ZpglRcxx::getOrgCode, userBean.getOrgCode()).eq(ZpglRcxx::getMobile, phone).eq(ZpglRcxx::getDeleteFlag, 0)); if (!StringUtils.isEmpty(zpglRcxxEntiyt)) { return ResultUtil.error("简历已入库,请勿重复导入"); } zpglRcxx.setMobile(phone); zpglRcxx.setMail(reumeSdkResult.getEmail()); zpglRcxx.setWeixin(reumeSdkResult.getWeixin()); zpglRcxx.setIdCard(reumeSdkResult.getId_card()); if (!StringUtils.isEmpty(reumeSdkResult.getGender())) { zpglRcxx.setSex(reumeSdkResult.getGender().indexOf("男") != -1 ? 0 : 1); } //出生日期,格式化为 年.月,如2000.01,若只有年,则只显示年,如2000 if (!StringUtils.isEmpty(reumeSdkResult.getBirthday()) && reumeSdkResult.getBirthday().length() > 0) { zpglRcxx.setDatebirth(this.getDate(reumeSdkResult.getBirthday())); } if (!StringUtils.isEmpty(reumeSdkResult.getRace())) { NationClass nationClass = NationClass.builder().build().selectOne(new QueryWrapper<NationClass>().lambda().like(NationClass::getName, reumeSdkResult.getRace())); if (!StringUtils.isEmpty(nationClass)) { zpglRcxx.setNationClassId(nationClass.getId()); } } // 身高 if(!StringUtils.isEmpty(reumeSdkResult.getHeight())){ String[] height = reumeSdkResult.getHeight().split("cm"); if(height.length > 0){ zpglRcxx.setHeight(Integer.parseInt(height[0])); } } // 体重 if(!StringUtils.isEmpty(reumeSdkResult.getWeight())){ String[] height = reumeSdkResult.getWeight().split("kg"); if(height.length > 0){ zpglRcxx.setWeight(Integer.parseInt(height[0])); } } zpglRcxx.setNativePlace(reumeSdkResult.getNationality()); zpglRcxx.setAddress(reumeSdkResult.getLiving_address()); zpglRcxx.setUniversitie(reumeSdkResult.getCollege()); zpglRcxx.setSubject(reumeSdkResult.getMajor()); if(!StringUtils.isEmpty(reumeSdkResult.getDegree())){ zpglRcxx.setHighesteducation(this.getEducation(reumeSdkResult.getDegree())+""); } if (!StringUtils.isEmpty(reumeSdkResult.getWork_year_norm())) { if(reumeSdkResult.getWork_year_norm().indexOf(".") != -1){ zpglRcxx.setWorkyears(Integer.parseInt(reumeSdkResult.getWork_year_norm().substring(0,reumeSdkResult.getWork_year_norm().lastIndexOf(".")))+1); }else { zpglRcxx.setWorkyears(Integer.parseInt(reumeSdkResult.getWork_year_norm())); } } if(!StringUtils.isEmpty(reumeSdkResult.getExpect_salary_max())){ zpglRcxx.setSalary(Integer.parseInt(reumeSdkResult.getExpect_salary_max())); } zpglRcxx.setCompany(reumeSdkResult.getWork_company()); zpglRcxx.setZjzw(reumeSdkResult.getWork_position()); zpglRcxx.setContMyDesc(reumeSdkResult.getCont_my_desc()); zpglRcxx.setHobby(reumeSdkResult.getCont_hobby()); zpglRcxx.insert(); /** 基础信息结束 */ if (!StringUtils.isEmpty(zpglRcxx.getId())) { // 初始化流程记录 ZpglMslcLog zpglMslcLog = new ZpglMslcLog(); zpglMslcLog.setZpglRcxxId(zpglRcxx.getId()); zpglMslcLog.setUserId(userBean.getEmpNum()); zpglMslcLog.setUserName(userBean.getQyzxEmpLogin().getUsername()); zpglMslcLog.setZpglRcxxStatus(JxglEnumInterface.MslcLogStatus.OTHER.getType()); zpglMslcLog.setDetail(ZpglMessageTemplate.SYS_ADD); zpglMslcLogService.addZpglMslcLog(zpglMslcLog); // 添加教育经历 if (!StringUtils.isEmpty(reumeSdkResult.getEducation_objs())) { ZpglRcxxStudy zpglRcxxStudy = ZpglRcxxStudy.builder().zpglRcxxId(zpglRcxx.getId()).build(); List<Education_objs> list = reumeSdkResult.getEducation_objs(); for (Education_objs entity : list) { if (!StringUtils.isEmpty(entity.getStart_date()) && entity.getStart_date().length() > 0) { zpglRcxxStudy.setStartTime(this.getDate(entity.getStart_date())); } if (!StringUtils.isEmpty(entity.getEnd_date()) && entity.getEnd_date().length() > 0) { zpglRcxxStudy.setEndTime(this.getDate(entity.getEnd_date())); } zpglRcxxStudy.setSubject(entity.getEdu_major()); zpglRcxxStudy.setSchoolName(entity.getEdu_college()); zpglRcxxStudy.setEducation(this.getEducation(entity.getEdu_degree_norm())); zpglRcxxStudy.insert(); } } // 添加工作经验 if (!StringUtils.isEmpty(reumeSdkResult.getJob_exp_objs())) { ZpglRcxxExperience zpglRcxxExperience = ZpglRcxxExperience.builder().zpglRcxxId(zpglRcxx.getId()).build(); List<Job_exp_objs> list = reumeSdkResult.getJob_exp_objs(); for (Job_exp_objs entity : list) { zpglRcxxExperience.setCompany(entity.getJob_cpy()); zpglRcxxExperience.setJobName(entity.getJob_position()); zpglRcxxExperience.setDepartment(entity.getJob_dept()); zpglRcxxExperience.setWorkContent(entity.getJob_content()); zpglRcxxExperience.setReason(entity.getJob_why_leave()); if (!StringUtils.isEmpty(entity.getEnd_date()) && entity.getEnd_date().length() > 0) { zpglRcxxExperience.setEndTime(this.getDate(entity.getEnd_date())); } if (!StringUtils.isEmpty(entity.getStart_date()) && entity.getStart_date().length() > 0) { zpglRcxxExperience.setStartTime(this.getDate(entity.getStart_date())); } zpglRcxxExperience.insert(); } } // 添加项目信息 if (!StringUtils.isEmpty(reumeSdkResult.getProj_exp_objs())) { ZpglRcxxProject zpglRcxxProject = ZpglRcxxProject.builder().zpglRcxxId(zpglRcxx.getId()).build(); List<Proj_exp_objs> list = reumeSdkResult.getProj_exp_objs(); for (Proj_exp_objs entity : list) { zpglRcxxProject.setProjectDescribe(entity.getProj_content()); zpglRcxxProject.setDuty(entity.getProj_resp()); zpglRcxxProject.setJob(entity.getProj_position()); zpglRcxxProject.setProjectName(entity.getProj_name()); if (!StringUtils.isEmpty(entity.getStart_date()) && entity.getStart_date().length() > 0) { zpglRcxxProject.setStartTime(this.getDate(entity.getStart_date())); } if (!StringUtils.isEmpty(entity.getEnd_date()) && entity.getEnd_date().length() > 0) { zpglRcxxProject.setEndTime(this.getDate(entity.getEnd_date())); } zpglRcxxProject.insert(); } } // 添加培训经历 if (!StringUtils.isEmpty(reumeSdkResult.getTraining_objs())) { ZpglRcxxTrain zpglRcxxTrain = ZpglRcxxTrain.builder().zpglRcxxId(zpglRcxx.getId()).build(); List<Training_objs> list = reumeSdkResult.getTraining_objs(); for (Training_objs entity : list) { zpglRcxxTrain.setTrainCompany(entity.getTrain_org()); zpglRcxxTrain.setTrainContent(entity.getTrain_cont()); if (!StringUtils.isEmpty(entity.getStart_date()) && entity.getStart_date().length() > 0) { zpglRcxxTrain.setStartTime(this.getDate(entity.getStart_date())); } if (!StringUtils.isEmpty(entity.getEnd_date()) && entity.getEnd_date().length() > 0) { zpglRcxxTrain.setEndTime(this.getDate(entity.getEnd_date())); } zpglRcxxTrain.insert(); } } } return ResultUtil.success(); } /** * 根据string时间获取date(2019-10或2019) * * @param date * @return */ private Date getDate(String date) { String datebirth = ""; date = date.replace(".","-"); String[] num = date.split("-"); if (num.length == 1) { datebirth = num[0] + "-1-1"; } else if (num.length == 2) { datebirth = num[0] + "-" + num[1] + "-1"; } return datebirth.length() > 0 ? ClockInTool.strToDateLong(datebirth) : null; } /** * 获取学历类型 * * @param str * @return */ private Integer getEducation(String str) { Integer education = 0; if (StringUtils.isEmpty(str)) { return education; } // 博士研究生/硕士研究生/本科/专科/高中/中专/初中 // 小学、初中、高中、中专、大专、本科、硕士研究生、博士研究生、博士后、mba if (str.indexOf("初中") != -1) { education = 2; } else if (str.indexOf("小学") != -1) { education = 1; }else if (str.indexOf("中专") != -1) { education = 4; } else if (str.indexOf("高中") != -1) { education = 3; } else if (str.indexOf("专科") != -1 || str.indexOf("大专") != -1) { education = 5; } else if (str.indexOf("本科") != -1) { education = 6; } else if (str.indexOf("硕士研究生") != -1 || str.indexOf("硕士") != -1) { education = 7; } else if (str.indexOf("博士研究生") != -1 || str.indexOf("博士") != -1) { education = 8; } return education; } /** * 添加offer记录 * * @param userBean * @param zpglRcxxDto * @return */ private ZpglRcxxOffer insertZpglRcxxOffer(UserBean userBean, ZpglRcxxDto zpglRcxxDto) { Integer orgCode = userBean.getOrgCode(); ZpglRcxxOffer zpglRcxxOffer = ZpglRcxxOffer.builder().build(); zpglRcxxOffer.setOrgCode(orgCode); zpglRcxxOffer.setRcxxName(zpglRcxxDto.getName()); zpglRcxxOffer.setZpglRcxxId(zpglRcxxDto.getId()); zpglRcxxOffer.setRzTime(zpglRcxxDto.getYjrzTime()); // 所在部门 ZzglBmgwM zzglBmgwM = ZzglBmgwM.builder().build().selectOne( new QueryWrapper<ZzglBmgwM>().lambda().eq(ZzglBmgwM::getOrgCode, orgCode).eq(ZzglBmgwM::getId, zpglRcxxDto.getBmgwId())); Integer bmid = null; if (!StringUtils.isEmpty(zzglBmgwM)) { zpglRcxxOffer.setGangwei(zzglBmgwM.getName()); bmid = zzglBmgwM.getUpId(); } // 所在职位 ZzglBmgwM z = ZzglBmgwM.builder().build().selectOne( new QueryWrapper<ZzglBmgwM>().lambda().eq(ZzglBmgwM::getOrgCode, orgCode).eq(ZzglBmgwM::getId, bmid)); if (!StringUtils.isEmpty(z)) { zpglRcxxOffer.setBumen(z.getName()); } // 所在公司 ZzglBmgwM company = ZzglBmgwM.builder().build().selectOne( new QueryWrapper<ZzglBmgwM>().select("name").lambda().eq(ZzglBmgwM::getOrgCode, orgCode).eq(ZzglBmgwM::getUpId, 0)); if (!StringUtils.isEmpty(company)) { zpglRcxxOffer.setTitle(company.getName() + "录用函"); zpglRcxxOffer.setCompanyName(company.getName()); } YgglMainEmp ygglMainEmp = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().select("phone", "name", "work_email").lambda() .eq(YgglMainEmp::getOrgCode, orgCode).eq(YgglMainEmp::getEmpNum, zpglRcxxDto.getLinkId())); if (!StringUtils.isEmpty(ygglMainEmp)) { zpglRcxxOffer.setLinkName(ygglMainEmp.getName()); zpglRcxxOffer.setLinkPhone(ygglMainEmp.getPhone()); zpglRcxxOffer.setLinkEmail(ygglMainEmp.getWorkEmail()); } zpglRcxxOffer.insert(); return zpglRcxxOffer; } }