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);