|
@ -54,82 +54,131 @@ public class BirBaseActivityServiceImpl extends ServiceImpl<BirBaseActivityMappe |
|
|
.map(TbsActivity::getId).collect(Collectors.toList()); |
|
|
.map(TbsActivity::getId).collect(Collectors.toList()); |
|
|
LambdaQueryWrapper<BirBaseActivity> birBaseActivityLqw = new LambdaQueryWrapper<>(); |
|
|
LambdaQueryWrapper<BirBaseActivity> birBaseActivityLqw = new LambdaQueryWrapper<>(); |
|
|
birBaseActivityLqw.in(BirBaseActivity::getActivityId,ids); |
|
|
birBaseActivityLqw.in(BirBaseActivity::getActivityId,ids); |
|
|
birBaseActivityLqw.eq(BirBaseActivity::getKeyNum,yearMonth); |
|
|
|
|
|
this.remove(birBaseActivityLqw); |
|
|
this.remove(birBaseActivityLqw); |
|
|
|
|
|
|
|
|
|
|
|
List<Long> costIds = activityList.stream().map(a->a.getCostApplyId()).distinct().collect(Collectors.toList()); |
|
|
|
|
|
LambdaQueryWrapper<TbsCostApply> costApplyLqw = new LambdaQueryWrapper<>(); |
|
|
|
|
|
costApplyLqw.in(TbsCostApply::getId,costIds); |
|
|
|
|
|
List<TbsCostApply> costApplyList = costApplyMapper.selectList(costApplyLqw); |
|
|
|
|
|
|
|
|
List<BirBaseActivity> birBaseActivities = new ArrayList<>(); |
|
|
List<BirBaseActivity> birBaseActivities = new ArrayList<>(); |
|
|
for (TbsActivity activity : activityList) { |
|
|
for (TbsActivity activity : activityList) { |
|
|
BirBaseActivity baseActivity = new BirBaseActivity(); |
|
|
|
|
|
LocalDate actStartDate = activity.getActStartDate(); |
|
|
TbsCostApply costApply = costApplyList.stream().filter(a->a.getId().equals(activity.getCostApplyId())).findFirst().get(); |
|
|
LocalDate actEndDate = activity.getActEndDate(); |
|
|
|
|
|
|
|
|
if(costApply==null){ |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
LocalDate actStartDate = activity.getPreStartDate(); |
|
|
|
|
|
LocalDate actEndDate = activity.getPreEndDate(); |
|
|
int currentActDays = (int) (actEndDate.toEpochDay()-actStartDate.toEpochDay()+1); |
|
|
int currentActDays = (int) (actEndDate.toEpochDay()-actStartDate.toEpochDay()+1); |
|
|
BigDecimal amount = activity.getTotalAmount(); |
|
|
BigDecimal amount = activity.getTotalAmount(); |
|
|
List<DateSplitDTO> dateSplitList = DateSplitUtil.getSplitDto(actStartDate,actEndDate); |
|
|
List<DateSplitDTO> dateSplitList = DateSplitUtil.getSplitDto(actStartDate,actEndDate); |
|
|
//活动金额
|
|
|
|
|
|
BigDecimal currentAmount = null; |
|
|
|
|
|
//核销金额
|
|
|
|
|
|
BigDecimal currentCheckAmount = null; |
|
|
|
|
|
Integer currItemDays = null; |
|
|
|
|
|
if(dateSplitList.size()>1){ |
|
|
if(dateSplitList.size()>1){ |
|
|
//当前年月
|
|
|
//当前年月
|
|
|
DateSplitDTO currDateSplit = dateSplitList.stream() |
|
|
for(DateSplitDTO dto : dateSplitList) { |
|
|
.filter(a->a.getYearMonth().equals(yearMonth)) |
|
|
BirBaseActivity baseActivity = new BirBaseActivity(); |
|
|
.collect(Collectors.toList()).get(0); |
|
|
|
|
|
|
|
|
//活动金额
|
|
|
|
|
|
BigDecimal currentAmount = BigDecimal.ZERO; |
|
|
|
|
|
//核销金额
|
|
|
|
|
|
BigDecimal currentCheckAmount = BigDecimal.ZERO; |
|
|
|
|
|
Integer currItemDays = 0; |
|
|
|
|
|
|
|
|
|
|
|
DateSplitDTO currDateSplit = dto; |
|
|
currItemDays = currDateSplit.getDays(); |
|
|
currItemDays = currDateSplit.getDays(); |
|
|
baseActivity.setStartDate(currDateSplit.getStartDate()); |
|
|
baseActivity.setStartDate(currDateSplit.getStartDate()); |
|
|
baseActivity.setEndDate(currDateSplit.getEndDate()); |
|
|
baseActivity.setEndDate(currDateSplit.getEndDate()); |
|
|
if(currDateSplit.getSort().equals(dateSplitList.size())){ |
|
|
if (currDateSplit.getSort().equals(dateSplitList.size())) { |
|
|
|
|
|
//最后一个月
|
|
|
//活动金额
|
|
|
//活动金额
|
|
|
currentAmount = activity.getTotalAmount(); |
|
|
currentAmount = activity.getTotalAmount(); |
|
|
//核销金额
|
|
|
//核销金额
|
|
|
currentCheckAmount = activity.getUsedAmount(); |
|
|
currentCheckAmount = activity.getUsedAmount(); |
|
|
for (DateSplitDTO splitDTO : dateSplitList) { |
|
|
for (DateSplitDTO splitDTO : dateSplitList) { |
|
|
//跳过当前年月
|
|
|
//跳过当前年月
|
|
|
if(splitDTO.getYearMonth().equals(yearMonth)){ |
|
|
if (splitDTO.getYearMonth().equals(dto.getYearMonth())) { |
|
|
continue; |
|
|
continue; |
|
|
} |
|
|
} |
|
|
//日期占比
|
|
|
//日期占比
|
|
|
BigDecimal dayRate = new BigDecimal(splitDTO.getDays()+"") |
|
|
BigDecimal dayRate = new BigDecimal(splitDTO.getDays() + "") |
|
|
.divide(new BigDecimal(currentActDays+""),2, BigDecimal.ROUND_HALF_DOWN); |
|
|
.divide(new BigDecimal(currentActDays + ""), 2, BigDecimal.ROUND_HALF_DOWN); |
|
|
currentAmount = currentAmount.subtract(amount.multiply(dayRate)); |
|
|
currentAmount = currentAmount.subtract(amount.multiply(dayRate)); |
|
|
currentCheckAmount = currentCheckAmount.subtract(activity.getUsedAmount().multiply(dayRate)); |
|
|
currentCheckAmount = currentCheckAmount.subtract(activity.getUsedAmount().multiply(dayRate)); |
|
|
} |
|
|
} |
|
|
}else { |
|
|
} else { |
|
|
//日期占比
|
|
|
//日期占比
|
|
|
BigDecimal dayRate = new BigDecimal(currDateSplit.getDays()+"") |
|
|
BigDecimal dayRate = new BigDecimal(currDateSplit.getDays() + "") |
|
|
.divide(new BigDecimal(currentActDays+""),2, BigDecimal.ROUND_HALF_DOWN); |
|
|
.divide(new BigDecimal(currentActDays + ""), 2, BigDecimal.ROUND_HALF_DOWN); |
|
|
currentAmount = amount.multiply(dayRate); |
|
|
currentAmount = amount.multiply(dayRate); |
|
|
currentCheckAmount = activity.getUsedAmount().multiply(dayRate); |
|
|
currentCheckAmount = activity.getUsedAmount().multiply(dayRate); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
baseActivity.setKeyNum(dto.getYearMonth()); |
|
|
|
|
|
baseActivity.setActivityId(activity.getId()); |
|
|
|
|
|
baseActivity.setCostApplyId(costApply.getId()); |
|
|
|
|
|
baseActivity.setActivityAmt(currentAmount); |
|
|
|
|
|
baseActivity.setActivityTotalAmt(activity.getTotalAmount()); |
|
|
|
|
|
baseActivity.setActivityUsedAmt(activity.getUsedAmount()); |
|
|
|
|
|
baseActivity.setVerificationAmt(currentCheckAmount); |
|
|
|
|
|
baseActivity.setPreActQuantity(activity.getPreActQuantity()); |
|
|
|
|
|
baseActivity.setSupplierId(activity.getSupplierId()); |
|
|
|
|
|
baseActivity.setSupplierCode(activity.getSupplierCode()); |
|
|
|
|
|
baseActivity.setSupplierName(activity.getSupplierName()); |
|
|
|
|
|
baseActivity.setActivityStartDate(actStartDate); |
|
|
|
|
|
baseActivity.setActivityEndDate(actEndDate); |
|
|
|
|
|
baseActivity.setUserId(costApply.getUserId()); |
|
|
|
|
|
baseActivity.setMonthDays(currItemDays); |
|
|
|
|
|
baseActivity.setCostPassFlag(activity.getCostPassFlag()); |
|
|
|
|
|
baseActivity.setTotalDays(currentActDays); |
|
|
|
|
|
baseActivity.setApplyStatus(costApply.getChargeState()); |
|
|
|
|
|
birBaseActivities.add(baseActivity); |
|
|
|
|
|
} |
|
|
}else if (dateSplitList.size()==1){ |
|
|
}else if (dateSplitList.size()==1){ |
|
|
|
|
|
BirBaseActivity baseActivity = new BirBaseActivity(); |
|
|
|
|
|
|
|
|
|
|
|
//活动金额
|
|
|
|
|
|
BigDecimal currentAmountOne = null; |
|
|
|
|
|
//核销金额
|
|
|
|
|
|
BigDecimal currentCheckAmountOne = null; |
|
|
|
|
|
Integer currItemDaysOne = null; |
|
|
|
|
|
|
|
|
DateSplitDTO dateSplit = dateSplitList.get(0); |
|
|
DateSplitDTO dateSplit = dateSplitList.get(0); |
|
|
baseActivity.setStartDate(dateSplit.getStartDate()); |
|
|
baseActivity.setStartDate(dateSplit.getStartDate()); |
|
|
baseActivity.setEndDate(dateSplit.getEndDate()); |
|
|
baseActivity.setEndDate(dateSplit.getEndDate()); |
|
|
currentAmount = amount; |
|
|
currentAmountOne = amount; |
|
|
currentCheckAmount = activity.getUsedAmount(); |
|
|
currentCheckAmountOne = activity.getUsedAmount(); |
|
|
currItemDays = dateSplit.getDays(); |
|
|
currItemDaysOne = dateSplit.getDays(); |
|
|
}else { |
|
|
|
|
|
Assert.throwEx("dateSplitList is empty"); |
|
|
baseActivity.setKeyNum(dateSplit.getYearMonth()); |
|
|
} |
|
|
|
|
|
TbsCostApply costApply = costApplyMapper.selectById(activity.getCostApplyId()); |
|
|
|
|
|
baseActivity.setKeyNum(yearMonth); |
|
|
|
|
|
baseActivity.setActivityId(activity.getId()); |
|
|
baseActivity.setActivityId(activity.getId()); |
|
|
baseActivity.setCostApplyId(costApply.getId()); |
|
|
baseActivity.setCostApplyId(costApply.getId()); |
|
|
baseActivity.setActivityAmt(currentAmount); |
|
|
baseActivity.setActivityAmt(currentAmountOne); |
|
|
baseActivity.setActivityTotalAmt(activity.getTotalAmount()); |
|
|
baseActivity.setActivityTotalAmt(activity.getTotalAmount()); |
|
|
baseActivity.setActivityUsedAmt(activity.getUsedAmount()); |
|
|
baseActivity.setActivityUsedAmt(activity.getUsedAmount()); |
|
|
baseActivity.setVerificationAmt(currentCheckAmount); |
|
|
baseActivity.setVerificationAmt(currentCheckAmountOne); |
|
|
baseActivity.setPreActQuantity(activity.getPreActQuantity()); |
|
|
baseActivity.setPreActQuantity(activity.getPreActQuantity()); |
|
|
baseActivity.setSupplierId(activity.getSupplierId()); |
|
|
baseActivity.setSupplierId(activity.getSupplierId()); |
|
|
|
|
|
baseActivity.setActivityStartDate(actStartDate); |
|
|
|
|
|
baseActivity.setActivityEndDate(actEndDate); |
|
|
baseActivity.setSupplierCode(activity.getSupplierCode()); |
|
|
baseActivity.setSupplierCode(activity.getSupplierCode()); |
|
|
baseActivity.setSupplierName(activity.getSupplierName()); |
|
|
baseActivity.setSupplierName(activity.getSupplierName()); |
|
|
baseActivity.setUserId(costApply.getUserId()); |
|
|
baseActivity.setUserId(costApply.getUserId()); |
|
|
baseActivity.setMonthDays(currItemDays); |
|
|
baseActivity.setMonthDays(currItemDaysOne); |
|
|
baseActivity.setCostPassFlag(activity.getCostPassFlag()); |
|
|
baseActivity.setCostPassFlag(activity.getCostPassFlag()); |
|
|
baseActivity.setTotalDays(currentActDays); |
|
|
baseActivity.setTotalDays(currentActDays); |
|
|
|
|
|
baseActivity.setApplyStatus(costApply.getChargeState()); |
|
|
birBaseActivities.add(baseActivity); |
|
|
birBaseActivities.add(baseActivity); |
|
|
|
|
|
}else { |
|
|
|
|
|
Assert.throwEx("dateSplitList is empty"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
//保存
|
|
|
//保存
|
|
|
|
|
|
|
|
|
this.saveBatch(birBaseActivities); |
|
|
this.saveBatch(birBaseActivities); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|