diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java index d07554e4..9bd7507c 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java @@ -660,39 +660,25 @@ public class OrderDetailServiceImpl implements OrderDetailService { // 没有罚金 自己承担手续费 divMembers.add(new DivMember(memberId, MoneyUtil.toS(odMoney), false)); // 平台金额部分抽出来部分承担手续费 - // 1. 使用字符串构造精确的BigDecimal(避免double精度问题) BigDecimal payCommissionRate = new BigDecimal("0.01"); -// 2. 计算佣金时强制指定精度和舍入模式(双重保障) BigDecimal commissionAmount = odMoney.multiply(payCommissionRate) - .setScale(6, RoundingMode.HALF_UP) // 第一次精度控制 - .setScale(6, RoundingMode.DOWN); // 第二次强制截断(关键修复点) + .setScale(2, RoundingMode.UP); // 第一次精度控制 -// 3. 对齐payMoney的精度(确保减法一致性) - payMoney = payMoney.setScale(6, RoundingMode.DOWN); // 统一截断模式 - -// 4. 执行减法操作Z payMoney = payMoney.subtract(commissionAmount); - -// 5. 更新数据(保持精度一致) fdUpdate.setPayMoney(payMoney); - divMembers.add(new DivMember( - "0", - // 显式传递舍入模式给工具类 - commissionAmount.toString(), - true - )); + divMembers.add(new DivMember("0", MoneyUtil.toS(commissionAmount), true)); financialDetailService.updateFinancialDetail(fdUpdate); odMoney = odMoney.add(payCommissionRate); // 增加手续费财务子单 FinancialDetail financialDetail1 = new FinancialDetail(); financialDetail1.setOrderDetailId(orderDetailId); - financialDetail1.setFinancialDetailType(6); - financialDetail1.setPayMoney(payCommissionRate); + financialDetail1.setFinancialDetailType(2); + financialDetail1.setPayMoney(commissionAmount); financialDetail1.setPayTime(new Date()); financialDetailService.insertFinancialDetail(financialDetail1); - logger.info("平台的抽成减去承担手续费后的金额{},平台手续费{},增加的财务子单{}", payMoney, payCommissionRate, financialDetail1); + logger.info("平台的抽成减去承担手续费后的金额{},平台手续费{},增加的财务子单{}", payMoney, commissionAmount, financialDetail1); } logger.info("子单的罚金处理后的总额{}", dtx);