weaver-hrm-recruit/src/weaver/formmode/recruit/modeexpand/interview/BatchAddInterviewResultMode...

232 lines
11 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package weaver.formmode.recruit.modeexpand.interview;
import com.engine.recruit.constant.RecruitConstant;
import com.engine.recruit.conn.ApplicantCommonInfo;
import com.engine.recruit.util.RecruitMessageUtils;
import com.weaver.formmodel.data.model.Formfield;
import org.apache.commons.collections.CollectionUtils;
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.RecruitModeUtil;
import weaver.formmode.setup.ModeRightInfo;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.soa.workflow.request.*;
import java.util.*;
import java.util.stream.Collectors;
/**
* <p>聚才林招聘</p>
* 批量面试推送面试评价
*
* @author:dxfeng
* @createTime: 2023/09/22
* @version: 1.0
*/
public class BatchAddInterviewResultModeExpand extends AbstractModeExpandJavaCodeNew {
private static final String MODE_TABLE_NAME = "uf_jcl_ms";
@Override
public Map<String, String> doModeExpand(Map<String, Object> param) {
Map<String, String> result = new HashMap<>();
try {
RequestInfo requestInfo = (RequestInfo) param.get("RequestInfo");
if (requestInfo != null) {
RecordSet rs = new RecordSet();
int formModeId = ApplicantCommonInfo.getModeIdByTableName(MODE_TABLE_NAME);
MainTableInfo mainTableInfo = requestInfo.getMainTableInfo();
Property[] properties = mainTableInfo.getProperty();
Map<String, Object> mainDataMap = new HashMap<>();
for (Property property : properties) {
mainDataMap.put(property.getName(), RecruitModeUtil.parseBlankToNull(property.getValue()));
}
// 需要应聘者反馈
boolean needFeedback = "1".equals(Util.null2String(mainDataMap.get("sfxyfk")));
User user = (User) param.get("user");
// 填充建模数据基本信息
mainDataMap.put("formmodeid", formModeId);
mainDataMap.put("modedatacreater", user.getUID());
String dateTime = DateUtil.getFullDate();
String[] split = dateTime.split(" ");
mainDataMap.put("modedatacreatedate", split[0]);
mainDataMap.put("modedatacreatetime", split[1]);
mainDataMap.put("modedatamodifier", null);
mainDataMap.put("modedatamodifydatetime", null);
mainDataMap.put("modedatacreatertype", "0");
//mainDataMap.put("bsapid", requestInfo.getRequestid());
List<Map<String, Object>> detailMapList = new ArrayList<>();
DetailTableInfo detailTableInfo = requestInfo.getDetailTableInfo();
DetailTable detailTable = detailTableInfo.getDetailTable(0);
Row[] rows = detailTable.getRow();
for (Row row : rows) {
Map<String, Object> detailDataMap = new HashMap<>(mainDataMap);
Cell[] cells = row.getCell();
for (Cell cell : cells) {
detailDataMap.put(cell.getName(), RecruitModeUtil.parseBlankToNull(cell.getValue()));
}
detailMapList.add(detailDataMap);
}
String tzypz = Util.null2String(mainDataMap.get("tzypz"));
String yjnr = Util.null2String(mainDataMap.get("yjnr"));
String yjtzmb = Util.null2String(mainDataMap.get("yjtzmb"));
List<String> sendTypeList = Arrays.asList(tzypz.split(","));
boolean sendEmail = sendTypeList.contains("0");
boolean sendSms = sendTypeList.contains("1");
String emailTitle = RecruitModeUtil.getEmailTitle(yjtzmb);
List<Formfield> fieldList = RecruitModeUtil.getFieldList("uf_jcl_plapms");
Map<String, List<Formfield>> fieldMapList = fieldList.stream().collect(Collectors.groupingBy(Formfield::getLabelName));
String insertSql = "insert into " + MODE_TABLE_NAME + " (modeuuid, modedatacreatertype, formmodeid, modedatacreater, modedatacreatedate, modedatacreatetime, modedatamodifier, modedatamodifydatetime, pcid, ypz, ypzw, tdsj, sjhm, dzyx, tzypz, msfs, mshj, msc, msg, ptmsg, ptmsgsfcymspj, msrq, zt) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
StringBuilder msgBuilder = new StringBuilder();
for (Map<String, Object> detailDataMap : detailMapList) {
List<Object> paramList = buildParamList(detailDataMap);
if (CollectionUtils.isNotEmpty(paramList)) {
String uuid = UUID.randomUUID().toString();
paramList.add(0, uuid);
rs.executeUpdate(insertSql, paramList);
rs.executeQuery("select id from " + MODE_TABLE_NAME + " where modeuuid='" + uuid + "'");
if (rs.next()) {
// 权限重构
int bid = Util.getIntValue(rs.getString("id"));
ModeRightInfo modeRightInfo = new ModeRightInfo();
modeRightInfo.setNewRight(true);
modeRightInfo.editModeDataShare(user.getUID(), formModeId, bid);
getApplicantsInfo(msgBuilder, Util.null2String(detailDataMap.get("ypz")), Util.null2String(detailDataMap.get("ypzw")));
// 创建面试评价反馈数据
InterviewEvaluate.createEvaluate(detailDataMap, bid, user);
}
// 发送邮件
String msgContent = RecruitModeUtil.getReplaceContent(yjnr, fieldMapList, detailDataMap);
String yx = Util.null2String(detailDataMap.get("dzyx"));
String sjh = Util.null2String(detailDataMap.get("sjhm"));
if (sendEmail) {
if (needFeedback) {
String confirmUrl = RecruitConstant.INTERVIEW_FEEDBACK_URL + "?uuid=" + uuid;
String emailContent = "<div style=\"border:3px solid silver;width:635px;height:55px;line-height:55px;font-family:'microsoft Yahei';font-size:18px;font-weight:bold;color:#333;padding-left:10px\">请您答复是否参加此次邀请? <a href=\"" + confirmUrl + "&status=0\" style=\"text-decoration:underline;color:#0000cc;margin-right:10px\">参加</a> <a href=\"" + confirmUrl + "&status=1\" style=\"text-decoration:underline;color:#0000cc;\">不参加</a></div>";
// 邮件内容拼接确认信息
emailContent = msgContent + emailContent;
RecruitMessageUtils.sendEmail(yx, emailTitle, emailContent);
} else {
RecruitMessageUtils.sendEmail(yx, emailTitle, msgContent);
}
}
if (sendSms) {
RecruitMessageUtils.sendSMS(sjh, msgContent);
}
}
}
if (StringUtils.isNotBlank(msgBuilder)) {
msgBuilder.insert(0, RecruitModeUtil.getResourceNames(requestInfo.getCreatorid()) + "安排了一场面试<br/>");
String msrq = Util.null2String(mainDataMap.get("msrq"));
String msg = Util.null2String(mainDataMap.get("msg"));
String ptmsg = Util.null2String(mainDataMap.get("ptmsg"));
String msdd = Util.null2String(mainDataMap.get("msdd"));
msgBuilder.append("面试时间:").append(msrq).append(";面试官:").append(RecruitModeUtil.getResourceNames(msg)).append("").append(RecruitModeUtil.getResourceNames(ptmsg)).append("<br/>");
msgBuilder.append("面试地址:").append(msdd);
// 消息发送
Set<String> userIdSet = new HashSet<>();
userIdSet.addAll(Arrays.asList(msg.split(",")));
userIdSet.addAll(Arrays.asList(ptmsg.split(",")));
RecruitModeUtil.messagePush(RecruitConstant.INTERVIEW_MESSAGE_TYPE, RecruitConstant.INTERVIEW_ADD_MESSAGE_TITLE, msgBuilder.toString(), userIdSet, user.getUID());
}
}
} catch (Exception e) {
new BaseBean().writeLog(e);
result.put("errmsg", e.getMessage());
result.put("flag", "false");
}
return result;
}
/**
* 构建批量插入数据集合
*
* @param map 表单参数
*/
private List<Object> buildParamList(Map<String, Object> map) {
List<Object> param = new ArrayList<>();
// 填充建模表相关字段
param.add(map.get("modedatacreatertype"));
param.add(map.get("formmodeid"));
param.add(map.get("modedatacreater"));
param.add(map.get("modedatacreatedate"));
param.add(map.get("modedatacreatetime"));
param.add(map.get("modedatamodifier"));
param.add(map.get("modedatamodifydatetime"));
// 表单字段
// 批次ID
param.add(map.get("pcid"));
// 应聘者
param.add(map.get("ypz"));
// 投递职位
param.add(map.get("ypzw"));
// 投递时间
param.add(map.get("tdsj"));
// 手机号码
param.add(map.get("sjhm"));
// 电子邮箱
param.add(map.get("dzyx"));
// 通知应聘者
param.add(map.get("tzypz"));
// 面试方式
param.add(map.get("msfs"));
// 面试环节
param.add(map.get("mshj"));
// 面试轮次
param.add(map.get("msc"));
// 面试官
param.add(map.get("msg"));
// 陪同面试官
param.add(map.get("ptmsg"));
// 陪同面试官是否参与面试评价
param.add(map.get("ptmsgsfcymspj"));
// 面试日期
param.add(map.get("msrq"));
// 面试状态,默认值:待面试
param.add("0");
return param;
}
/**
* 获取应聘者信息
*
* @param msgBuilder 消息内容
* @param applicantId 应聘者ID
* @param positionId 应聘职位ID
*/
private void getApplicantsInfo(StringBuilder msgBuilder, String applicantId, String positionId) {
if (StringUtils.isAnyBlank(applicantId, positionId)) {
return;
}
RecordSet rs = new RecordSet();
rs.executeQuery("select xm from uf_jcl_yppc where id = ?", applicantId);
if (rs.next()) {
msgBuilder.append("应聘者:").append(rs.getString("xm"));
}
rs.executeQuery("select zpzwmc from uf_jcl_zp_zpzw where id = ?", positionId);
if (rs.next()) {
msgBuilder.append(";应聘职位:").append(rs.getString("zpzwmc"));
}
msgBuilder.append("<br/>");
}
}