package com.engine.recruit.conn; import com.engine.common.service.HrmCommonService; import com.engine.common.service.impl.HrmCommonServiceImpl; import com.engine.recruit.constant.RecruitConstant; import com.engine.recruit.entity.message.PositionField; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import weaver.conn.RecordSet; import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil; import weaver.hrm.User; import java.util.*; import java.util.stream.Collectors; /** * @author:dxfeng * @createTime: 2024/10/16 * @version: 1.0 */ public class StepMsgCommonInfo { /** * 获取提醒人员 * * @param applicantId 候选人ID * @param positionId 职位ID * @param flowId 流程ID * @param stepId 当前阶段ID * @param user 当前操作人 */ public static void sendMsg(String applicantId, String positionId, String flowId, String stepId, User user) { RecordSet rs = new RecordSet(); List ids = new ArrayList<>(); boolean useFlowTips = true; String stepName = ""; if (StringUtils.isNotBlank(stepId)) { rs.executeQuery("select id,jdmc,hj from uf_jcl_zpjdsz where sfqy = 0 and id = ? ", stepId); } else { rs.executeQuery("select id,jdmc,hj from uf_jcl_zpjdsz where sfqy = 0 and zplc = ? and hj = 0", flowId); } if (rs.next()) { stepId = rs.getString("id"); stepName = rs.getString("jdmc"); } // 判断该职位是否设置提醒人员 rs.executeQuery("select * from uf_jcl_jdtx where zpzw = ?", positionId); while (rs.next()) { useFlowTips = false; String zpjd = rs.getString("zpjd"); if (StringUtils.isNotBlank(zpjd)) { List strings = Arrays.asList(zpjd.split(",")); if (strings.contains(stepId)) { ids.add(rs.getString("id")); } } } if (useFlowTips) { // 判断是否启用全部配置,未启用直接跳过 String stepReminder = ""; rs.executeQuery("select value from uf_jcl_recruit_setting where name = ?", "ENABLE_STEP_MSG"); if (rs.next()) { stepReminder = rs.getString("value"); } if ("true".equals(stepReminder)) { // 查询当前流程的配置 rs.executeQuery("select * from uf_jcl_jdtx where zpzw is null and zplc = ?", flowId); while (rs.next()) { String zpjd = rs.getString("zpjd"); if (StringUtils.isNotBlank(zpjd)) { List strings = Arrays.asList(zpjd.split(",")); if (strings.contains(stepId)) { ids.add(rs.getString("id")); } } } } } if (CollectionUtils.isNotEmpty(ids)) { Set userSet = new HashSet<>(); for (String id : ids) { Set receiveUsers = getReceiveUsers(id, positionId); userSet.addAll(receiveUsers); } String applicantName = ApplicantCommonInfo.getApplicantName(applicantId); String applicantPosition = ApplicantCommonInfo.getApplicantPosition(positionId); // 发送消息提醒 RecruitModeUtil.messagePush(RecruitConstant.INTERVIEW_MESSAGE_TYPE, "应聘进度通知", "应聘者:" + applicantName + ",应聘职位:" + applicantPosition + ",当前应聘进程已经流转至" + stepName + "阶段,请知悉。", userSet, user.getUID()); } } /** * 获取当前职位、当前设置的提醒人员 * * @param jdtxId * @param positionId * @return */ private static Set getReceiveUsers(String jdtxId, String positionId) { Set userSet = new HashSet<>(); RecordSet rs = new RecordSet(); rs.executeQuery("select * from uf_jcl_jdtx where id = ?", jdtxId); if (rs.next()) { // 提醒人员 String txry = rs.getString("txry"); getUserByUid(txry, userSet); // 提醒分部 String txfb = rs.getString("txfb"); getUserByCompany(txfb, userSet); // 提醒部门 String txbm = rs.getString("txbm"); getUserByDepartment(txbm, userSet); // 提醒岗位 String txgw = rs.getString("txgw"); getUserByJob(txgw, userSet); // 提醒角色 String txjs = rs.getString("txjs"); getUserByRole(txjs, userSet); String zpzwzd = rs.getString("zpzwzd"); // 根据选择的字段,获取需要通知的人员ID dealPositionField(zpzwzd, positionId, userSet); } return userSet; } /** * 根据选择的招聘职位字段,获取需要通知的人员ID * * @param positionFieldIds * @param positionId * @param userSet */ private static void dealPositionField(String positionFieldIds, String positionId, Set userSet) { RecordSet rs = new RecordSet(); rs.executeQuery("select * from workflow_billfield where id in(" + positionFieldIds + ")"); List fieldList = new ArrayList<>(); while (rs.next()) { PositionField build = PositionField.builder() .id(rs.getString("id")) .fieldName(rs.getString("fieldname")) .type(rs.getString("type")) .build(); fieldList.add(build); } if (CollectionUtils.isNotEmpty(fieldList)) { Map> collect = fieldList.stream().collect(Collectors.groupingBy(PositionField::getMsgType)); List userFieldList = collect.get("user"); if (CollectionUtils.isNotEmpty(userFieldList)) { for (PositionField positionField : userFieldList) { String positionFieldValue = getPositionFieldValue(positionField, positionId); getUserByUid(positionFieldValue, userSet); } } List companyFieldList = collect.get("company"); if (CollectionUtils.isNotEmpty(companyFieldList)) { for (PositionField positionField : companyFieldList) { String positionFieldValue = getPositionFieldValue(positionField, positionId); getUserByCompany(positionFieldValue, userSet); } } List departmentFieldList = collect.get("department"); if (CollectionUtils.isNotEmpty(departmentFieldList)) { for (PositionField positionField : departmentFieldList) { String positionFieldValue = getPositionFieldValue(positionField, positionId); getUserByDepartment(positionFieldValue, userSet); } } List roleFieldList = collect.get("role"); if (CollectionUtils.isNotEmpty(roleFieldList)) { for (PositionField positionField : roleFieldList) { String positionFieldValue = getPositionFieldValue(positionField, positionId); getUserByRole(positionFieldValue, userSet); } } List jobFieldList = collect.get("job"); if (CollectionUtils.isNotEmpty(jobFieldList)) { for (PositionField positionField : jobFieldList) { String positionFieldValue = getPositionFieldValue(positionField, positionId); getUserByJob(positionFieldValue, userSet); } } } } private static void getUserByUid(String userStr, Set userSet) { if (StringUtils.isNotBlank(userStr)) { userSet.addAll(Arrays.asList(userStr.split(","))); } } private static void getUserByCompany(String companyStr, Set userSet) { if (StringUtils.isNotBlank(companyStr)) { RecordSet rs = new RecordSet(); rs.executeQuery("select id from hrmresource where subcompanyid1 in(" + companyStr + ")"); while (rs.next()) { userSet.add(rs.getString("id")); } } } private static void getUserByDepartment(String departmentStr, Set userSet) { if (StringUtils.isNotBlank(departmentStr)) { RecordSet rs = new RecordSet(); rs.executeQuery("select id from hrmresource where departmentid in(" + departmentStr + ")"); while (rs.next()) { userSet.add(rs.getString("id")); } } } private static void getUserByRole(String roleStr, Set userSet) { if (StringUtils.isNotBlank(roleStr)) { String[] split = roleStr.split(","); for (String roleId : split) { HrmCommonService hrmCommonService = new HrmCommonServiceImpl(); String hrmIds = hrmCommonService.getRoleMemberIds(roleId, "0"); if (StringUtils.isNotBlank(hrmIds)) { userSet.addAll(Arrays.asList(hrmIds.split(","))); } } } } private static void getUserByJob(String jobStr, Set userSet) { if (StringUtils.isNotBlank(jobStr)) { RecordSet rs = new RecordSet(); rs.executeQuery("select id from hrmresource where jobtitle in(" + jobStr + ")"); while (rs.next()) { userSet.add(rs.getString("id")); } } } /** * 获取当前职位的字段值 * * @param positionField 指定字段 * @param positionId 招聘职位ID * @return */ private static String getPositionFieldValue(PositionField positionField, String positionId) { RecordSet rs = new RecordSet(); String sql = "select " + positionField.getFieldName() + " from uf_jcl_zp_zpzw where id = " + positionId; rs.executeQuery(sql); if (rs.next()) { return rs.getString(positionField.getFieldName()); } else { return ""; } } }