PublicWeChatPushMessageTemplate.java 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package com.java110.job.task.wechat;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.java110.core.factory.WechatFactory;
  5. import com.java110.core.log.LoggerFactory;
  6. import com.java110.dto.community.CommunityDto;
  7. import com.java110.dto.fee.BillOweFeeDto;
  8. import com.java110.dto.fee.FeeDto;
  9. import com.java110.dto.owner.OwnerAppUserDto;
  10. import com.java110.dto.wechat.SmallWeChatDto;
  11. import com.java110.dto.wechat.SmallWechatAttrDto;
  12. import com.java110.dto.task.TaskDto;
  13. import com.java110.dto.wechat.Content;
  14. import com.java110.dto.wechat.Data;
  15. import com.java110.dto.wechat.Miniprogram;
  16. import com.java110.dto.wechat.PropertyFeeTemplateMessage;
  17. import com.java110.intf.fee.IFeeInnerServiceSMO;
  18. import com.java110.intf.store.ISmallWeChatInnerServiceSMO;
  19. import com.java110.intf.store.ISmallWechatAttrInnerServiceSMO;
  20. import com.java110.intf.user.IOwnerAppUserInnerServiceSMO;
  21. import com.java110.job.msgNotify.MsgNotifyFactory;
  22. import com.java110.job.quartz.TaskSystemQuartz;
  23. import com.java110.utils.cache.MappingCache;
  24. import com.java110.utils.cache.UrlCache;
  25. import com.java110.utils.constant.WechatConstant;
  26. import com.java110.utils.util.DateUtil;
  27. import com.java110.utils.util.StringUtil;
  28. import org.slf4j.Logger;
  29. import org.springframework.beans.factory.annotation.Autowired;
  30. import org.springframework.http.ResponseEntity;
  31. import org.springframework.stereotype.Component;
  32. import org.springframework.web.client.RestTemplate;
  33. import java.text.SimpleDateFormat;
  34. import java.util.ArrayList;
  35. import java.util.Calendar;
  36. import java.util.Date;
  37. import java.util.List;
  38. /**
  39. * @program: MicroCommunity
  40. * @description: 微信公众号主动推送信息
  41. * @author: zcc
  42. * @create: 2020-06-15 13:35
  43. **/
  44. @Component
  45. public class PublicWeChatPushMessageTemplate extends TaskSystemQuartz {
  46. private static Logger logger = LoggerFactory.getLogger(PublicWeChatPushMessageTemplate.class);
  47. @Autowired
  48. private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
  49. @Autowired
  50. private ISmallWeChatInnerServiceSMO smallWeChatInnerServiceSMOImpl;
  51. @Autowired
  52. private ISmallWechatAttrInnerServiceSMO smallWechatAttrInnerServiceSMOImpl;
  53. @Autowired
  54. private IOwnerAppUserInnerServiceSMO ownerAppUserInnerServiceSMOImpl;
  55. @Autowired
  56. private RestTemplate outRestTemplate;
  57. //模板信息推送地址
  58. private static String sendMsgUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";
  59. //模板id
  60. private static String DEFAULT_TEMPLATE_ID = "ZF4j_ug2XW-UGwW1F-Gi4M1-51lpiu-PM89Oa6oZv6w";
  61. @Override
  62. protected void process(TaskDto taskDto) {
  63. logger.debug("开始执行微信模板信息推送" + taskDto.toString());
  64. // 获取小区
  65. List<CommunityDto> communityDtos = getAllCommunity();
  66. for (CommunityDto communityDto : communityDtos) {
  67. try {
  68. publishMsg(taskDto, communityDto);
  69. } catch (Exception e) {
  70. logger.error("推送消息失败", e);
  71. }
  72. }
  73. }
  74. private void publishMsg(TaskDto taskDto, CommunityDto communityDto) throws Exception {
  75. //根据小区id查询业主与公众号绑定信息
  76. OwnerAppUserDto ownerAppUserDto = new OwnerAppUserDto();
  77. ownerAppUserDto.setCommunityId(communityDto.getCommunityId());
  78. ownerAppUserDto.setAppType(OwnerAppUserDto.APP_TYPE_WECHAT);
  79. List<OwnerAppUserDto> ownerAppUserDtos = ownerAppUserInnerServiceSMOImpl.queryOwnerAppUsers(ownerAppUserDto);
  80. if (ownerAppUserDtos.size() <= 0 || ownerAppUserDtos == null) {
  81. logger.error("未查询到业主与微信公众号绑定关系");
  82. return;
  83. }
  84. List<String> memberIdList = new ArrayList<>(ownerAppUserDtos.size());
  85. for (OwnerAppUserDto appUserDto : ownerAppUserDtos) {
  86. if (StringUtil.isEmpty(appUserDto.getMemberId()) || "-1".equals(appUserDto.getMemberId())) {
  87. continue;
  88. }
  89. memberIdList.add(appUserDto.getMemberId());
  90. }
  91. String[] memberIds = memberIdList.toArray(new String[memberIdList.size()]);
  92. //查询欠费信息
  93. BillOweFeeDto billOweFeeDto = new BillOweFeeDto();
  94. billOweFeeDto.setCommunityId(communityDto.getCommunityId());
  95. billOweFeeDto.setOwnerIds(memberIds);
  96. billOweFeeDto.setState("1000");
  97. billOweFeeDto.setCurBill("T");
  98. List<BillOweFeeDto> billOweFeeDtos = feeInnerServiceSMOImpl.queryBillOweFees(billOweFeeDto);
  99. String sendTemplate = MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.SEND_TEMPLATE_URL);
  100. if (StringUtil.isEmpty(sendTemplate)) {
  101. sendTemplate = sendMsgUrl;
  102. }
  103. String oweRoomUrl = UrlCache.getOwnerUrl() + MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.OWE_FEE_PAGE);
  104. String oweCarUrl = UrlCache.getOwnerUrl() + MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.OWE_CAR_FEE_PAGE);
  105. // Miniprogram miniprogram = null;
  106. // if (oweRoomUrl.contains("@@")) {
  107. // miniprogram = new Miniprogram();
  108. // miniprogram.setAppid(oweRoomUrl.split("@@")[0]);
  109. // }
  110. // //车辆费用
  111. // if (oweCarUrl.contains("@@")) {
  112. // miniprogram = new Miniprogram();
  113. // miniprogram.setAppid(oweCarUrl.split("@@")[0]);
  114. // }
  115. String oweUrl = "";
  116. JSONObject content = null;
  117. for (BillOweFeeDto fee : billOweFeeDtos) {
  118. oweUrl = FeeDto.PAYER_OBJ_TYPE_ROOM.equals(fee.getPayerObjType()) ? oweRoomUrl : oweCarUrl;
  119. for (OwnerAppUserDto appUserDto : ownerAppUserDtos) {
  120. try {
  121. if (!fee.getOwnerId().equals(appUserDto.getMemberId())) {
  122. continue;
  123. }
  124. content = new JSONObject();
  125. content.put("feeTypeName", fee.getFeeTypeName());
  126. content.put("payerObjName", fee.getPayerObjName());
  127. content.put("billAmountOwed", fee.getBillAmountOwed());
  128. content.put("date", DateUtil.dateTimeToDate(fee.getFeeEndTime()) + "~" + DateUtil.dateTimeToDate(fee.getDeadlineTime()));
  129. content.put("url",oweUrl);
  130. MsgNotifyFactory.sendOweFeeMsg(communityDto.getCommunityId(), appUserDto.getUserId(), content);
  131. } catch (Exception e) {
  132. logger.error("推送账单异常", e);
  133. }
  134. }
  135. BillOweFeeDto tmpBillOweFeeDto = new BillOweFeeDto();
  136. tmpBillOweFeeDto.setFeeId(fee.getFeeId());
  137. tmpBillOweFeeDto.setCommunityId(fee.getCommunityId());
  138. tmpBillOweFeeDto.setBillId(fee.getBillId());
  139. tmpBillOweFeeDto.setState(BillOweFeeDto.STATE_SEND_OWNER);
  140. feeInnerServiceSMOImpl.updateBillOweFees(tmpBillOweFeeDto);
  141. }
  142. }
  143. }