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/PointsSettlementService.java |   40 +++++++++++++++++++++++++++++++++++++++-
 1 files changed, 39 insertions(+), 1 deletions(-)

diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/points/service/PointsSettlementService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/points/service/PointsSettlementService.java
index a24ee43..4e3e58f 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/points/service/PointsSettlementService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/points/service/PointsSettlementService.java
@@ -1,6 +1,9 @@
 package com.tcm.training.admin.points.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.member.entity.AppUser;
 import com.tcm.training.admin.member.mapper.UserMapper;
 import com.tcm.training.admin.live.entity.Clinic;
@@ -42,6 +45,7 @@
     private final UserMapper userMapper;
     private final ClinicMapper clinicMapper;
     private final PointsLedgerAppService pointsLedgerAppService;
+    private final AppSystemNoticeDispatchService appSystemNoticeDispatchService;
 
     public PointsSettlementService(PointsConfigMapper pointsConfigMapper,
                                    UserPointsAccountMapper userPointsAccountMapper,
@@ -49,7 +53,8 @@
                                    PointsExchangeOrderItemMapper pointsExchangeOrderItemMapper,
                                    UserMapper userMapper,
                                    ClinicMapper clinicMapper,
-                                   PointsLedgerAppService pointsLedgerAppService) {
+                                   PointsLedgerAppService pointsLedgerAppService,
+                                   AppSystemNoticeDispatchService appSystemNoticeDispatchService) {
         this.pointsConfigMapper = pointsConfigMapper;
         this.userPointsAccountMapper = userPointsAccountMapper;
         this.pointsExchangeOrderMapper = pointsExchangeOrderMapper;
@@ -57,6 +62,7 @@
         this.userMapper = userMapper;
         this.clinicMapper = clinicMapper;
         this.pointsLedgerAppService = pointsLedgerAppService;
+        this.appSystemNoticeDispatchService = appSystemNoticeDispatchService;
     }
 
     @Scheduled(fixedDelayString = "${app.points.settlement-interval-ms:60000}")
@@ -199,6 +205,7 @@
             order.setTotalPoints(sumPoints(group));
             order.setStatus(0);
             pointsExchangeOrderMapper.insert(order);
+            dispatchGiftOrderCreatedNotice(order, config, group);
 
             for (PointsExchangeOrderItem item : group) {
                 item.setOrderId(order.getId());
@@ -224,6 +231,30 @@
                 );
             }
         }
+    }
+
+    /**
+     * 在积分兑换汇总订单生成后,通知当前诊所用户尽快处理兑换单。
+     */
+    private void dispatchGiftOrderCreatedNotice(PointsExchangeOrder order, PointsConfig config, List<PointsExchangeOrderItem> group) {
+        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");
+        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("giftName", config == null ? "" : defaultText(config.getGiftName()));
+        payload.put("itemCount", String.valueOf(group == null ? 0 : group.size()));
+        command.setPayload(payload);
+        appSystemNoticeDispatchService.createAndPush(command);
     }
 
     private String buildGroupKey(PointsExchangeOrderItem item) {
@@ -327,4 +358,11 @@
     private String buildSettlementReferenceNo(Long configId) {
         return SETTLEMENT_CLEAR_REFERENCE_PREFIX + (configId == null ? 0L : configId.longValue());
     }
+
+    /**
+     * 返回安全文本,避免通知载荷出现空值。
+     */
+    private String defaultText(String value) {
+        return value == null ? "" : value;
+    }
 }

--
Gitblit v1.7.1