feat: add usdt freight deduction amount

This commit is contained in:
zhx 2026-07-06 11:26:02 +08:00
parent 4940e612b5
commit bb83f2026b
2 changed files with 21 additions and 7 deletions

View File

@ -163,15 +163,21 @@ public class UserFreightBalanceServiceImpl implements
@Override @Override
public void deduction(UserFreightBalanceCmd param) { public void deduction(UserFreightBalanceCmd param) {
// 余额不足 // 扣款金币允许为0表示本次只登记USDT扣款负数会导致余额反向增加必须拦截
ResponseAssert.isTrue(WalletErrorCode.REQUIRED_GT_ZERO, ResponseAssert.isTrue(WalletErrorCode.REQUIRED_GT_ZERO,
ArithmeticUtils.gte(param.getEarnPoints(), BigDecimal.ZERO)); ArithmeticUtils.gte(param.getEarnPoints(), BigDecimal.ZERO));
// 操作失败 // USDT扣款复用进货的amount字段必须大于0否则会产生没有金额意义的扣款流水
ResponseAssert.isTrue(CommonErrorCode.OPERATING_FAILURE, ResponseAssert.isTrue(WalletErrorCode.REQUIRED_GT_ZERO,
decrCandyBalance(param.getSysOrigin(), param.getUserId(), param.getEarnPoints())); 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()); BigDecimal balance = getAvailableBalance(param.getUserId());
ResponseAssert.requiredSuccess( ResponseAssert.requiredSuccess(
freightGoldClient.addRunningWater(new AddFreightBalanceRunningWaterCmd() freightGoldClient.addRunningWater(new AddFreightBalanceRunningWaterCmd()
@ -182,13 +188,16 @@ public class UserFreightBalanceServiceImpl implements
.setQuantity(param.getEarnPoints()) .setQuantity(param.getEarnPoints())
.setBalance(balance) .setBalance(balance)
.setUsdQuantity(BigDecimal.ZERO) .setUsdQuantity(BigDecimal.ZERO)
.setAmount(param.getAmount())
.setOrigin(FreightBalanceOrigin.DEDUCTION.name()) .setOrigin(FreightBalanceOrigin.DEDUCTION.name())
.setRemark(param.getRemark()) .setRemark(param.getRemark())
.setCreateUser(param.getOperationUser()) .setCreateUser(param.getOperationUser())
.setUpdateUser(param.getOperationUser()))); .setUpdateUser(param.getOperationUser())));
//余额如果少于1250则收回徽章 // 实际扣减金币后才需要重新判断金币余额阈值USDT-only扣款不改变余额
removeFreightShipBadge(param.getUserId(), balance); if (param.getEarnPoints().compareTo(BigDecimal.ZERO) > 0) {
removeFreightShipBadge(param.getUserId(), balance);
}
} }

View File

@ -65,6 +65,11 @@ public class UserFreightBalanceRunningWaterCO implements Serializable {
*/ */
private BigDecimal balance; private BigDecimal balance;
/**
* USDT金额.
*/
private BigDecimal amount;
/** /**
* 来源. * 来源.
*/ */