MenuHandler.java 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. package com.book.push.handler;
  2. import com.book.dao.cps.pojo.*;
  3. import com.book.dao.cpsshard.entity.Sign;
  4. import com.book.dao.cpsshard.mapper.SignMapper;
  5. import com.book.dao.cpsshard.pojo.example.SignExample;
  6. import com.book.dao.utils.DateUtils;
  7. import com.book.dao.utils.TimeUtil;
  8. import com.book.push.cons.SiteCons;
  9. import com.book.push.service.dao.*;
  10. import com.book.push.service.push.PushService;
  11. import com.book.push.service.wx.WxThirdPartService;
  12. import me.chanjar.weixin.common.session.WxSessionManager;
  13. import me.chanjar.weixin.mp.api.WxMpService;
  14. import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
  15. import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
  16. import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
  17. import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTextMessage;
  18. import me.chanjar.weixin.mp.builder.kefu.NewsBuilder;
  19. import me.chanjar.weixin.open.api.WxOpenMpService;
  20. import me.chanjar.weixin.open.api.WxOpenService;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.context.annotation.Lazy;
  23. import org.springframework.stereotype.Component;
  24. import java.util.Map;
  25. import java.util.concurrent.TimeUnit;
  26. import static me.chanjar.weixin.common.api.WxConsts.EventType;
  27. /**
  28. * @author 点击菜单事件
  29. */
  30. @Component
  31. public class MenuHandler extends AbstractHandler {
  32. @Autowired
  33. private PushService pushService;
  34. @Autowired
  35. private UserService userService;
  36. @Autowired
  37. private AdminConfigService adminConfigService;
  38. @Autowired
  39. private PlatformService platformService;
  40. @Lazy
  41. @Autowired
  42. private WxThirdPartService wxThirdPartService;
  43. @Autowired
  44. private SignRecommendService signRecommendService;
  45. @Autowired
  46. private SignedRecommendService signedRecommendService;
  47. @Autowired
  48. private ManageTitleService manageTitleService;
  49. @Autowired
  50. private ManageCoverService manageCoverService;
  51. @Autowired
  52. private ConfigService configService;
  53. @Autowired
  54. private BookService bookService;
  55. @Autowired
  56. private SignMapper signMapper;
  57. @Override
  58. public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
  59. Map<String, Object> context, WxMpService weixinService,
  60. WxSessionManager sessionManager) {
  61. if (EventType.VIEW.equals(wxMessage.getEvent())) {
  62. return null;
  63. }
  64. String appid = wxMessage.getToUser();
  65. User user = userService.selectByOpenId(wxMessage.getFromUser());
  66. Config config = configService.selectByName(SiteCons.SIGN_KANDIAN);
  67. int kandian = Integer.valueOf(config.getValue());
  68. Integer channelId = user.getChannelId();
  69. AdminConfig adminConfig = adminConfigService.selectByAdminId(channelId);
  70. Long id = user.getId();
  71. SignExample example = SignExample.newAndCreateCriteria().andUidEqualTo(id.intValue()).andCreatedateEqualTo(TimeUtil.getCurrentIntDate(TimeUtil.YYYYMMDD)).example();
  72. Sign sign = signMapper.selectOneByExample(example);
  73. if ("1".equals(adminConfig.getSignTip())) {
  74. pushMessage(user, adminConfig, appid, sign != null);
  75. }
  76. if (sign == null) {
  77. sign = new Sign();
  78. sign.setUid(id.intValue());
  79. sign.setCreatedate(TimeUtil.getCurrentIntDate(TimeUtil.YYYYMMDD));
  80. sign.setCreatetime(DateUtils.getNow());
  81. sign.setKandian(kandian);
  82. signMapper.insert(sign);
  83. addKandian(user, kandian);
  84. }
  85. return msgAfterSing(appid, user.getOpenid());
  86. }
  87. private WxMpXmlOutMessage msgAfterSing(String appid, String openid) {
  88. //todo 签到后回复
  89. String msg = "<a href=\"weixin://bizmsgmenu?msgmenucontent=签到&msgmenuid=0\">点我签到</a>";
  90. WxMpXmlOutTextMessage wxMpXmlOutTextMessage = WxMpXmlOutMessage.TEXT().content(msg)
  91. .fromUser(appid).toUser(openid)
  92. .build();
  93. return wxMpXmlOutTextMessage;
  94. }
  95. /**
  96. * 添加看点
  97. *
  98. * @param user
  99. * @param kandian
  100. */
  101. private void addKandian(User user, int kandian) {
  102. //TODO
  103. }
  104. /**
  105. * 签到推送
  106. *
  107. * @param user
  108. * @param b 是否已经签到
  109. */
  110. private void pushMessage(User user, AdminConfig adminConfig, String appid, boolean b) {
  111. Long bookId;
  112. if (b) {
  113. SignRecommand signRecommand = signedRecommendService.selectRandom(user.getSex().toString());
  114. bookId = signRecommand.getBookId();
  115. } else {
  116. SignRecommand signRecommand = signRecommendService.selectRandom(user.getSex().toString());
  117. bookId = signRecommand.getBookId();
  118. }
  119. ManageTitle manageTitle = manageTitleService.selectRandom(user.getSex().toString());
  120. ManageCover manageCover = manageCoverService.selectRandom("1", user.getSex().toString());
  121. WxMpKefuMessage.WxArticle wxArticle = new WxMpKefuMessage.WxArticle();
  122. wxArticle.setTitle(manageTitle.getTitle());
  123. wxArticle.setPicUrl(manageCover.getImage());
  124. wxArticle.setUrl(createUrl(bookId, adminConfig, user));
  125. WxMpKefuMessage build = new NewsBuilder().toUser(user.getOpenid()).addArticle(wxArticle).build();
  126. Integer platformId = adminConfig.getPlatformId();
  127. WxOpenService wxOpenService = wxThirdPartService.getWxOpenServiceByPlatFormId(platformId);
  128. WxOpenMpService wxMpService = wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appid);
  129. long second = 10 * 60 * 60;
  130. pushService.addWxKefuMessagePushTask(wxMpService, build, second, TimeUnit.SECONDS);
  131. System.out.println("发送失败");
  132. }
  133. private String createUrl(Long bookId, AdminConfig adminConfig, User user) {
  134. return bookService.createBookUrl(bookId, adminConfig, user);
  135. }
  136. }