Selaa lähdekoodia

fix 客服openId

zoujiajian 3 vuotta sitten
vanhempi
sitoutus
773e1ad6b3

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/CustomerServiceMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.CustomerService;
+
+/*
+ *项目名: netflix
+ *文件名: CustomerServiceMapper
+ *创建者: JavaZou
+ *创建时间:2022/10/31 15:49
+ */
+public interface CustomerServiceMapper extends BaseMapper<CustomerService> {
+}

+ 22 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/CustomerService.java

@@ -0,0 +1,22 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: CustomerService
+ *创建者: JavaZou
+ *创建时间:2022/10/31 15:47
+ */
+@Getter
+@Setter
+public class CustomerService extends BaseEntity {
+	private Long uid;
+
+	private String nickName;
+
+	private String openId;
+
+	private String unionId;
+}

+ 1 - 0
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -69,6 +69,7 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
             //发送微信模板消息
             TASK_POOL.execute(()->{
                 try {
+                    log.info("发送发货通知至{}用户", orderDon.getUserId());
                     sendTransportMsgNotify(orderDon, reqSetLogisticsPost);
                 } catch (Exception e) {
                     log.error("发送发货通知至{}用户失败:{}", orderDon.getUserId(), e);

+ 29 - 20
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -91,6 +91,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
     private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
+    private final CustomerServiceMapper customerServiceMapper;
+
 
     @Transactional(rollbackFor = Throwable.class)
     @Override
@@ -177,7 +179,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
         orderDon.setSkuId(payRequest.getSkuId());
         orderDon.setRelationId(relationId);
         orderDon.setNum(payRequest.getNum());
-
+        orderDon.setGoodsId(goodsDon.getId());
         orderDon.setStatus(OrderDon.Status.noPayment);
         orderDon.setUserId(user.getId());
         this.saveOrUpdate(orderDon);
@@ -304,15 +306,18 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
                 log.error("向用户发送新订单{}通知消息失败:{}", order.getOrderNo(), e);
             }
         });
-//        THREAD_POOL_TASK_EXECUTOR.execute(() -> {
-//            try {
-//                //发送至客服消息
-//                //TODO 客服openId
-//                newOderSendMsgByType(order, goodsDon, sku, user, "customer service OpenId");
-//            } catch (Exception e) {
-//                log.error("向客服发送新订单{}通知消息失败:{}", order.getOrderNo(), e);
-//            }
-//        });
+        THREAD_POOL_TASK_EXECUTOR.execute(() -> {
+            try {
+                //发送至客服消息
+                List<CustomerService> customerServices = customerServiceMapper.selectList(null);
+                for (CustomerService customerService : customerServices) {
+                    log.info("向客服{}发送新订单消息通知..", customerService.getNickName());
+                    newOderSendMsgByType(order, goodsDon, sku, user, customerService.getOpenId());
+                }
+            } catch (Exception e) {
+                log.error("向客服发送新订单{}通知消息失败:{}", order.getOrderNo(), e);
+            }
+        });
     }
 
     private void newOderSendMsgByType(OrderDon order, GoodsDon goodsDon, GoodsDonSku sku, User user, String toPeople) throws Exception {
@@ -333,7 +338,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
         data.setKeyword2(new WxMpTemplateData(String.format("%s,%s", goodsDon.getTitle(), sku.getSpecVal())));
         data.setKeyword3(new WxMpTemplateData(user.getNickname()));
         data.setKeyword4(new WxMpTemplateData(order.getMoney().divide(BigDecimal.valueOf(100)).toString()));
-        data.setKeyword5(new WxMpTemplateData(DateUtil.format(order.getCreatedTime(), "yyyy-MM-dd")));
+        data.setKeyword5(new WxMpTemplateData(DateUtil.format(order.getCreatedTime(), "yyyy-MM-dd HH:mm:ss")));
         data.setRemark(new WxMpTemplateData("点击查看详情"));
         weChatService.sendTemplateMessage(weChatService.getAccessToken(), Jsons.toJson(templateMessage));
     }
@@ -362,14 +367,17 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
                         delRelation(groupsRelation.getId());
 
                         //车位空余发送模板消息
-//                        TASK_POOL.execute(()->{
-//                            try {
-//                                //TODO 客服openId
-//                                emptySendMsgNotify(orderDon,"customer service openId");
-//                            } catch (Exception e) {
-//                                log.error("发送{}空车位模板消息至客服失败:{}", orderDon.getGoodsId(), e);
-//                            }
-//                        });
+                        TASK_POOL.execute(() -> {
+                            try {
+                                List<CustomerService> customerServices = customerServiceMapper.selectList(null);
+                                for (CustomerService customerService : customerServices) {
+                                    log.info("发送客服{}空车位通知消息", customerService.getNickName());
+                                    emptySendMsgNotify(orderDon, customerService.getOpenId());
+                                }
+                            } catch (Exception e) {
+                                log.error("发送{}空车位模板消息至客服失败:{}", orderDon.getGoodsId(), e);
+                            }
+                        });
                     }
                 }
             }
@@ -396,7 +404,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
         data.setKeyword1(new WxMpTemplateData(orderDon.getOrderNo()));
         data.setKeyword2(new WxMpTemplateData(String.format("%s,%s", goodsDon.getTitle(), goodsDonSku.getSpecVal())));
         data.setKeyword3(new WxMpTemplateData((u == null ? " " : u.getNickname())));
-        data.setKeyword4(new WxMpTemplateData(DateUtil.format(orderDon.getCreatedTime(), "yyyy-MM-dd")));
+        data.setKeyword4(new WxMpTemplateData(orderDon.getMoney().divide(BigDecimal.valueOf(100)).toString()));
+        data.setKeyword5(new WxMpTemplateData(DateUtil.format(orderDon.getCreatedTime(), "yyyy-MM-dd HH:mm:ss")));
         data.setRemark(new WxMpTemplateData("请尽快关联账号信息"));
         weChatService.sendTemplateMessage(weChatService.getAccessToken(), Jsons.toJson(templateMessage));
     }

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/wechat/WeChatService.java

@@ -59,7 +59,7 @@ public interface WeChatService {
      * @param accessToken WechatCache.getAccessToken()
      * @param json        消息json
      */
-    void sendTemplateMessage(String accessToken, String json);
+    void sendTemplateMessage(String accessToken, String json) throws Exception;
 
 
 }

+ 11 - 12
netflix-service/src/main/java/com/cyksj/service/wechat/impl/WeChatServiceImpl.java

@@ -6,12 +6,12 @@ import com.cyksj.common.util.*;
 import com.cyksj.config.BaseWeChatConfig;
 import com.cyksj.config.WeChatConfig;
 import com.cyksj.config.WeChatFactory;
-import com.cyksj.model.dto.*;
-import com.cyksj.service.wechat.WeChatService;
-import com.cyksj.service.wechat.WxMpAccountOps;
 import com.cyksj.enums.WeChatAuthRedirectUrl;
 import com.cyksj.mapper.WxAppMapper;
+import com.cyksj.model.dto.*;
 import com.cyksj.model.entity.WxApp;
+import com.cyksj.service.wechat.WeChatService;
+import com.cyksj.service.wechat.WxMpAccountOps;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -26,7 +26,6 @@ import java.net.http.HttpResponse;
 import java.util.Arrays;
 import java.util.Map;
 import java.util.Optional;
-import java.util.concurrent.CompletableFuture;
 
 
 /**
@@ -374,17 +373,17 @@ public class WeChatServiceImpl implements WeChatService {
     }
 
     @Override
-    public void sendTemplateMessage(String accessToken, String json) {
+    public void sendTemplateMessage(String accessToken, String json) throws Exception{
         String url = "https://api.weixin.qq.com/cgi-bin/message/template/send" +
                 "?access_token=" + accessToken;
 
-        CompletableFuture<HttpResponse<byte[]>> cfRes =
-                J11HttpC.custom()
-                        .ofPost()
-                        .url(url)
-                        .headers(J11HttpC.ReqType.raw_json)
-                        .body(HttpRequest.BodyPublishers.ofString(json))
-                        .sendAsync(HttpResponse.BodyHandlers.ofByteArray());
+        HttpResponse<String> send = J11HttpC.custom()
+                .ofPost()
+                .url(url)
+                .headers(J11HttpC.ReqType.raw_json)
+                .body(HttpRequest.BodyPublishers.ofString(json))
+                .send(HttpResponse.BodyHandlers.ofString());
+        log.info("发送模板消息结束,返回值:{}", send != null ? send.body() : null);
     }
 
     

+ 21 - 14
netflix-service/src/main/java/com/cyksj/task/Scheduler.java

@@ -42,6 +42,9 @@ public class Scheduler {
         
         private final AccountMapper accountMapper;
 
+        private final CustomerServiceMapper customerServiceMapper;
+
+
     /**
      * 统计前一天数据
      */
@@ -78,26 +81,30 @@ public class Scheduler {
             data.setFirst(new WxMpTemplateData("您的账号即将到期"));
             data.setKeyword1(new WxMpTemplateData(goodsDon.getTitle()));
             data.setKeyword2(new WxMpTemplateData(goodsDon.getTitle()));
-            data.setKeyword3(new WxMpTemplateData(DateUtil.format(relation.getExpiryTime(), "yyyy-MM-dd")));
+            data.setKeyword3(new WxMpTemplateData(DateUtil.format(relation.getExpiryTime(), "yyyy-MM-dd HH:mm:ss")));
             data.setKeyword4(new WxMpTemplateData("账号即将到期"));
             data.setRemark(new WxMpTemplateData("请尽快续费,以免影响使用"));
+            log.info("发送账号即将到期消息至用户:{}", user.getId());
             weChatService.sendTemplateMessage(weChatService.getAccessToken(), Jsons.toJson(templateMessage));
 
             List<Account> accounts = accountMapper.selectList(Wrappers.lambdaQuery(Account.class).le(Account::getExpiryTime, time));
+            List<CustomerService> customerServices = customerServiceMapper.selectList(null);
             if(!accounts.isEmpty()){
-                WxMpTemplateMessage manageMessage = new WxMpTemplateMessage()
-                        //TODO 管理员账号openId
-                        .setToUser("")
-                        .setTemplateId(EXPIRY_TEMPLATE)
-                        .setUrl(" ");
-                WxMpTemplateMessage.TemplateData data2 = templateMessage.getData();
-                data2.setFirst(new WxMpTemplateData("您有" + accounts.size() + "个主账号即将到期"));
-                data2.setKeyword1(new WxMpTemplateData("车队主账号"));
-                data2.setKeyword2(new WxMpTemplateData("车队主账号"));
-                data2.setKeyword3(new WxMpTemplateData("5天后"));
-                data2.setKeyword4(new WxMpTemplateData("账号即将到期"));
-                data2.setRemark(new WxMpTemplateData("请尽快登录后台-在账号管理中查看"));
-                weChatService.sendTemplateMessage(weChatService.getAccessToken(),Jsons.toJson(manageMessage));
+                for (CustomerService customerService : customerServices) {
+                    WxMpTemplateMessage manageMessage = new WxMpTemplateMessage()
+                            .setToUser(customerService.getOpenId())
+                            .setTemplateId(EXPIRY_TEMPLATE)
+                            .setUrl(" ");
+                    WxMpTemplateMessage.TemplateData data2 = templateMessage.getData();
+                    data2.setFirst(new WxMpTemplateData("您有" + accounts.size() + "个主账号即将到期"));
+                    data2.setKeyword1(new WxMpTemplateData("车队主账号"));
+                    data2.setKeyword2(new WxMpTemplateData("车队主账号"));
+                    data2.setKeyword3(new WxMpTemplateData("5天后"));
+                    data2.setKeyword4(new WxMpTemplateData("账号即将到期"));
+                    data2.setRemark(new WxMpTemplateData("请尽快登录后台-在账号管理中查看"));
+                    log.info("发送账号即将到期消息至客服:{}", customerService.getNickName());
+                    weChatService.sendTemplateMessage(weChatService.getAccessToken(),Jsons.toJson(manageMessage));
+                }
             }
         }
 

+ 20 - 13
netflix-web/src/main/java/com/cyksj/web/controller/manage/AdminController.java

@@ -10,8 +10,10 @@ import com.cyksj.common.util.Codec;
 import com.cyksj.common.util.Jsons;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.CustomerServiceMapper;
 import com.cyksj.model.dto.WxMpTemplateData;
 import com.cyksj.model.dto.WxMpTemplateMessage;
+import com.cyksj.model.entity.CustomerService;
 import com.cyksj.model.manage.dto.AdminInfo;
 import com.cyksj.model.manage.entity.Admin;
 import com.cyksj.service.mange.AdminService;
@@ -47,6 +49,8 @@ public class AdminController {
 
     private final WeChatService weChatService;
 
+    private final CustomerServiceMapper customerServiceMapper;
+
     @PostMapping(value = "/login")
     public Result<AdminInfo> login(@RequestBody Admin adminRequest) throws Exception {
         Admin admin = adminService.getOne(
@@ -109,19 +113,22 @@ public class AdminController {
 
     @GetMapping("/send/template")
     public Result<String> sendTemplate(String title, String channel) throws Exception {
-        WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
-                //TODO 管理员账号openId
-                .setToUser(" ")
-                .setTemplateId(WeChatTemplateConst.VDIEO_NOTIFY)
-                .setUrl(" ");
-        WxMpTemplateMessage.TemplateData data = templateMessage.getData();
-        data.setFirst(new WxMpTemplateData("youtube频道有更新"));
-        data.setKeyword1(new WxMpTemplateData(title));
-        data.setKeyword2(new WxMpTemplateData(channel));
-        data.setKeyword3(new WxMpTemplateData(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")));
-        data.setKeyword4(new WxMpTemplateData("默认"));
-        data.setRemark(new WxMpTemplateData("您订阅的频道有新内容发布"));
-        weChatService.sendTemplateMessage(weChatService.getAccessToken(), Jsons.toJson(templateMessage));
+        List<CustomerService> customerServices = customerServiceMapper.selectList(null);
+        for (CustomerService customerService : customerServices) {
+            WxMpTemplateMessage templateMessage = new WxMpTemplateMessage()
+                    .setToUser(customerService.getOpenId())
+                    .setTemplateId(WeChatTemplateConst.VDIEO_NOTIFY)
+                    .setUrl(" ");
+            WxMpTemplateMessage.TemplateData data = templateMessage.getData();
+            data.setFirst(new WxMpTemplateData("youtube频道有更新"));
+            data.setKeyword1(new WxMpTemplateData(title));
+            data.setKeyword2(new WxMpTemplateData(channel));
+            data.setKeyword3(new WxMpTemplateData(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")));
+            data.setKeyword4(new WxMpTemplateData("默认"));
+            data.setRemark(new WxMpTemplateData("您订阅的频道有新内容发布"));
+            log.info("发送video模板消息至客服:{}", customerService.getNickName());
+            weChatService.sendTemplateMessage(weChatService.getAccessToken(), Jsons.toJson(templateMessage));
+        }
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }