RemoteApiUtil.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. package com.sooka.sponest.event.utils;
  2. import com.ruoyi.common.core.utils.SpringUtils;
  3. import com.ruoyi.common.core.utils.StringUtils;
  4. import com.ruoyi.common.security.utils.SecurityUtils;
  5. import com.ruoyi.system.api.domain.SysUser;
  6. import com.sooka.sponest.evaluation.api.RemoteEvaluationService;
  7. import com.sooka.sponest.evaluation.api.domain.EvaluationVo;
  8. import com.sooka.sponest.event.centereventteventcatalogue.domain.CentereventTEventcatalogue;
  9. import com.sooka.sponest.message.api.RemoteMessageService;
  10. import com.sooka.sponest.message.api.domain.MessageJiGuangVo;
  11. import com.sooka.sponest.message.api.domain.MessagePushrecordVo;
  12. import com.sooka.sponest.message.api.domain.MessageVo;
  13. import com.sooka.sponest.monitor.api.RemoteMonitorService;
  14. import org.slf4j.Logger;
  15. import org.slf4j.LoggerFactory;
  16. import org.springframework.beans.factory.annotation.Value;
  17. import org.springframework.stereotype.Component;
  18. import org.springframework.web.context.request.RequestAttributes;
  19. import org.springframework.web.context.request.RequestContextHolder;
  20. import java.net.URLEncoder;
  21. import java.util.ArrayList;
  22. import java.util.List;
  23. import java.util.Set;
  24. import java.util.concurrent.CompletableFuture;
  25. import java.util.concurrent.ExecutionException;
  26. /**
  27. * @Auther: mjq
  28. * @Date: 2023/6/29 - 06 - 29 - 8:54
  29. * @Description: 发送短信和推送工具类
  30. * @version: 1.0
  31. */
  32. @Component
  33. public class RemoteApiUtil {
  34. private static final Logger logger = LoggerFactory.getLogger(RemoteApiUtil.class);
  35. private static RemoteApiUtil instance;
  36. public static RemoteApiUtil getInstance() {
  37. if (instance == null) {
  38. instance = SpringUtils.getBean(RemoteApiUtil.class);
  39. }
  40. return instance;
  41. }
  42. /**
  43. * 发送短信和极光
  44. *
  45. * @param phones
  46. * @param userIds
  47. * @param message
  48. * @param eventCode
  49. * @param eventName
  50. */
  51. public void sendMessageAndJg(Set<String> phones, Set<Long> userIds, String message, String eventCode, String eventName) {
  52. sendMessage(phones, message, eventCode, eventName);
  53. sendJGMessage(userIds, message, eventCode);
  54. }
  55. /**
  56. * 发送短信
  57. *
  58. * @param phones
  59. * @param message
  60. * @param eventCode
  61. * @param eventName
  62. */
  63. public void sendMessage(Set<String> phones, String message, String eventCode, String eventName) {
  64. if (StringUtils.isNotEmpty(phones) && StringUtils.isNotBlank(message)) {
  65. //腾讯短信
  66. MessageVo messageVo = new MessageVo();
  67. messageVo.setType("1");
  68. messageVo.setPhones(phones.toArray(new String[0]));
  69. messageVo.setContent(new String[]{message});
  70. messageVo.setEventCode(StringUtils.isBlank(eventCode) ? "" : eventCode);
  71. messageVo.setEventName(StringUtils.isBlank(eventName) ? "" : eventName);
  72. SpringUtils.getBean(RemoteMessageService.class).sendTxMessage(messageVo);
  73. //阿里云短信
  74. // RequestAttributes attributes = RequestContextHolder.getRequestAttributes();// 异步之前获取上下文
  75. // List<CompletableFuture> futures = new ArrayList<>();
  76. // phones.forEach(item -> {
  77. // MessageVo messageVo = new MessageVo();
  78. // messageVo.setPhone(item);
  79. // messageVo.setStr(message);
  80. // messageVo.setEventCode(StringUtils.isBlank(eventCode) ? "" : eventCode);
  81. // messageVo.setEventName(StringUtils.isBlank(eventName) ? "" : eventName);
  82. // futures.add(CompletableFuture.supplyAsync(() -> {
  83. // RequestContextHolder.setRequestAttributes(attributes);
  84. // try {
  85. // return SpringUtils.getBean(RemoteMessageService.class).sendMessage(messageVo);
  86. // } catch (Exception e) {
  87. // logger.error(e.getMessage());
  88. // }
  89. // return null;
  90. // }));
  91. // });
  92. // CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
  93. }
  94. }
  95. /**
  96. * 极光推送
  97. *
  98. * @param userIds
  99. * @param message
  100. * @param eventCode
  101. */
  102. public void sendJGMessage(Set<Long> userIds, String message, String eventCode) {
  103. if (StringUtils.isNotEmpty(userIds) && StringUtils.isNotBlank(message)) {
  104. RequestAttributes attributes = RequestContextHolder.getRequestAttributes();// 异步之前获取上下文
  105. List<CompletableFuture> futures = new ArrayList<>();
  106. userIds.forEach(item -> {
  107. MessageJiGuangVo messageJiGuangVo = new MessageJiGuangVo();
  108. messageJiGuangVo.setType("1");
  109. messageJiGuangVo.setUserId(item);
  110. messageJiGuangVo.setTitle("通知");
  111. messageJiGuangVo.setContent(message);
  112. messageJiGuangVo.setEventCode(StringUtils.isBlank(eventCode) ? "" : eventCode);
  113. futures.add(CompletableFuture.supplyAsync(() -> {
  114. RequestContextHolder.setRequestAttributes(attributes);
  115. try {
  116. return SpringUtils.getBean(RemoteMessageService.class).sendJGMessageEvent(messageJiGuangVo);
  117. } catch (Exception e) {
  118. logger.error(e.getMessage());
  119. }
  120. return null;
  121. }));
  122. });
  123. CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
  124. }
  125. }
  126. /**
  127. * 可视化消息推送
  128. *
  129. * @param deptIds
  130. * @param message
  131. * @param eventCode
  132. */
  133. public void insertCentermessageTPushrecord(List<Long> deptIds, String message, String eventCode) {
  134. if (StringUtils.isNotEmpty(deptIds) && StringUtils.isNotBlank(message)) {
  135. RequestAttributes attributes = RequestContextHolder.getRequestAttributes();// 异步之前获取上下文
  136. MessagePushrecordVo messagePushrecordVo = new MessagePushrecordVo();
  137. messagePushrecordVo.setType("1");
  138. messagePushrecordVo.setDeptIds(deptIds);
  139. messagePushrecordVo.setTitle("通知");
  140. messagePushrecordVo.setContent(message);
  141. messagePushrecordVo.setEventCode(StringUtils.isBlank(eventCode) ? "" : eventCode);
  142. CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
  143. RequestContextHolder.setRequestAttributes(attributes);
  144. try {
  145. SpringUtils.getBean(RemoteMessageService.class).insertCentermessageTPushrecord(messagePushrecordVo);
  146. } catch (Exception e) {
  147. logger.error(e.getMessage());
  148. }
  149. });
  150. try {
  151. future.get();
  152. } catch (InterruptedException e) {
  153. logger.error(e.getMessage());
  154. Thread.currentThread().interrupt();
  155. } catch (ExecutionException e) {
  156. logger.error(e.getMessage());
  157. }
  158. }
  159. }
  160. /**
  161. * 更改消息状态为已读
  162. *
  163. * @param eventCode
  164. */
  165. public void updateMessageByEventCode(String eventCode) {
  166. if (StringUtils.isNotBlank(eventCode)) {
  167. RequestAttributes attributes = RequestContextHolder.getRequestAttributes();// 异步之前获取上下文
  168. CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
  169. RequestContextHolder.setRequestAttributes(attributes);
  170. try {
  171. SpringUtils.getBean(RemoteMessageService.class).updateMessageByEventCode(eventCode);
  172. } catch (Exception e) {
  173. logger.error(e.getMessage());
  174. }
  175. });
  176. try {
  177. future.get();
  178. } catch (InterruptedException e) {
  179. logger.error(e.getMessage());
  180. Thread.currentThread().interrupt();
  181. } catch (ExecutionException e) {
  182. logger.error(e.getMessage());
  183. }
  184. }
  185. }
  186. @Value("${sooka.dahuafile:}")
  187. private Boolean dahuaFile;
  188. /**
  189. * 获取大华token
  190. *
  191. * @return
  192. */
  193. public String getToken() {
  194. if (dahuaFile) {
  195. return SpringUtils.getBean(RemoteMonitorService.class).getToken();
  196. }
  197. return "";
  198. }
  199. /**
  200. * 新增测评考核
  201. *
  202. * @param centereventTEventcatalogue
  203. * @param evaluationRule
  204. */
  205. public void addFen(CentereventTEventcatalogue centereventTEventcatalogue, String evaluationRule) {
  206. if (StringUtils.isNotNull(centereventTEventcatalogue)) {
  207. RequestAttributes attributes = RequestContextHolder.getRequestAttributes();// 异步之前获取上下文
  208. SysUser user = SecurityUtils.getLoginUser().getSysUser();
  209. EvaluationVo evaluation = new EvaluationVo();
  210. evaluation.setEvaluationUserId(SecurityUtils.getUserId());
  211. evaluation.setEvaluationUserName(user.getNickName());
  212. evaluation.setEvaluationDeptId(centereventTEventcatalogue.getDeptId());
  213. evaluation.setEvaluationDeptName(centereventTEventcatalogue.getDeptName());
  214. evaluation.setEvaluationRule("evaluation_rule_" + evaluationRule);
  215. evaluation.setEventCode(centereventTEventcatalogue.getEventCode());
  216. evaluation.setEventName(centereventTEventcatalogue.getEventName());
  217. evaluation.setCreateBy(SecurityUtils.getUserId().toString());
  218. evaluation.setCreateName(user.getNickName());
  219. CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
  220. RequestContextHolder.setRequestAttributes(attributes);
  221. try {
  222. SpringUtils.getBean(RemoteEvaluationService.class).addFen(evaluation);
  223. } catch (Exception e) {
  224. logger.error(e.getMessage());
  225. }
  226. });
  227. try {
  228. future.get();
  229. } catch (InterruptedException e) {
  230. logger.error(e.getMessage());
  231. Thread.currentThread().interrupt();
  232. } catch (ExecutionException e) {
  233. logger.error(e.getMessage());
  234. }
  235. }
  236. }
  237. public static String encodeUrl(String input) {
  238. try {
  239. // 使用 URLEncoder 类的 encode 方法对输入字符串进行编码
  240. return URLEncoder.encode(input, "UTF-8");
  241. } catch (Exception e) {
  242. logger.error(e.getMessage());
  243. }
  244. return null;
  245. }
  246. }