From 54e2654033b0272fb47799070e9dec90fc633071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Sat, 7 Feb 2026 17:01:46 +0800 Subject: [PATCH] =?UTF-8?q?```=20feat(settlement):=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=BD=A3=E9=87=91=E8=AE=A1=E7=AE=97=E9=80=BB=E8=BE=91=E5=B9=B6?= =?UTF-8?q?=E8=AE=A1=E5=85=A5=E5=88=86=E9=94=80=E5=95=86=E5=86=BB=E7=BB=93?= =?UTF-8?q?=E9=87=91=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将佣金发放逻辑修改为先计入 ShopDealerUser.freezeMoney 而不是直接入账 - 更新任务描述文档,明确佣金先计入冻结金额的流程 - 在 findUnsettledPaidOrders 方法中添加相关注释说明 - 修改日志信息从"佣金入账"为"佣金入冻结" - 调整 SQL 更新语句将 money 字段改为 freeze_money 字段 - 添加防止并发丢失更新的安全机制注释 ``` --- .../glt/task/DealerOrderSettlement10584Task.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/gxwebsoft/glt/task/DealerOrderSettlement10584Task.java b/src/main/java/com/gxwebsoft/glt/task/DealerOrderSettlement10584Task.java index 97b8e1d..56e254f 100644 --- a/src/main/java/com/gxwebsoft/glt/task/DealerOrderSettlement10584Task.java +++ b/src/main/java/com/gxwebsoft/glt/task/DealerOrderSettlement10584Task.java @@ -38,7 +38,7 @@ import java.util.*; /** * 租户10584:分销订单结算任务 *

- * 每20秒执行一次,查询“已付款且未结算”的订单,按指定规则发放佣金并将订单置为已结算。 + * 每20秒执行一次,查询“已付款且未结算”的订单,按指定规则计算佣金并先计入分销商冻结金额(freezeMoney),并将订单置为已结算。 */ @Slf4j @Component @@ -133,6 +133,7 @@ public class DealerOrderSettlement10584Task { } private List findUnsettledPaidOrders() { + // 订单付款成功即触发分佣:本任务会将佣金先计入 ShopDealerUser.freezeMoney。 return shopOrderService.list( new LambdaQueryWrapper() .eq(ShopOrder::getTenantId, TENANT_ID) @@ -539,18 +540,19 @@ public class DealerOrderSettlement10584Task { } boolean alreadyCredited = shopDealerCapitalService.count(idempotentQw) > 0; if (alreadyCredited) { - log.info("佣金已入账,跳过 - orderNo={}, toDealerUserId={}, money={}, comments={}", order.getOrderNo(), dealerUserId, money, comments); + log.info("佣金已处理(已入冻结/已落明细),跳过 - orderNo={}, toDealerUserId={}, money={}, comments={}", order.getOrderNo(), dealerUserId, money, comments); return; } - log.info("佣金入账 - orderNo={}, toDealerUserId={}, money={}, comments={}", order.getOrderNo(), dealerUserId, money, comments); + log.info("佣金入冻结 - orderNo={}, toDealerUserId={}, money={}, comments={}", order.getOrderNo(), dealerUserId, money, comments); - // 先累加佣金到分销商账户(避免并发下丢失更新,用SQL自增) + // 订单付款成功:佣金先进入冻结金额(freeze_money),避免后续退款/撤销时已可提现导致对账困难。 + // 并发下避免丢失更新,用SQL自增。 boolean updated = shopDealerUserService.update( new LambdaUpdateWrapper() .eq(ShopDealerUser::getTenantId, TENANT_ID) .eq(ShopDealerUser::getUserId, dealerUserId) - .setSql("money = IFNULL(money,0) + " + money.toPlainString()) + .setSql("freeze_money = IFNULL(freeze_money,0) + " + money.toPlainString()) .setSql("total_money = IFNULL(total_money,0) + " + money.toPlainString()) ); @@ -602,7 +604,7 @@ public class DealerOrderSettlement10584Task { new LambdaUpdateWrapper() .eq(ShopDealerUser::getTenantId, TENANT_ID) .eq(ShopDealerUser::getUserId, dealerUserId) - .setSql("money = IFNULL(money,0) + " + money.toPlainString()) + .setSql("freeze_money = IFNULL(freeze_money,0) + " + money.toPlainString()) .setSql("total_money = IFNULL(total_money,0) + " + money.toPlainString()) ); if (!updated) {