From bb45d4b96ea645defe5b38f6954989534f5f68f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Tue, 24 Feb 2026 16:40:40 +0800 Subject: [PATCH] =?UTF-8?q?```=20fix(task):=20=E4=BF=AE=E5=A4=8D=E9=85=8D?= =?UTF-8?q?=E9=80=81=E5=A5=96=E5=8A=B1=E8=AE=A1=E7=AE=97=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E5=B9=B6=E5=85=BC=E5=AE=B9=E5=A4=9A=E7=A7=8D=E5=BD=95=E5=85=A5?= =?UTF-8?q?=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加normalizeDeliveryRate方法处理配送费率兼容性问题 - 支持0.05表示5%(比例)和5表示5%(百分比)两种录入方式 - 移除查询条件中不必要的userId限制 - 重构奖励计算逻辑使用标准化后的费率进行计算 - 添加单价验证确保只有有效价格参与计算 - 优化订单行金额计算确保精确度 ``` --- .../DealerCommissionUnfreeze10584Task.java | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/gxwebsoft/glt/task/DealerCommissionUnfreeze10584Task.java b/src/main/java/com/gxwebsoft/glt/task/DealerCommissionUnfreeze10584Task.java index 8ebb385..c493202 100644 --- a/src/main/java/com/gxwebsoft/glt/task/DealerCommissionUnfreeze10584Task.java +++ b/src/main/java/com/gxwebsoft/glt/task/DealerCommissionUnfreeze10584Task.java @@ -67,6 +67,22 @@ public class DealerCommissionUnfreeze10584Task { private static final int FLOW_TYPE_DELIVERY_REWARD = 60; // 配送奖励(直接入可提现金额) + /** + * 兼容两种录入方式: + * - 0.05 表示 5%(比例) + * - 5 表示 5%(百分比) + */ + private static BigDecimal normalizeDeliveryRate(BigDecimal rawRate) { + if (rawRate == null || rawRate.signum() <= 0) { + return null; + } + // 如果录入 >= 1,按“百分比”处理(1 => 1%) + if (rawRate.compareTo(BigDecimal.ONE) >= 0) { + return rawRate.movePointLeft(2); + } + return rawRate; + } + @Resource private TransactionTemplate transactionTemplate; @@ -212,7 +228,6 @@ public class DealerCommissionUnfreeze10584Task { new LambdaQueryWrapper() .eq(ShopDealerCapital::getTenantId, TENANT_ID) .eq(ShopDealerCapital::getFlowType, FLOW_TYPE_DELIVERY_REWARD) - .eq(ShopDealerCapital::getUserId, riderId) .eq(ShopDealerCapital::getOrderNo, orderNo) ) > 0; if (already) { @@ -227,7 +242,6 @@ public class DealerCommissionUnfreeze10584Task { new LambdaQueryWrapper() .eq(ShopDealerCapital::getTenantId, TENANT_ID) .eq(ShopDealerCapital::getFlowType, FLOW_TYPE_DELIVERY_REWARD) - .eq(ShopDealerCapital::getUserId, riderId) .eq(ShopDealerCapital::getOrderNo, orderNo) .last("limit 1 for update") ); @@ -278,11 +292,17 @@ public class DealerCommissionUnfreeze10584Task { if (qty <= 0) { continue; } - BigDecimal unit = goodsDeliveryMoneyMap.getOrDefault(goodsId, BigDecimal.ZERO); - if (unit.signum() <= 0) { + BigDecimal rawRate = goodsDeliveryMoneyMap.getOrDefault(goodsId, BigDecimal.ZERO); + BigDecimal rate = normalizeDeliveryRate(rawRate); + if (rate == null || rate.signum() <= 0) { continue; } - reward = reward.add(unit.multiply(BigDecimal.valueOf(qty))); + BigDecimal unitPrice = og.getPrice() != null ? og.getPrice() : BigDecimal.ZERO; + if (unitPrice.signum() <= 0) { + continue; + } + BigDecimal lineAmount = unitPrice.multiply(BigDecimal.valueOf(qty)); + reward = reward.add(lineAmount.multiply(rate)); } reward = reward.setScale(2, RoundingMode.HALF_UP);