|
|
@ -120,42 +120,20 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe |
|
|
|
Assert.throwEx("协议编码有误"); |
|
|
|
} |
|
|
|
} |
|
|
|
TbsCostApply costApply = costApplyService.getById(param.getCostApplyId()); |
|
|
|
TbsCostApply costApply = costApplyService.getByCode(param.getCostApplyCode()); |
|
|
|
if(!costApply.getContractFlag().equals(1)){ |
|
|
|
Assert.throwEx("非协议类费用,访问拦截"); |
|
|
|
} |
|
|
|
if(!costApply.getChargeState().equals(TbsCostApplyState.State_2_actioning.getCode())){ |
|
|
|
Assert.throwEx("费用状态不支持"); |
|
|
|
} |
|
|
|
TbsActivity activity = activityService.getById(param.getActivityId()); |
|
|
|
if(!activity.getCostApplyId().equals(param.getCostApplyId())){ |
|
|
|
Assert.throwEx("参数异常"); |
|
|
|
} |
|
|
|
|
|
|
|
TbsActivity activity = activityService.listByCostApplyId(costApply.getId()).get(0); |
|
|
|
BigDecimal surplus = activity.getTotalAmount().subtract(activity.getUsedAmount()); |
|
|
|
if(surplus.compareTo(param.getCheckAmount())<0){ |
|
|
|
if(surplus.compareTo(param.getTotalCheckAmount())<0){ |
|
|
|
Assert.throwEx("金额溢出"); |
|
|
|
} |
|
|
|
Assert.throwEx("功能开发中..."); |
|
|
|
BigDecimal finalAmt = activity.getUsedAmount().add(param.getCheckAmount()); |
|
|
|
//更新费用
|
|
|
|
activity.setUsedAmount(finalAmt); |
|
|
|
if(finalAmt.compareTo(activity.getTotalAmount())==0) { |
|
|
|
activity.setActivityState(TbsActivityState.STATE_1_Finished); |
|
|
|
} |
|
|
|
activityService.updateById(activity); |
|
|
|
//TODO 更新活动相关费用
|
|
|
|
|
|
|
|
//判断是否其它费用也完成
|
|
|
|
if(finalAmt.compareTo(activity.getTotalAmount())==0){ |
|
|
|
LambdaQueryWrapper<TbsActivity> activityLqw = new LambdaQueryWrapper<>(); |
|
|
|
activityLqw.ne(TbsActivity::getActivityState,TbsActivityState.STATE_1_Finished); |
|
|
|
activityLqw.ne(TbsActivity::getReleaseFlag,1); |
|
|
|
Long count = activityService.count(activityLqw); |
|
|
|
if(count==0){ |
|
|
|
costApply.setChargeState(TbsCostApplyState.State_3_finished.getCode()); |
|
|
|
costApplyService.updateById(costApply); |
|
|
|
} |
|
|
|
} |
|
|
|
//Assert.throwEx("功能开发中...");
|
|
|
|
|
|
|
|
//添加核销记录
|
|
|
|
VtbVerification verification = new VtbVerification(); |
|
|
@ -176,9 +154,101 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe |
|
|
|
verification.setWayTitle(param.getPayWay()); |
|
|
|
this.save(verification); |
|
|
|
|
|
|
|
//List<VtbFundFlow> addFundFlowList = new ArrayList<>();
|
|
|
|
//buildFundFlows(verification.getId(), addFundFlowList, activityGoodsListOfSubjectCenter,currentCenterAmount);
|
|
|
|
//更新费用
|
|
|
|
BigDecimal finalAmt = activity.getUsedAmount().add(param.getTotalCheckAmount()); |
|
|
|
activity.setUsedAmount(finalAmt); |
|
|
|
if(finalAmt.compareTo(activity.getTotalAmount())==0) { |
|
|
|
activity.setActivityState(TbsActivityState.STATE_1_Finished); |
|
|
|
} |
|
|
|
activityService.updateById(activity); |
|
|
|
|
|
|
|
//更新活动相关费用
|
|
|
|
List<TbsActivitySubject> activitySubjectList = activitySubjectService.listByActivityId(activity.getId()); |
|
|
|
List<TbsActivityCenter> activityCenterList = activityCenterService.listByActivity(activity.getId()); |
|
|
|
List<TbsActivityCenterGoods> activityCenterGoodsList = activityCenterGoodsService.listByActivityId(activity.getId()); |
|
|
|
BigDecimal tempTotal = finalAmt; |
|
|
|
BigDecimal n100 = new BigDecimal("100"); |
|
|
|
BigDecimal n10000 = new BigDecimal("10000"); |
|
|
|
List<TbsActivityCenter> activityCenters4Update = new ArrayList<>(); |
|
|
|
List<TbsActivitySubject> activitySubject4Update = new ArrayList<>(); |
|
|
|
for (TbsActivitySubject activitySubject : activitySubjectList) { |
|
|
|
BigDecimal surplusAmt = activitySubject.getAmount().subtract(activitySubject.getUsedAmount()); |
|
|
|
if(surplusAmt.compareTo(BigDecimal.ZERO)<=0){ |
|
|
|
continue; |
|
|
|
} |
|
|
|
List<TbsActivityCenterGoods> activityCenterGoods4Update = new ArrayList<>(); |
|
|
|
//当前科目支付金额
|
|
|
|
BigDecimal currentSubjectAmt = null; |
|
|
|
if(tempTotal.compareTo(surplusAmt)<0){ |
|
|
|
//余额大于核销金额
|
|
|
|
currentSubjectAmt = tempTotal; |
|
|
|
activitySubject.setUsedAmount(activitySubject.getUsedAmount().add(tempTotal)); |
|
|
|
//最后一项
|
|
|
|
for (TbsActivityCenter activityCenter : activityCenterList) { |
|
|
|
if(activityCenter.getSubjectId().equals(activitySubject.getSubjectId())){ |
|
|
|
BigDecimal used = tempTotal.multiply(activityCenter.getCenterRate()).divide(n100,2,RoundingMode.HALF_DOWN); |
|
|
|
activityCenter.setUsedAmount(activityCenter.getUsedAmount().add(used)); |
|
|
|
activityCenters4Update.add(activityCenter); |
|
|
|
} |
|
|
|
} |
|
|
|
for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) { |
|
|
|
if(centerGoods.getSubjectId().equals(activitySubject.getSubjectId())){ |
|
|
|
BigDecimal used = tempTotal.multiply(centerGoods.getCenterRate()) |
|
|
|
.multiply(centerGoods.getCenterGoodsRate()) |
|
|
|
.divide(n10000,2,RoundingMode.HALF_DOWN); |
|
|
|
centerGoods.setUsedAmount(centerGoods.getUsedAmount().add(used)); |
|
|
|
activityCenterGoods4Update.add(centerGoods); |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
}else { |
|
|
|
//余额小于于核销金额
|
|
|
|
currentSubjectAmt = surplusAmt; |
|
|
|
tempTotal = tempTotal.subtract(surplusAmt); |
|
|
|
//设置全部完成
|
|
|
|
for (TbsActivityCenter activityCenter : activityCenterList) { |
|
|
|
if(activityCenter.getSubjectId().equals(activitySubject.getSubjectId())){ |
|
|
|
activityCenter.setUsedAmount(activityCenter.getCenterAmount()); |
|
|
|
activityCenters4Update.add(activityCenter); |
|
|
|
} |
|
|
|
} |
|
|
|
for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) { |
|
|
|
if(centerGoods.getSubjectId().equals(activitySubject.getSubjectId())){ |
|
|
|
centerGoods.setUsedAmount(centerGoods.getCenterGoodsAmount()); |
|
|
|
activityCenterGoods4Update.add(centerGoods); |
|
|
|
} |
|
|
|
} |
|
|
|
activitySubject.setUsedAmount(activitySubject.getAmount()); |
|
|
|
} |
|
|
|
activitySubject4Update.add(activitySubject); |
|
|
|
//跟随活动科目同级
|
|
|
|
if(CollectionUtil.isNotEmpty(activityCenterGoods4Update)){ |
|
|
|
activityCenterGoodsService.updateBatchById(activityCenterGoods4Update); |
|
|
|
List<VtbFundFlow> addFundFlowList = new ArrayList<>(); |
|
|
|
buildFundFlows(verification.getId(), addFundFlowList, activityCenterGoods4Update,currentSubjectAmt); |
|
|
|
if(CollectionUtil.isNotEmpty(addFundFlowList)){ |
|
|
|
fundFlowService.saveBatch(addFundFlowList); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if(CollectionUtil.isNotEmpty(activitySubject4Update)){ |
|
|
|
activitySubjectService.updateBatchById(activitySubject4Update); |
|
|
|
} |
|
|
|
if(CollectionUtil.isNotEmpty(activityCenters4Update)){ |
|
|
|
activityCenterService.updateBatchById(activityCenters4Update); |
|
|
|
} |
|
|
|
|
|
|
|
//判断是否其它费用也完成
|
|
|
|
if(finalAmt.compareTo(activity.getTotalAmount())==0){ |
|
|
|
LambdaQueryWrapper<TbsActivity> activityLqw = new LambdaQueryWrapper<>(); |
|
|
|
activityLqw.ne(TbsActivity::getActivityState,TbsActivityState.STATE_1_Finished); |
|
|
|
activityLqw.ne(TbsActivity::getReleaseFlag,1); |
|
|
|
Long count = activityService.count(activityLqw); |
|
|
|
if(count==0){ |
|
|
|
costApply.setChargeState(TbsCostApplyState.State_3_finished.getCode()); |
|
|
|
costApplyService.updateById(costApply); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
@ -904,7 +974,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe |
|
|
|
//可用金额
|
|
|
|
BigDecimal allowBalance = centerGoods.getCenterGoodsAmount().subtract(centerGoods.getUsedAmount()); |
|
|
|
if(allowBalance.compareTo(BigDecimal.ZERO)==0){ |
|
|
|
log.debug("统计不匹配金额allowBalance:{},currentTimeAmount:{}",allowBalance.doubleValue(),currentTimeAmount.doubleValue()); |
|
|
|
log.warn("统计不匹配金额allowBalance:{},currentTimeAmount:{}",allowBalance.doubleValue(),currentTimeAmount.doubleValue()); |
|
|
|
unMatchAmount.add(currentTimeAmount); |
|
|
|
continue; |
|
|
|
} |
|
|
@ -913,7 +983,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe |
|
|
|
if(allowBalance.compareTo(currentTimeAmount)<1){ |
|
|
|
//统计不匹配金额
|
|
|
|
unMatchAmount = unMatchAmount.add(currentTimeAmount.subtract(allowBalance)); |
|
|
|
log.debug("统计不匹配金额allowBalance:{},currentTimeAmount:{}",allowBalance.doubleValue(),currentTimeAmount.doubleValue()); |
|
|
|
log.warn("统计不匹配金额allowBalance:{},currentTimeAmount:{}",allowBalance.doubleValue(),currentTimeAmount.doubleValue()); |
|
|
|
currentTimeAmount = allowBalance; |
|
|
|
}else { |
|
|
|
tempBalance = allowBalance.subtract(currentTimeAmount); |
|
|
|