package com.engine.recruit.service.impl; import com.engine.core.impl.Service; import com.engine.recruit.conn.RecruitDataMap; import com.engine.recruit.conn.RecruitRecordSet; import com.engine.recruit.enums.InfoCollectEnum; import com.engine.recruit.enums.PositionOperateEnum; import com.engine.recruit.exception.CustomizeRunTimeException; import com.engine.recruit.service.InductionManageService; import com.engine.recruit.util.RecruitMessageUtils; 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.*; /** * @author:dxfeng * @createTime: 2023/10/23 * @version: 1.0 */ public class InductionManageServiceImpl extends Service implements InductionManageService { private static final String MOBILE_APPID_COLLECT = RecruitModeUtil.getRecruitPropValue("MOBILE_APPID_COLLECT"); @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(MOBILE_APPID_COLLECT)) { throw new CustomizeRunTimeException("未获取到对应移动建模ID,请检查配置文件"); } RecordSet rs = new RecordSet(); rs.executeQuery("select noLoginUser from mobileappbaseinfo where id = ?", MOBILE_APPID_COLLECT); int creator = -1; if (rs.next()) { creator = rs.getInt("noLoginUser"); } if (-1 == creator) { throw new CustomizeRunTimeException("未配置免登陆访问用户,经检查移动建模应用配置"); } for (String billId : split) { // 判断是否已发送信息采集,已发送的不重复发送 rs.executeQuery("select a.id from uf_jcl_xxcj a inner join uf_jcl_rzgl b on a.xm = b.xm and a.sjh = b.sjhm where b.id = ? ", billId); if (rs.next()) { if (StringUtils.isNotBlank(rs.getString("id"))) { continue; } } // 根据入职管理信息完善信息采集表单 Map dataMap = new RecruitDataMap<>(); String uuid = UUID.randomUUID().toString(); dataMap.put("modeuuid", uuid); int formModeId = -1; rs.executeQuery("select id from modeinfo where formid =( select id from workflow_bill where tablename = 'uf_jcl_xxcj' )"); if (rs.next()) { formModeId = rs.getInt("id"); } dataMap.put("formmodeid", formModeId); // 构建建模表基本数据 RecruitRecordSet.buildModeBaseFields(dataMap, creator); rs.executeQuery("select * from uf_jcl_rzgl where id = ? ", billId); if (rs.next()) { dataMap.put("xm", RecruitModeUtil.parseBlankToNull(rs.getString("xm"))); dataMap.put("sfzh", RecruitModeUtil.parseBlankToNull(rs.getString("sfzh"))); dataMap.put("nl", RecruitModeUtil.parseBlankToNull(rs.getString("nl"))); dataMap.put("xb", RecruitModeUtil.parseBlankToNull(rs.getString("xb"))); dataMap.put("sjh", RecruitModeUtil.parseBlankToNull(rs.getString("sjhm"))); dataMap.put("yx", RecruitModeUtil.parseBlankToNull(rs.getString("dzyx"))); } // 生成登录密码 String password = generatePassword(); dataMap.put("mm", password); dataMap.put("modedatastatus", "1"); // 发送短信 String mobile = Util.null2String(dataMap.get("sjh")); String messageContent = RecruitModeUtil.getRecruitPropValue("COLLECT_MESSAGE_CONTENT"); if (StringUtils.isBlank(messageContent)) { throw new CustomizeRunTimeException("未获取到短信内容,请检查配置"); } else { RecruitMessageUtils.sendSMS(mobile, messageContent); } // 插入数据 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); } return null; } @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 * from uf_jcl_rzgl where sjhm = ? ", mobile); 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("当前链接已失效"); } } rs.executeQuery("select id from uf_jcl_xxcj where sjh = ? and mm = ?", mobile, pwd); if (rs.next()) { map.put("id", Util.getIntValue(rs.getString("id"))); } else { throw new CustomizeRunTimeException("手机号或密码错误"); } 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(); } }