|
|
@ -329,24 +329,48 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public Object getHitRebateInfo(BigDecimal dispatchAmt, Long activityId) { |
|
|
|
if(dispatchAmt.compareTo(BigDecimal.ZERO)<0){ |
|
|
|
Assert.throwEx("发货金额不能小于0"); |
|
|
|
} |
|
|
|
TbsActivity activity = tbsActivityService.getById(activityId); |
|
|
|
TzcRebate rebate = tzcRebateService.getById(activity.getRebateId()); |
|
|
|
List<TzcRebateLevelsArgument> levelsArgumentList = tzcRebateLevelsArgumentService.list( |
|
|
|
new LambdaQueryWrapper<TzcRebateLevelsArgument>().eq(TzcRebateLevelsArgument::getRebateId, rebate.getId()) |
|
|
|
); |
|
|
|
public TzcRebateLevels getHitRebateMaxLevel(BigDecimal dispatchAmt,BigDecimal sameDispatchAmt,Long rebatePeriodId) { |
|
|
|
// 判断是否同期
|
|
|
|
int samePeriodFlag = sameDispatchAmt.compareTo(BigDecimal.ZERO)==0?0:1; |
|
|
|
TzcRebatePeriod rebatePeriod = tzcRebatePeriodService.getById(rebatePeriodId); |
|
|
|
List<TzcRebateLevels> levelsList = tzcRebateLevelsService.list( |
|
|
|
new LambdaQueryWrapper<TzcRebateLevels>() |
|
|
|
.eq(TzcRebateLevels::getRebateId, rebate.getId()) |
|
|
|
.orderByDesc(TzcRebateLevels::getLevelNum) |
|
|
|
.eq(TzcRebateLevels::getRebateId, rebatePeriod.getRebateId()) |
|
|
|
// 同期数据过滤
|
|
|
|
.eq(TzcRebateLevels::getSamePeriodFlag, samePeriodFlag) |
|
|
|
.orderByDesc(TzcRebateLevels::getLevelNum) |
|
|
|
); |
|
|
|
// 命中的最高坎级
|
|
|
|
for (TzcRebateLevels levels : levelsList) { |
|
|
|
|
|
|
|
// 条件选择:0-百分比;1-固定金额
|
|
|
|
if (levels.getConditionSelect().equals(0)){ |
|
|
|
// 条件类型:0-同期进货金额;1-区间目标金额
|
|
|
|
BigDecimal periodAmount = null; |
|
|
|
if (levels.getConditionType().equals(0)){ |
|
|
|
periodAmount = rebatePeriod.getSamePeriodAmount(); |
|
|
|
}else if (levels.getConditionType().equals(1)){ |
|
|
|
periodAmount = rebatePeriod.getPeriodAmount(); |
|
|
|
} |
|
|
|
// 发货金额大于坎级制定的百分比
|
|
|
|
boolean ok = dispatchAmt.compareTo( |
|
|
|
periodAmount.multiply(levels.getConditionRate()) |
|
|
|
.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP) |
|
|
|
)>=0; |
|
|
|
if (!ok){ |
|
|
|
log.debug("命中坎级:"+levels.getLevelNum()+",条件比重:"+levels.getConditionRate()+"%"); |
|
|
|
continue; |
|
|
|
} |
|
|
|
return levels; |
|
|
|
}else if (levels.getConditionSelect().equals(1)){ |
|
|
|
// 发货金额大于坎级制定的固定金额
|
|
|
|
boolean ok = dispatchAmt.compareTo(levels.getConditionAmount())>=0; |
|
|
|
if (!ok){ |
|
|
|
log.debug("命中坎级:"+levels.getLevelNum()+",条件固定金额:"+levels.getConditionAmount()); |
|
|
|
continue; |
|
|
|
} |
|
|
|
return levels; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|