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