From bb83f2026b91a3c1faa42f8c70e777204eae84b4 Mon Sep 17 00:00:00 2001 From: zhx Date: Mon, 6 Jul 2026 11:26:02 +0800 Subject: [PATCH] feat: add usdt freight deduction amount --- .../user/UserFreightBalanceServiceImpl.java | 23 +++++++++++++------ .../UserFreightBalanceRunningWaterCO.java | 5 ++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/user/UserFreightBalanceServiceImpl.java b/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/user/UserFreightBalanceServiceImpl.java index 4947d71d..aa21e9b1 100644 --- a/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/user/UserFreightBalanceServiceImpl.java +++ b/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/user/UserFreightBalanceServiceImpl.java @@ -163,15 +163,21 @@ public class UserFreightBalanceServiceImpl implements @Override public void deduction(UserFreightBalanceCmd param) { - // 余额不足 + // 扣款金币允许为0,表示本次只登记USDT扣款;负数会导致余额反向增加,必须拦截。 ResponseAssert.isTrue(WalletErrorCode.REQUIRED_GT_ZERO, ArithmeticUtils.gte(param.getEarnPoints(), BigDecimal.ZERO)); - // 操作失败 - ResponseAssert.isTrue(CommonErrorCode.OPERATING_FAILURE, - decrCandyBalance(param.getSysOrigin(), param.getUserId(), param.getEarnPoints())); + // USDT扣款复用进货的amount字段,必须大于0,否则会产生没有金额意义的扣款流水。 + ResponseAssert.isTrue(WalletErrorCode.REQUIRED_GT_ZERO, + Objects.nonNull(param.getAmount()) && param.getAmount().compareTo(BigDecimal.ZERO) > 0); - // 插入流水 + // 只有金币数量大于0时才真正扣减货运金币余额;金币为0时保留原余额,只记录USDT扣款流水。 + if (param.getEarnPoints().compareTo(BigDecimal.ZERO) > 0) { + ResponseAssert.isTrue(CommonErrorCode.OPERATING_FAILURE, + decrCandyBalance(param.getSysOrigin(), param.getUserId(), param.getEarnPoints())); + } + + // 扣款流水同时记录金币数量和USDT金额,amount用于后台列表、导出和后续对账。 BigDecimal balance = getAvailableBalance(param.getUserId()); ResponseAssert.requiredSuccess( freightGoldClient.addRunningWater(new AddFreightBalanceRunningWaterCmd() @@ -182,13 +188,16 @@ public class UserFreightBalanceServiceImpl implements .setQuantity(param.getEarnPoints()) .setBalance(balance) .setUsdQuantity(BigDecimal.ZERO) + .setAmount(param.getAmount()) .setOrigin(FreightBalanceOrigin.DEDUCTION.name()) .setRemark(param.getRemark()) .setCreateUser(param.getOperationUser()) .setUpdateUser(param.getOperationUser()))); - //余额如果少于1250则收回徽章 - removeFreightShipBadge(param.getUserId(), balance); + // 实际扣减金币后才需要重新判断金币余额阈值;USDT-only扣款不改变余额。 + if (param.getEarnPoints().compareTo(BigDecimal.ZERO) > 0) { + removeFreightShipBadge(param.getUserId(), balance); + } } diff --git a/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/dto/clienobject/user/UserFreightBalanceRunningWaterCO.java b/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/dto/clienobject/user/UserFreightBalanceRunningWaterCO.java index e564003c..2c71c219 100644 --- a/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/dto/clienobject/user/UserFreightBalanceRunningWaterCO.java +++ b/rc-service/rc-service-console/console-client/src/main/java/com/red/circle/console/app/dto/clienobject/user/UserFreightBalanceRunningWaterCO.java @@ -65,6 +65,11 @@ public class UserFreightBalanceRunningWaterCO implements Serializable { */ private BigDecimal balance; + /** + * USDT金额. + */ + private BigDecimal amount; + /** * 来源. */