package jnpf.message.util; import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.Method; import com.alibaba.fastjson.JSONObject; import jnpf.base.SysConfigApi; import jnpf.base.UserInfo; import jnpf.base.entity.SysConfigEntity; import jnpf.config.ConfigValueUtil; import jnpf.constant.MsgCode; import jnpf.message.entity.*; import jnpf.message.enums.MessageTypeEnum; import jnpf.message.mapper.*; import jnpf.message.model.SentMessageForm; import jnpf.message.model.TriggerModel; import jnpf.message.model.WxgzhMessageModel; import jnpf.permission.UserApi; import jnpf.permission.entity.UserEntity; import jnpf.util.*; import jnpf.util.wxutil.mp.WXGZHWebChatUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.text.StringSubstitutor; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.nio.charset.StandardCharsets; import java.util.*; import java.util.concurrent.Callable; import java.util.concurrent.Future; import java.util.stream.Collectors; @Component @Slf4j public class SendFlowMsgUtil { @Autowired private RedisUtil redisUtil; @Autowired private SentMessageUtil sentMessageUtil; @Autowired private ConfigValueUtil configValueUtil; @Autowired private UserApi userApi; @Autowired private SysConfigApi sysconfigService; @Autowired private MessageMapper messageMapper; @Autowired private MessagereceiveMapper messagereceiveMapper; @Autowired private MessageMonitorMapper messageMonitorMapper; @Autowired private SendMessageConfigMapper sendMessageConfigMapper; @Autowired private SendConfigTemplateMapper sendConfigTemplateMapper; @Autowired private MessageTemplateConfigMapper messageTemplateConfigMapper; @Autowired private ShortLInkMapper shortLInkMapper; @Autowired private AccountConfigMapper accountConfigMapper; @Autowired private SmsFieldMapper smsFieldMapper; @Autowired private AuthUtil authUtil; @Autowired private WechatUserMapper wechatUserMapper; public void sendMessage(SentMessageForm sentMessageForm) { List toUserIdsList = sentMessageForm.getToUserIds(); // 模板id String templateId = sentMessageForm.getTemplateId(); // 参数 Map parameterMap = sentMessageForm.getParameterMap(); UserInfo userInfo = sentMessageForm.getUserInfo(); boolean flag = true; if (!(toUserIdsList != null && toUserIdsList.size() > 0)) { log.error("接收人员为空"); flag = false; } if (StringUtil.isEmpty(templateId)) { log.error("模板Id为空"); flag = false; } if (flag) { // 获取发送配置详情 // MessageTemplateEntity entity = messageTemplateService.getInfo(templateId); SendMessageConfigEntity entity = sendMessageConfigMapper.getInfoByEnCode(templateId); if (entity != null) { templateId = entity.getId(); } else { entity = sendMessageConfigMapper.getInfo(templateId); } if (entity != null) { List list = sendConfigTemplateMapper.getDetailListByParentId(templateId); if (list != null && list.size() > 0) { for (SendConfigTemplateEntity entity1 : list) { if (parameterMap.get(entity1.getId() + "@Title") == null) { parameterMap.put(entity1.getId() + "@Title", sentMessageForm.getTitle()); } if (parameterMap.get(entity1.getId() + "@CreatorUserName") == null || StringUtil.isEmpty(String.valueOf(parameterMap.get(entity1.getId() + "@CreatorUserName")))) { parameterMap.put(entity1.getId() + "@CreatorUserName", sentMessageForm.getUserInfo().getUserName()); } if (parameterMap.get(entity1.getId() + "@SendTime") == null || StringUtil.isEmpty(String.valueOf(parameterMap.get(entity1.getId() + "@SendTime")))) { parameterMap.put(entity1.getId() + "@SendTime", DateUtil.getNow().substring(11)); } if (parameterMap.get(entity1.getId() + "@FlowLink") == null) { parameterMap.put(entity1.getId() + "@FlowLink", ""); } if ("1".equals(String.valueOf(entity1.getEnabledMark()))) { String sendType = entity1.getMessageType(); MessageTypeEnum typeEnum = MessageTypeEnum.getByCode(sendType); Map contentMsg = sentMessageForm.getContentMsg(); switch (typeEnum) { case SysMessage: // 站内消息、 for (String toUserId : toUserIdsList) { List toUser = new ArrayList<>(); String content = sentMessageForm.getContent(); MessageTemplateConfigEntity templateConfigEntity = messageTemplateConfigMapper.getInfo(entity1.getTemplateId()); String title = sentMessageForm.getTitle(); String appLink = ""; if (templateConfigEntity != null) { title = templateConfigEntity.getTitle(); String msg = contentMsg.get(toUserId) != null ? contentMsg.get(toUserId) : "{}"; byte[] bytes = msg.getBytes(StandardCharsets.UTF_8); String encode = Base64.getEncoder().encodeToString(bytes); //流程审批页面链接地址 //流程审批页面链接地址 String pcLink = "/workFlowDetail?config=" + encode; appLink = "/pages/workFlow/flowBefore/index?config=" + encode; //转换为短链 String shortLink = shortLInkMapper.shortLink(pcLink + toUserId + templateConfigEntity.getMessageType()); shortLink = shortLInkMapper.shortLink(pcLink + toUserId + templateConfigEntity.getMessageType()); String link = configValueUtil.getApiDomain() + "/api/message/ShortLink/" + shortLink; if (StringUtil.isNotBlank(userInfo.getTenantId())) { link = link + "/" + userInfo.getTenantId(); } if (title.contains("{@FlowLink}")) { title = title.replace("{@FlowLink}", link + " "); //链接数据保存 sentMessageUtil.saveShortLink(pcLink, appLink, shortLink, userInfo, toUserId, msg); } Map msgMap = new HashMap<>(); msgMap = sentMessageUtil.getParamMap(entity1.getId(), parameterMap); if (StringUtil.isNotEmpty(title)) { StringSubstitutor strSubstitutor = new StringSubstitutor(msgMap, "{", "}"); title = strSubstitutor.replace(title); } } toUser.add(toUserId); messagereceiveMapper.sentMessage(toUser, title, content, contentMsg, userInfo); //消息监控写入 MessageMonitorEntity monitorEntity = new MessageMonitorEntity(); monitorEntity.setId(RandomUtil.uuId()); monitorEntity.setReceiveUser(JsonUtil.getObjectToString(toUser)); monitorEntity.setSendTime(DateUtil.getNowDate()); monitorEntity.setCreatorTime(DateUtil.getNowDate()); monitorEntity.setCreatorUserId(userInfo.getUserId()); sentMessageUtil.createMessageMonitor(monitorEntity, templateConfigEntity, null, null, userInfo, toUser, title); messageMonitorMapper.insert(monitorEntity); } String url = configValueUtil.getApiDomain() + "/api/workflow/trigger/MsgExecute"; Map map = new HashMap<>(); map.put("id", entity1.getTemplateId()); map.put("userInfo", userInfo); HttpRequest request = HttpRequest.of(url).method(Method.POST).body(JsonUtil.getObjectToString(map)); request.header(Constants.AUTHORIZATION, userInfo.getToken()); request.execute().body(); break; case SmsMessage: // 发送短信 sentMessageUtil.sendSms(toUserIdsList, userInfo, entity1, parameterMap, contentMsg); break; case MailMessage: // 邮件 sentMessageUtil.SendMail(toUserIdsList, userInfo, sendType, entity1, parameterMap, contentMsg); break; case QyMessage: // 企业微信 JSONObject jsonObject = sentMessageUtil.SendQyWebChat(toUserIdsList, userInfo, sendType, entity1, parameterMap, contentMsg); if (!(Boolean) jsonObject.get("code")) { log.error("发送企业微信消息失败,错误:" + jsonObject.get("error")); } break; case DingMessage: // 钉钉 JSONObject jsonObject1 = sentMessageUtil.SendDingTalk(toUserIdsList, userInfo, sendType, entity1, parameterMap, contentMsg); if (!(Boolean) jsonObject1.get("code")) { log.error("发送企业微信消息失败,错误:" + jsonObject1.get("error")); } break; case WebHookMessage: // webhook this.SendWebHook(sendType, userInfo, entity1, parameterMap, new HashMap<>()); break; case WechatMessage: // 微信公众号 this.SendWXGzhChat(toUserIdsList, userInfo, sendType, entity1, contentMsg, parameterMap); break; default: break; } } } } } } } public List sendScheduleMessage(SentMessageForm sentMessageForm) { List errList = new ArrayList<>(); UserInfo userInfo = sentMessageForm.getUserInfo(); String templateId = sentMessageForm.getTemplateId(); String title = sentMessageForm.getTitle(); List toUserIds = sentMessageForm.getToUserIds(); //获取发送配置详情 SendMessageConfigEntity configEntity = sendMessageConfigMapper.getInfoByEnCode(templateId); if (configEntity != null) { templateId = configEntity.getId(); } else { configEntity = sendMessageConfigMapper.getInfo(templateId); } List list = sendConfigTemplateMapper.getDetailListByParentId(templateId); if (configEntity != null) { for (SendConfigTemplateEntity sendConfigTemplateEntity : list) { Map objectMap = new HashMap<>(sentMessageForm.getParameterMap()); Map parameterMap = new HashMap<>(); for (String key : objectMap.keySet()) { if (key.contains(sendConfigTemplateEntity.getId())) { parameterMap.put(key.substring(sendConfigTemplateEntity.getId().length()), objectMap.get(key)); } } parameterMap.putAll(objectMap); Map contentMsg = new HashMap<>(); for (String key : parameterMap.keySet()) { contentMsg.put(key, String.valueOf(parameterMap.get(key))); } String sendType = sendConfigTemplateEntity.getMessageType(); switch (sendType) { case "1": MessageTemplateConfigEntity templateConfigEntity = messageTemplateConfigMapper.getInfo(sendConfigTemplateEntity.getTemplateId()); String messageTitle = StringUtil.isNotEmpty(templateConfigEntity.getTitle()) ? templateConfigEntity.getTitle() : ""; String content = StringUtil.isNotEmpty(templateConfigEntity.getContent()) ? templateConfigEntity.getContent() : ""; StringSubstitutor strSubstitutor = new StringSubstitutor(parameterMap, "{", "}"); messageTitle = strSubstitutor.replace(messageTitle); content = strSubstitutor.replace(content); sentMessageForm.setTitle(messageTitle); sentMessageForm.setContent(content); // 站内消息 message(sentMessageForm); // 通知触发 try { String url = configValueUtil.getApiDomain() + "/api/workflow/trigger/MsgExecute"; TriggerModel model = new TriggerModel(); model.setUserInfo(userInfo); model.setId(templateConfigEntity.getId()); HttpRequest request = HttpRequest.of(url).method(Method.POST).body(JsonUtil.getObjectToString(model)); request.header(Constants.AUTHORIZATION, userInfo.getToken()); request.execute().body(); } catch (Exception e) { log.error("消息触发流程报错信息:" + e.getMessage()); } break; case "2": // 邮件 List mailErrs = sentMessageUtil.SendMail(toUserIds, userInfo, sendType, sendConfigTemplateEntity, new HashMap<>(), contentMsg); errList.addAll(mailErrs.stream().distinct().collect(Collectors.toList())); break; case "3": // 发送短信 List smsErrs = sentMessageUtil.sendSms(toUserIds, userInfo, sendConfigTemplateEntity, parameterMap, new HashMap<>()); errList.addAll(smsErrs.stream().distinct().collect(Collectors.toList())); break; case "4": // 钉钉 JSONObject jsonObject1 = sentMessageUtil.SendDingTalk(toUserIds, userInfo, sendType, sendConfigTemplateEntity, new HashMap<>(), contentMsg); if (!(Boolean) jsonObject1.get("code")) { log.error("发送企业微信消息失败,错误:" + jsonObject1.get("error")); errList.add("发送钉钉消息失败,错误:" + jsonObject1.get("error")); } break; case "5": // 企业微信 JSONObject jsonObject = sentMessageUtil.SendQyWebChat(toUserIds, userInfo, sendType, sendConfigTemplateEntity, new HashMap<>(), contentMsg); if (!(Boolean) jsonObject.get("code")) { log.error("发送企业微信消息失败,错误:" + jsonObject.get("error")); errList.add("发送企业微信消息失败,错误:" + jsonObject.get("error")); } break; case "6": // webhook this.SendWebHook(sendType, userInfo, sendConfigTemplateEntity, new HashMap<>(), contentMsg); break; case "7": // 微信公众号 JSONObject jsonObject2 = this.SendWXGzhChat(toUserIds, userInfo, sendType, sendConfigTemplateEntity, new HashMap<>(), parameterMap); if (!(Boolean) jsonObject2.get("code")) { errList.add("发送微信公众号消息失败,错误:" + jsonObject2.get("error")); } break; default: break; } } } return errList; } public void SendWebHook(String sendType, UserInfo userInfo, SendConfigTemplateEntity entity, Map parameterMap, Map contentMsg) { MessageTemplateConfigEntity msgTemEntity = messageTemplateConfigMapper.getInfo(entity.getTemplateId()); AccountConfigEntity accountEntity = accountConfigMapper.getInfo(entity.getAccountConfigId()); MessageMonitorEntity monitorEntity = new MessageMonitorEntity(); monitorEntity.setId(RandomUtil.uuId()); monitorEntity.setSendTime(DateUtil.getNowDate()); monitorEntity.setCreatorTime(DateUtil.getNowDate()); monitorEntity.setCreatorUserId(userInfo.getUserId()); String content = msgTemEntity.getContent(); //获取消息模板参数 parameterMap = SentMessageUtil.getParamMap(entity.getId(), parameterMap); // 替换参数 if (StringUtil.isNotEmpty(content)) { StringSubstitutor strSubstitutor = new StringSubstitutor(parameterMap, "{", "}"); content = strSubstitutor.replace(content); } String title = msgTemEntity.getTitle(); if (StringUtil.isNotEmpty(title)) { StringSubstitutor strSubstitutor = new StringSubstitutor(parameterMap, "{", "}"); title = strSubstitutor.replace(title); } title = SentMessageUtil.systemParam(parameterMap, contentMsg, title, userInfo); content = SentMessageUtil.systemParam(parameterMap, contentMsg, content, userInfo); if (entity != null) { if (accountEntity != null) { //创建消息监控 monitorEntity = SentMessageUtil.createMessageMonitor(monitorEntity, msgTemEntity, accountEntity, content, userInfo, null, title); messageMonitorMapper.create(monitorEntity); switch (accountEntity.getWebhookType()) { case 1: //钉钉 if (Objects.equals(1, accountEntity.getApproveType())) { WebHookUtil.sendDDMessage(accountEntity.getWebhookAddress(), content); } else if (Objects.equals(2, accountEntity.getApproveType())) { WebHookUtil.sendDingDing(accountEntity.getWebhookAddress(), accountEntity.getBearer(), content); } break; case 2: if (Objects.equals(1, accountEntity.getApproveType())) { WebHookUtil.callWeChatBot(accountEntity.getWebhookAddress(), content); } break; default: break; } } else { monitorEntity = SentMessageUtil.createMessageMonitor(monitorEntity, msgTemEntity, null, content, userInfo, null, title); messageMonitorMapper.create(monitorEntity); } } else { monitorEntity = SentMessageUtil.createMessageMonitor(monitorEntity, msgTemEntity, null, content, userInfo, null, title); messageMonitorMapper.create(monitorEntity); } } public JSONObject SendWXGzhChat(List toUserIdsList, UserInfo userInfo, String sendType, SendConfigTemplateEntity entity, Map contentMsg, Map parameterMap) { //获取短信配置 AccountConfigEntity accountEntity = accountConfigMapper.getInfo(entity.getAccountConfigId()); // 获取消息模板详情 MessageTemplateConfigEntity msgTemEntity = messageTemplateConfigMapper.getInfo(entity.getTemplateId()); //消息监控 JSONObject retJson = new JSONObject(); boolean code = true; StringBuilder error = new StringBuilder(); for (String userId : toUserIdsList) { MessageMonitorEntity monitorEntity = new MessageMonitorEntity(); monitorEntity.setId(RandomUtil.uuId()); monitorEntity.setSendTime(DateUtil.getNowDate()); monitorEntity.setCreatorTime(DateUtil.getNowDate()); monitorEntity.setCreatorUserId(userInfo.getUserId()); error = new StringBuilder(); if (StringUtil.isEmpty(userId)) { code = false; error = error.append(";").append("接收人为空!"); messageMonitorMapper.create(monitorEntity); continue; } UserEntity userEntity = userApi.getInfoById(userId); if (ObjectUtil.isEmpty(userEntity)) { code = false; error = error.append(";").append("用户不存在!"); messageMonitorMapper.create(monitorEntity); continue; } monitorEntity.setReceiveUser(userId); if (ObjectUtil.isEmpty(msgTemEntity)) { code = false; error = error.append(";").append(userEntity.getRealName() + ":消息模板数据不存在!"); messageMonitorMapper.create(monitorEntity); continue; } monitorEntity.setMessageTemplateId(msgTemEntity.getId()); String content = msgTemEntity.getContent(); String templateKId = msgTemEntity.getTemplateCode(); if (ObjectUtil.isEmpty(accountEntity)) { code = false; error = error.append(";").append(userEntity.getRealName() + ":公众号账号配置数据不存在!"); messageMonitorMapper.create(monitorEntity); continue; } monitorEntity.setAccountId(accountEntity.getId()); //创建消息监控 monitorEntity = SentMessageUtil.createMessageMonitor(monitorEntity, msgTemEntity, accountEntity, content, userInfo, toUserIdsList, null); // 获取系统配置 String appId = accountEntity.getAppId(); String appsecret = accountEntity.getAppSecret(); String wxxcxAppId = msgTemEntity.getXcxAppId(); String type = msgTemEntity.getWxSkip(); String title = ""; //获取消息模板参数 Map msgMap = SentMessageUtil.getParamMap(entity.getId(), parameterMap); // if(parameterMap.containsKey("@flowLink")){ // parameterMap.put("@flowLink",link); // } //微信公众号参数 Map smsMap = new HashMap<>(); if (entity != null) { smsMap = smsFieldMapper.getParamMap(entity.getTemplateId(), msgMap); } if (smsMap.containsKey("title")) { title = smsMap.get("title").toString(); smsMap.keySet().removeIf(k -> k.equals("title")); } monitorEntity.setTitle(title); // 相关参数验证 if (StringUtil.isEmpty(templateKId)) { code = false; error = error.append(";").append(userEntity.getRealName() + ":微信公众号模板id未创建!"); messageMonitorMapper.create(monitorEntity); continue; } if (StringUtil.isEmpty(appId)) { code = false; error = error.append(";").append(userEntity.getRealName() + ":公众号appid为空为空!"); messageMonitorMapper.create(monitorEntity); continue; } if (StringUtil.isEmpty(appsecret)) { code = false; error = error.append(";").append(userEntity.getRealName() + ":公众号appsecret为空为空!"); messageMonitorMapper.create(monitorEntity); continue; } // 获取微信公众号的token String token = WXGZHWebChatUtil.getAccessToken(appId, appsecret); if (StringUtil.isEmpty(token)) { code = false; error = error.append(";").append(userEntity.getRealName() + ":获取微信公众号token失败!"); messageMonitorMapper.create(monitorEntity); continue; } // 微信公众号发送消息 String msg = contentMsg.get(userId) != null ? contentMsg.get(userId) : "{}"; byte[] bytes = msg.getBytes(StandardCharsets.UTF_8); String encode = Base64.getEncoder().encodeToString(bytes); //流程审批页面链接地址 String pcLink = "/workFlowDetail?config=" + encode; String appLink = "/pages/workFlow/flowBefore/index?config=" + encode; //转换为短链 String shortLink = shortLInkMapper.shortLink(pcLink + userId + msgTemEntity.getMessageType()); shortLink = getShortLink(pcLink, userId, shortLink, msgTemEntity.getMessageType()); if (!"1".equals(type)) { //链接数据保存 this.saveShortLink(pcLink, appLink, shortLink, userInfo, userId, msg); } String link = configValueUtil.getApiDomain() + "/api/message/ShortLink/" + shortLink; if (StringUtil.isNotBlank(userInfo.getTenantId())) { link = link + "/" + userInfo.getTenantId(); } if (ObjectUtil.isNotEmpty(smsMap)) { for (String key : smsMap.keySet()) { if (smsMap.get(key).equals("@FlowLink")) { smsMap.put(key, link); } } } else { code = false; error = error.append(";").append(userEntity.getRealName() + ":公众号模板参数为空!"); messageMonitorMapper.create(monitorEntity); continue; } WechatUserEntity wechatUserEntity = wechatUserMapper.getInfoByGzhId(userId, accountEntity.getAppKey()); if (wechatUserEntity != null) { if (StringUtil.isNotBlank(wechatUserEntity.getOpenId())) { String openid = wechatUserEntity.getOpenId(); String apptoken = authUtil.loginTempUser(userId, userInfo.getTenantId()); String pagepath = "/pages/workFlow/flowBefore/index?config=" + encode + "&token=" + apptoken; if (ObjectUtil.isNotEmpty(smsMap)) { //参数封装 String message = WXGZHWebChatUtil.messageJson(templateKId, openid, wxxcxAppId, pagepath, smsMap, title, type, link); //发送信息 retJson = WXGZHWebChatUtil.sendMessage(token, message); } JSONObject rstObj = WXGZHWebChatUtil.getMessageList(token); List wxgzhMessageModelList = JsonUtil.getJsonToList(rstObj.get("template_list"), WxgzhMessageModel.class); WxgzhMessageModel messageModel = wxgzhMessageModelList.stream().filter(t -> t.getTemplateId().equals(templateKId)).findFirst().orElse(null); if (ObjectUtil.isNotEmpty(messageModel)) { content = messageModel.getContent(); if (StringUtil.isNotBlank(content) && !"null".equals(content)) { if (ObjectUtil.isNotEmpty(smsMap) && !"null".equals(smsMap)) { if (content.contains(".DATA}")) { for (String key : smsMap.keySet()) { content = content.replace(key, smsMap.get(key).toString()); } } } } } if (!retJson.getBoolean("code")) { code = false; error = error.append(";").append(userEntity.getRealName() + ":" + retJson.get("error")); messageMonitorMapper.create(monitorEntity); continue; } messageMonitorMapper.create(monitorEntity); continue; } else { code = false; error = error.append(";").append(userEntity.getRealName() + ":" + "账号未绑定公众号"); messageMonitorMapper.create(monitorEntity); continue; } } else { code = false; error = error.append(";").append(userEntity.getRealName() + ":" + "账号未绑定公众号"); messageMonitorMapper.create(monitorEntity); continue; } } if (code) { retJson.put("code", true); retJson.put("error", MsgCode.SU012.get()); } else { String msg = error.toString(); if (StringUtil.isNotBlank(msg)) { msg = msg.substring(1); } retJson.put("code", false); retJson.put("error", msg); } return retJson; } public boolean sentNotice(List toUserIds, MessageEntity entity) { // 存到redis中的key对象 UserInfo userInfo = UserProvider.getUser(); List idList = new ArrayList<>(); // 修改发送状态 entity.setEnabledMark(1); entity.setLastModifyTime(new Date()); entity.setLastModifyUserId(userInfo.getUserId()); messageMapper.updateById(entity); // 存到redis,生成Redis的key Callable executeInsert = () -> { executeInsert(toUserIds, idList); return true; }; Future submit = ThreadPoolExecutorUtil.getExecutor().submit(executeInsert); try { if (submit.get()) { // 执行发送公告操作 Runnable runnable = () -> executeBatch(idList, entity, userInfo); ThreadPoolExecutorUtil.getExecutor().submit(runnable); } return true; } catch (Exception e) { // 还原公告状态 entity.setEnabledMark(0); entity.setLastModifyTime(null); entity.setLastModifyUserId(null); messageMapper.updateById(entity); } return false; } private void executeBatch(List idList, MessageEntity entity, UserInfo userInfo) { if (idList.size() == 0 || "3".equals(String.valueOf(entity.getRemindCategory()))) { return; } SentMessageForm sentMessageForm = new SentMessageForm(); List toUserId = new ArrayList<>(); for (String cacheKey : idList) { List cacheValue = (List) redisUtil.get(cacheKey, 0, -1); toUserId.addAll(cacheValue); } sentMessageForm.setToUserIds(toUserId); sentMessageForm.setTitle(entity.getTitle()); sentMessageForm.setContent(entity.getBodyText()); sentMessageForm.setContentMsg(Collections.EMPTY_MAP); sentMessageForm.setUserInfo(userInfo); sentMessageForm.setType(1); sentMessageForm.setId(entity.getId()); // 站内信 if ("1".equals(String.valueOf(entity.getRemindCategory()))) { message(sentMessageForm); } else if ("2".equals(String.valueOf(entity.getRemindCategory()))) { SendMessageConfigEntity sendMessageConfigEntity = sendMessageConfigMapper.getInfo(entity.getSendConfigId()); if (sendMessageConfigEntity != null) { List configTemplateEntityList = sendConfigTemplateMapper.getDetailListByParentId(sendMessageConfigEntity.getId()); for (SendConfigTemplateEntity sendConfigTemplateEntity : configTemplateEntityList) { Map map = new HashMap<>(); map.put("Title", entity.getTitle()); map.put("Content", entity.getBodyText()); map.put("Remark", entity.getExcerpt()); Map paramMap = new HashMap<>(); paramMap.put("@Title", entity.getTitle()); paramMap.put("@Content", entity.getBodyText()); paramMap.put("@Remark", entity.getExcerpt()); paramMap.put("@CreatorUserName", userInfo.getUserName()); paramMap.put("@SendTime", DateUtil.getNow().substring(11)); paramMap.put(sendConfigTemplateEntity.getId()+"@Title", entity.getTitle()); paramMap.put(sendConfigTemplateEntity.getId()+"@Content", entity.getBodyText()); paramMap.put(sendConfigTemplateEntity.getId()+"@Remark", entity.getExcerpt()); paramMap.put(sendConfigTemplateEntity.getId()+"@CreatorUserName", userInfo.getUserName()); paramMap.put(sendConfigTemplateEntity.getId()+"@SendTime", DateUtil.getNow().substring(11)); switch (sendConfigTemplateEntity.getMessageType()) { case "1": MessageTemplateConfigEntity configEntity = messageTemplateConfigMapper.getInfo(sendConfigTemplateEntity.getTemplateId()); if (configEntity != null) { sentMessageForm.setTitle(configEntity.getTitle()); } message(sentMessageForm); break; case "2": // 邮件 sentMessageUtil.SendMail(toUserId, userInfo, "2", sendConfigTemplateEntity, new HashMap<>(), map); break; case "3": // 发送短信 sentMessageUtil.sendSms(toUserId, userInfo, sendConfigTemplateEntity, paramMap, new HashMap<>()); break; case "4": // 钉钉 JSONObject jsonObject1 = sentMessageUtil.SendDingTalk(toUserId, userInfo, "4", sendConfigTemplateEntity, new HashMap<>(), map); if (!(Boolean) jsonObject1.get("code")) { log.error("发送企业微信消息失败,错误:" + jsonObject1.get("error")); } break; case "5": // 企业微信 JSONObject jsonObject = sentMessageUtil.SendQyWebChat(toUserId, userInfo, "5", sendConfigTemplateEntity, new HashMap<>(), map); if (!(Boolean) jsonObject.get("code")) { log.error("发送企业微信消息失败,错误:" + jsonObject.get("error")); } break; case "6": // webhook this.SendWebHook(null, userInfo, sendConfigTemplateEntity, new HashMap<>(), map); break; case "7": // 微信公众号 this.SendWXGzhChat(toUserId, userInfo, "7", sendConfigTemplateEntity, new HashMap<>(), paramMap); break; default: break; } } } } } private void message(SentMessageForm sentMessageForm) { List toUserIds = sentMessageForm.getToUserIds(); Integer type = sentMessageForm.getType(); String title = sentMessageForm.getTitle(); String content = sentMessageForm.getContent(); String bodyText = Objects.equals(type, 3) ? content : JsonUtil.getObjectToString(sentMessageForm.getContentMsg()); UserInfo userInfo = sentMessageForm.getUserInfo(); MessageReceiveEntity messageReceiveEntity = new MessageReceiveEntity(); messageReceiveEntity.setIsRead(0); messageReceiveEntity.setId(RandomUtil.uuId()); messageReceiveEntity.setType(sentMessageForm.getType()); if (type != null) { messageReceiveEntity.setId(sentMessageForm.getId()); messageReceiveEntity.setType(type); messageReceiveEntity.setCreatorUserId(userInfo.getUserId()); messageReceiveEntity.setCreatorTime(DateUtil.getNowDate()); } //消息监控写入 MessageMonitorEntity monitorEntity = new MessageMonitorEntity(); MessageEntity messageEntity = messageMapper.getInfo(sentMessageForm.getId()); if (!"1".equals(String.valueOf(messageReceiveEntity.getType()))) { monitorEntity.setMessageSource(sentMessageForm.getType() + ""); messageReceiveEntity.setFlowType(sentMessageForm.getFlowType()); monitorEntity.setTitle(title); } else { monitorEntity.setMessageSource("1"); title = title.replaceAll("\\{@Title}", messageEntity.getTitle()) .replaceAll("\\{@CreatorUserName}", userInfo.getUserName()) .replaceAll("\\{@SendTime}", DateUtil.getNow().substring(11)) .replaceAll("\\{@Content}", messageEntity.getBodyText()) .replaceAll("\\{@Remark}", StringUtil.isNotEmpty(messageEntity.getExcerpt()) ? messageEntity.getExcerpt() : ""); monitorEntity.setTitle(title); MessageEntity messageEntity2 = new MessageEntity(); messageEntity2.setId(messageEntity.getId()); bodyText = JsonUtil.getObjectToString(messageEntity2); } Map map = new HashMap<>(); for (String item : toUserIds) { MessageReceiveEntity messageReceiveEntitys = new MessageReceiveEntity(); BeanUtils.copyProperties(messageReceiveEntity, messageReceiveEntitys); messageReceiveEntitys.setId(RandomUtil.uuId()); messageReceiveEntitys.setUserId(item); messageReceiveEntitys.setTitle(title); // if(ObjectUtil.isNotEmpty(messageEntity)) { // messageReceiveEntitys.setTitle(title.replaceAll("\\{@Title}", messageEntity.getTitle()) // .replaceAll("\\{@CreatorUserName}", userInfo.getUserName()) // .replaceAll("\\{@Content}", messageEntity.getBodyText()) // .replaceAll("\\{@Remark}", StringUtil.isNotEmpty(messageEntity.getExcerpt()) ? messageEntity.getExcerpt() : "")); // } messageReceiveEntitys.setBodyText(bodyText); messagereceiveMapper.insert(messageReceiveEntitys); map.put(messageReceiveEntitys.getUserId(), messageReceiveEntitys); } monitorEntity.setId(RandomUtil.uuId()); monitorEntity.setMessageType("1"); monitorEntity.setReceiveUser(JsonUtil.getObjectToString(toUserIds)); monitorEntity.setSendTime(DateUtil.getNowDate()); monitorEntity.setCreatorTime(DateUtil.getNowDate()); monitorEntity.setCreatorUserId(userInfo.getUserId()); monitorEntity.setContent(content); messageMonitorMapper.insert(monitorEntity); //消息推送 - PC端 PushMessageUtil.pushMessage(map, userInfo, type != null ? type : 2); } /** * 数据存到redis中 * * @param toUserIds 接受者id */ private void executeInsert(List toUserIds, List idList) throws Exception { List key = new ArrayList<>(); try { int frequency = 10000; int count = toUserIds.size() / frequency + 1; if (toUserIds.size() < 1) return; for (int i = 0; i < count; i++) { // 生成redis的key String cacheKey = RandomUtil.uuId() + toUserIds.get(i); // 存到redis int endSize = Math.min(((i + 1) * frequency), toUserIds.size()); redisUtil.insert(cacheKey, toUserIds.subList(i * frequency, endSize)); key.add(cacheKey); } } catch (Exception e) { key.forEach(k -> redisUtil.remove(k)); key.clear(); throw new Exception(); } idList.addAll(key); } public void saveShortLink(String pcLink, String appLink, String shortLink, UserInfo userInfo, String userId, String bodyText) { ShortLinkEntity shortLinkEntity = shortLInkMapper.getInfoByLink(shortLink); if (shortLinkEntity == null) { ShortLinkEntity entity = new ShortLinkEntity(); Map sysConfig = getSystemConfig(); String linkTime = sysConfig.get("linkTime"); Integer isClick = 0; if (StringUtil.isNotBlank(sysConfig.get("isClick")) && !"null".equals(sysConfig.get("isClick"))) { isClick = Integer.parseInt(sysConfig.get("isClick")); } int unClickNum = 20; if (StringUtil.isNotBlank(sysConfig.get("unClickNum")) && !"null".equals(sysConfig.get("unClickNum"))) { unClickNum = Integer.parseInt(sysConfig.get("unClickNum")); } entity.setId(RandomUtil.uuId()); entity.setRealPcLink(pcLink); entity.setRealAppLink(appLink); entity.setShortLink(shortLink); entity.setBodyText(bodyText); // entity.setTenantId(userInfo.getTenantId()); entity.setUserId(userId); entity.setIsUsed(isClick); entity.setUnableNum(unClickNum); entity.setClickNum(0); if (StringUtil.isNotEmpty(linkTime)) { Date unableTime = SentMessageUtil.getUnableTime(linkTime); entity.setUnableTime(unableTime); } else { entity.setUnableTime(DateUtil.dateAddHours(DateUtil.getNowDate(), 24)); } entity.setCreatorTime(DateUtil.getNowDate()); entity.setCreatorUserId(userInfo.getUserId()); shortLInkMapper.insert(entity); } } private Map getSystemConfig() { // 获取系统配置 List configList = sysconfigService.getList("SysConfig"); Map objModel = new HashMap<>(16); for (SysConfigEntity entity : configList) { objModel.put(entity.getFkey(), entity.getValue()); } return objModel; } private String getShortLink(String pcLink, String userId, String shortLink, String type) { if (StringUtil.isNotBlank(shortLink)) { ShortLinkEntity entity = shortLInkMapper.getInfoByLink(shortLink); if (entity != null) { if (pcLink.equals(entity.getRealPcLink())) { return shortLink; } else { shortLink = shortLInkMapper.shortLink(pcLink + userId + type); return getShortLink(pcLink, userId, shortLink, type); } } else { return shortLink; } } else { shortLink = shortLInkMapper.shortLink(pcLink + userId + type); return getShortLink(pcLink, userId, shortLink, type); } } }