```
feat(settlement): 修改佣金计算逻辑并计入分销商冻结金额 - 将佣金发放逻辑修改为先计入 ShopDealerUser.freezeMoney 而不是直接入账 - 更新任务描述文档,明确佣金先计入冻结金额的流程 - 在 findUnsettledPaidOrders 方法中添加相关注释说明 - 修改日志信息从"佣金入账"为"佣金入冻结" - 调整 SQL 更新语句将 money 字段改为 freeze_money 字段 - 添加防止并发丢失更新的安全机制注释 ```
This commit is contained in:
@@ -38,7 +38,7 @@ import java.util.*;
|
||||
/**
|
||||
* 租户10584:分销订单结算任务
|
||||
* <p>
|
||||
* 每20秒执行一次,查询“已付款且未结算”的订单,按指定规则发放佣金并将订单置为已结算。
|
||||
* 每20秒执行一次,查询“已付款且未结算”的订单,按指定规则计算佣金并先计入分销商冻结金额(freezeMoney),并将订单置为已结算。
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
@@ -133,6 +133,7 @@ public class DealerOrderSettlement10584Task {
|
||||
}
|
||||
|
||||
private List<ShopOrder> findUnsettledPaidOrders() {
|
||||
// 订单付款成功即触发分佣:本任务会将佣金先计入 ShopDealerUser.freezeMoney。
|
||||
return shopOrderService.list(
|
||||
new LambdaQueryWrapper<ShopOrder>()
|
||||
.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<ShopDealerUser>()
|
||||
.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<ShopDealerUser>()
|
||||
.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) {
|
||||
|
||||
Reference in New Issue
Block a user