ADD-#3189154 应聘者、简历库列表卡片展示

This commit is contained in:
dxfeng 2024-08-20 09:31:24 +08:00
parent 401250be94
commit ba0a6e6acb
19 changed files with 1198 additions and 3 deletions

View File

@ -238,4 +238,19 @@ public class ApplicantCommonInfo {
}
return null;
}
/**
* 获取ImageField
*
* @param docId
* @return
*/
public static int getImageFieldByDocId(String docId) {
RecordSet rs = new RecordSet();
rs.executeQuery("select imagefileid from docimagefile where docid = ? ", docId);
if (rs.next()) {
return rs.getInt("imagefileid");
}
return -1;
}
}

View File

@ -78,6 +78,17 @@ public class ModeBrowserCommonInfo {
return getBrowserId(TYPE_WORK_EXPERIENCE, name);
}
/**
* 获取学位ID
*
* @param name
* @return
*/
public static String getDegreeId(String name) {
return getBrowserId(TYPE_DEGREE, name);
}
/**
* 获取学历ID
*
@ -97,6 +108,24 @@ public class ModeBrowserCommonInfo {
return id;
}
/**
* 获取学历名称
* @param id
* @return
*/
public static String getEducationLevelById(String id) {
if (StringUtils.isBlank(id)) {
return null;
}
String name = null;
RecordSet rs = new RecordSet();
rs.executeQuery("select name from hrmeducationlevel where id = ?", id);
if (rs.next()) {
name = rs.getString("name");
}
return name;
}
public static String getBrowserId(String zdlxmc, String xxnr) {

View File

@ -1,5 +1,8 @@
package com.engine.recruit.conn;
import cn.hutool.core.convert.Convert;
import weaver.general.Util;
import java.util.HashMap;
/**
@ -26,4 +29,32 @@ public class RecruitDataMap<V> extends HashMap<String, V> {
// 将键转为小写形式后作为真正的键
return super.put(key.toLowerCase(), value);
}
/**
* 获取int类型数据
*
* @param key
* @return
*/
public Integer getInt(Object key) {
if (key instanceof String) {
// 将键转为小写形式再进行查找
return Convert.toInt(super.get(((String) key).toLowerCase()),null);
}
return 0;
}
/**
* 获取String类型数据
*
* @param key
* @return
*/
public String getString(Object key) {
if (key instanceof String) {
// 将键转为小写形式再进行查找
return Util.null2String(super.get(((String) key).toLowerCase()));
}
return null;
}
}

View File

@ -25,12 +25,12 @@ public class RecruitRecordSet {
* @param rs RecordSet
* @return
*/
public static Map<String, Object> getSingleRecordMap(RecordSet rs) {
Map<String, Object> dataMap = new RecruitDataMap<>();
public static RecruitDataMap<Object> getSingleRecordMap(RecordSet rs) {
RecruitDataMap<Object> dataMap = new RecruitDataMap<>();
if (rs.next()) {
String[] columnNames = rs.getColumnName();
for (String columnName : columnNames) {
dataMap.put(columnName.toLowerCase(), RecruitModeUtil.parseBlankToNull(rs.getString(columnName)));
dataMap.put(columnName, RecruitModeUtil.parseBlankToNull(rs.getString(columnName)));
}
}
return dataMap;

View File

@ -10,6 +10,7 @@ import weaver.hrm.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@ -91,4 +92,31 @@ public class ApplicantResumeController {
Map<String, Object> param = ParamUtil.request2Map(request);
return new ResponseResult<Map<String, Object>, Map<String, Object>>(user).run(getApplicantResumeWrapper(user)::checkRepeatResume, param);
}
@GET
@Path("/getResumeCardInfo")
@Produces(MediaType.APPLICATION_JSON)
public String getResumeCardInfo(@Context HttpServletRequest request, @Context HttpServletResponse response) {
User user = HrmUserVarify.getUser(request, response);
Map<String, Object> param = ParamUtil.request2Map(request);
return new ResponseResult<Map<String, Object>, Map<String, Object>>(user).run(getApplicantResumeWrapper(user)::getResumeCardInfo, param);
}
@GET
@Path("/getResumeListStatus")
@Produces(MediaType.APPLICATION_JSON)
public String getResumeListStatus(@Context HttpServletRequest request, @Context HttpServletResponse response) {
User user = HrmUserVarify.getUser(request, response);
Map<String, Object> param = ParamUtil.request2Map(request);
return new ResponseResult<Map<String, Object>, String>(user).run(getApplicantResumeWrapper(user)::getResumeListStatus, param);
}
@POST
@Path("/updateResumeListStatus")
@Produces(MediaType.APPLICATION_JSON)
public String updateResumeListStatus(@Context HttpServletRequest request, @Context HttpServletResponse response) {
User user = HrmUserVarify.getUser(request, response);
Map<String, Object> param = ParamUtil.request2Map(request);
return new ResponseResult<Map<String, Object>, Map<String, Object>>(user).run(getApplicantResumeWrapper(user)::updateResumeListStatus, param);
}
}

View File

@ -0,0 +1,86 @@
package com.engine.recruit.entity.card;
import org.apache.commons.lang3.StringUtils;
import weaver.general.BaseBean;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author:dxfeng
* @createTime: 2024/08/01
* @version: 1.0
*/
public class EduInfo {
private String time;
private String start;
private String end;
private String school;
private String professional;
public void setStart(String start) {
this.start = start;
}
public void setEnd(String end) {
this.end = end;
}
public String getTime() {
String dateTimeStart = formatEduDateTime(start);
String dateTimeEnd = formatEduDateTime(end);
if (StringUtils.isNotBlank(dateTimeStart) && StringUtils.isNotBlank(dateTimeEnd)) {
return dateTimeStart + " - " + dateTimeEnd;
}
if (StringUtils.isNotBlank(dateTimeStart) && StringUtils.isBlank(dateTimeEnd)) {
return dateTimeStart + " - 至今";
}
return "";
}
public void setTime(String time) {
this.time = time;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
public String getProfessional() {
return professional;
}
public void setProfessional(String professional) {
this.professional = professional;
}
/**
* 日期格式化
*
* @param dateStr
* @return
*/
private String formatEduDateTime(String dateStr) {
if(StringUtils.isBlank(dateStr)){
return "";
}
String dateTime = "";
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy.MM");
try {
// 解析输入日期字符串
Date date = inputFormat.parse(dateStr);
// 格式化为目标格式
dateTime = outputFormat.format(date);
} catch (Exception e) {
new BaseBean().writeLog("教育信息日期格式化失败", e);
}
return dateTime;
}
}

View File

@ -0,0 +1,24 @@
package com.engine.recruit.entity.card;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author:dxfeng
* @createTime: 2024/08/01
* @version: 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class RecruitProcess {
private String title;
private String value;
private String icon;
private Date createDateTime;
}

View File

@ -0,0 +1,100 @@
package com.engine.recruit.entity.card;
import com.engine.recruit.conn.ModeBrowserCommonInfo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import java.util.List;
/**
* @author:dxfeng
* @createTime: 2024/08/01
* @version: 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ResumeCardInfo {
private Integer id;
private String image;
private String lastName;
private String applicantUrl;
private String jobTitle;
private String currentStage;
private String sex;
private String age;
private String education;
private String workYear;
private String submissionTime;
private String submissionFrom;
private List<Tags> tags;
private List<RecruitProcess> recruitProcess;
private List<WorkInfo> workInfo;
private List<EduInfo> eduInfo;
public String getSex() {
if (StringUtils.isNotBlank(sex)) {
if ("0".equals(sex)) {
return "";
} else {
return "";
}
}
return sex;
}
public String getAge() {
if (StringUtils.isNotBlank(age)) {
return age + "";
}
return age;
}
public String getWorkYear() {
if (StringUtils.isNotBlank(workYear)) {
return "工作" + workYear;
}
return workYear;
}
public String getEducation() {
return ModeBrowserCommonInfo.getEducationLevelById(education);
}
public String getCurrentStage() {
String stageStr = "";
if (StringUtils.isNotBlank(currentStage)) {
switch (currentStage) {
case "0":
stageStr = "初筛";
break;
case "1":
stageStr = "笔试";
break;
case "2":
stageStr = "面试";
break;
case "3":
stageStr = "测评";
break;
case "4":
stageStr = "薪酬谈判";
break;
case "5":
stageStr = "背调";
break;
case "6":
stageStr = "offer";
break;
default:
break;
}
}
return stageStr;
}
}

View File

@ -0,0 +1,22 @@
package com.engine.recruit.entity.card;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author:dxfeng
* @createTime: 2024/08/01
* @version: 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Tags {
private String color;
private String bgColor;
private String bdColor;
private String title;
}

View File

@ -0,0 +1,97 @@
package com.engine.recruit.entity.card;
import org.apache.commons.lang3.StringUtils;
import weaver.common.DateUtil;
import weaver.general.BaseBean;
import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;
/**
* @author:dxfeng
* @createTime: 2024/08/01
* @version: 1.0
*/
public class WorkInfo {
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
private String start;
private String end;
private String time;
private String company;
private String job;
public void setStart(String start) {
this.start = start;
}
public void setEnd(String end) {
this.end = end;
}
public String getTime() {
if (StringUtils.isBlank(start)) {
return "";
}
if (StringUtils.isBlank(end)) {
return getDatePeriod(start, "");
}
return getDatePeriod(start, end);
}
public void setTime(String time) {
this.time = time;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
private String getDatePeriod(String start, String end) {
try {
String dateStr = start + " ~ " + end;
// 解析日期字符串为 LocalDate 对象
LocalDate startDate = LocalDate.parse(start, DATE_FORMATTER);
if (StringUtils.isBlank(end)) {
end = DateUtil.getCurrentDate();
dateStr = start + " ~ 至今";
}
LocalDate endDate = LocalDate.parse(end, DATE_FORMATTER);
// 计算两个日期之间的 Period 对象
Period period = Period.between(startDate, endDate);
String periodStr = "";
// 提取相差的年和月
int years = period.getYears();
int months = period.getMonths();
if (years > 0) {
if (months == 0) {
periodStr = years + "";
} else {
periodStr = years + "" + months + "个月";
}
} else {
periodStr = months + "个月";
}
return dateStr + "(" + periodStr + ")";
} catch (Exception e) {
new BaseBean().writeLog("工作信息日期计算失败", e);
return "";
}
}
}

View File

@ -0,0 +1,46 @@
package com.engine.recruit.entity.card.process;
import org.apache.commons.lang3.StringUtils;
/**
* @author:dxfeng
* @createTime: 2024/08/07
* @version: 1.0
*/
public class BackProcess {
public static final String ICON_NAME = "back.png";
public static final String TITLE = "最近背调";
private String dcrq;
private String dcjg;
public String getDcrq() {
return dcrq;
}
public void setDcrq(String dcrq) {
this.dcrq = dcrq;
}
public String getDcjg() {
if ("0".equals(dcjg)) {
return "通过";
} else if ("1".equals(dcjg)) {
return "不通过";
}
return "待定";
}
public void setDcjg(String dcjg) {
this.dcjg = dcjg;
}
@Override
public String toString() {
if (StringUtils.isBlank(dcjg)) {
return "暂无背调结果";
} else {
return getDcrq() + " " + getDcjg();
}
}
}

View File

@ -0,0 +1,96 @@
package com.engine.recruit.entity.card.process;
import org.apache.commons.lang3.StringUtils;
import weaver.general.BaseBean;
import weaver.hrm.resource.ResourceComInfo;
/**
* @author:dxfeng
* @createTime: 2024/08/07
* @version: 1.0
*/
public class InterviewProcess {
public static final String ICON_NAME = "interview.png";
public static final String TITLE = "最近面试";
private String zt;
private String msrq;
private String msg;
private String ptmsg;
private String jg;
public String getZt() {
if ("0".equals(zt)) {
return "待面试";
} else if ("1".equals(zt)) {
return "已反馈";
}
return "已取消";
}
public void setZt(String zt) {
this.zt = zt;
}
public String getMsrq() {
return msrq;
}
public void setMsrq(String msrq) {
this.msrq = msrq;
}
public String getMsg() {
try {
String lastnames = new ResourceComInfo().getLastnames(msg);
if (StringUtils.isNotBlank(lastnames)) {
return "面试官:" + lastnames;
}
} catch (Exception e) {
new BaseBean().writeLog("人员姓名转换失败", e);
}
return "";
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getPtmsg() {
try {
String lastnames = new ResourceComInfo().getLastnames(ptmsg);
if (StringUtils.isNotBlank(lastnames)) {
return "陪同面试官:" + lastnames;
}
} catch (Exception e) {
new BaseBean().writeLog("人员姓名转换失败", e);
}
return "";
}
public void setPtmsg(String ptmsg) {
this.ptmsg = ptmsg;
}
public String getJg() {
if ("0".equals(jg)) {
return "通过";
} else if ("1".equals(jg)) {
return "不通过";
}
return "待定";
}
public void setJg(String jg) {
this.jg = jg;
}
@Override
public String toString() {
if ("0".equals(zt)) {
return getMsrq() + " " + getZt() + " (" + getMsg() + ")";
}
return getMsrq() + " " + getJg() + " (" + getMsg() + ")";
}
}

View File

@ -0,0 +1,59 @@
package com.engine.recruit.entity.card.process;
import org.apache.commons.lang3.StringUtils;
/**
* @author:dxfeng
* @createTime: 2024/08/07
* @version: 1.0
*/
public class OfferProcess {
public static final String ICON_NAME = "offer.png";
public static final String TITLE = "offer状态";
private String zt;
private String fksj;
public String getZt() {
String ztStr = "";
if (StringUtils.isNotBlank(zt)) {
switch (zt) {
case "0":
ztStr = "未发送";
break;
case "1":
ztStr = "已发送待反馈";
break;
case "2":
ztStr = "已拒绝";
break;
case "3":
ztStr = "已接受";
break;
case "5":
ztStr = "逾期未回复";
break;
default:
break;
}
}
return ztStr;
}
public void setZt(String zt) {
this.zt = zt;
}
public String getFksj() {
return fksj;
}
public void setFksj(String fksj) {
this.fksj = fksj;
}
@Override
public String toString() {
return getZt() + " " + getFksj();
}
}

View File

@ -0,0 +1,46 @@
package com.engine.recruit.entity.card.process;
import org.apache.commons.lang3.StringUtils;
/**
* @author:dxfeng
* @createTime: 2024/08/07
* @version: 1.0
*/
public class SalaryProcess {
public static final String ICON_NAME = "salray.png";
public static final String TITLE = "最近薪酬谈判";
private String tpsj;
private String tpjg;
public String getTpsj() {
return tpsj;
}
public void setTpsj(String tpsj) {
this.tpsj = tpsj;
}
public String getTpjg() {
if ("0".equals(tpjg)) {
return "成功";
} else if ("1".equals(tpjg)) {
return "失败";
}
return "待定";
}
public void setTpjg(String tpjg) {
this.tpjg = tpjg;
}
@Override
public String toString() {
if (StringUtils.isBlank(tpjg)) {
return "暂无薪酬谈判结果";
} else {
return getTpsj() + " " + getTpjg();
}
}
}

View File

@ -0,0 +1,67 @@
package com.engine.recruit.entity.card.process;
import org.apache.commons.lang3.StringUtils;
import weaver.general.BaseBean;
import weaver.hrm.resource.ResourceComInfo;
/**
* @author:dxfeng
* @createTime: 2024/08/07
* @version: 1.0
*/
public class ScreenProcess {
private String zt;
private String jg;
private String fkr;
public static final String ICON_NAME = "screen.png";
public static final String TITLE = "最近筛选结果";
public String getZt() {
if("1".equals(zt)){
return "已反馈";
}
return "待反馈";
}
public void setZt(String zt) {
this.zt = zt;
}
public String getJg() {
if ("0".equals(jg)) {
return "通过";
} else if ("1".equals(jg)) {
return "不通过";
}
return "待定";
}
public void setJg(String jg) {
this.jg = jg;
}
public String getFkr() {
try {
String lastnames = new ResourceComInfo().getLastnames(fkr);
if (StringUtils.isNotBlank(lastnames)) {
return "反馈人:" + lastnames;
}
} catch (Exception e) {
new BaseBean().writeLog("人员姓名转换失败", e);
}
return "";
}
public void setFkr(String fkr) {
this.fkr = fkr;
}
@Override
public String toString() {
if ("1".equals(zt)) {
return getJg() + "(" + getFkr() + ")";
}
return getZt() + "(" + getFkr() + ")";
}
}

View File

@ -0,0 +1,54 @@
package com.engine.recruit.entity.card.process;
import org.apache.commons.lang3.StringUtils;
/**
* @author:dxfeng
* @createTime: 2024/08/07
* @version: 1.0
*/
public class WrittenProcess {
private String bsmc;
private String bscj;
private String bsjg;
public static final String ICON_NAME = "written.png";
public static final String TITLE = "最近笔试";
public String getBsmc() {
return bsmc;
}
public void setBsmc(String bsmc) {
this.bsmc = bsmc;
}
public String getBscj() {
return bscj;
}
public void setBscj(String bscj) {
this.bscj = bscj;
}
public String getBsjg() {
if ("0".equals(bsjg)) {
return "通过";
} else if ("1".equals(bsjg)) {
return "不通过";
}
return "待定";
}
public void setBsjg(String bsjg) {
this.bsjg = bsjg;
}
@Override
public String toString() {
if (StringUtils.isBlank(bscj) || StringUtils.isBlank(bsjg)) {
return getBsmc() + " 暂无得分结果";
}
return getBsmc() + " " + getBscj() + "" + getBsjg();
}
}

View File

@ -70,4 +70,28 @@ public interface ApplicantResumeService {
* @return
*/
Map<String, Object> checkRepeatResume(Map<String, Object> param);
/**
* 获取简历卡片信息
*
* @param param
* @return
*/
Map<String, Object> getResumeCardInfo(Map<String, Object> param);
/**
* 获取简历列表状态
*
* @param param
* @return
*/
String getResumeListStatus(Map<String, Object> param);
/**
* 更新简历列表状态
*
* @param param
* @return
*/
Map<String, Object> updateResumeListStatus(Map<String, Object> param);
}

View File

@ -3,6 +3,8 @@ package com.engine.recruit.service.impl;
import cn.hutool.core.convert.Convert;
import com.engine.core.impl.Service;
import com.engine.recruit.conn.*;
import com.engine.recruit.entity.card.*;
import com.engine.recruit.entity.card.process.*;
import com.engine.recruit.entity.record.ApplicantRecordPo;
import com.engine.recruit.entity.resume.OcrResumePo;
import com.engine.recruit.enums.ApplicantOperateEnum;
@ -12,14 +14,18 @@ import com.engine.recruit.exception.CustomizeRunTimeException;
import com.engine.recruit.service.ApplicantResumeService;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.util.IOUtils;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.file.ImageFileManager;
import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil;
import weaver.formmode.setup.ModeRightInfo;
import weaver.general.Util;
import weaver.hrm.resource.ResourceComInfo;
import java.io.InputStream;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author:dxfeng
@ -340,6 +346,339 @@ public class ApplicantResumeServiceImpl extends Service implements ApplicantResu
}
return returnMap;
}
@Override
public Map<String, Object> getResumeCardInfo(Map<String, Object> param) {
String idsString = Util.null2String(param.get("idsString"));
List<ResumeCardInfo> resumeCardInfos = new ArrayList<>();
if (StringUtils.isNotBlank(idsString)) {
String[] ids = idsString.split(",");
for (String id : ids) {
RecordSet rs = new RecordSet();
rs.executeQuery("select id, xm, jlzp, ypzw, xb, nl, zgxl, gzjy, tdsj, jlly, dqypjd from uf_jcl_yppc where id = ?", id);
RecruitDataMap<Object> map = RecruitRecordSet.getSingleRecordMap(rs);
ResumeCardInfo resumeCardInfo = new ResumeCardInfo();
// 基本信息构建
resumeCardInfo.setId(map.getInt("id"));
resumeCardInfo.setLastName(map.getString("xm"));
resumeCardInfo.setCurrentStage(map.getString("dqypjd"));
String jlzp = map.getString("jlzp");
if (StringUtils.isNotBlank(jlzp)) {
try {
int imageFieldByDocId = ApplicantCommonInfo.getImageFieldByDocId(jlzp);
ImageFileManager manager = new ImageFileManager();
manager.getImageFileInfoById(imageFieldByDocId);
InputStream inputStream = manager.getInputStream();
// 转base64
String base64 = Base64.getEncoder().encodeToString(IOUtils.toByteArray(inputStream));
resumeCardInfo.setImage("data:image/png;base64," + base64);
} catch (Exception e) {
rs.writeLog("简历头像转换失败", e);
}
}else {
resumeCardInfo.setImage("/images/recruit/applicant.png");
}
resumeCardInfo.setJobTitle(ApplicantCommonInfo.getApplicantPosition(map.getString("ypzw")));
resumeCardInfo.setSex(map.getString("xb"));
resumeCardInfo.setAge(map.getString("nl"));
resumeCardInfo.setEducation(map.getString("zgxl"));
resumeCardInfo.setWorkYear(ApplicantCommonInfo.getRecruitCommonBrowserValue(map.getString("gzjy")));
resumeCardInfo.setSubmissionTime(map.getString("tdsj"));
resumeCardInfo.setSubmissionFrom(ApplicantCommonInfo.getRecruitCommonBrowserValue(map.getString("jlly")));
// 标签构建
List<Tags> tags = new ArrayList<>();
List<Map<String, Object>> modeTabs = getModeTabs(id, rs);
if (CollectionUtils.isNotEmpty(modeTabs)) {
for (Map<String, Object> modeTab : modeTabs) {
Tags tag = new Tags();
tag.setTitle(Util.null2String(modeTab.get("tabname")));
tag.setColor(Util.null2String(modeTab.get("color")));
tag.setBgColor(Util.null2String(modeTab.get("bgcolor")));
tag.setBdColor(Util.null2String(modeTab.get("bdcolor")));
tags.add(tag);
}
}
resumeCardInfo.setTags(tags);
// 教育经历 默认取最新的一段若无则显示暂无学习经历
List<EduInfo> eduInfoList = new ArrayList<>();
rs.executeQuery("select * from uf_jcl_yppc_dt1 where mainid =? order by kssj desc", id);
RecruitDataMap<Object> eduInfoMap = RecruitRecordSet.getSingleRecordMap(rs);
if (!eduInfoMap.isEmpty()) {
EduInfo eduInfo = new EduInfo();
String kssj = eduInfoMap.getString("kssj");
String jssj = eduInfoMap.getString("jssj");
eduInfo.setStart(kssj);
eduInfo.setEnd(jssj);
eduInfo.setProfessional(eduInfoMap.getString("zy"));
eduInfo.setSchool(eduInfoMap.getString("xxmc"));
eduInfoList.add(eduInfo);
}
resumeCardInfo.setEduInfo(eduInfoList);
// 工作经历 默认取最新的两段时间倒序若无则显示暂无工作经历增加工作时间计算结束时间-开始时间显示年月
List<WorkInfo> workInfoList = new ArrayList<>();
rs.executeQuery("select * from uf_jcl_yppc_dt2 where mainid =? order by kssj desc", id);
while (rs.next() && workInfoList.size() < 2) {
WorkInfo workInfo = new WorkInfo();
workInfo.setStart(rs.getString("kssj"));
workInfo.setEnd(rs.getString("jssj"));
workInfo.setCompany(rs.getString("gsmc"));
workInfo.setJob(rs.getString("gw"));
workInfoList.add(workInfo);
}
resumeCardInfo.setWorkInfo(workInfoList);
// 招聘过程
List<RecruitProcess> recruitProcessList = new ArrayList<>();
// 若未发起反馈则不展示若有且均为待反馈的则显示待反馈反馈人若存在已反馈记录的则显示反馈结果反馈人取最新反馈的结果若存在多条则取最新的创建时间
buildScreenProcess(id, rs, recruitProcessList);
// 最近笔试若未发起则不显示若有记录但是无分数和结果的显示暂无得分结果若有结果则显示得分结果若存在多条则显示最新的数据若存在多条则取最新的笔试时间
buildWrittenProcess(id, rs, recruitProcessList);
// 最近面试若未发起则不显示若有记录但是是待面试显示面试时间待面试面试官若有结果则显示面试时间结果面试官若存在多条则显示最新的数据若存在多条则取最新的面试时间
buildInterviewProcess(id, rs, recruitProcessList);
// 最近背调若未发起则不显示若有记录但是无结果的显示暂无背调结果若有结果则显示背调日期结果若存在多条则显示最新的数据若存在多条则取最新的背调时间
buildBackProcess(id, rs, recruitProcessList);
// 最近薪酬谈判若未发起则不显示若有记录但是无结果的显示暂无薪酬谈判结果若有结果则显示谈判日期结果若存在多条则显示最新的数据若存在多条则取最新的谈判时间
buildSalaryProcess(id, rs, recruitProcessList);
// offer状态若未产生数据则不显示若有数据了则显示offer状态若反馈时间有数值则显示没数值则不现实
buildOfferProcess(id, rs, recruitProcessList);
recruitProcessList = recruitProcessList.stream().sorted(Comparator.comparing(RecruitProcess::getCreateDateTime)).collect(Collectors.toList());
resumeCardInfo.setRecruitProcess(recruitProcessList);
resumeCardInfos.add(resumeCardInfo);
}
}
Map<String, Object> returnMap = new HashMap<>();
returnMap.put("resumeCardInfos", resumeCardInfos);
return returnMap;
}
@Override
public String getResumeListStatus(Map<String, Object> param) {
int uid = user.getUID();
RecordSet rs = new RecordSet();
rs.executeQuery("select ypzlb from uf_jcl_recruit where userId = ?", uid);
String listType = "0";
if (rs.next()) {
listType = rs.getString("ypzlb");
}
return listType;
}
@Override
public Map<String, Object> updateResumeListStatus(Map<String, Object> param) {
int uid = user.getUID();
String listType = Util.null2String(param.get("listType"));
RecordSet rs = new RecordSet();
rs.executeQuery("select ypzlb from uf_jcl_recruit where userId = ?", uid);
if (rs.next()) {
rs.executeUpdate("update uf_jcl_recruit set ypzlb = ? where userId = ?", listType, uid);
} else {
rs.executeUpdate("insert into uf_jcl_recruit (ypzlb,userId) values (?,?)", listType, uid);
}
return null;
}
/**
* 若未发起反馈则不展示若有且均为待反馈的则显示待反馈反馈人若存在已反馈记录的则显示反馈结果反馈人取最新反馈的结果若存在多条则取最新的创建时间
*
* @param id
* @param rs
* @param recruitProcessList
*/
private void buildScreenProcess(String id, RecordSet rs, List<RecruitProcess> recruitProcessList) {
rs.executeQuery("select zt,fkr,jg,modedatacreatedate,modedatacreatetime from uf_jcl_bmsxfk where ypz = ? order by modedatacreatedate desc,modedatacreatetime desc", id);
if (rs.next()) {
// 状态
String zt = rs.getString("zt");
// 反馈人
String fkr = rs.getString("fkr");
// 结果
String jg = rs.getString("jg");
String date = rs.getString("modedatacreatedate");
String time = rs.getString("modedatacreatetime");
ScreenProcess screenProcess = new ScreenProcess();
screenProcess.setZt(zt);
screenProcess.setFkr(fkr);
screenProcess.setJg(jg);
RecruitProcess process = new RecruitProcess();
process.setTitle(ScreenProcess.TITLE);
process.setIcon(ScreenProcess.ICON_NAME);
process.setValue(screenProcess.toString());
process.setCreateDateTime(DateUtil.parseToDateTime(date + " " + time));
recruitProcessList.add(process);
}
}
/**
* 最近笔试若未发起则不显示若有记录但是无分数和结果的显示暂无得分结果若有结果则显示得分结果若存在多条则显示最新的数据若存在多条则取最新的笔试时间
*
* @param id
* @param rs
* @param recruitProcessList
*/
private void buildWrittenProcess(String id, RecordSet rs, List<RecruitProcess> recruitProcessList) {
rs.executeQuery("select bsmc ,bscj ,bsjg ,modedatacreatedate ,modedatacreatetime from uf_jcl_bs where ypz = ? order by bssj desc", id);
if (rs.next()) {
// 笔试名称
String bsmc = rs.getString("bsmc");
// 笔试成绩
String bscj = rs.getString("bscj");
// 笔试结果
String bsjg = rs.getString("bsjg");
String date = rs.getString("modedatacreatedate");
String time = rs.getString("modedatacreatetime");
WrittenProcess writtenProcess = new WrittenProcess();
writtenProcess.setBsmc(bsmc);
writtenProcess.setBscj(bscj);
writtenProcess.setBsjg(bsjg);
RecruitProcess process = new RecruitProcess();
process.setTitle(WrittenProcess.TITLE);
process.setIcon(WrittenProcess.ICON_NAME);
process.setValue(writtenProcess.toString());
process.setCreateDateTime(DateUtil.parseToDateTime(date + " " + time));
recruitProcessList.add(process);
}
}
/**
* 最近面试若未发起则不显示若有记录但是是待面试显示面试时间待面试面试官若有结果则显示面试时间结果面试官若存在多条则显示最新的数据若存在多条则取最新的面试时间
*
* @param id
* @param rs
* @param recruitProcessList
*/
private void buildInterviewProcess(String id, RecordSet rs, List<RecruitProcess> recruitProcessList) {
rs.executeQuery("select zt, msrq, msg, ptmsg, jg, modedatacreatedate, modedatacreatetime from uf_jcl_ms where ypz = ? order by msrq desc", id);
if (rs.next()) {
// 面试状态
String zt = rs.getString("zt");
// 面试日期
String msrq = rs.getString("msrq");
// 面试官
String msg = rs.getString("msg");
// 陪同面试官
String ptmsg = rs.getString("ptmsg");
// 结果
String jg = rs.getString("jg");
String date = rs.getString("modedatacreatedate");
String time = rs.getString("modedatacreatetime");
InterviewProcess interviewProcess = new InterviewProcess();
interviewProcess.setZt(zt);
interviewProcess.setMsrq(msrq);
interviewProcess.setMsg(msg);
interviewProcess.setPtmsg(ptmsg);
interviewProcess.setJg(jg);
RecruitProcess process = new RecruitProcess();
process.setTitle(InterviewProcess.TITLE);
process.setIcon(InterviewProcess.ICON_NAME);
process.setValue(interviewProcess.toString());
process.setCreateDateTime(DateUtil.parseToDateTime(date + " " + time));
recruitProcessList.add(process);
}
}
/**
* 最近背调若未发起则不显示若有记录但是无结果的显示暂无背调结果若有结果则显示背调日期结果若存在多条则显示最新的数据若存在多条则取最新的背调时间
*
* @param id
* @param rs
* @param recruitProcessList
*/
private void buildBackProcess(String id, RecordSet rs, List<RecruitProcess> recruitProcessList) {
rs.executeQuery("select dcrq, dcjg, modedatacreatedate, modedatacreatetime from uf_jcl_bd where ypz = ? order by dcrq desc", id);
if (rs.next()) {
// 调查日期
String dcrq = rs.getString("dcrq");
// 调查结果
String dcjg = rs.getString("dcjg");
String date = rs.getString("modedatacreatedate");
String time = rs.getString("modedatacreatetime");
BackProcess backProcess = new BackProcess();
backProcess.setDcjg(dcjg);
backProcess.setDcrq(dcrq);
RecruitProcess process = new RecruitProcess();
process.setTitle(BackProcess.TITLE);
process.setIcon(BackProcess.ICON_NAME);
process.setValue(backProcess.toString());
process.setCreateDateTime(DateUtil.parseToDateTime(date + " " + time));
recruitProcessList.add(process);
}
}
/**
* 最近薪酬谈判若未发起则不显示若有记录但是无结果的显示暂无薪酬谈判结果若有结果则显示谈判日期结果若存在多条则显示最新的数据若存在多条则取最新的谈判时间
*
* @param id
* @param rs
* @param recruitProcessList
*/
private void buildSalaryProcess(String id, RecordSet rs, List<RecruitProcess> recruitProcessList) {
rs.executeQuery("select tpsj, tpjg, modedatacreatedate, modedatacreatetime from uf_jcl_xctp where ypz = ? order by tpsj desc", id);
if (rs.next()) {
// 谈判时间
String tpsj = rs.getString("tpsj");
// 谈判结果
String tpjg = rs.getString("tpjg");
String date = rs.getString("modedatacreatedate");
String time = rs.getString("modedatacreatetime");
SalaryProcess salaryProcess = new SalaryProcess();
salaryProcess.setTpjg(tpjg);
salaryProcess.setTpsj(tpsj);
RecruitProcess process = new RecruitProcess();
process.setTitle(SalaryProcess.TITLE);
process.setIcon(SalaryProcess.ICON_NAME);
process.setValue(salaryProcess.toString());
process.setCreateDateTime(DateUtil.parseToDateTime(date + " " + time));
recruitProcessList.add(process);
}
}
/**
* offer状态若未产生数据则不显示若有数据了则显示offer状态若反馈时间有数值则显示没数值则不现实
*
* @param id
* @param rs
* @param recruitProcessList
*/
private void buildOfferProcess(String id, RecordSet rs, List<RecruitProcess> recruitProcessList) {
rs.executeQuery("select zt, fksj, modedatacreatedate, modedatacreatetime from uf_jcl_offer where xm = ? order by modedatacreatedate desc,modedatacreatetime desc", id);
if (rs.next()) {
// offer状态
String zt = rs.getString("zt");
// 反馈时间
String fksj = rs.getString("fksj");
String date = rs.getString("modedatacreatedate");
String time = rs.getString("modedatacreatetime");
OfferProcess offerProcess = new OfferProcess();
offerProcess.setFksj(fksj);
offerProcess.setZt(zt);
RecruitProcess process = new RecruitProcess();
process.setTitle(OfferProcess.TITLE);
process.setIcon(OfferProcess.ICON_NAME);
process.setValue(offerProcess.toString());
process.setCreateDateTime(DateUtil.parseToDateTime(date + " " + time));
recruitProcessList.add(process);
}
}
/**
* 构建普通数据格式
@ -667,4 +1006,24 @@ public class ApplicantResumeServiceImpl extends Service implements ApplicantResu
insertMap.put("zt", zt);
return insertMap;
}
/**
* 获取标签信息
*
* @param applicantId
* @return
*/
private static List<Map<String, Object>> getModeTabs(String applicantId, RecordSet rs) {
int applicantModeId = ApplicantCommonInfo.getModeIdByTableName("uf_jcl_yppc");
rs.executeQuery(" select modelableid from uf_jcl_yppc where id = ?", applicantId);
String modelableid = "";
if (rs.next()) {
modelableid = rs.getString("modelableid");
}
if (StringUtils.isNotBlank(modelableid)) {
rs.executeQuery("select a.tabname , a.color , a.bgcolor , a.bdcolor , a.type , a.creator , a.orderid from modeTabs_" + applicantModeId + " a where a.id in (" + modelableid + ")");
return RecruitRecordSet.getRecordMapList(rs);
}
return new ArrayList<>();
}
}

View File

@ -45,4 +45,16 @@ public class ApplicantResumeWrapper extends Service {
public Map<String, Object> checkRepeatResume(Map<String, Object> params) {
return getApplicantResumeService(user).checkRepeatResume(params);
}
public Map<String, Object> getResumeCardInfo(Map<String, Object> params) {
return getApplicantResumeService(user).getResumeCardInfo(params);
}
public String getResumeListStatus(Map<String, Object> params) {
return getApplicantResumeService(user).getResumeListStatus(params);
}
public Map<String, Object> updateResumeListStatus(Map<String, Object> params) {
return getApplicantResumeService(user).updateResumeListStatus(params);
}
}