b3972fbeb4470cd0595119e5e52baea38cdcd3a4.svn-base 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. package cn.com.goldenwater.dcproj.task;
  2. import cn.com.goldenwater.dcproj.model.BisInspMtprg;
  3. import cn.com.goldenwater.dcproj.model.BisInspMtprgSmsTm;
  4. import cn.com.goldenwater.dcproj.model.GwSmsLog;
  5. import cn.com.goldenwater.dcproj.param.BisInspMtprgParam;
  6. import cn.com.goldenwater.dcproj.param.BisInspMtprgSmsParam;
  7. import cn.com.goldenwater.dcproj.service.BisInspMtprgService;
  8. import cn.com.goldenwater.dcproj.service.BisInspMtprgSmsService;
  9. import cn.com.goldenwater.dcproj.service.BisInspMtprgSmsTmService;
  10. import cn.com.goldenwater.dcproj.service.GwSmsLogService;
  11. import cn.com.goldenwater.dcproj.utils.Builder;
  12. import cn.com.goldenwater.dcproj.utils.HttpClientUtils;
  13. import cn.com.goldenwater.dcproj.utils.SmsUtil;
  14. import cn.com.goldenwater.dcproj.vo.BisInspMtprgSmsVo;
  15. import cn.com.goldenwater.target.CheckException;
  16. import com.alibaba.fastjson.JSON;
  17. import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
  18. import org.apache.commons.collections.CollectionUtils;
  19. import org.apache.commons.collections.MapUtils;
  20. import org.slf4j.Logger;
  21. import org.slf4j.LoggerFactory;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.beans.factory.annotation.Value;
  24. import org.springframework.scheduling.annotation.Scheduled;
  25. import org.springframework.stereotype.Component;
  26. import java.time.LocalDate;
  27. import java.util.*;
  28. import java.util.stream.Collectors;
  29. /**
  30. * 月报定时任务
  31. *
  32. * @author: LinQiLong
  33. * @create: 2022/2/7 17:59
  34. */
  35. @Component
  36. public class MtprgSmsTask {
  37. private Logger logger = LoggerFactory.getLogger(getClass());
  38. @Value("${api.url}")
  39. private String apiUrl;
  40. @Value("${api.key}")
  41. private String apiKey;
  42. @Value("${api.secrect}")
  43. private String apiSecrect;
  44. @Value("${sms.template}")
  45. private String smsTemplate;
  46. @Value("${sms.mwr.aliyun}")
  47. private String smsMwrAliyun;
  48. @Autowired
  49. private BisInspMtprgSmsService bisInspMtprgSmsService;
  50. @Autowired
  51. private BisInspMtprgService bisInspMtprgService;
  52. @Autowired
  53. private GwSmsLogService gwSmsLogService;
  54. @Autowired
  55. private BisInspMtprgSmsTmService bisInspMtprgSmsTmService;
  56. private Map<String, String> templateParam = new HashMap<>(2);
  57. /**
  58. * 每月底倒数第三天 8:30
  59. */
  60. // @Scheduled(cron = "0 30 8 25-28 * ?")
  61. // @Scheduled(cron = "0 0/2 * * * ?")
  62. /**
  63. * 每天 10:30
  64. */
  65. @Scheduled(cron = "0 30 10 * * ?")
  66. public void sms() {
  67. final Calendar calendar = Calendar.getInstance();
  68. if (calendar.get(Calendar.DATE) == calendar.getActualMaximum(Calendar.DATE) - 3) {
  69. sendMonthlyReport();
  70. }
  71. }
  72. private void sendMonthlyReport() {
  73. LocalDate now = LocalDate.now();
  74. templateParam.put("year", String.valueOf(now.getYear()));
  75. templateParam.put("month", String.valueOf(now.getMonthValue()));
  76. int dayOfMonth = now.getDayOfMonth();
  77. BisInspMtprgSmsParam param = Builder.of(BisInspMtprgSmsParam::new)
  78. .with(BisInspMtprgSmsParam::setIsRemind, "1")
  79. .build();
  80. List<BisInspMtprgSmsVo> list = bisInspMtprgSmsService.list(param);
  81. List<BisInspMtprg> bisInspMtprgList = bisInspMtprgService.findList(Builder.of(BisInspMtprgParam::new)
  82. .with(BisInspMtprgParam::setYear, MapUtils.getLongValue(templateParam, "year"))
  83. .build());
  84. // 筛去当月已填报人员ID
  85. Set<String> perIdSet = bisInspMtprgList.stream()
  86. .filter(m -> getMonths(m.getMonth()).contains(templateParam.get("month")))
  87. .map(BisInspMtprg::getPersId)
  88. .collect(Collectors.toSet());
  89. list = list.stream()
  90. .filter(v -> CollectionUtils.isEmpty(perIdSet) || !perIdSet.contains(v.getUserId()))
  91. .collect(Collectors.toList());
  92. if (CollectionUtils.isNotEmpty(list)) {
  93. List<BisInspMtprgSmsTm> all = bisInspMtprgSmsTmService.findAll();
  94. Optional.ofNullable(all).orElseThrow(() -> new CheckException("月报短信提醒 异常"));
  95. Map<String, List<BisInspMtprgSmsTm>> map = all.stream().collect(Collectors.groupingBy(BisInspMtprgSmsTm::getOrgId));
  96. for (BisInspMtprgSmsVo vo : list) {
  97. List<BisInspMtprgSmsTm> tms = map.get(vo.getOrgId());
  98. //当前日 是设置的推送日。就进行推送
  99. if (CollectionUtils.isNotEmpty(tms)) {
  100. List<Long> dayList = tms.stream().map(BisInspMtprgSmsTm::getDaysOfMonth).collect(Collectors.toList());
  101. if (dayList.contains((long) dayOfMonth)) {
  102. this.sendMessage(vo);
  103. }
  104. }
  105. }
  106. }
  107. }
  108. private Set<String> getMonths(String month) {
  109. Set<String> monthSet = new HashSet<>();
  110. String[] monthArr = month.split(",");
  111. for (String m : monthArr) {
  112. if (m.contains("-")) {
  113. String[] mArr = m.split("-");
  114. int s = Integer.parseInt(mArr[0]);
  115. int e = Integer.parseInt(mArr[1]);
  116. while (e >= s) {
  117. monthSet.add(String.valueOf(s));
  118. s++;
  119. }
  120. } else {
  121. monthSet.add(m);
  122. }
  123. }
  124. return monthSet;
  125. }
  126. /**
  127. * 发送短信(阿里服务)
  128. *
  129. * @param smsVo 邮件信息
  130. */
  131. private void sendMessage(BisInspMtprgSmsVo smsVo) {
  132. Map<String, String> params = new HashMap<>(6);
  133. params.put("apiKey", apiKey);
  134. params.put("apiSecrect", apiSecrect);
  135. params.put("signName", "金水云平台");
  136. params.put("templeteCode", "SMS_234156378");
  137. params.put("mobile", smsVo.getMobilenumb());
  138. params.put("templateParam", JSON.toJSONString(templateParam));
  139. String content = "";
  140. try {
  141. if ("0".equals(smsMwrAliyun)) {
  142. SendSmsResponse sendSmsResponse = SmsUtil.send(params.get("mobile"), params.get("templateParam"), params.get("apiSecrect"), params.get("templeteCode"), params.get("signName"));
  143. content = sendSmsResponse.getMessage();
  144. } else if ("1".equals(smsMwrAliyun)) {
  145. content = HttpClientUtils.simplePostInvoke(apiUrl + "/gateway/api/sms/send", params);
  146. }
  147. logger.info(">> 发送短信【{}】:{}", smsVo.getMobilenumb(), content);
  148. } catch (Exception e) {
  149. logger.error(e.getMessage(), e);
  150. } finally {
  151. // 记录日志
  152. recordLog(smsVo, "统计月报提醒:请您填写" + templateParam.get("year") + "年" + templateParam.get("month") + "月监督检查工作月报。");
  153. }
  154. }
  155. /**
  156. * 记录日志
  157. *
  158. * @param smsVo
  159. */
  160. private void recordLog(BisInspMtprgSmsVo smsVo, String content) {
  161. GwSmsLog log = new GwSmsLog();
  162. log.setType("1");
  163. log.setPhone(smsVo.getMobilenumb());
  164. log.setContent(content);
  165. log.setReturnCode("");
  166. log.setCode("");
  167. log.setUserId("0");
  168. log.setRelUserId(smsVo.getUserId());
  169. gwSmsLogService.insert(log);
  170. }
  171. }