PublicWeChatPushMessageTemplate.java 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. package com.java110.job.task.wechat;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.java110.core.factory.GenerateCodeFactory;
  6. import com.java110.core.factory.WechatFactory;
  7. import com.java110.core.log.LoggerFactory;
  8. import com.java110.dto.community.CommunityDto;
  9. import com.java110.dto.fee.BillOweFeeDto;
  10. import com.java110.dto.fee.FeeDto;
  11. import com.java110.dto.oweFeeCallable.OweFeeCallableDto;
  12. import com.java110.dto.owner.OwnerAppUserDto;
  13. import com.java110.dto.reportFee.ReportOweFeeDto;
  14. import com.java110.dto.wechat.SmallWeChatDto;
  15. import com.java110.dto.wechat.SmallWechatAttrDto;
  16. import com.java110.dto.task.TaskDto;
  17. import com.java110.dto.wechat.Content;
  18. import com.java110.dto.wechat.Data;
  19. import com.java110.dto.wechat.Miniprogram;
  20. import com.java110.dto.wechat.PropertyFeeTemplateMessage;
  21. import com.java110.intf.fee.IFeeInnerServiceSMO;
  22. import com.java110.intf.fee.IOweFeeCallableV1InnerServiceSMO;
  23. import com.java110.intf.report.IReportOweFeeInnerServiceSMO;
  24. import com.java110.intf.store.ISmallWeChatInnerServiceSMO;
  25. import com.java110.intf.store.ISmallWechatAttrInnerServiceSMO;
  26. import com.java110.intf.user.IOwnerAppUserInnerServiceSMO;
  27. import com.java110.job.msgNotify.MsgNotifyFactory;
  28. import com.java110.job.quartz.TaskSystemQuartz;
  29. import com.java110.po.oweFeeCallable.OweFeeCallablePo;
  30. import com.java110.utils.cache.MappingCache;
  31. import com.java110.utils.cache.UrlCache;
  32. import com.java110.utils.constant.MappingConstant;
  33. import com.java110.utils.constant.WechatConstant;
  34. import com.java110.utils.util.DateUtil;
  35. import com.java110.utils.util.StringUtil;
  36. import com.java110.vo.ResultVo;
  37. import org.slf4j.Logger;
  38. import org.springframework.beans.factory.annotation.Autowired;
  39. import org.springframework.http.ResponseEntity;
  40. import org.springframework.stereotype.Component;
  41. import org.springframework.web.client.RestTemplate;
  42. import java.text.SimpleDateFormat;
  43. import java.util.ArrayList;
  44. import java.util.Calendar;
  45. import java.util.Date;
  46. import java.util.List;
  47. /**
  48. * @program: MicroCommunity
  49. * @description: 微信公众号主动推送信息
  50. * @author: zcc
  51. * @create: 2020-06-15 13:35
  52. **/
  53. @Component
  54. public class PublicWeChatPushMessageTemplate extends TaskSystemQuartz {
  55. private static Logger logger = LoggerFactory.getLogger(PublicWeChatPushMessageTemplate.class);
  56. @Autowired
  57. private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
  58. @Autowired
  59. private ISmallWeChatInnerServiceSMO smallWeChatInnerServiceSMOImpl;
  60. @Autowired
  61. private ISmallWechatAttrInnerServiceSMO smallWechatAttrInnerServiceSMOImpl;
  62. @Autowired
  63. private IOwnerAppUserInnerServiceSMO ownerAppUserInnerServiceSMOImpl;
  64. @Autowired
  65. private IReportOweFeeInnerServiceSMO reportOweFeeInnerServiceSMOImpl;
  66. @Autowired
  67. private RestTemplate outRestTemplate;
  68. @Autowired
  69. private IOweFeeCallableV1InnerServiceSMO oweFeeCallableV1InnerServiceSMOImpl;
  70. //模板信息推送地址
  71. private static String sendMsgUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";
  72. //模板id
  73. private static String DEFAULT_TEMPLATE_ID = "ZF4j_ug2XW-UGwW1F-Gi4M1-51lpiu-PM89Oa6oZv6w";
  74. @Override
  75. protected void process(TaskDto taskDto) {
  76. logger.debug("开始执行微信模板信息推送" + taskDto.toString());
  77. // 获取小区
  78. List<CommunityDto> communityDtos = getAllCommunity();
  79. for (CommunityDto communityDto : communityDtos) {
  80. try {
  81. publishMsg(taskDto, communityDto);
  82. } catch (Exception e) {
  83. logger.error("推送消息失败", e);
  84. }
  85. }
  86. }
  87. private void publishMsg(TaskDto taskDto, CommunityDto communityDto) throws Exception {
  88. ReportOweFeeDto reportOweFeeDto = new ReportOweFeeDto();
  89. reportOweFeeDto.setCommunityId(communityDto.getCommunityId());
  90. reportOweFeeDto.setHasOweFee("Y");
  91. List<ReportOweFeeDto> reportOweFeeDtos = reportOweFeeInnerServiceSMOImpl.queryReportAllOweFees(reportOweFeeDto);
  92. if (reportOweFeeDtos == null || reportOweFeeDtos.size() < 1) {
  93. return;
  94. }
  95. OweFeeCallablePo oweFeeCallablePo = null;
  96. List<OweFeeCallablePo> oweFeeCallablePos = new ArrayList<>();
  97. String notifyWay = MappingCache.getValue(MappingConstant.ENV_DOMAIN, "DEFAULT_MSG_NOTIFY_WAY");
  98. if (StringUtil.isEmpty(notifyWay) || MsgNotifyFactory.NOTIFY_WAY_WECHAT.equals(notifyWay)) {
  99. notifyWay = OweFeeCallableDto.CALLABLE_WAY_WECHAT;
  100. } else {
  101. notifyWay = OweFeeCallableDto.CALLABLE_WAY_SMS;
  102. }
  103. for (ReportOweFeeDto fee : reportOweFeeDtos) {
  104. oweFeeCallablePo = new OweFeeCallablePo();
  105. oweFeeCallablePo.setAmountdOwed(reportOweFeeDto.getAmountOwed());
  106. oweFeeCallablePo.setCallableWay(notifyWay);
  107. oweFeeCallablePo.setOfcId(GenerateCodeFactory.getGeneratorId("11"));
  108. oweFeeCallablePo.setFeeId(reportOweFeeDto.getFeeId());
  109. oweFeeCallablePo.setFeeName(reportOweFeeDto.getFeeName());
  110. oweFeeCallablePo.setCommunityId(communityDto.getCommunityId());
  111. oweFeeCallablePo.setConfigId(reportOweFeeDto.getConfigId());
  112. oweFeeCallablePo.setOwnerId(reportOweFeeDto.getOwnerId());
  113. oweFeeCallablePo.setOwnerName(reportOweFeeDto.getOwnerName());
  114. oweFeeCallablePo.setPayerObjId(fee.getPayerObjId());
  115. oweFeeCallablePo.setPayerObjName(reportOweFeeDto.getPayerObjName());
  116. oweFeeCallablePo.setPayerObjType(reportOweFeeDto.getPayerObjType());
  117. oweFeeCallablePo.setRemark("系统自动催缴");
  118. oweFeeCallablePo.setStaffId("-1");
  119. oweFeeCallablePo.setStaffName("系统自动催缴");
  120. oweFeeCallablePo.setState(OweFeeCallableDto.STATE_WAIT);
  121. oweFeeCallablePo.setStartTime(reportOweFeeDto.getEndTime());
  122. oweFeeCallablePo.setEndTime(reportOweFeeDto.getDeadlineTime());
  123. oweFeeCallablePos.add(oweFeeCallablePo);
  124. }
  125. if (oweFeeCallablePos.size() < 1) {
  126. return;
  127. }
  128. int flag = oweFeeCallableV1InnerServiceSMOImpl.saveOweFeeCallables(oweFeeCallablePos);
  129. if (flag < 1) {
  130. throw new IllegalArgumentException("保存催缴记录失败");
  131. }
  132. String oweUrl = "";
  133. JSONObject content = null;
  134. String oweRoomUrl = UrlCache.getOwnerUrl() + MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.OWE_FEE_PAGE);
  135. String oweCarUrl = UrlCache.getOwnerUrl() + MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.OWE_CAR_FEE_PAGE);
  136. OweFeeCallablePo updateOweFeeCallablePo = null;
  137. OwnerAppUserDto ownerAppUserDto = null;
  138. for (OweFeeCallablePo tmpOweFeeCallablePo : oweFeeCallablePos) {
  139. if (StringUtil.isEmpty(tmpOweFeeCallablePo.getOwnerId()) || tmpOweFeeCallablePo.getOwnerId().startsWith("-")) {
  140. updateOweFeeCallablePo = new OweFeeCallablePo();
  141. updateOweFeeCallablePo.setOfcId(tmpOweFeeCallablePo.getOfcId());
  142. updateOweFeeCallablePo.setCommunityId(tmpOweFeeCallablePo.getCommunityId());
  143. updateOweFeeCallablePo.setState(OweFeeCallableDto.STATE_FAIL);
  144. updateOweFeeCallablePo.setRemark(tmpOweFeeCallablePo.getRemark() + "-业主不存在");
  145. oweFeeCallableV1InnerServiceSMOImpl.updateOweFeeCallable(updateOweFeeCallablePo);
  146. continue;
  147. }
  148. ownerAppUserDto = new OwnerAppUserDto();
  149. ownerAppUserDto.setMemberId(tmpOweFeeCallablePo.getOwnerId());
  150. ownerAppUserDto.setCommunityId(tmpOweFeeCallablePo.getCommunityId());
  151. ownerAppUserDto.setAppType(OwnerAppUserDto.APP_TYPE_WECHAT);
  152. List<OwnerAppUserDto> ownerAppUserDtos = ownerAppUserInnerServiceSMOImpl.queryOwnerAppUsers(ownerAppUserDto);
  153. if(ownerAppUserDtos == null || ownerAppUserDtos.size() < 1){
  154. updateOweFeeCallablePo = new OweFeeCallablePo();
  155. updateOweFeeCallablePo.setOfcId(tmpOweFeeCallablePo.getOfcId());
  156. updateOweFeeCallablePo.setCommunityId(tmpOweFeeCallablePo.getCommunityId());
  157. updateOweFeeCallablePo.setState(OweFeeCallableDto.STATE_FAIL);
  158. updateOweFeeCallablePo.setRemark(tmpOweFeeCallablePo.getRemark() + "-业主未绑定");
  159. oweFeeCallableV1InnerServiceSMOImpl.updateOweFeeCallable(updateOweFeeCallablePo);
  160. continue;
  161. }
  162. oweUrl = FeeDto.PAYER_OBJ_TYPE_ROOM.equals(tmpOweFeeCallablePo.getPayerObjType()) ? oweRoomUrl : oweCarUrl;
  163. content = new JSONObject();
  164. content.put("feeTypeName", tmpOweFeeCallablePo.getFeeName());
  165. content.put("payerObjName", tmpOweFeeCallablePo.getPayerObjName());
  166. content.put("billAmountOwed", tmpOweFeeCallablePo.getAmountdOwed());
  167. content.put("date", DateUtil.dateTimeToDate(tmpOweFeeCallablePo.getStartTime()) + "~" + DateUtil.dateTimeToDate(tmpOweFeeCallablePo.getEndTime()));
  168. content.put("url", oweUrl);
  169. ResultVo resultVo = MsgNotifyFactory.sendOweFeeMsg(communityDto.getCommunityId(), ownerAppUserDtos.get(0).getUserId(), content);
  170. updateOweFeeCallablePo = new OweFeeCallablePo();
  171. updateOweFeeCallablePo.setOfcId(tmpOweFeeCallablePo.getOfcId());
  172. updateOweFeeCallablePo.setCommunityId(tmpOweFeeCallablePo.getCommunityId());
  173. if (resultVo.getCode() != ResultVo.CODE_OK) {
  174. updateOweFeeCallablePo.setState(OweFeeCallableDto.STATE_FAIL);
  175. updateOweFeeCallablePo.setRemark(tmpOweFeeCallablePo.getRemark() + "-" + resultVo.getMsg());
  176. } else {
  177. updateOweFeeCallablePo.setState(OweFeeCallableDto.STATE_COMPLETE);
  178. }
  179. oweFeeCallableV1InnerServiceSMOImpl.updateOweFeeCallable(updateOweFeeCallablePo);
  180. }
  181. }
  182. }