package com.engine.recruit.service.impl; import com.engine.core.impl.Service; import com.engine.recruit.conn.ApplicantCommonInfo; import com.engine.recruit.conn.RecruitDataMap; import com.engine.recruit.conn.RecruitRecordSet; import com.engine.recruit.constant.RecruitConstant; import com.engine.recruit.entity.record.ApplicantRecordPo; import com.engine.recruit.enums.EntryStatusEnum; import com.engine.recruit.enums.InfoCollectEnum; import com.engine.recruit.enums.PositionOperateEnum; import com.engine.recruit.enums.RecordOperateEnum; import com.engine.recruit.exception.CustomizeRunTimeException; import com.engine.recruit.service.InductionManageService; import com.engine.recruit.util.RecruitMessageUtils; import com.weaver.formmodel.data.model.Formfield; import org.apache.commons.lang3.StringUtils; import weaver.common.DateUtil; import weaver.conn.RecordSet; import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil; import weaver.general.Util; import java.util.*; import java.util.stream.Collectors; /** * @author:dxfeng * @createTime: 2023/10/23 * @version: 1.0 */ public class InductionManageServiceImpl extends Service implements InductionManageService { @Override public Map updateInductionManageInfo(Map param) { String operateType = Util.null2String(param.get("operateType")); if (PositionOperateEnum.PREPARE.getOperateType().equals(operateType)) { // 发起入职准备 // 反填流程信息到建模表 } return null; } @Override public Map sendCollectInfo(Map param) { String ids = Util.null2String(param.get("ids")); String[] split = ids.split(","); if (StringUtils.isBlank(RecruitConstant.MOBILE_APPID_COLLECT)) { throw new CustomizeRunTimeException("未获取到对应移动建模ID,请检查配置文件"); } RecordSet rs = new RecordSet(); rs.executeQuery("select noLoginUser from mobileappbaseinfo where id = ?", RecruitConstant.MOBILE_APPID_COLLECT); int creator = -1; if (rs.next()) { creator = rs.getInt("noLoginUser"); } if (-1 == creator) { throw new CustomizeRunTimeException("未配置免登陆访问用户,请检查移动建模应用配置"); } // 查询信息采集模板内容 rs.executeQuery("select yjnr,yjzt from uf_jcl_yjtzmb where mblx = 3 and zt = 0"); String yjnr = ""; String yjzt = ""; if (rs.next()) { yjnr = rs.getString("yjnr"); yjzt = rs.getString("yjzt"); } if (StringUtils.isBlank(yjnr)) { throw new CustomizeRunTimeException("未获取到信息采集邮件通知模板"); } // 查询字段信息 List fieldList = RecruitModeUtil.getFieldList("uf_jcl_rzgl"); Map> fieldMapList = fieldList.stream().collect(Collectors.groupingBy(Formfield::getLabelName)); for (String billId : split) { // 判断是否已发送信息采集,已发送的不重复发送 rs.executeQuery("select xxcjid from uf_jcl_rzgl where id = ? ", billId); if (rs.next()) { if (StringUtils.isNotBlank(rs.getString("xxcjid"))) { continue; } } // 查询当前数据字段值 rs.executeQuery("select * from uf_jcl_rzgl where id = ? ", billId); Map mainDataMap = RecruitRecordSet.getSingleRecordMap(rs); // 根据入职管理信息完善信息采集表单 Map dataMap = new RecruitDataMap<>(); String uuid = UUID.randomUUID().toString(); dataMap.put("modeuuid", uuid); int formModeId = ApplicantCommonInfo.getModeIdByTableName("uf_jcl_xxcj"); dataMap.put("formmodeid", formModeId); // 构建建模表基本数据 RecruitRecordSet.buildModeInsertFields(dataMap, creator); dataMap.put("xm", RecruitModeUtil.parseBlankToNull(mainDataMap.get("xm"))); dataMap.put("sfzh", RecruitModeUtil.parseBlankToNull(mainDataMap.get("sfzh"))); dataMap.put("nl", RecruitModeUtil.parseBlankToNull(mainDataMap.get("nl"))); dataMap.put("xb", RecruitModeUtil.parseBlankToNull(mainDataMap.get("xb"))); dataMap.put("sjh", RecruitModeUtil.parseBlankToNull(mainDataMap.get("sjhm"))); dataMap.put("yx", RecruitModeUtil.parseBlankToNull(mainDataMap.get("dzyx"))); // 生成登录密码 String password = generatePassword(); dataMap.put("mm", password); dataMap.put("modedatastatus", "1"); // 插入数据 RecruitRecordSet.insertData(dataMap, "uf_jcl_xxcj"); int id = RecruitRecordSet.refreshRight(uuid, "uf_jcl_xxcj", formModeId, creator); // 更新状态为已发送,反填信息采集ID rs.executeUpdate("update uf_jcl_rzgl set xxcj = ? ,xxcjid = ? where id = ? ", InfoCollectEnum.HAS_SENT.getId(), id, billId); // 发送短信 String mobile = Util.null2String(dataMap.get("sjh")); String email = Util.null2String(dataMap.get("yx")); String messageLink = RecruitConstant.COLLECT_MESSAGE_LINK; //messageLink += "&billId=" + id; yjnr = yjnr.replace("{链接地址}", messageLink); yjnr = yjnr.replace("{初始密码}", password); String msgContent = RecruitModeUtil.getReplaceContent(yjnr, fieldMapList, mainDataMap); // 发送邮件 boolean sendEmail = RecruitMessageUtils.sendEmail(email, yjzt, msgContent); // 发送短信 boolean sendSMS = RecruitMessageUtils.sendSMS(mobile, msgContent); // 记录应聘过程 rs.executeQuery("select pcid from uf_jcl_rzgl where id = ? ", billId); String pcid = ""; if (rs.next()) { pcid = rs.getString("pcid"); } Map otherParam = new HashMap<>(); otherParam.put("createName", user.getLastname()); otherParam.put("pcid", pcid); ApplicantRecordPo recordPo = ApplicantRecordPo.builder() .billId(String.valueOf(id)) .operateTime(DateUtil.getDateTime()) .modeId(String.valueOf(formModeId)) .formId(String.valueOf(ApplicantCommonInfo.getFormIdByTableName("uf_jcl_xxcj"))) .user(user) .recordOperateType(RecordOperateEnum.INFO_COLLECT) .otherParam(otherParam) .build(); recordPo.execute(); } return null; } @Override public Map verifyIDCard(Map params) { RecordSet rs = new RecordSet(); String sfzh = Util.null2String(params.get("sfzh")); String rzzt = Util.null2String(params.get("rzzt")); String billId = Util.null2String(params.get("billId")); // 根据身份证号,判定,只能有一个状态为待入职的数据 if (EntryStatusEnum.PENDING.getValue().equals(rzzt)) { rs.executeQuery("select count(id) as num from uf_jcl_rzgl where sfzh = ? and id != ? and rzzt = ? ", sfzh, billId, rzzt); int countNum = 0; if (rs.next()) { countNum = rs.getInt("num"); } if (countNum > 0) { throw new CustomizeRunTimeException("当前身份证号已存在待入职状态数据"); } } return new HashMap<>(); } @Override public Map checkLoginInfo(Map param) { RecordSet rs = new RecordSet(); HashMap map = new HashMap<>(2); String mobile = Util.null2String(param.get("mobile")); String pwd = Util.null2String(param.get("pwd")); rs.executeQuery("select id from uf_jcl_xxcj where sjh = ? and mm = ?", mobile, pwd); String xxcjId = ""; if (rs.next()) { xxcjId = rs.getString("id"); } else { throw new CustomizeRunTimeException("手机号或密码错误"); } // 校验当前链接的有效期 rs.executeQuery("select * from uf_jcl_rzgl where xxcjid = ? ", xxcjId); if (rs.next()) { // 当前关联入职已取消入职/已入职;点击提示当前链接已失效,且不可操作 String entryStatus = rs.getString("rzzt"); if ("1".equals(entryStatus) || "2".equals(entryStatus)) { throw new CustomizeRunTimeException("当前链接已失效"); } // 当前信息采集链接的地址默认有效期为发出日期~预计入职日期 String date = rs.getString("yjrzrq"); int compDate = DateUtil.compDate(DateUtil.getCurrentDate(), date); if (compDate < 0) { throw new CustomizeRunTimeException("当前链接已失效"); } } map.put("id", xxcjId); return map; } @Override public Map infoSubmit(String id) { RecordSet rs = new RecordSet(); rs.executeQuery("update uf_jcl_rzgl set xxcj = 2 where id = ?", id); return null; } /** * 随机八位不重复登录密码,含数字、字母 * * @return 登录密码 */ private String generatePassword() { String letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; String numbers = "0123456789"; String characters = letters + numbers; List randomChars = new ArrayList<>(); Random random = new Random(); // 随机取得一个字母 randomChars.add(letters.charAt(random.nextInt(letters.length()))); // 随机取得一个数字 randomChars.add(numbers.charAt(random.nextInt(numbers.length()))); // 随机取得六个字符(字母或数字) for (int i = 0; i < 6; i++) { randomChars.add(characters.charAt(random.nextInt(characters.length()))); } // 打乱字符的顺序 Collections.shuffle(randomChars); // 将字符列表转为字符串 StringBuilder sb = new StringBuilder(); for (char c : randomChars) { sb.append(c); } return sb.toString(); } }