From 848c3332f2de93957b06d1471a9eedaa1faec88f Mon Sep 17 00:00:00 2001
From: fuqc0815 <fuqc0815@163.com>
Date: 星期五, 11 十二月 2020 13:43:57 +0800
Subject: [PATCH] Merge branch 'fuqc0815-dev' into 'master'

---
 service-job/src/main/java/com/java110/job/task/wechat/WeChatPushMessageTemplate.java |   98 +++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 91 insertions(+), 7 deletions(-)

diff --git a/service-job/src/main/java/com/java110/job/task/wechat/WeChatPushMessageTemplate.java b/service-job/src/main/java/com/java110/job/task/wechat/WeChatPushMessageTemplate.java
index e5d6c51..0673e83 100644
--- a/service-job/src/main/java/com/java110/job/task/wechat/WeChatPushMessageTemplate.java
+++ b/service-job/src/main/java/com/java110/job/task/wechat/WeChatPushMessageTemplate.java
@@ -1,6 +1,8 @@
 package com.java110.job.task.wechat;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.java110.core.factory.WechatFactory;
 import com.java110.dto.RoomDto;
 import com.java110.dto.community.CommunityDto;
@@ -12,6 +14,7 @@
 import com.java110.dto.task.TaskDto;
 import com.java110.entity.wechat.Content;
 import com.java110.entity.wechat.Data;
+import com.java110.entity.wechat.Miniprogram;
 import com.java110.entity.wechat.PropertyFeeTemplateMessage;
 import com.java110.intf.community.INoticeInnerServiceSMO;
 import com.java110.intf.community.IRoomInnerServiceSMO;
@@ -21,13 +24,17 @@
 import com.java110.intf.user.IOwnerRoomRelInnerServiceSMO;
 import com.java110.job.quartz.TaskSystemQuartz;
 import com.java110.utils.cache.MappingCache;
+import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 import org.springframework.web.client.RestTemplate;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -64,6 +71,7 @@
 
     //妯℃澘淇℃伅鎺ㄩ�佸湴鍧�
     private static String sendMsgUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";
+    private static String getUser = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN";
 
 
     @Override
@@ -132,12 +140,23 @@
         }
 
         for (NoticeDto tmpNotice : noticeDtos) {
-            doSentWechat(tmpNotice, templateId, accessToken);
+            try {
+                doSentWechat(tmpNotice, templateId, accessToken);
+            } catch (Exception e) {
+                logger.error("閫氱煡寮傚父", e);
+            }
         }
 
     }
 
-    private void doSentWechat(NoticeDto noticeDto, String templateId, String accessToken) {
+    private void doSentWechat(NoticeDto noticeDto, String templateId, String accessToken) throws Exception {
+
+        Date startTime = DateUtil.getDateFromString(noticeDto.getStartTime(), DateUtil.DATE_FORMATE_STRING_A);
+        Date nowTime = DateUtil.getCurrentDate();
+        if (startTime.getTime() > nowTime.getTime()) { //杩樻病鏈夊埌鏃堕棿
+            return;
+        }
+
 
         String objType = noticeDto.getObjType();
 
@@ -155,6 +174,11 @@
                 sendRoomOwner(noticeDto, templateId, accessToken);
                 break;
         }
+
+        NoticeDto tmpNoticeDto = new NoticeDto();
+        tmpNoticeDto.setNoticeId(noticeDto.getNoticeId());
+        tmpNoticeDto.setState(NoticeDto.STATE_FINISH);
+        noticeInnerServiceSMOImpl.updateNotice(tmpNoticeDto);
 
     }
 
@@ -237,10 +261,7 @@
     }
 
     private void sendAllOwner(NoticeDto noticeDto, String templateId, String accessToken) {
-        OwnerAppUserDto ownerAppUserDto = new OwnerAppUserDto();
-        ownerAppUserDto.setAppType(OwnerAppUserDto.APP_TYPE_WECHAT);
-        List<OwnerAppUserDto> ownerAppUserDtos = ownerAppUserInnerServiceSMOImpl.queryOwnerAppUsers(ownerAppUserDto);
-        doSend(ownerAppUserDtos, noticeDto, templateId, accessToken);
+        doSendToOpenId(noticeDto, templateId, accessToken, "");
     }
 
     private void doSend(List<OwnerAppUserDto> ownerAppUserDtos, NoticeDto noticeDto, String templateId, String accessToken) {
@@ -253,7 +274,7 @@
             data.setFirst(new Content(noticeDto.getTitle()));
             data.setKeyword1(new Content(noticeDto.getTitle()));
             data.setKeyword2(new Content(noticeDto.getStartTime()));
-            data.setKeyword3(new Content(noticeDto.getContext()));
+            data.setKeyword3(new Content(StringUtil.delHtmlTag(noticeDto.getContext())));
             data.setRemark(new Content("濡傛湁鐤戦棶璇疯仈绯荤浉鍏崇墿涓氫汉鍛�"));
             templateMessage.setData(data);
             templateMessage.setUrl(wechatUrl + noticeDto.getNoticeId());
@@ -263,4 +284,67 @@
         }
     }
 
+    private void doSendToOpenId(NoticeDto noticeDto, String templateId, String accessToken, String nextOpenid) {
+        String url = getUser.replace("ACCESS_TOKEN", accessToken);
+        if (!StringUtil.isEmpty(nextOpenid)) {
+            url += ("&next_openid=" + nextOpenid);
+        }
+        ResponseEntity<String> paramOut = outRestTemplate.getForEntity(url, String.class);
+
+        logger.info("鑾峰彇鐢ㄦ埛杩斿洖:{}", paramOut);
+
+        if (paramOut.getStatusCode() != HttpStatus.OK) {
+            throw new IllegalArgumentException(paramOut.getBody());
+        }
+
+        JSONObject paramOutObj = JSONObject.parseObject(paramOut.getBody());
+        if (paramOutObj.containsKey("errcode")) {
+            throw new IllegalArgumentException(paramOut.getBody());
+        }
+
+        if (!paramOutObj.containsKey("data")) {
+            return;
+        }
+        JSONObject dataObj = paramOutObj.getJSONObject("data");
+        JSONArray openids = dataObj.getJSONArray("openid");
+        nextOpenid = paramOutObj.getString("next_openid");
+        String wechatUrl = MappingCache.getValue("OWNER_WECHAT_URL");
+        Miniprogram miniprogram = null;
+        if (wechatUrl.startsWith("https://") || wechatUrl.startsWith("http://")) {
+
+        } else {
+            miniprogram = new Miniprogram();
+            miniprogram.setAppid(wechatUrl);
+        }
+        for (int openIndex = 0; openIndex < openids.size(); openIndex++) {
+            String openId = openids.getString(openIndex);
+            Data data = new Data();
+            PropertyFeeTemplateMessage templateMessage = new PropertyFeeTemplateMessage();
+            templateMessage.setTemplate_id(templateId);
+            templateMessage.setTouser(openId);
+            data.setFirst(new Content(noticeDto.getTitle()));
+            data.setKeyword1(new Content(noticeDto.getTitle()));
+            data.setKeyword2(new Content(noticeDto.getStartTime()));
+            data.setKeyword3(new Content(StringUtil.delHtmlTag(noticeDto.getContext())));
+            data.setRemark(new Content("濡傛湁鐤戦棶璇疯仈绯荤浉鍏崇墿涓氫汉鍛�"));
+            templateMessage.setData(data);
+            if (!StringUtil.isEmpty(wechatUrl)) {
+                if (miniprogram == null) {
+                    templateMessage.setUrl(wechatUrl + "/#/pages/notice/detail/detail?noticeId=" + noticeDto.getNoticeId());
+                } else {
+                    miniprogram.setPagepath("/pages/notice/detail/detail?noticeId=" + noticeDto.getNoticeId());
+                    templateMessage.setMiniprogram(miniprogram);
+                }
+            }
+            logger.info("鍙戦�佹ā鏉挎秷鎭唴瀹�:{}", JSON.toJSONString(templateMessage));
+            ResponseEntity<String> responseEntity = outRestTemplate.postForEntity(sendMsgUrl + accessToken, JSON.toJSONString(templateMessage), String.class);
+            logger.info("寰俊妯℃澘杩斿洖鍐呭:{}", responseEntity);
+        }
+
+        //锛堝叧娉ㄨ�呭垪琛ㄥ凡杩斿洖瀹屾椂锛岃繑鍥瀗ext_openid涓虹┖锛�
+        if (!StringUtil.isEmpty(nextOpenid)) {
+            doSendToOpenId(noticeDto, templateId, accessToken, nextOpenid);
+        }
+    }
+
 }

--
Gitblit v1.8.0