Browse Source

Merge remote-tracking branch 'origin/developerC' into developerC

zhijiezhao 3 years ago
parent
commit
6ce68075c7

+ 19 - 5
src/main/java/com/caimei365/order/components/WeChatService.java

@@ -3,11 +3,13 @@ package com.caimei365.order.components;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.caimei365.order.model.ResponseJson;
+import com.caimei365.order.utils.JwtUtil;
 import com.caimei365.order.utils.RequestUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.lang.StringUtils;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Component;
@@ -58,6 +60,11 @@ public class WeChatService {
     @Value("${wx.message-template.receipt}")
     private String messageTemplateReceipt;
 
+    private RedisService redisService;
+    @Autowired
+    public void setRedisService(RedisService redisService) {
+        this.redisService = redisService;
+    }
 
     public static class Keys {
         public static final String OPEN_ID = "openid";
@@ -223,13 +230,21 @@ public class WeChatService {
      * @return access_token
      */
     public String getAccessToken() throws Exception {
+        String access_token = String.valueOf(redisService.get("access_token:"+crmAppId));
+        // 过期后会得到"null"值,所以需判断字符串"null"
+        if (access_token != null && access_token.length() != 0 && !"null".equals(access_token)) {
+            return access_token;
+        }
         String link = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
         link = link.replace("APPID", crmAppId);
         link = link.replace("APPSECRET", crmAppSecret);
         String result = RequestUtil.sendGet(link);
         log.info("微信公众号获取access_token>>>" + result);
         Map<String, Object> map = JSONObject.parseObject(result, Map.class);
-        return (String) map.get("access_token");
+        access_token = (String) map.get("access_token");
+        // 将token存入redis, access_token的有效期目前为2个小时(redis存1.5小时)
+        redisService.set("access_token:"+crmAppId, access_token, 5400L);
+        return access_token;
     }
 
     /**
@@ -264,14 +279,15 @@ public class WeChatService {
      * 交易时间:{{keyword2.DATA}}
      * {{remark.DATA}}
      * 在发送时,需要将内容中的参数({{.DATA}}内为参数)赋值替换为需要的信息
-     *  @param openid 被推送人的openid
+     * @param accessToken 微信公众号 access_token
+     * @param openid 被推送人微信公众号的openid
      * @param title 标题
      * @param money 金额
      * @param time 日期时间
      * @param remarkText 备注文本:收款类型+确认时间
      * @param pagePath 小程序跳转链接
      */
-    public void sendTemplateMsg(String openid, String title, Double money, String time, String remarkText, String pagePath) {
+    public void sendTemplateMsg(String accessToken, String openid, String title, Double money, String time, String remarkText, String pagePath) {
         JSONObject first = new JSONObject();
         first.put("value", title);
         first.put("color", "#000000");
@@ -306,8 +322,6 @@ public class WeChatService {
         String jsonString = json.toJSONString();
         log.info(">>>>>>>>推送微信模板消息:" + jsonString);
         try {
-            // 获取access_token
-            String accessToken = getAccessToken();
             String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+accessToken;
             // 发送请求
             RequestUtil.httpRequest(requestUrl, "POST", jsonString);

+ 2 - 2
src/main/java/com/caimei365/order/service/ReceiptService.java

@@ -211,10 +211,10 @@ public interface ReceiptService {
     /**
      * 微信收款信息推送(待确认超时)
      */
-    void sendWechatMsgConfirmTimeout();
+    void sendWechatMsgConfirmTimeout(String accessToken);
     /**
      * 微信收款信息推送(待审核超时)
      */
-    void sendWechatMsgAuditTimeout();
+    void sendWechatMsgAuditTimeout(String accessToken);
 
 }

+ 41 - 30
src/main/java/com/caimei365/order/service/impl/ReceiptServiceImpl.java

@@ -1167,18 +1167,23 @@ public class ReceiptServiceImpl implements ReceiptService {
         receiptMapper.updateReceipt(receiptPo);
 
         // 关联成功推送模板消息给指定人员(用户权限: 1收款列表访问,2收款详情分享,3收款录入,4收款关联订单,5收款关联返佣,6收款关联供应商退款,7收款审核)
-        List<String> openidList = receiptMapper.getOpenidListByPermission(Collections.singletonList(7));
-        openidList.removeIf(Objects::isNull);
-        double associateAmount = receiptMapper.countAssociateAmountById(receipt.getId());
-        String associateTitle = "收款和订单已确认关联,请及时审核!";
-        String associateDate = receipt.getReceiptDate();
-        String associateType = receiptMapper.getReceiptTypeStrById(receipt.getPayType());
-        String remarkText = "收款类型:" + associateType + ",确认时间:"+receipt.getConfirmDate();
-        // 跳转到【普通款项待审核】页面
-        String pagePath = "/pages/relation/ordinary/examine-detail?id="+receipt.getId();
-        for (String openid : openidList) {
-            // sendTemplateMsg(openid, 标题, 金额, 收款日期, 备注, 跳转链接)
-            weChatService.sendTemplateMsg(openid, associateTitle, associateAmount, associateDate, remarkText, pagePath);
+        try {
+            String accessToken = weChatService.getAccessToken();
+            List<String> openidList = receiptMapper.getOpenidListByPermission(Collections.singletonList(7));
+            openidList.removeIf(Objects::isNull);
+            double associateAmount = receiptMapper.countAssociateAmountById(receipt.getId());
+            String associateTitle = "收款和订单已确认关联,请及时审核!";
+            String associateDate = receipt.getReceiptDate();
+            String associateType = receiptMapper.getReceiptTypeStrById(receipt.getPayType());
+            String remarkText = "收款类型:" + associateType + ",确认时间:"+receipt.getConfirmDate();
+            // 跳转到【普通款项待审核】页面
+            String pagePath = "/pages/relation/ordinary/examine-detail?id="+receipt.getId();
+            for (String openid : openidList) {
+                // sendTemplateMsg(openid, 标题, 金额, 收款日期, 备注, 跳转链接)
+                weChatService.sendTemplateMsg(accessToken, openid, associateTitle, associateAmount, associateDate, remarkText, pagePath);
+            }
+        } catch (Exception e) {
+            log.error("获取微信公众号access_token异常!", e);
         }
         return ResponseJson.success("关联收款信息成功!", null);
     }
@@ -1665,20 +1670,26 @@ public class ReceiptServiceImpl implements ReceiptService {
 
         // 审核未通过 推送模板消息给指定人员
         if (4 == receiptStatus) {
-            // 审核未通过
-            String title = "订单审核未通过,请重新确认审核!";
-            String date = receipt.getReceiptDate();
-            String receiptTypeStr = receiptMapper.getReceiptTypeStrById(receipt.getPayType());
-            String remarkText = "收款类型:"+ receiptTypeStr +";"+"审核时间:"+receiptPo.getReviewDate();
-            double associateAmount = receiptMapper.countAssociateAmountById(receipt.getId());
-            // (用户权限: 1收款列表访问,2收款详情分享,3收款录入,4收款关联订单,5收款关联返佣,6收款关联供应商退款,7收款审核)
-            List<String> openidList = receiptMapper.getOpenidListByPermission(Collections.singletonList(4));
-            openidList.removeIf(Objects::isNull);
-            // 跳转到【普通款项待审核】页面
-            String pagePath = "/pages/relation/ordinary/examine-detail?id="+receipt.getId();
-            for (String openid : openidList) {
-                // sendTemplateMsg(openid, 标题, 金额, 收款日期, 备注, 跳转链接)
-                weChatService.sendTemplateMsg(openid, title, associateAmount, date, remarkText, pagePath);
+            log.info(">>>>>>>>审核未通过,请重新确认审核!收款Id:" + receipt.getId());
+            try {
+                String accessToken = weChatService.getAccessToken();
+                // 审核未通过
+                String title = "审核未通过,请重新确认审核!";
+                String date = receipt.getReceiptDate();
+                String receiptTypeStr = receiptMapper.getReceiptTypeStrById(receipt.getPayType());
+                String remarkText = "收款类型:"+ receiptTypeStr +";"+"审核时间:"+receiptPo.getReviewDate();
+                double associateAmount = receiptMapper.countAssociateAmountById(receipt.getId());
+                // (用户权限: 1收款列表访问,2收款详情分享,3收款录入,4收款关联订单,5收款关联返佣,6收款关联供应商退款,7收款审核)
+                List<String> openidList = receiptMapper.getOpenidListByPermission(Collections.singletonList(4));
+                openidList.removeIf(Objects::isNull);
+                // 跳转到【普通款项待审核】页面
+                String pagePath = "/pages/relation/ordinary/examine-detail?id="+receipt.getId();
+                for (String openid : openidList) {
+                    // sendTemplateMsg(openid, 标题, 金额, 收款日期, 备注, 跳转链接)
+                    weChatService.sendTemplateMsg(accessToken, openid, title, associateAmount, date, remarkText, pagePath);
+                }
+            } catch (Exception e) {
+                log.error("获取微信公众号access_token异常!", e);
             }
         }
         return ResponseJson.success("审核收款信息成功!", null);
@@ -1688,7 +1699,7 @@ public class ReceiptServiceImpl implements ReceiptService {
      * 微信收款信息推送(待确认超时)
      */
     @Override
-    public void sendWechatMsgConfirmTimeout() {
+    public void sendWechatMsgConfirmTimeout(String accessToken) {
         //待确认超时
         ReceiptParamsBo paramsBo = new ReceiptParamsBo();
         String[] receiptStatusArr = "1".split(",");
@@ -1722,7 +1733,7 @@ public class ReceiptServiceImpl implements ReceiptService {
             String remarkText = "收款类型:" + receiptTypeStr;
             for (String openid : openidList) {
                 // sendTemplateMsg(openid, 标题, 金额, 收款日期, 备注, 跳转链接)
-                weChatService.sendTemplateMsg(openid, title, amount, date, remarkText, pagePath);
+                weChatService.sendTemplateMsg(accessToken, openid, title, amount, date, remarkText, pagePath);
             }
         }
     }
@@ -1731,7 +1742,7 @@ public class ReceiptServiceImpl implements ReceiptService {
      * 微信收款信息推送(待审核超时)
      */
     @Override
-    public void sendWechatMsgAuditTimeout() {
+    public void sendWechatMsgAuditTimeout(String accessToken) {
         //待审核超时
         ReceiptParamsBo paramsBo = new ReceiptParamsBo();
         String[] receiptStatusArr = "2".split(",");
@@ -1752,7 +1763,7 @@ public class ReceiptServiceImpl implements ReceiptService {
             String pagePath = "/pages/relation/ordinary/examine-detail?id="+receipt.getId();
             for (String openid : openidList) {
                 // sendTemplateMsg(openid, 标题, 金额, 收款日期, 备注, 跳转链接)
-                weChatService.sendTemplateMsg(openid, title, amount, date, remarkText, pagePath);
+                weChatService.sendTemplateMsg(accessToken, openid, title, amount, date, remarkText, pagePath);
             }
         }
     }

+ 13 - 5
src/main/java/com/caimei365/order/task/ReceiptMsgTask.java

@@ -1,7 +1,9 @@
 package com.caimei365.order.task;
 
+import com.caimei365.order.components.WeChatService;
 import com.caimei365.order.service.ReceiptService;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
@@ -20,7 +22,8 @@ import javax.annotation.Resource;
 public class ReceiptMsgTask {
     @Resource
     private ReceiptService receiptService;
-
+    @Resource
+    private WeChatService weChatService;
     /**
      * 微信收款信息推送
      * 每天九点钟推送
@@ -28,10 +31,15 @@ public class ReceiptMsgTask {
     @Scheduled(cron = "0 0 09 * * ?")
     public void sendWechatMsgTask() {
         log.info("-------->微信收款信息定时推送--start<--------------");
-        // 待确认超时
-        receiptService.sendWechatMsgConfirmTimeout();
-        // 待审核超时
-        receiptService.sendWechatMsgAuditTimeout();
+        try {
+            String accessToken = weChatService.getAccessToken();
+            // 待确认超时
+            receiptService.sendWechatMsgConfirmTimeout(accessToken);
+            // 待审核超时
+            receiptService.sendWechatMsgAuditTimeout(accessToken);
+        } catch (Exception e) {
+            log.error("获取微信公众号access_token异常!", e);
+        }
         log.info("-------->微信收款信息定时推送--end<--------------");
     }