diff --git a/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/LklSeparateWithTotalAmountDTO.java b/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/LklSeparateWithTotalAmountDTO.java index 8214e213..fe328f22 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/LklSeparateWithTotalAmountDTO.java +++ b/mall-common/src/main/java/com/suisung/mall/common/pojo/dto/LklSeparateWithTotalAmountDTO.java @@ -34,9 +34,9 @@ import java.math.RoundingMode; public class LklSeparateWithTotalAmountDTO { // 商家最低分账比例阈值 20% - private static final BigDecimal MCH_RATIO_THRESHOLD = BigDecimal.valueOf(0.2); + private static final BigDecimal MIN_MERCHANT_RATIO_THRESHOLD = BigDecimal.valueOf(0.2); // 默认平台比例 1% - private static final BigDecimal DEFAULT_PLAT_RATIO = BigDecimal.valueOf(0.01); + private static final BigDecimal DEFAULT_PLATFORM_RATIO = BigDecimal.valueOf(0.01); // 基础金额属性 private Integer totalSeparateAmount; // 分账总金额(分) @@ -240,54 +240,6 @@ public class LklSeparateWithTotalAmountDTO { } } - /** - * 根据指定规则调整各参与方分账金额 - * 如果拉卡拉分账金额lklAmount>0: - * 1. 如果agent2ndAmount>0 且大于lklAmount, 则agent2ndAmount=agent2ndAmount-lklAmount,mchAmount=mchAmount+lklAmount - * 2. 如果agent2ndAmount<=0 但 agent1stAmount>0 且大于lklAmount, 则agent1stAmount=agent1stAmount-lklAmount,mchAmount=mchAmount+lklAmount - * 3. 如果agent2ndAmount<=0 且 agent1stAmount<=0,但 platAmount>0 且大于等于lklAmount, 则 platAmount=platAmount-lklAmount,mchAmount=mchAmount+lklAmount - * - * @return Pair Boolean表示是否成功,String为错误信息 - */ - private Pair adjustAmountsWithLklAmount() { - try { - // 只有当拉卡拉分账金额大于0时才执行调整逻辑 - if (lklAmount != null && lklAmount > 0) { - int adjustment = lklAmount; // 需要调整的金额 - - // 情况1: 如果agent2ndAmount>0 且大于lklAmount - if (agent2ndAmount != null && agent2ndAmount > 0 && agent2ndAmount > adjustment) { - agent2ndAmount -= adjustment; - mchAmount += adjustment; - log.debug("调整二级代理商分账金额: 减少{},商家分账金额增加{}", adjustment, adjustment); - } - // 情况2: 如果agent2ndAmount<=0 但 agent1stAmount>0 且大于lklAmount - else if ((agent2ndAmount == null || agent2ndAmount <= 0) && - agent1stAmount != null && agent1stAmount > 0 && agent1stAmount > adjustment) { - agent1stAmount -= adjustment; - mchAmount += adjustment; - log.debug("调整一级代理商分账金额: 减少{},商家分账金额增加{}", adjustment, adjustment); - } - // 情况3: 如果agent2ndAmount<=0 且 agent1stAmount<=0,但 platAmount>0 且大于等于lklAmount - else if ((agent2ndAmount == null || agent2ndAmount <= 0) && - (agent1stAmount == null || agent1stAmount <= 0) && - platAmount != null && platAmount > 0 && platAmount >= adjustment) { - platAmount -= adjustment; - mchAmount += adjustment; - log.debug("调整平台分账金额: 减少{},商家分账金额增加{}", adjustment, adjustment); - } - // 其他情况不作调整 - else { - log.debug("不满足调整条件,无需调整各参与方分账金额"); - } - } - - return Pair.of(true, ""); - } catch (Exception e) { - return Pair.of(false, "调整分账金额时发生异常: " + e.getMessage()); - } - } - /** * 校验必要参数 * @@ -379,7 +331,7 @@ public class LklSeparateWithTotalAmountDTO { private Pair calculateDefaultRatios() { // 如果平台比例无效,设置默认值0.01 if (platRatio == null || platRatio.compareTo(BigDecimal.ZERO) <= 0) { - platRatio = DEFAULT_PLAT_RATIO; + platRatio = DEFAULT_PLATFORM_RATIO; } return Pair.of(true, ""); @@ -479,6 +431,53 @@ public class LklSeparateWithTotalAmountDTO { return Pair.of(true, ""); } + /** + * 根据指定规则调整各参与方分账金额 + * 如果拉卡拉分账金额lklAmount>0: + * 1. 如果agent2ndAmount>0 且大于lklAmount, 则agent2ndAmount=agent2ndAmount-lklAmount,mchAmount=mchAmount+lklAmount + * 2. 如果agent2ndAmount<=0 但 agent1stAmount>0 且大于lklAmount, 则agent1stAmount=agent1stAmount-lklAmount,mchAmount=mchAmount+lklAmount + * 3. 如果agent2ndAmount<=0 且 agent1stAmount<=0,但 platAmount>0 且大于等于lklAmount, 则 platAmount=platAmount-lklAmount,mchAmount=mchAmount+lklAmount + * + * @return Pair Boolean表示是否成功,String为错误信息 + */ + private Pair adjustAmountsWithLklAmount() { + try { + // 只有当拉卡拉分账金额大于0时才执行调整逻辑 + if (lklAmount != null && lklAmount > 0) { + int adjustment = lklAmount; // 需要调整的金额 + + // 情况1: 如果agent2ndAmount>0 且大于lklAmount + if (agent2ndAmount != null && agent2ndAmount > 0 && agent2ndAmount > adjustment) { + agent2ndAmount -= adjustment; + mchAmount += adjustment; + log.debug("调整二级代理商分账金额: 减少{},商家分账金额增加{}", adjustment, adjustment); + } + // 情况2: 如果agent2ndAmount<=0 但 agent1stAmount>0 且大于lklAmount + else if ((agent2ndAmount == null || agent2ndAmount <= 0) && + agent1stAmount != null && agent1stAmount > 0 && agent1stAmount > adjustment) { + agent1stAmount -= adjustment; + mchAmount += adjustment; + log.debug("调整一级代理商分账金额: 减少{},商家分账金额增加{}", adjustment, adjustment); + } + // 情况3: 如果agent2ndAmount<=0 且 agent1stAmount<=0,但 platAmount>0 且大于等于lklAmount + else if ((agent2ndAmount == null || agent2ndAmount <= 0) && + (agent1stAmount == null || agent1stAmount <= 0) && + platAmount != null && platAmount > 0 && platAmount >= adjustment) { + platAmount -= adjustment; + mchAmount += adjustment; + log.debug("调整平台分账金额: 减少{},商家分账金额增加{}", adjustment, adjustment); + } + // 其他情况不作调整 + else { + log.debug("不满足调整条件,无需调整各参与方分账金额"); + } + } + + return Pair.of(true, ""); + } catch (Exception e) { + return Pair.of(false, "调整分账金额时发生异常: " + e.getMessage()); + } + } /** * 计算商家实际分账比例 @@ -492,9 +491,9 @@ public class LklSeparateWithTotalAmountDTO { .divide(BigDecimal.valueOf(totalSeparateAmount), 6, RoundingMode.HALF_UP); // 如果计算出的实际比例低于阈值,打印日志并返回错误 - if (mchRatio.compareTo(MCH_RATIO_THRESHOLD) < 0) { + if (mchRatio.compareTo(MIN_MERCHANT_RATIO_THRESHOLD) < 0) { String errorMsg = String.format("警告: 商家实际分账比例低于阈值,当前比例: %s,阈值: %s", - mchRatio.toPlainString(), MCH_RATIO_THRESHOLD.toPlainString()); + mchRatio.toPlainString(), MIN_MERCHANT_RATIO_THRESHOLD.toPlainString()); log.warn(errorMsg); return Pair.of(false, errorMsg); } @@ -668,4 +667,4 @@ public class LklSeparateWithTotalAmountDTO { return new SeparateResult(Boolean.TRUE, data, errMsg != null ? errMsg : ""); } } -} +} \ No newline at end of file