MessageExtendService.java 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. package com.qxgmat.service.extend;
  2. import com.nuliji.tools.exception.ParameterException;
  3. import com.nuliji.tools.exception.SystemException;
  4. import com.qxgmat.data.constants.enums.MessageCategory;
  5. import com.qxgmat.data.constants.enums.MessageMethod;
  6. import com.qxgmat.data.constants.enums.MessageType;
  7. import com.qxgmat.data.dao.entity.*;
  8. import com.qxgmat.help.MailHelp;
  9. import com.qxgmat.help.WechatHelp;
  10. import com.qxgmat.service.inline.MessageTemplateService;
  11. import com.qxgmat.service.inline.UserMessageService;
  12. import org.apache.logging.log4j.util.Strings;
  13. import org.springframework.stereotype.Service;
  14. import javax.annotation.Resource;
  15. import java.util.*;
  16. import java.util.stream.Collectors;
  17. @Service
  18. public class MessageExtendService {
  19. @Resource
  20. private MailHelp mailHelp;
  21. @Resource
  22. private WechatHelp wechatHelp;
  23. @Resource
  24. private UserMessageService userMessageService;
  25. @Resource
  26. private MessageTemplateService messageTemplateService;
  27. @Resource
  28. private ToolsService toolsService;
  29. private void send(User user, MessageCategory category, Map<String, String>params){
  30. List<MessageTemplate> templateList = messageTemplateService.listByCategory(category);
  31. for(MessageTemplate template : templateList){
  32. MessageMethod messageMethod = MessageMethod.ValueOf(template.getMessageMethod());
  33. String title = replaceBody(template.getTitle(), params);
  34. String content = replaceBody(template.getContent(), params);
  35. switch(messageMethod){
  36. case EMAIL:
  37. sendEmail(params.getOrDefault("emails", user.getEmail()), title, content);
  38. break;
  39. case INSIDE:
  40. sendInside(user.getId(), title, content, template.getLink(), category);
  41. break;
  42. case WECHAT:
  43. sendWechat(user.getWechatOpenidWechat(), category, params);
  44. break;
  45. default:
  46. throw new ParameterException("消息发送方式错误");
  47. }
  48. messageTemplateService.accumulation(template.getId(), 1);
  49. }
  50. }
  51. private UserMessage sendInside(Integer userId, String title, String content, String link, MessageCategory category){
  52. // 根据模版创建
  53. return userMessageService.add(UserMessage.builder()
  54. .userId(userId)
  55. .title(title)
  56. .content(content)
  57. .link(link)
  58. .type(MessageType.FromCategory(category).key)
  59. .isRead(0)
  60. .build());
  61. }
  62. private void sendEmail(String emails, String title, String body){
  63. mailHelp.sendBaseMail(emails, title, body);
  64. }
  65. private void sendWechat(String openId, MessageCategory category, Map<String, String> params){
  66. wechatHelp.sendMessage(openId, category, params);
  67. }
  68. public void sendCustom(User user, MessageTemplate template, Map<String, String>params){
  69. MessageMethod messageMethod = MessageMethod.ValueOf(template.getMessageMethod());
  70. String title = replaceBody(template.getTitle(), params);
  71. String content = replaceBody(template.getContent(), params);
  72. switch(messageMethod){
  73. case EMAIL:
  74. sendEmail(user.getEmail(), title, content);
  75. break;
  76. case INSIDE:
  77. sendInside(user.getId(), title, content, template.getLink(), MessageCategory.CUSTOM);
  78. break;
  79. default:
  80. throw new ParameterException("消息发送方式错误");
  81. }
  82. }
  83. /**
  84. * 发送邀请邮件
  85. * @param emails
  86. */
  87. public void sendInviteEmail(User user, String[] emails, String code){
  88. Map<String, String> map = new HashMap<>();
  89. map.put("emails", Strings.join(Arrays.stream(emails).collect(Collectors.toList()), ';'));
  90. map.put("code", code);
  91. send(user, MessageCategory.INVITED, map);
  92. }
  93. /**
  94. * 发送机经更新
  95. */
  96. public void sendTextbookUpdate(User user, TextbookLibrary textbookLibrary){
  97. Map<String, String> map = new HashMap<>();
  98. send(user, MessageCategory.TEXTBOOK_UPDATE, map);
  99. }
  100. /**
  101. * 发送登录异常
  102. */
  103. public void sendLoginAbnormal(User user, UserAbnormal userAbnormal){
  104. Map<String, String> map = new HashMap<>();
  105. send(user, MessageCategory.LOGIN_ABNORMAL, map);
  106. }
  107. /**
  108. * 发送预习作业到期通知:6小时,去除夜间12-7点
  109. * 课程名称:{courseTitle}
  110. * 作业名称:{assignTitle}
  111. */
  112. public void sendPreviewNotice(User user, Course course, PreviewAssign previewAssign){
  113. Map<String, String> map = new HashMap<>();
  114. send(user, MessageCategory.PREVIEW_NOTICE, map);
  115. }
  116. /**
  117. * 购买成功提醒
  118. * 购买服务,课程名:{title}
  119. * 支付金额:{money}
  120. * 开通有效期:{expireTime}
  121. */
  122. public void sendPayed(User user, UserOrder userOrder){
  123. Map<String, String> map = new HashMap<>();
  124. send(user, MessageCategory.PAYED, map);
  125. }
  126. /**
  127. * 发送资料更新
  128. * 资料名称:{title}
  129. * 更新时间:{updateTime}
  130. */
  131. public void sendDataUpdate(User user, CourseData data, CourseDataHistory history){
  132. Map<String, String> map = new HashMap<>();
  133. send(user, MessageCategory.DATA_UPDATE, map);
  134. }
  135. /**
  136. * 提问回复
  137. * 提问简介:{content}
  138. * 提问时间:{askTime}
  139. * 提问状态:{status}, 精选、隐藏
  140. */
  141. public void sendAskQuestion(User user,UserAskQuestion userAskQuestion){
  142. Map<String, String> map = new HashMap<>();
  143. send(user, MessageCategory.ASK_QUESTION, map);
  144. }
  145. /**
  146. * 提问回复
  147. * 提问简介:{content}
  148. * 提问时间:{askTime}
  149. * 提问状态:{status}, 精选、隐藏
  150. */
  151. public void sendAskCourse(User user, UserAskCourse userAskCourse){
  152. Map<String, String> map = new HashMap<>();
  153. send(user, MessageCategory.ASK_COURSE, map);
  154. }
  155. /**
  156. * 咨询回复
  157. * 咨询板块
  158. * 咨询简介
  159. */
  160. public void sendFaqCallback(User user, Faq faq){
  161. Map<String, String> map = new HashMap<>();
  162. send(user, MessageCategory.FAQ_CALLBACK, map);
  163. }
  164. /**
  165. * 纠错回复
  166. * 咨询板块
  167. * 咨询简介
  168. */
  169. public void sendFeedbackAnswer(User user, UserFeedbackError feedbackError){
  170. Map<String, String> map = new HashMap<>();
  171. send(user, MessageCategory.FEEDBACK_CALLBACK, map);
  172. }
  173. /**
  174. * 注册成功通知
  175. * @param user
  176. */
  177. public void sendRegister(User user){
  178. Map<String, String> map = new HashMap<>();
  179. send(user, MessageCategory.REGISTER, map);
  180. }
  181. /**
  182. * 邮箱变更
  183. * @param user
  184. */
  185. public void sendEmailChange(User user){
  186. Map<String, String> map = new HashMap<>();
  187. send(user, MessageCategory.EMAIL_CHANGE, map);
  188. }
  189. private String replaceBody(String body, Map<String, String> params){
  190. for(String key :params.keySet()){
  191. body = body.replaceAll("{"+key+"}", params.get(key));
  192. }
  193. return body;
  194. }
  195. }