From f4b6843a1b3990453d2aef6d87b5ac30723c5870 Mon Sep 17 00:00:00 2001
From: 13404089107 <puwei@sinata.cn>
Date: 星期一, 20 四月 2026 17:54:06 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/tcm-training

---
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/points/service/PointsExchangeAppService.java |   35 ++++++++++++++++++++++++++++++++++-
 1 files changed, 34 insertions(+), 1 deletions(-)

diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/points/service/PointsExchangeAppService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/points/service/PointsExchangeAppService.java
index 831d708..2001a76 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/points/service/PointsExchangeAppService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/points/service/PointsExchangeAppService.java
@@ -4,6 +4,9 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.tcm.training.admin.app.notice.service.AppSystemNoticeDispatchCommand;
+import com.tcm.training.admin.app.notice.service.AppSystemNoticeDispatchService;
+import com.tcm.training.admin.app.notice.service.AppSystemNoticeType;
 import com.tcm.training.admin.common.DateTimes;
 import com.tcm.training.admin.common.PageResponse;
 import com.tcm.training.admin.common.PhoneMasker;
@@ -27,18 +30,23 @@
 import java.net.URLEncoder;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 @Service
 public class PointsExchangeAppService {
 
     private final PointsExchangeOrderMapper pointsExchangeOrderMapper;
     private final PointsExchangeOrderItemMapper pointsExchangeOrderItemMapper;
+    private final AppSystemNoticeDispatchService appSystemNoticeDispatchService;
 
     public PointsExchangeAppService(PointsExchangeOrderMapper pointsExchangeOrderMapper,
-                                    PointsExchangeOrderItemMapper pointsExchangeOrderItemMapper) {
+                                    PointsExchangeOrderItemMapper pointsExchangeOrderItemMapper,
+                                    AppSystemNoticeDispatchService appSystemNoticeDispatchService) {
         this.pointsExchangeOrderMapper = pointsExchangeOrderMapper;
         this.pointsExchangeOrderItemMapper = pointsExchangeOrderItemMapper;
+        this.appSystemNoticeDispatchService = appSystemNoticeDispatchService;
     }
 
     public PageResponse<PointsExchangeOrderListItemVO> pageOrders(int page,
@@ -144,6 +152,7 @@
         order.setTrackingNo(request.getTrackingNo().trim());
         order.setShippedAt(now);
         pointsExchangeOrderMapper.updateById(order);
+        dispatchOrderShippedNotice(order);
     }
 
     @Transactional
@@ -156,6 +165,30 @@
         item.setShippedAt(now);
         pointsExchangeOrderItemMapper.updateById(item);
         refreshOrderStatus(item.getOrderId(), request.getTrackingNo().trim(), now);
+        dispatchOrderShippedNotice(requireOrder(item.getOrderId()));
+    }
+
+    /**
+     * 在订单发货后为诊所用户发送订单状态更新通知。
+     */
+    private void dispatchOrderShippedNotice(PointsExchangeOrder order) {
+        if (order == null || order.getId() == null || order.getClinicAppUserId() == null) {
+            return;
+        }
+        AppSystemNoticeDispatchCommand command = new AppSystemNoticeDispatchCommand();
+        command.setAppUserId(order.getClinicAppUserId());
+        command.setNoticeTypeCode(AppSystemNoticeType.ORDER_STATUS_UPDATE);
+        command.setTitle("订单状态更新");
+        command.setContent("您的礼品兑换订单已发货");
+        command.setReferenceType("POINTS_EXCHANGE_ORDER_SHIPPED");
+        command.setReferenceId(order.getId());
+        command.setRequireUserSetting(Boolean.TRUE);
+        Map<String, String> payload = new LinkedHashMap<String, String>();
+        payload.put("orderId", String.valueOf(order.getId()));
+        payload.put("orderNo", defaultText(order.getOrderNo()));
+        payload.put("trackingNo", defaultText(order.getTrackingNo()));
+        command.setPayload(payload);
+        appSystemNoticeDispatchService.createAndPush(command);
     }
 
     @Transactional

--
Gitblit v1.7.1