重要:分账计算方法做调整,拉卡拉手续费由 代理商或平台出,商家不会扣除。

This commit is contained in:
Jack 2025-12-03 11:38:47 +08:00
parent 46b27539b5
commit 950b7b9b32

View File

@ -206,7 +206,16 @@ public class LklSeparateWithTotalAmountDTO {
return SeparateResult.failure(errorMsg);
}
// 6. 计算商家实际分账比例
// 6. 根据指定规则调整各参与方分账金额
Pair<Boolean, String> adjustResult = adjustAmountsWithLklAmount();
if (!adjustResult.getFirst()) {
String errorMsg = "分账计算参数异常: " + adjustResult.getSecond();
log.error(errorMsg);
this.errMsg = errorMsg;
return SeparateResult.failure(errorMsg);
}
// 7. 计算商家实际分账比例
Pair<Boolean, String> mchResult = calculateActualMchRatio();
if (!mchResult.getFirst()) {
String errorMsg = "分账计算参数异常: " + mchResult.getSecond();
@ -231,6 +240,54 @@ public class LklSeparateWithTotalAmountDTO {
}
}
/**
* 根据指定规则调整各参与方分账金额
* 如果拉卡拉分账金额lklAmount>0:
* 1. 如果agent2ndAmount>0 且大于lklAmount, 则agent2ndAmount=agent2ndAmount-lklAmountmchAmount=mchAmount+lklAmount
* 2. 如果agent2ndAmount<=0 agent1stAmount>0 且大于lklAmount, 则agent1stAmount=agent1stAmount-lklAmountmchAmount=mchAmount+lklAmount
* 3. 如果agent2ndAmount<=0 agent1stAmount<=0 platAmount>0 且大于等于lklAmount, platAmount=platAmount-lklAmountmchAmount=mchAmount+lklAmount
*
* @return Pair<Boolean, String> Boolean表示是否成功String为错误信息
*/
private Pair<Boolean, String> 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());
}
}
/**
* 校验必要参数
*