Commit 0cca6be63a22f8a3e625356ed3b3daa5f7b1fbaa

Authored by puhui999
1 parent 5307852f

【新增】MALL: 订单发货订阅消息

yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/MessageTemplateConstants.java
@@ -17,16 +17,6 @@ public interface MessageTemplateConstants { @@ -17,16 +17,6 @@ public interface MessageTemplateConstants {
17 //======================= 小程序订阅消息模版 ======================= 17 //======================= 小程序订阅消息模版 =======================
18 18
19 String TRADE_AFTER_SALE_CHANGE = "售后进度通知"; 19 String TRADE_AFTER_SALE_CHANGE = "售后进度通知";
20 -  
21 - /**  
22 - * 售后进度通知相关参数枚举  
23 - *  
24 - * @author HUIHUI  
25 - */  
26 - class TradeAfterSaleChangeReqParams {  
27 -  
28 - public static final String ORDER_DELIVERY = "order_delivery";  
29 -  
30 - } 20 + String DELIVERY_ORDER = "订单发货通知";
31 21
32 } 22 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
1 package cn.iocoder.yudao.module.trade.service.order; 1 package cn.iocoder.yudao.module.trade.service.order;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
  4 +import cn.hutool.core.date.LocalDateTimeUtil;
4 import cn.hutool.core.lang.Assert; 5 import cn.hutool.core.lang.Assert;
5 import cn.hutool.core.map.MapUtil; 6 import cn.hutool.core.map.MapUtil;
6 import cn.hutool.core.util.ObjUtil; 7 import cn.hutool.core.util.ObjUtil;
@@ -19,6 +20,8 @@ import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderRespDTO; @@ -19,6 +20,8 @@ import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderRespDTO;
19 import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; 20 import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum;
20 import cn.iocoder.yudao.module.product.api.comment.ProductCommentApi; 21 import cn.iocoder.yudao.module.product.api.comment.ProductCommentApi;
21 import cn.iocoder.yudao.module.product.api.comment.dto.ProductCommentCreateReqDTO; 22 import cn.iocoder.yudao.module.product.api.comment.dto.ProductCommentCreateReqDTO;
  23 +import cn.iocoder.yudao.module.system.api.social.SocialClientApi;
  24 +import cn.iocoder.yudao.module.system.api.social.dto.SocialWxaSubscribeMessageSendReqDTO;
22 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDeliveryReqVO; 25 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDeliveryReqVO;
23 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderRemarkReqVO; 26 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderRemarkReqVO;
24 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderUpdateAddressReqVO; 27 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderUpdateAddressReqVO;
@@ -52,6 +55,7 @@ import cn.iocoder.yudao.module.trade.service.price.calculator.TradePriceCalculat @@ -52,6 +55,7 @@ import cn.iocoder.yudao.module.trade.service.price.calculator.TradePriceCalculat
52 import jakarta.annotation.Resource; 55 import jakarta.annotation.Resource;
53 import jakarta.validation.constraints.NotNull; 56 import jakarta.validation.constraints.NotNull;
54 import lombok.extern.slf4j.Slf4j; 57 import lombok.extern.slf4j.Slf4j;
  58 +import org.springframework.scheduling.annotation.Async;
55 import org.springframework.stereotype.Service; 59 import org.springframework.stereotype.Service;
56 import org.springframework.transaction.annotation.Transactional; 60 import org.springframework.transaction.annotation.Transactional;
57 61
@@ -67,6 +71,7 @@ import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.min @@ -67,6 +71,7 @@ import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.min
67 import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; 71 import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP;
68 import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getTerminal; 72 import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getTerminal;
69 import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.*; 73 import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.*;
  74 +import static cn.iocoder.yudao.module.trade.enums.MessageTemplateConstants.DELIVERY_ORDER;
70 75
71 /** 76 /**
72 * 交易订单【写】Service 实现类 77 * 交易订单【写】Service 实现类
@@ -78,6 +83,8 @@ import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.*; @@ -78,6 +83,8 @@ import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.*;
78 @Slf4j 83 @Slf4j
79 public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { 84 public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
80 85
  86 + public static final String ORDER_DETAIL_PATH = "pages/order/detail"; // 订单详情页
  87 +
81 @Resource 88 @Resource
82 private TradeOrderMapper tradeOrderMapper; 89 private TradeOrderMapper tradeOrderMapper;
83 @Resource 90 @Resource
@@ -103,6 +110,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -103,6 +110,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
103 private MemberAddressApi addressApi; 110 private MemberAddressApi addressApi;
104 @Resource 111 @Resource
105 private ProductCommentApi productCommentApi; 112 private ProductCommentApi productCommentApi;
  113 + @Resource
  114 + public SocialClientApi socialClientApi;
106 115
107 @Resource 116 @Resource
108 private TradeOrderProperties tradeOrderProperties; 117 private TradeOrderProperties tradeOrderProperties;
@@ -367,6 +376,21 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -367,6 +376,21 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
367 // 4. 发送站内信 376 // 4. 发送站内信
368 tradeMessageService.sendMessageWhenDeliveryOrder(new TradeOrderMessageWhenDeliveryOrderReqBO() 377 tradeMessageService.sendMessageWhenDeliveryOrder(new TradeOrderMessageWhenDeliveryOrderReqBO()
369 .setOrderId(order.getId()).setUserId(order.getUserId()).setMessage(null)); 378 .setOrderId(order.getId()).setUserId(order.getUserId()).setMessage(null));
  379 + // 5. 发送订阅消息
  380 + getSelf().sendDeliveryOrderMessage(order, deliveryReqVO);
  381 + }
  382 +
  383 + @Async
  384 + public void sendDeliveryOrderMessage(TradeOrderDO order, TradeOrderDeliveryReqVO deliveryReqVO) {
  385 + // 构建并发送模版消息
  386 + Long orderId = order.getId();
  387 + socialClientApi.sendWxaSubscribeMessage(new SocialWxaSubscribeMessageSendReqDTO().setPage(ORDER_DETAIL_PATH + "?id=" + orderId)
  388 + .setUserId(order.getUserId()).setUserType(UserTypeEnum.MEMBER.getValue()).setTemplateTitle(DELIVERY_ORDER)
  389 + .addMessage("character_string3", String.valueOf(orderId)) // 订单编号
  390 + .addMessage("phrase6", TradeOrderStatusEnum.DELIVERED.getName()) // 订单状态
  391 + .addMessage("date4", LocalDateTimeUtil.formatNormal(LocalDateTime.now()))// 发货时间
  392 + .addMessage("character_string5", deliveryReqVO.getLogisticsNo()) // 快递单号
  393 + .addMessage("thing9", order.getReceiverDetailAddress())); // 收货地址
370 } 394 }
371 395
372 /** 396 /**