package com.sooka.sponest.event.utils; import com.ruoyi.common.core.utils.SpringUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.domain.SysUser; import com.sooka.sponest.evaluation.api.RemoteEvaluationService; import com.sooka.sponest.evaluation.api.domain.EvaluationVo; import com.sooka.sponest.event.centereventteventcatalogue.domain.CentereventTEventcatalogue; import com.sooka.sponest.message.api.RemoteMessageService; import com.sooka.sponest.message.api.domain.MessageJiGuangVo; import com.sooka.sponest.message.api.domain.MessagePushrecordVo; import com.sooka.sponest.message.api.domain.MessageVo; import com.sooka.sponest.monitor.api.RemoteMonitorService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; /** * @Auther: mjq * @Date: 2023/6/29 - 06 - 29 - 8:54 * @Description: 发送短信和推送工具类 * @version: 1.0 */ @Component public class RemoteApiUtil { private static final Logger logger = LoggerFactory.getLogger(RemoteApiUtil.class); private static RemoteApiUtil instance; public static RemoteApiUtil getInstance() { if (instance == null) { instance = SpringUtils.getBean(RemoteApiUtil.class); } return instance; } /** * 发送短信和极光 * * @param phones * @param userIds * @param message * @param eventCode * @param eventName */ public void sendMessageAndJg(Set phones, Set userIds, String message, String eventCode, String eventName) { sendMessage(phones, message, eventCode, eventName); sendJGMessage(userIds, message, eventCode); } /** * 发送短信 * * @param phones * @param message * @param eventCode * @param eventName */ public void sendMessage(Set phones, String message, String eventCode, String eventName) { if (StringUtils.isNotEmpty(phones) && StringUtils.isNotBlank(message)) { //腾讯短信 MessageVo messageVo = new MessageVo(); messageVo.setType("1"); messageVo.setPhones(phones.toArray(new String[0])); messageVo.setContent(new String[]{message}); messageVo.setEventCode(StringUtils.isBlank(eventCode) ? "" : eventCode); messageVo.setEventName(StringUtils.isBlank(eventName) ? "" : eventName); SpringUtils.getBean(RemoteMessageService.class).sendTxMessage(messageVo); //阿里云短信 // RequestAttributes attributes = RequestContextHolder.getRequestAttributes();// 异步之前获取上下文 // List futures = new ArrayList<>(); // phones.forEach(item -> { // MessageVo messageVo = new MessageVo(); // messageVo.setPhone(item); // messageVo.setStr(message); // messageVo.setEventCode(StringUtils.isBlank(eventCode) ? "" : eventCode); // messageVo.setEventName(StringUtils.isBlank(eventName) ? "" : eventName); // futures.add(CompletableFuture.supplyAsync(() -> { // RequestContextHolder.setRequestAttributes(attributes); // try { // return SpringUtils.getBean(RemoteMessageService.class).sendMessage(messageVo); // } catch (Exception e) { // logger.error(e.getMessage()); // } // return null; // })); // }); // CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join(); } } /** * 极光推送 * * @param userIds * @param message * @param eventCode */ public void sendJGMessage(Set userIds, String message, String eventCode) { if (StringUtils.isNotEmpty(userIds) && StringUtils.isNotBlank(message)) { RequestAttributes attributes = RequestContextHolder.getRequestAttributes();// 异步之前获取上下文 List futures = new ArrayList<>(); userIds.forEach(item -> { MessageJiGuangVo messageJiGuangVo = new MessageJiGuangVo(); messageJiGuangVo.setType("1"); messageJiGuangVo.setUserId(item); messageJiGuangVo.setTitle("通知"); messageJiGuangVo.setContent(message); messageJiGuangVo.setEventCode(StringUtils.isBlank(eventCode) ? "" : eventCode); futures.add(CompletableFuture.supplyAsync(() -> { RequestContextHolder.setRequestAttributes(attributes); try { return SpringUtils.getBean(RemoteMessageService.class).sendJGMessageEvent(messageJiGuangVo); } catch (Exception e) { logger.error(e.getMessage()); } return null; })); }); CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join(); } } /** * 可视化消息推送 * * @param deptIds * @param message * @param eventCode */ public void insertCentermessageTPushrecord(List deptIds, String message, String eventCode) { if (StringUtils.isNotEmpty(deptIds) && StringUtils.isNotBlank(message)) { RequestAttributes attributes = RequestContextHolder.getRequestAttributes();// 异步之前获取上下文 MessagePushrecordVo messagePushrecordVo = new MessagePushrecordVo(); messagePushrecordVo.setType("1"); messagePushrecordVo.setDeptIds(deptIds); messagePushrecordVo.setTitle("通知"); messagePushrecordVo.setContent(message); messagePushrecordVo.setEventCode(StringUtils.isBlank(eventCode) ? "" : eventCode); CompletableFuture future = CompletableFuture.runAsync(() -> { RequestContextHolder.setRequestAttributes(attributes); try { SpringUtils.getBean(RemoteMessageService.class).insertCentermessageTPushrecord(messagePushrecordVo); } catch (Exception e) { logger.error(e.getMessage()); } }); try { future.get(); } catch (InterruptedException e) { logger.error(e.getMessage()); Thread.currentThread().interrupt(); } catch (ExecutionException e) { logger.error(e.getMessage()); } } } /** * 更改消息状态为已读 * * @param eventCode */ public void updateMessageByEventCode(String eventCode) { if (StringUtils.isNotBlank(eventCode)) { RequestAttributes attributes = RequestContextHolder.getRequestAttributes();// 异步之前获取上下文 CompletableFuture future = CompletableFuture.runAsync(() -> { RequestContextHolder.setRequestAttributes(attributes); try { SpringUtils.getBean(RemoteMessageService.class).updateMessageByEventCode(eventCode); } catch (Exception e) { logger.error(e.getMessage()); } }); try { future.get(); } catch (InterruptedException e) { logger.error(e.getMessage()); Thread.currentThread().interrupt(); } catch (ExecutionException e) { logger.error(e.getMessage()); } } } @Value("${sooka.dahuafile:}") private Boolean dahuaFile; /** * 获取大华token * * @return */ public String getToken() { if (dahuaFile) { return SpringUtils.getBean(RemoteMonitorService.class).getToken(); } return ""; } /** * 新增测评考核 * * @param centereventTEventcatalogue * @param evaluationRule */ public void addFen(CentereventTEventcatalogue centereventTEventcatalogue, String evaluationRule) { if (StringUtils.isNotNull(centereventTEventcatalogue)) { RequestAttributes attributes = RequestContextHolder.getRequestAttributes();// 异步之前获取上下文 SysUser user = SecurityUtils.getLoginUser().getSysUser(); EvaluationVo evaluation = new EvaluationVo(); evaluation.setEvaluationUserId(SecurityUtils.getUserId()); evaluation.setEvaluationUserName(user.getNickName()); evaluation.setEvaluationDeptId(centereventTEventcatalogue.getDeptId()); evaluation.setEvaluationDeptName(centereventTEventcatalogue.getDeptName()); evaluation.setEvaluationRule("evaluation_rule_" + evaluationRule); evaluation.setEventCode(centereventTEventcatalogue.getEventCode()); evaluation.setEventName(centereventTEventcatalogue.getEventName()); evaluation.setCreateBy(SecurityUtils.getUserId().toString()); evaluation.setCreateName(user.getNickName()); CompletableFuture future = CompletableFuture.runAsync(() -> { RequestContextHolder.setRequestAttributes(attributes); try { SpringUtils.getBean(RemoteEvaluationService.class).addFen(evaluation); } catch (Exception e) { logger.error(e.getMessage()); } }); try { future.get(); } catch (InterruptedException e) { logger.error(e.getMessage()); Thread.currentThread().interrupt(); } catch (ExecutionException e) { logger.error(e.getMessage()); } } } public static String encodeUrl(String input) { try { // 使用 URLEncoder 类的 encode 方法对输入字符串进行编码 return URLEncoder.encode(input, "UTF-8"); } catch (Exception e) { logger.error(e.getMessage()); } return null; } }