Merge remote-tracking branch 'origin/develop' into ml

This commit is contained in:
Mlin 2023-10-23 15:32:09 +08:00
commit 0761b70c80
23 changed files with 700 additions and 14 deletions

View File

@ -1,5 +1,7 @@
#\u805A\u624D\u6797\u62DB\u8058\u6D88\u606F\u63D0\u9192\uFF0C\u6D88\u606F\u6765\u6E90
RECRUIT_MESSAGE_TYPE=2022061063
#\u9762\u8BD5\u76F8\u5173\u6D88\u606F\u63D0\u9192\uFF0C\u6D88\u606F\u6765\u6E90
INTERVIEW_MESSAGE_TYPE=2022061063
#\u6DFB\u52A0\u9762\u8BD5\u6D88\u606F\u63D0\u9192\u6807\u9898
@ -8,8 +10,15 @@ INTERVIEW_ADD_MESSAGE_TITLE=\u9762\u8BD5\u5B89\u6392\u63D0\u9192
INTERVIEW_CANCEL_MESSAGE_TITLE=\u53D6\u6D88\u9762\u8BD5\u63D0\u9192
#\u9762\u8BD5\u8BC4\u4EF7\u6D88\u606F\u63D0\u9192\u6807\u9898
INTERVIEW_EVALUATE_MESSAGE_TITLE=\u9762\u8BD5\u8BC4\u4EF7\u63D0\u9192
#\u4EBA\u624D\u9ED1\u540D\u5355\u901A\u77E5
JOIN_BLACKLIST_MESSAGE_TITLE=\u4EBA\u624D\u9ED1\u540D\u5355\u901A\u77E5
#\u7B5B\u9009\u53CD\u9988
SCREENING_MESSAGE_TYPE=2022061063
SCREENING_MESSAGE_TITLE=\u7B80\u5386\u7B5B\u9009
SCREENING_MESSAGE_URL=/wui/index.html#/main/cube/search?customid=65
#\u5E94\u8058\u8005\u7B80\u5386\u5B58\u653E\u76EE\u5F55ID
APPLICANTS_RESUMES_CATEGORY=110

View File

@ -0,0 +1,12 @@
package com.api.recruit.controller;
import javax.ws.rs.Path;
/**
* @author:dxfeng
* @createTime: 2023/10/20
* @version: 1.0
*/
@Path("/jcl/recruit/talentpool")
public class TalentPoolController extends com.engine.recruit.controller.TalentPoolController{
}

View File

@ -0,0 +1,13 @@
package com.api.recruit.controller;
import javax.ws.rs.Path;
/**
* @Author liang.cheng
* @Date 2023/10/18 4:31 PM
* @Description: 招聘工作台
* @Version 1.0
*/
@Path("/jcl/recruit/workbench")
public class WorkBenchPortalController extends com.engine.recruit.controller.WorkBenchPortalController {
}

View File

@ -0,0 +1,37 @@
package com.engine.recruit.controller;
import com.engine.common.util.ParamUtil;
import com.engine.common.util.ServiceUtil;
import com.engine.recruit.util.ResponseResult;
import com.engine.recruit.wrapper.TalentPoolWrapper;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import java.util.Map;
/**
* @author:dxfeng
* @createTime: 2023/10/20
* @version: 1.0
*/
public class TalentPoolController {
public TalentPoolWrapper getTalentPoolWrapper(User user) {
return ServiceUtil.getService(TalentPoolWrapper.class, user);
}
@POST
@Path("/removeBlacklist")
@Produces(MediaType.APPLICATION_JSON)
public String removeBlacklist(@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(getTalentPoolWrapper(user)::removeBlacklist, param);
}
}

View File

@ -0,0 +1,75 @@
package com.engine.recruit.controller;
import com.engine.common.util.ServiceUtil;
import com.engine.recruit.entity.workbench.OptionVO;
import com.engine.recruit.entity.workbench.RecruitPortalCommonVO;
import com.engine.recruit.service.WorkBenchPortalService;
import com.engine.recruit.service.impl.WorkBenchPortalServiceImpl;
import com.engine.recruit.util.ResponseResult;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import java.util.List;
/**
* @Author liang.cheng
* @Date 2023/10/18 4:34 PM
* @Description: TODO
* @Version 1.0
*/
public class WorkBenchPortalController {
public WorkBenchPortalService getWorkBenchPortal(User user) {
return ServiceUtil.getService(WorkBenchPortalServiceImpl.class, user);
}
@GET
@Path("/top")
@Produces(MediaType.APPLICATION_JSON)
public String getRecruitPortalTop(@Context HttpServletRequest request, @Context HttpServletResponse response) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String, List<RecruitPortalCommonVO>>(user).run(getWorkBenchPortal(user) :: getRecruitPortalTop);
}
@GET
@Path("/jobTenure")
@Produces(MediaType.APPLICATION_JSON)
public String getJobTenure(@Context HttpServletRequest request, @Context HttpServletResponse response) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String, OptionVO>(user).run(getWorkBenchPortal(user) :: getJobTenure);
}
@GET
@Path("/waitStepPerson")
@Produces(MediaType.APPLICATION_JSON)
public String getWaitStepPerson(@Context HttpServletRequest request, @Context HttpServletResponse response) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String, OptionVO>(user).run(getWorkBenchPortal(user) :: getWaitStepPerson);
}
@GET
@Path("/recruitTransform")
@Produces(MediaType.APPLICATION_JSON)
public String getRecruitTransform(@Context HttpServletRequest request, @Context HttpServletResponse response) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String, OptionVO>(user).run(getWorkBenchPortal(user) :: getRecruitTransform);
}
@GET
@Path("/peopleFrom")
@Produces(MediaType.APPLICATION_JSON)
public String getPeopleFrom(@Context HttpServletRequest request, @Context HttpServletResponse response) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String, OptionVO>(user).run(getWorkBenchPortal(user) :: getPeopleFrom);
}
}

View File

@ -25,7 +25,7 @@ import javax.ws.rs.core.MediaType;
*/
public class WorkPlanController {
public WorkPlanSerivice getRecruitPositionWrapper(User user) {
public WorkPlanSerivice getWorkPlan(User user) {
return ServiceUtil.getService(WorkPlanServiceImpl.class, user);
}
@ -34,7 +34,7 @@ public class WorkPlanController {
@Produces(MediaType.APPLICATION_JSON)
public String operateWorkPlan(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody WorkPlanCreateParams workPlanCreateParams) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<WorkPlanCreateParams, String>(user).run(getRecruitPositionWrapper(user)::operate, workPlanCreateParams);
return new ResponseResult<WorkPlanCreateParams, String>(user).run(getWorkPlan(user)::operate, workPlanCreateParams);
}

View File

@ -0,0 +1,32 @@
package com.engine.recruit.entity.workbench;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.LinkedList;
import java.util.List;
/**
* @Author liang.cheng
* @Date 2023/10/19 3:03 PM
* @Description: TODO
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class OptionVO {
private String text;
private List<String> xData;
private List<Integer> barSeriesData;
private LinkedList<SeriesParam> seriesData;
}

View File

@ -0,0 +1,24 @@
package com.engine.recruit.entity.workbench;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author liang.cheng
* @Date 2023/10/19 11:39 AM
* @Description: TODO
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class RecruitInterviewPO {
private String ids;
private String interviewDate;
}

View File

@ -0,0 +1,30 @@
package com.engine.recruit.entity.workbench;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author liang.cheng
* @Date 2023/10/19 10:31 AM
* @Description: TODO
* @Version 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class RecruitPortalCommonVO {
private Integer id;
private String title;
private Integer count;
private String icon;
}

View File

@ -0,0 +1,28 @@
package com.engine.recruit.entity.workbench;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author liang.cheng
* @Date 2023/9/28 2:02 PM
* @Description: TODO
* @Version 1.0
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class SeriesParam {
private Double value;
private String name;
private String color;
}

View File

@ -0,0 +1,19 @@
package com.engine.recruit.service;
import java.util.Map;
/**
* @author:dxfeng
* @createTime: 2023/10/20
* @version: 1.0
*/
public interface TalentPoolService {
/**
* 移出黑名单
*
* @param param
* @return
*/
Map<String, Object> removeBlacklist(Map<String, Object> param);
}

View File

@ -0,0 +1,61 @@
package com.engine.recruit.service;
import com.engine.recruit.entity.workbench.OptionVO;
import com.engine.recruit.entity.workbench.RecruitPortalCommonVO;
import java.util.List;
/**
* @Author liang.cheng
* @Date 2023/10/18 4:43 PM
* @Description:
* @Version 1.0
*/
public interface WorkBenchPortalService {
/**
* @Description: 顶部元素
* @Author: liang.cheng
* @Date: 2023/10/19 10:47 AM
* @param: []
* @return: com.engine.recruit.entity.workbench.RecruitPortalCommonVO
*/
List<RecruitPortalCommonVO> getRecruitPortalTop();
/**
* @Description: 职位年限要求分布
* @Author: liang.cheng
* @Date: 2023/10/19 3:15 PM
* @param: []
* @return: com.engine.recruit.entity.workbench.OptionVO
*/
OptionVO getJobTenure();
/**
* @Description: 候选中应聘者各阶段数
* @Author: liang.cheng
* @Date: 2023/10/20 9:35 AM
* @param: []
* @return: com.engine.recruit.entity.workbench.OptionVO
*/
OptionVO getWaitStepPerson();
/**
* @Description: 招聘转化
* @Author: liang.cheng
* @Date: 2023/10/20 10:04 AM
* @param: []
* @return: com.engine.recruit.entity.workbench.OptionVO
*/
OptionVO getRecruitTransform();
/**
* @Description: 人才来源
* @Author: liang.cheng
* @Date: 2023/10/20 11:07 AM
* @param: []
* @return: com.engine.recruit.entity.workbench.OptionVO
*/
OptionVO getPeopleFrom();
}

View File

@ -0,0 +1,28 @@
package com.engine.recruit.service.impl;
import com.engine.core.impl.Service;
import com.engine.recruit.exception.CustomizeRunTimeException;
import com.engine.recruit.service.TalentPoolService;
import org.apache.commons.lang3.StringUtils;
import weaver.conn.RecordSet;
import weaver.general.Util;
import java.util.Map;
/**
* @author:dxfeng
* @createTime: 2023/10/20
* @version: 1.0
*/
public class TalentPoolServiceImpl extends Service implements TalentPoolService {
@Override
public Map<String, Object> removeBlacklist(Map<String, Object> param) {
String ids = Util.null2String(param.get("ids"));
if (StringUtils.isBlank(ids)) {
throw new CustomizeRunTimeException("");
}
RecordSet rs = new RecordSet();
rs.executeUpdate("update uf_jcl_rck set sfjrhmd = 1 where id in (" + ids + ")");
return null;
}
}

View File

@ -0,0 +1,224 @@
package com.engine.recruit.service.impl;
import com.engine.core.impl.Service;
import com.engine.recruit.entity.workbench.OptionVO;
import com.engine.recruit.entity.workbench.RecruitInterviewPO;
import com.engine.recruit.entity.workbench.RecruitPortalCommonVO;
import com.engine.recruit.entity.workbench.SeriesParam;
import weaver.conn.RecordSet;
import weaver.general.Util;
import java.text.DecimalFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Author liang.cheng
* @Date 2023/10/18 4:44 PM
* @Description: TODO
* @Version 1.0
*/
public class WorkBenchPortalServiceImpl extends Service implements com.engine.recruit.service.WorkBenchPortalService {
private final DecimalFormat df = new DecimalFormat("#.00");
@Override
public List<RecruitPortalCommonVO> getRecruitPortalTop() {
RecordSet rs = new RecordSet();
List<RecruitPortalCommonVO> recruitList = new ArrayList<>();
List<String> list = new ArrayList<>();
rs.executeQuery("select b.zpzwfzr,b.zpxzr from uf_jcl_yppc a left join uf_jcl_zp_zpzw b on a.ypzw = b.id\n" +
"where a.zt = 1");
while (rs.next()) {
String zpzwfzr = Util.null2String(rs.getString("zpzwfzr"));
String zpxzr = Util.null2String(rs.getString("zpxzr"));
list.add(mergeStrings(zpzwfzr, zpxzr));
}
String uId = String.valueOf(user.getUID());
List<String> filteredList = list.stream()
.filter(s -> s.contains(uId))
.collect(Collectors.toList());
recruitList.add(RecruitPortalCommonVO.builder().title("待处理简历").count(filteredList.size()).icon("${appRes}/1.png").build());
recruitList.add(selectRecruitInterview("select msg,ptmsg,msrq from uf_jcl_ms", "今日面试", "${appRes}/2.png", uId));
recruitList.add(selectRecruitInterview("select msg,ptmsg,msrq from uf_jcl_ms where zt = 0", "待评价面试", "${appRes}/3.png", uId));
recruitList.add(selectOffer("select b.zpzwfzr,b.zpxzr from uf_jcl_offer a left join uf_jcl_zp_zpzw b on a.ypzw = b.id where a.zt = 0",
"待发offer", "${appRes}/4.png", uId));
recruitList.add(selectOffer("select b.zpzwfzr,b.zpxzr from uf_jcl_offer a left join uf_jcl_zp_zpzw b on a.ypzw = b.id where a.zt = 1",
"待反馈offer", "${appRes}/5.png", uId));
recruitList.add(RecruitPortalCommonVO.builder().title("待入职").count(waitHired()).icon("${appRes}/6.png").build());
return recruitList;
}
@Override
public OptionVO getJobTenure() {
RecordSet rs = new RecordSet();
List<RecruitPortalCommonVO> list = new ArrayList<>();
rs.executeQuery("select id,xxnr from uf_sjzd where zdlxmc = 9");
while (rs.next()) {
list.add(RecruitPortalCommonVO.builder().id(Util.getIntValue(rs.getString("id)"))).title(Util.null2String(rs.getString("xxnr"))).count(0).build());
}
List<RecruitPortalCommonVO> list1 = new ArrayList<>();
rs.executeQuery("select gznx,count(1) as sum from uf_jcl_zp_zpzw group by gznx;");
while (rs.next()) {
list1.add(RecruitPortalCommonVO.builder().id(Util.getIntValue(rs.getString("gznx)"))).count(Util.getIntValue(rs.getString("sum"))).build());
}
for (RecruitPortalCommonVO item1 : list) {
for (RecruitPortalCommonVO item2 : list1) {
if (item1.getId().equals(item2.getId())) {
item1.setCount(item2.getCount());
break;
}
}
}
List<String> xData = list.stream()
.map(RecruitPortalCommonVO::getTitle)
.collect(Collectors.toList());
List<Integer> barSeriesData = list.stream()
.map(RecruitPortalCommonVO::getCount)
.collect(Collectors.toList());
return OptionVO.builder()
.text("职位年限要求分布")
.xData(xData)
.barSeriesData(barSeriesData)
.build();
}
@Override
public OptionVO getWaitStepPerson() {
RecordSet rs = new RecordSet();
rs.executeQuery("select a.xxnr,b.sum from uf_sjzd a \n" +
"left join (select gznx,count(1) as sum from uf_jcl_zp_zpzw group by gznx) b \n" +
"on a.id = b.gznx where a.zdlxmc = 9");
List<String> xData = new ArrayList<>();
List<Integer> barSeriesData = new ArrayList<>();
while (rs.next()) {
xData.add(Util.null2String(rs.getString("xxnr")));
barSeriesData.add(Util.getIntValue(rs.getString("sum")),0);
}
return OptionVO.builder()
.text("候选中应聘者各阶段数")
.xData(xData)
.barSeriesData(barSeriesData)
.build();
}
@Override
public OptionVO getRecruitTransform() {
List<String> colorList = Arrays.asList("#6e94f3","#faf0e6","#7cfc00","#ao20f0","#00ced1","#83d8ae","#697695","#8ac9e9","#9933fa","#c0ff3e","#ffe4c4","#cd6090");
RecordSet rs = new RecordSet();
rs.executeQuery("select a.xxnr,b.sum from uf_sjzd a \n" +
"left join (select gznx,count(1) as sum from uf_jcl_zp_zpzw group by gznx) b \n" +
"on a.id = b.gznx where a.zdlxmc = 9");
LinkedList<SeriesParam> seriesData = new LinkedList<>();
while (rs.next()) {
String name = Util.null2String(rs.getString("xxnr"));
double value = Util.getDoubleValue(rs.getString("sum"), 0);
Random r = new Random();
seriesData.add(SeriesParam.builder().value(value).name(name).color(colorList.get(r.nextInt(colorList.size()))).build());
}
return OptionVO.builder()
.text("招聘转化")
.seriesData(seriesData)
.build();
}
@Override
public OptionVO getPeopleFrom() {
List<String> colorList = Arrays.asList("#6e94f3","#faf0e6","#7cfc00","#ao20f0","#00ced1","#83d8ae","#697695","#8ac9e9","#9933fa","#c0ff3e","#ffe4c4","#cd6090");
RecordSet rs = new RecordSet();
rs.executeQuery("select a.xxnr,b.sum from uf_sjzd a \n" +
"left join (select jlly,count(1) as sum from uf_jcl_yppc group by jlly) b \n" +
"on a.id = b.jlly where a.zdlxmc = 2");
LinkedList<SeriesParam> seriesData = new LinkedList<>();
while (rs.next()) {
Random r = new Random();
String name = Util.null2String(rs.getString("xxnr"));
double value = Util.getDoubleValue(rs.getString("sum"), 0);
seriesData.add(SeriesParam.builder().value(value).name(name).color(colorList.get(r.nextInt(colorList.size()))).build());
}
List<Double> values = seriesData.stream().map(SeriesParam:: getValue).collect(Collectors.toList());
double percentage = values.stream().mapToDouble(Double::doubleValue).sum();
seriesData.forEach(item -> item.setValue(Double.valueOf(df.format((item.getValue() * 100) / percentage))));
return OptionVO.builder()
.text("人才来源")
.seriesData(seriesData)
.build();
}
private Integer waitHired() {
RecordSet rs = new RecordSet();
rs.executeQuery("select count(1) as sum from uf_jcl_rzgl where rzzt = 0");
rs.next();
return Util.getIntValue(rs.getString("sum"));
}
private RecruitPortalCommonVO selectOffer(String sql, String title, String icon, String uId) {
RecordSet rs = new RecordSet();
List<String> list = new ArrayList<>();
rs.executeQuery(sql);
while (rs.next()) {
String zpzwfzr = Util.null2String(rs.getString("zpzwfzr"));
String zpxzr = Util.null2String(rs.getString("zpxzr"));
list.add(mergeStrings(zpzwfzr, zpxzr));
}
List<String> filteredList = list.stream()
.filter(s -> s.contains(uId))
.collect(Collectors.toList());
return RecruitPortalCommonVO.builder().title(title).count(filteredList.size()).icon(icon).build();
}
private RecruitPortalCommonVO selectRecruitInterview(String sql, String title, String icon, String uId) {
RecordSet rs = new RecordSet();
List<RecruitInterviewPO> recruitInterview = new ArrayList<>();
rs.executeQuery(sql);
while (rs.next()) {
String msg = Util.null2String(rs.getString("msg"));
String ptmsg = Util.null2String(rs.getString("ptmsg"));
String msrq = Util.null2String(rs.getString("msrq")).substring(0,9);
recruitInterview.add(RecruitInterviewPO.builder().ids(mergeStrings(msg, ptmsg)).interviewDate(msrq).build());
}
LocalDate currentDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String dateString = currentDate.format(formatter);
List<RecruitInterviewPO> filterInterview = recruitInterview.stream()
.filter(s -> s.getIds().contains(uId))
.filter(s -> dateString.equals(s.getInterviewDate()))
.collect(Collectors.toList());
return RecruitPortalCommonVO.builder().title(title).count(filterInterview.size()).icon(icon).build();
}
private String mergeStrings(String string1, String string2) {
boolean isString1Empty = string1.isEmpty();
boolean isString2Empty = string2.isEmpty();
if (isString1Empty && isString2Empty) {
return "";
} else if (isString1Empty) {
return string2;
} else if (isString2Empty) {
return string1;
} else {
return string1 + "," + string2;
}
}
}

View File

@ -7,7 +7,6 @@ import com.engine.recruit.enums.InterviewOperateTypeEnum;
import com.engine.recruit.service.WorkPlanSerivice;
import com.engine.workplan.service.WorkPlanBaseService;
import com.engine.workplan.service.impl.WorkPlanBaseServiceImpl;
import com.icbc.api.internal.apache.http.impl.cookie.S;
import weaver.conn.RecordSet;
import weaver.hrm.User;
@ -51,7 +50,7 @@ public class WorkPlanServiceImpl extends Service implements WorkPlanSerivice {
maps.put("beginDateTime",workPlanCreateParams.getBeginDateTime());
maps.put("endDateTime",workPlanCreateParams.getEndDateTime());
maps.put("isEnableSecondAuth","0");
maps.put("from","workplan");
//maps.put("from","workplan");
}
@ -74,8 +73,7 @@ public class WorkPlanServiceImpl extends Service implements WorkPlanSerivice {
// 调整面试
}else if (InterviewOperateTypeEnum.ADJUSTMENT.getOperateType().equals(operateType)){
maps.put("workid",workPlanCreateParams.getWorkId());
Map<String, Object> result = getService(user).addWorkPlan(maps);
Integer workplanId = (Integer)result.get("workplanid");
getService(user).addWorkPlan(maps);
// 安排面试
}else if (InterviewOperateTypeEnum.ARRANGE.getOperateType().equals(operateType)) {
Map<String, Object> result = getService(user).addWorkPlan(maps);

View File

@ -0,0 +1,24 @@
package com.engine.recruit.wrapper;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.recruit.service.TalentPoolService;
import com.engine.recruit.service.impl.TalentPoolServiceImpl;
import weaver.hrm.User;
import java.util.Map;
/**
* @author:dxfeng
* @createTime: 2023/10/20
* @version: 1.0
*/
public class TalentPoolWrapper extends Service {
private TalentPoolService getTalentPoolService(User user) {
return ServiceUtil.getService(TalentPoolServiceImpl.class, user);
}
public Map<String, Object> removeBlacklist(Map<String, Object> param) {
return getTalentPoolService(user).removeBlacklist(param);
}
}

View File

@ -0,0 +1,32 @@
package weaver.formmode.recruit.modeexpand;
import com.engine.common.util.ServiceUtil;
import com.engine.recruit.service.WorkPlanSerivice;
import com.engine.recruit.service.impl.WorkPlanServiceImpl;
import weaver.formmode.customjavacode.AbstractModeExpandJavaCodeNew;
import weaver.hrm.User;
import java.util.Map;
/**
* @Author liang.cheng
* @Date 2023/10/18 11:18 AM
* @Description: 保存并新建触发日程
* @Version 1.0
*/
public class CreateWorkPlanModeExpand extends AbstractModeExpandJavaCodeNew {
public WorkPlanSerivice getWorkPlan(User user) {
return ServiceUtil.getService(WorkPlanServiceImpl.class, user);
}
@Override
public Map<String, String> doModeExpand(Map<String, Object> map) {
return null;
}
}

View File

@ -5,6 +5,8 @@ import org.apache.commons.lang3.StringUtils;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.formmode.customjavacode.AbstractModeExpandJavaCodeNew;
import weaver.formmode.recruit.modeexpand.util.ApplicantCommonInfo;
import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil;
import weaver.formmode.setup.ModeRightInfo;
import weaver.general.BaseBean;
import weaver.general.Util;
@ -75,6 +77,8 @@ public class BatchAddDeptScreeningModeExpand extends AbstractModeExpandJavaCodeN
detailMapList.add(detailDataMap);
}
StringBuilder msgBuilder = new StringBuilder();
msgBuilder.append(user.getLastname()).append("给你发来简历进行筛选,请查看。<br/>");
for (Map<String, Object> detailDataMap : detailMapList) {
List<List<Object>> paramList = new ArrayList<>();
buildParamList(detailDataMap, paramList);
@ -87,7 +91,18 @@ public class BatchAddDeptScreeningModeExpand extends AbstractModeExpandJavaCodeN
refreshRight(rs, uuid, formModeId);
}
}
String applicantName = ApplicantCommonInfo.getApplicantName(Util.null2String(detailDataMap.get("ypz")));
String applicantPosition = ApplicantCommonInfo.getApplicantPosition(Util.null2String(detailDataMap.get("ypzw")));
msgBuilder.append("【应聘者:").append(applicantName).append(",应聘职位:").append(applicantPosition).append("").append("<br/>");
}
// 发送待办消息
String messageType = RecruitModeUtil.getRecruitPropValue("SCREENING_MESSAGE_TYPE");
String messageTitle = RecruitModeUtil.getRecruitPropValue("SCREENING_MESSAGE_TITLE");
String linkUrl = RecruitModeUtil.getRecruitPropValue("SCREENING_MESSAGE_URL");
String fkr = Util.null2String(mainDataMap.get("fkr"));
Set<String> userIdSet = new HashSet<>(Arrays.asList(fkr.split(",")));
RecruitModeUtil.messagePush(messageType, messageTitle, msgBuilder.toString(), userIdSet, user.getUID(), linkUrl, "");
}
} catch (Exception e) {
new BaseBean().writeLog(e);

View File

@ -5,6 +5,8 @@ import org.apache.commons.lang3.StringUtils;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.formmode.customjavacode.AbstractModeExpandJavaCodeNew;
import weaver.formmode.recruit.modeexpand.util.ApplicantCommonInfo;
import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil;
import weaver.formmode.setup.ModeRightInfo;
import weaver.general.BaseBean;
import weaver.general.Util;
@ -76,6 +78,18 @@ public class SingleAddDeptScreeningModeExpand extends AbstractModeExpandJavaCode
refreshRight(rs, uuid, formModeId);
}
}
// 发送待办消息
String messageType = RecruitModeUtil.getRecruitPropValue("SCREENING_MESSAGE_TYPE");
String messageTitle = RecruitModeUtil.getRecruitPropValue("SCREENING_MESSAGE_TITLE");
String linkUrl = RecruitModeUtil.getRecruitPropValue("SCREENING_MESSAGE_URL");
String fkr = Util.null2String(dataMap.get("fkr"));
String applicantName = ApplicantCommonInfo.getApplicantName(Util.null2String(param.get("ypz")));
String applicantPosition = ApplicantCommonInfo.getApplicantPosition(Util.null2String(param.get("ypzw")));
String messageContent = user.getLastname() + "给你发来简历进行筛选,请查看。<br/>" +
"【应聘者:" + applicantName + ",应聘职位:" + applicantPosition + "";
Set<String> userIdSet = new HashSet<>(Arrays.asList(fkr.split(",")));
RecruitModeUtil.messagePush(messageType, messageTitle, messageContent, userIdSet, user.getUID(), linkUrl, "");
}
} catch (Exception e) {
new BaseBean().writeLog(e);

View File

@ -12,7 +12,6 @@ import weaver.general.Util;
import weaver.hrm.User;
import weaver.soa.workflow.request.*;
import java.io.UnsupportedEncodingException;
import java.util.*;
/**
@ -36,9 +35,9 @@ public class BatchAddInterviewResultModeExpand extends AbstractModeExpandJavaCod
*/
private final String title;
public BatchAddInterviewResultModeExpand() throws UnsupportedEncodingException {
public BatchAddInterviewResultModeExpand() {
super();
messageType = RecruitModeUtil.getRecruitPropValue("RECRUIT_MESSAGE_TYPE");
messageType = RecruitModeUtil.getRecruitPropValue("INTERVIEW_MESSAGE_TYPE");
title = RecruitModeUtil.getRecruitPropValue("INTERVIEW_ADD_MESSAGE_TITLE");
}
@ -188,7 +187,6 @@ public class BatchAddInterviewResultModeExpand extends AbstractModeExpandJavaCod
}
/**
* 获取应聘者信息
*

View File

@ -65,7 +65,7 @@ public class CreateInterviewModeExpand extends AbstractModeExpandJavaCodeNew {
InterviewOperateTypeEnum operateTypeEnum = InterviewOperateTypeEnum.getOperateType(operateType);
switch (operateTypeEnum) {
case ARRANGE:
messageType = RecruitModeUtil.getRecruitPropValue("RECRUIT_MESSAGE_TYPE");
messageType = RecruitModeUtil.getRecruitPropValue("INTERVIEW_MESSAGE_TYPE");
title = RecruitModeUtil.getRecruitPropValue("INTERVIEW_ADD_MESSAGE_TITLE");
arrangeInterview(user, mainDataMap);
sendMessage(billId);

View File

@ -63,13 +63,13 @@ public class UpdateInterviewModeExpand extends AbstractModeExpandJavaCodeNew {
switch (operateTypeEnum) {
case EVALUATE:
// 面试评价
messageType = RecruitModeUtil.getRecruitPropValue("RECRUIT_MESSAGE_TYPE");
messageType = RecruitModeUtil.getRecruitPropValue("INTERVIEW_MESSAGE_TYPE");
title = RecruitModeUtil.getRecruitPropValue("INTERVIEW_EVALUATE_MESSAGE_TITLE");
evaluateInterview(params, requestInfo.getCreatorid(), mainDataMap);
break;
case CANCEL:
// 面试取消
messageType = RecruitModeUtil.getRecruitPropValue("RECRUIT_MESSAGE_TYPE");
messageType = RecruitModeUtil.getRecruitPropValue("INTERVIEW_MESSAGE_TYPE");
title = RecruitModeUtil.getRecruitPropValue("INTERVIEW_CANCEL_MESSAGE_TITLE");
cancelInterView(params, requestInfo, billId, mainDataMap);
break;

View File

@ -38,9 +38,22 @@ public class RecruitModeUtil {
* @param creater 消息创建者
*/
public static void messagePush(String messageType, String title, String context, Set<String> userIdList, Integer creater) {
messagePush(messageType, title, context, userIdList, creater, "", "");
}
/**
* @param messageType 消息来源
* @param title 消息标题
* @param context 消息内容
* @param userIdList 接收人ID集合
* @param creater 消息创建者
* @param linkUrl 待办跳转地址
* @param linkMobileUrl 移动端跳转地址
*/
public static void messagePush(String messageType, String title, String context, Set<String> userIdList, Integer creater, String linkUrl, String linkMobileUrl) {
MessageType message = MessageType.newInstance(Integer.parseInt(messageType));
try {
MessageBean messageBean = Util_Message.createMessage(message, userIdList, title, context, "", "");
MessageBean messageBean = Util_Message.createMessage(message, userIdList, title, context, linkUrl, linkMobileUrl);
messageBean.setCreater(creater);
Util_Message.store(messageBean);
} catch (IOException e) {