<%@ page import="weaver.conn.RecordSet" %> <%@ page import="com.wbi.util.ParamUtil" %> <%@ page import="java.util.Map" %> <%@ page import="weaver.general.Util" %> <%@ page import="weaver.general.StringUtil" %> <%@ page import="com.alibaba.fastjson.JSONObject" %> <%@ page import="java.util.HashMap" %> <%@ page import="java.util.regex.Matcher" %> <%@ page import="java.time.LocalDateTime" %> <%@ page import="java.time.format.DateTimeFormatter" %> <%@ page import="java.time.LocalTime" %> <%@ page import="com.cloudstore.dev.api.bean.MessageType" %> <%@ page import="java.util.Set" %> <%@ page import="java.util.HashSet" %> <%@ page import="com.cloudstore.dev.api.bean.MessageBean" %> <%@ page import="com.cloudstore.dev.api.util.Util_Message" %> <%@ page import="java.io.IOException" %> <%@ page import="java.time.format.DateTimeParseException" %> <%@ page import="java.util.regex.Pattern" %> <%@ page import="weaver.hrm.User" %> <%@ page import="org.slf4j.LoggerFactory" %> <%@ page import="org.slf4j.Logger" %> <%@ page import="weaver.hrm.company.DepartmentComInfo" %> <%@ page import="lombok.SneakyThrows" %> <%@ page contentType="application/json charset=UTF-8" language="java" %> <% /**** * 发送消息通用工具类 * * * 参数: * title:标题 支持表单字段 不为空 主表字段 * context:内容 支持表单字段 不为空 主表字段 * --字段为表单字段数据库名称 * 如果为人员浏览按钮或者部门浏览按钮,需要加前缀 * 人员工号 hrmWorkcode_表单字段 * 人员名称 HrmLastName_表单字段 * 部门名称 deptName_表单字段 * 后期可在 * * linkUrl:PC端链接 * linkMobileUrl:移动端链接 * codeid:消息来源id 不为空 * billid:表单id 不为空时进行表单字段替换, * 为空是默认跳过标题内容表单字段替换. * formName:表单名称 * userid: 消息接收人 可以传userid或者userids(,分割) * 表单字段的话就用 field_字段名称 * */ Logger log = LoggerFactory.getLogger("CustomBusiness"); Map param = ParamUtil.request2Map(request); JSONObject result = new JSONObject(); String id = Util.null2String(param.get("billid")); String title = Util.null2String(param.get("title")); String context = Util.null2String(param.get("context")); String linkUrl = Util.null2String(param.get("linkUrl")); String linkMobileUrl = Util.null2String(param.get("linkMobileUrl")); int codeid = Util.getIntValue(Util.null2String(param.get("codeid"))); String formName = Util.null2String(param.get("formName")); String userid = Util.null2String(param.get("userid")); log.info("billid:{}",id); if (StringUtil.isEmpty(id)){ log.info("userid:{}",userid); log.info("codeid:{}}",codeid); log.info("title:{}",title); log.info("contextStr:{}",context); log.info("linkUrl:{}",linkUrl); log.info("linkMobileUrl:{}",linkMobileUrl); sendMsg(userid+"",codeid,title,context,linkUrl,linkMobileUrl); }else { RecordSet rs = new RecordSet(); rs.executeQuery("select * from "+ formName +" where id = ? ", id); if(rs.next()){ //调换下表单字段 String contextStr = replaceVariablesByRs(context, rs); String titleStr = replaceVariablesByRs(title, rs); // 判断下接收人是否为表单字段 if (userid.startsWith("field_")){ userid= Util.null2String(rs.getString(userid.split("_")[1])); } log.info("userid:{}",userid); log.info("codeid:{}",codeid); log.info("title:{}",title); log.info("context:{}",context); log.info("titleStr:{}",titleStr); log.info("contextStr:{}",contextStr); log.info("linkUrl:{}",linkUrl); log.info("linkMobileUrl:{}",linkMobileUrl); sendMsg(userid+"",codeid,titleStr,contextStr,linkUrl,linkMobileUrl); // } }else { log.info("userid:{}",userid); log.info("codeid:{}",codeid); log.info("title:{}",title); log.info("contextStr:{}",context); log.info("linkUrl:{}",linkUrl); log.info("linkMobileUrl:{}",linkMobileUrl); sendMsg(userid+"",codeid,title,context,linkUrl,linkMobileUrl); } } result.put("code", "S"); result.put("msg","提醒发送成功"); out.print(result.toJSONString()); %> <%! private static Map getScheduleParam(String pointId) throws Exception { RecordSet rs = new RecordSet(); rs.executeQuery("select id from schedulesetting where POINTID = ?", pointId); String setid = ""; if (rs.next()) { setid = rs.getString("id"); }else { throw new Exception("未查询到对应配置"); } rs.executeQuery("select * from schedulesettingdetail where SCHEDULEDBID = ? ",setid); HashMap map = new HashMap<>(); while (rs.next()){ map.put(rs.getString("ATTRNAME"),rs.getString("ATTRVALUE")); } return map; } /** * 替换字符串中的${变量名}为Map中对应的值 * @param template 字符串模板,包含${变量名} * @param variables 包含变量名和对应值的Map * @return 替换后的字符串 */ public static String replaceVariables(String template, Map variables) { // 定义匹配 ${变量名} 的正则表达式 Pattern pattern = Pattern.compile("\\$\\{([a-zA-Z0-9_]+)\\}"); Matcher matcher = pattern.matcher(template); StringBuffer result = new StringBuffer(); while (matcher.find()) { // 获取变量名 String variableName = matcher.group(1); // 从Map中获取变量的值,如果不存在则使用空字符串 String replacement = variables.getOrDefault(variableName, ""); // 替换 ${变量名} 为对应的值 matcher.appendReplacement(result, replacement); } // 将剩余的字符串附加到结果中 matcher.appendTail(result); return result.toString(); } /** * 替换字符串中的${变量名}为Map中对应的值 * @param template 字符串模板,包含${变量名} * @param rs 查询完的数据库对象 * @return 替换后的字符串 */ public static String replaceVariablesByRs(String template, RecordSet rs) { // 定义匹配 ${变量名} 的正则表达式 Pattern pattern = Pattern.compile("\\$\\{([a-zA-Z0-9_]+)\\}"); Matcher matcher = pattern.matcher(template); StringBuffer result = new StringBuffer(); while (matcher.find()) { // 获取变量名 String variableName = matcher.group(1); // 从RecordSet中获取变量的值,如果不存在则使用空字符串 String replacement = Util.null2String(getShowNameByid(variableName,rs)); // 替换 ${变量名} 为对应的值 matcher.appendReplacement(result, replacement); } // 将剩余的字符串附加到结果中 matcher.appendTail(result); return result.toString(); } /** * 获取当前日期,格式为 yyyy-MM-dd * @return 当前日期的字符串 */ public static String getCurrentDate() { // 获取当前日期时间 LocalDateTime now = LocalDateTime.now(); // 定义日期格式 DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 格式化日期 return now.format(dateFormatter); } /** * 获取当前日期的开始时间(即00:00) * @return 当前日期的开始时间,格式为 yyyy-MM-dd HH:mm */ public static String getStartOfDay() { // 获取当前日期 LocalDateTime startOfDay = LocalDateTime.now().with(LocalTime.MIN); // 定义日期时间格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); // 格式化开始时间 return startOfDay.format(formatter); } /** * 获取当前日期的最后一分钟的时间(即23:59) * @return 当前日期的最后一分钟时间,格式为 yyyy-MM-dd HH:mm */ public static String getEndOfDay() { // 获取当前日期 LocalDateTime endOfDay = LocalDateTime.now().with(LocalTime.MAX); // 定义日期时间格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); // 格式化最后一分钟的时间 return endOfDay.format(formatter); } /** * 获取当前日期和时间,格式为 yyyy-MM-dd HH:mm * @return 当前日期和时间的字符串 */ public static String getCurrentDateTime() { // 获取当前日期时间 LocalDateTime now = LocalDateTime.now(); // 定义日期时间格式 DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); // 格式化日期时间 return now.format(dateTimeFormatter); } private void sendMsg(String userid , int codeid , String title , String context , String linkUrl ,String linkMobileUrl){ MessageType messageType = MessageType.newInstance(codeid); // 消息来源(见文档第四点补充 必填) Set userIdList = new HashSet<>(); // 接收人id 必填 // userIdList.add(userid); String[] useridArr = userid.split(","); for (String s : useridArr) { userIdList.add(s); } // String title = "个人周报更新提醒"; // 标题 // String context = "本次周报新增"+(endNum-startNum)+";" + // "更新前总数"+startNum+";" + // "更新后总数"+endNum+";"; // 内容 // String linkUrl = ""; // PC端链接 // String linkMobileUrl = ""; // 移动端链接 try { MessageBean messageBean = Util_Message.createMessage(messageType, userIdList, title, context, linkUrl, linkMobileUrl); messageBean.setCreater(1);// 创建人id //message.setBizState("0");// 需要修改消息为已处理等状态时传入,表示消息最初状态为待处理 // messageBean.setTargetId("121|22"); //消息来源code +“|”+业务id需要修改消息为已处理等状态时传入 Util_Message.store(messageBean); } catch (IOException e) { e.printStackTrace(); } } /** * 将 yyyy-MM-dd HH:mm 格式的字符串转换为 X年X月X日X时 的格式 * @param dateTimeStr 输入的日期时间字符串,格式为 yyyy-MM-dd HH:mm * @return 转换后的日期时间字符串,格式为 X年X月X日X时 */ public static String convertToChineseFormat(String dateTimeStr) { try { // 定义输入格式 DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); // 将字符串解析为 LocalDateTime 对象 LocalDateTime dateTime = LocalDateTime.parse(dateTimeStr, inputFormatter); // 自定义输出格式,X年X月X日X时 DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy年M月d日H时"); // 返回格式化后的字符串 return dateTime.format(outputFormatter); } catch (DateTimeParseException e) { // 如果输入格式错误,捕获异常并返回提示 return dateTimeStr; } } private static String getShowNameByid(String fieldName, RecordSet rs){ if (StringUtil.isEmpty(fieldName) ){ return ""; } if (fieldName.startsWith("hrmWorkcode_")){ int userid = Util.getIntValue(rs.getString(fieldName.split("_")[1])); return new User(userid).getLoginid(); }else if(fieldName.startsWith("HrmLastName_")){ int userid = Util.getIntValue(rs.getString(fieldName.split("_")[1])); return new User(userid).getLastname(); }else if(fieldName.startsWith("deptName_")){ String deptid = Util.null2String(rs.getString(fieldName.split("_")[1])); return new DepartmentComInfo().getDepartmentmark(deptid); }else{ return Util.null2String(rs.getString(fieldName)); } } %>