|
|
@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
import com.qs.serve.common.util.CollectionUtil; |
|
|
|
import com.qs.serve.common.util.CopierUtil; |
|
|
|
import com.qs.serve.common.util.StringUtils; |
|
|
|
import com.qs.serve.modules.tbs.entity.*; |
|
|
|
import com.qs.serve.modules.tbs.mapper.*; |
|
|
|
import com.qs.serve.modules.vtb.entity.VtbVerification; |
|
|
@ -39,7 +40,7 @@ public class TbsActivityDebugApplicationService { |
|
|
|
private TbsActivityCenterGoodsService activityCenterGoodsService; |
|
|
|
private TbsBudgetLogService budgetLogService; |
|
|
|
private VtbVerificationMapper verificationMapper; |
|
|
|
//private VtbVerificationSubjectMapper verificationSubjectMapper;
|
|
|
|
private TbsCostApplyMapper tbsCostApplyMapper; |
|
|
|
|
|
|
|
public String reset(Long activityId){ |
|
|
|
|
|
|
@ -50,16 +51,29 @@ public class TbsActivityDebugApplicationService { |
|
|
|
|
|
|
|
TbsActivity activity = activityMapper.selectById(activityId); |
|
|
|
|
|
|
|
TbsCostApply costApply = tbsCostApplyMapper.selectById(activity.getCostApplyId()); |
|
|
|
if(costApply.getPolicyItemId()!=null){ |
|
|
|
log.warn("随货折让不支持该方法"); |
|
|
|
return "随货折让不支持该方法"; |
|
|
|
} |
|
|
|
//过滤 CA SHX YX06 PortalOfCostApplication.createCostProcess()
|
|
|
|
if(StringUtils.hasText(costApply.getBillNumber())||StringUtils.hasText(costApply.getDisCode())){ |
|
|
|
log.warn("方法仅支持普通订单"); |
|
|
|
return "方法仅支持普通订单"; |
|
|
|
} |
|
|
|
|
|
|
|
BigDecimal checkeAmt = activity.getUsedAmount(); |
|
|
|
if(activity.getReleaseFlag().equals(1)){ |
|
|
|
checkeAmt = checkeAmt.add(activity.getReleaseAmount()); |
|
|
|
} |
|
|
|
if(checkeAmt.compareTo(activity.getTotalAmount())>0){ |
|
|
|
log.warn("活动自身金额异常"); |
|
|
|
return "活动自身金额异常"; |
|
|
|
} |
|
|
|
|
|
|
|
Long unMatchNum = activitySubjectMapper.checkActAndSubjectAmt(activityId); |
|
|
|
if(unMatchNum!=null&&unMatchNum>0){ |
|
|
|
log.warn("活动科目金额异常"); |
|
|
|
return "活动科目金额异常"; |
|
|
|
} |
|
|
|
|
|
|
@ -87,6 +101,7 @@ public class TbsActivityDebugApplicationService { |
|
|
|
List<TbsActivityCenter> subjectCenterList = activityCenterListMap.get(subjectId); |
|
|
|
BigDecimal totalCenterRate = BigDecimal.ZERO; |
|
|
|
BigDecimal totalCenterAmt = BigDecimal.ZERO; |
|
|
|
BigDecimal totalCenterUsedAmt = BigDecimal.ZERO; |
|
|
|
|
|
|
|
BigDecimal subjectUsedAmt = activitySubject.getUsedAmount(); |
|
|
|
BigDecimal subjectAmt = activitySubject.getAmount(); |
|
|
@ -97,11 +112,10 @@ public class TbsActivityDebugApplicationService { |
|
|
|
if(activityCenter.getCenterAmount().compareTo(BigDecimal.ZERO)>=0){ |
|
|
|
totalCenterAmt = totalCenterAmt.add(activityCenter.getCenterAmount()); |
|
|
|
} |
|
|
|
totalCenterUsedAmt = totalCenterUsedAmt.add(activityCenter.getUsedAmount()); |
|
|
|
} |
|
|
|
boolean isUpdateCenter = false; |
|
|
|
if(n100.compareTo(totalCenterRate)!=0){ |
|
|
|
log.warn("centerRate不为100:{}",activityId); |
|
|
|
isUpdateCenter = true; |
|
|
|
log.info("重新分配TbsActivityCenter的比例"); |
|
|
|
BigDecimal centerRate = n100; |
|
|
|
for (int i = 0; i < subjectCenterList.size(); i++) { |
|
|
|
TbsActivityCenter activityCenter = subjectCenterList.get(i); |
|
|
@ -115,10 +129,65 @@ public class TbsActivityDebugApplicationService { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// 分配占用金额
|
|
|
|
|
|
|
|
// 更新subject的已用金额
|
|
|
|
if(subjectUsedAmt==null || totalCenterUsedAmt.compareTo(subjectUsedAmt)!=0){ |
|
|
|
log.info("成本中心和科目已用金额不匹配"); |
|
|
|
BigDecimal totalUsedOnCenter = BigDecimal.ZERO; |
|
|
|
for (TbsActivityCenter center : activityCenterList) { |
|
|
|
totalUsedOnCenter = totalUsedOnCenter.add(center.getUsedAmount()); |
|
|
|
} |
|
|
|
if(0 == totalUsedOnCenter.compareTo(activity.getUsedAmount())){ |
|
|
|
log.info("通过center更新subject金额"); |
|
|
|
subjectUsedAmt = BigDecimal.ZERO; |
|
|
|
for (TbsActivityCenter center : subjectCenterList) { |
|
|
|
subjectUsedAmt = subjectUsedAmt.add(center.getUsedAmount()); |
|
|
|
} |
|
|
|
activitySubject.setUsedAmount(subjectUsedAmt); |
|
|
|
updateSubject = true; |
|
|
|
}else if (activitySubjectList.size()==1){ |
|
|
|
subjectUsedAmt = activity.getUsedAmount(); |
|
|
|
activitySubject.setUsedAmount(subjectUsedAmt); |
|
|
|
log.info("更新TbsActivityCenter的已用金额"); |
|
|
|
BigDecimal totalCenterSubjectRate = BigDecimal.ZERO; |
|
|
|
for (TbsActivityCenter center : subjectCenterList) { |
|
|
|
totalCenterSubjectRate = totalCenterSubjectRate.add(center.getCenterRate()); |
|
|
|
} |
|
|
|
if(totalCenterSubjectRate.compareTo(n100)!=0){ |
|
|
|
log.info("更新TbsActivityCenter的比率"); |
|
|
|
BigDecimal avgRate = n100.divide(new BigDecimal(subjectCenterList.size()),2,RoundingMode.DOWN); |
|
|
|
BigDecimal addRate = BigDecimal.ZERO; |
|
|
|
for (int i = 0; i < subjectCenterList.size(); i++) { |
|
|
|
TbsActivityCenter center = subjectCenterList.get(i); |
|
|
|
if(i+1 == subjectCenterList.size()){ |
|
|
|
center.setCenterRate(n100.subtract(addRate)); |
|
|
|
}else { |
|
|
|
center.setCenterRate(avgRate); |
|
|
|
addRate = avgRate.add(avgRate); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
BigDecimal totalUsed11 = BigDecimal.ZERO; |
|
|
|
for (int i = 0; i < subjectCenterList.size(); i++) { |
|
|
|
log.info("更新TbsActivityCenter的已用"); |
|
|
|
TbsActivityCenter center = subjectCenterList.get(i); |
|
|
|
if(i+1 == subjectCenterList.size()){ |
|
|
|
center.setUsedAmount(subjectUsedAmt.subtract(totalUsed11)); |
|
|
|
}else { |
|
|
|
BigDecimal curAmt = subjectUsedAmt.multiply(center.getCenterRate()).divide(n100,2,RoundingMode.DOWN); |
|
|
|
center.setUsedAmount(curAmt); |
|
|
|
totalUsed11 = totalUsed11.add(curAmt); |
|
|
|
} |
|
|
|
} |
|
|
|
}else { |
|
|
|
log.info("成本中心和科目已用金额不匹配,而且活动金额也不匹配"); |
|
|
|
return "成本中心和科目已用金额不匹配,而且活动金额也不匹配"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 分配center的占用金额和已用金额
|
|
|
|
if(totalCenterAmt.compareTo(activitySubject.getAmount())!=0){ |
|
|
|
log.warn("合计金额异常,将重新分配活动的成本中心金额"); |
|
|
|
isUpdateCenter = true; |
|
|
|
log.info("重新分配TbsActivityCenter的CenterAmount"); |
|
|
|
BigDecimal centerAmt = subjectAmt; |
|
|
|
BigDecimal centerUsedAmt = subjectUsedAmt; |
|
|
|
for (int i = 0; i < subjectCenterList.size(); i++) { |
|
|
@ -148,14 +217,6 @@ public class TbsActivityDebugApplicationService { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if(subjectUsedAmt==null){ |
|
|
|
subjectUsedAmt = BigDecimal.ZERO; |
|
|
|
for (TbsActivityCenter center : subjectCenterList) { |
|
|
|
subjectUsedAmt = subjectUsedAmt.add(center.getUsedAmount()); |
|
|
|
} |
|
|
|
activitySubject.setUsedAmount(subjectUsedAmt); |
|
|
|
updateSubject = true; |
|
|
|
} |
|
|
|
|
|
|
|
List<TbsActivityCenterGoods> activityCenterGoodsListOfSubject = activityCenterGoodsListMap.get(subjectId); |
|
|
|
|
|
|
@ -175,7 +236,7 @@ public class TbsActivityDebugApplicationService { |
|
|
|
} |
|
|
|
//重新分配比率
|
|
|
|
if(totalGoodRate.compareTo(n100)!=0){ |
|
|
|
log.warn("totalGoodRate不为100,重新分配"); |
|
|
|
log.info("重新分配申请Rate"); |
|
|
|
BigDecimal avgRate = n100.divide(new BigDecimal(goodsList.size()),2,RoundingMode.DOWN); |
|
|
|
BigDecimal addRate = BigDecimal.ZERO; |
|
|
|
for (int i = 0; i < goodsList.size(); i++) { |
|
|
@ -191,6 +252,7 @@ public class TbsActivityDebugApplicationService { |
|
|
|
|
|
|
|
//分配申请金额
|
|
|
|
BigDecimal centerAmt3 = centerAmt; |
|
|
|
log.info("重新分配申请金额"); |
|
|
|
for (int i = 0; i < goodsList.size(); i++) { |
|
|
|
TbsActivityCenterGoods goods = goodsList.get(i); |
|
|
|
if(i+1 == goodsList.size()){ |
|
|
@ -204,8 +266,9 @@ public class TbsActivityDebugApplicationService { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//分配已用金额
|
|
|
|
//分配TbsActivityCenterGoods已用金额
|
|
|
|
BigDecimal centerUsed2 = centerUsed; |
|
|
|
log.info("重新分配已用金额"); |
|
|
|
for (int i = 0; i < goodsList.size(); i++) { |
|
|
|
TbsActivityCenterGoods goods = goodsList.get(i); |
|
|
|
if(i+1 == goodsList.size()){ |
|
|
@ -224,6 +287,8 @@ public class TbsActivityDebugApplicationService { |
|
|
|
|
|
|
|
//二次校验
|
|
|
|
BigDecimal totalSubjectAmt = BigDecimal.ZERO; |
|
|
|
BigDecimal totalSubjectUsedAmt = BigDecimal.ZERO; |
|
|
|
BigDecimal totalAllCenterUsedAmt = BigDecimal.ZERO; |
|
|
|
for (TbsActivitySubject activitySubject : activitySubjectList) { |
|
|
|
Long subjectId = activitySubject.getSubjectId(); |
|
|
|
List<TbsActivityCenter> subjectCenterList = activityCenterListMap.get(subjectId); |
|
|
@ -234,19 +299,21 @@ public class TbsActivityDebugApplicationService { |
|
|
|
BigDecimal subjectUsedAmt = activitySubject.getUsedAmount(); |
|
|
|
BigDecimal subjectAmt = activitySubject.getAmount(); |
|
|
|
totalSubjectAmt = totalSubjectAmt.add(subjectAmt); |
|
|
|
totalSubjectUsedAmt = totalSubjectUsedAmt.add(activitySubject.getUsedAmount()); |
|
|
|
|
|
|
|
for (TbsActivityCenter activityCenter : subjectCenterList) { |
|
|
|
totalCenterRate = totalCenterRate.add(activityCenter.getCenterRate()); |
|
|
|
totalCenterAmt = totalCenterAmt.add(activityCenter.getCenterAmount()); |
|
|
|
totalCenterUsedAmt = totalCenterUsedAmt.add(activityCenter.getUsedAmount()); |
|
|
|
} |
|
|
|
totalAllCenterUsedAmt = totalAllCenterUsedAmt.add(totalCenterUsedAmt); |
|
|
|
if(totalCenterAmt.compareTo(subjectAmt)!=0){ |
|
|
|
log.error("合计totalCenterUsedAmt金额异常:{}",activityId); |
|
|
|
return "合计totalCenterUsedAmt金额异常"; |
|
|
|
log.error("合计totalCenterAmt金额异常:{}",activityId); |
|
|
|
return "合计totalCenterAmt金额异常"; |
|
|
|
} |
|
|
|
if(totalCenterUsedAmt.compareTo(subjectUsedAmt)!=0){ |
|
|
|
log.error("合计subjectUsedAmt金额异常,将重新分配活动的成本中心金额:{}",activityId); |
|
|
|
return "合计subjectUsedAmt金额异常"; |
|
|
|
log.error("合计totalCenterUsedAmt金额异常,将重新分配活动的成本中心金额:{}",activityId); |
|
|
|
return "合计totalCenterUsedAmt金额异常"; |
|
|
|
} |
|
|
|
if(n100.compareTo(totalCenterRate)!=0){ |
|
|
|
log.error("centerRate不为100:{}",activityId); |
|
|
@ -287,12 +354,20 @@ public class TbsActivityDebugApplicationService { |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if(activity.getUsedAmount().compareTo(totalSubjectUsedAmt)!=0){ |
|
|
|
log.error("活动和totalSubjectUsedAmt匹对金额异常:{}",activityId); |
|
|
|
return "活动和totalSubjectUsedAmt匹对金额异常"; |
|
|
|
} |
|
|
|
if(totalSubjectUsedAmt.compareTo(totalAllCenterUsedAmt)!=0){ |
|
|
|
log.error("活动和totalAllCenterUsedAmt匹对金额异常:{}",activityId); |
|
|
|
return "活动和totalAllCenterUsedAmt匹对金额异常"; |
|
|
|
} |
|
|
|
if(activity.getTotalAmount().compareTo(totalSubjectAmt)!=0){ |
|
|
|
log.error("科目和活动的申请金额不匹配"); |
|
|
|
return "科目和活动的申请金额不匹配"; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 处理预算占用
|
|
|
|
List<TbsBudgetLog> actBudgetLogs = budgetLogService.list(wrapper); |
|
|
|
|
|
|
@ -305,13 +380,12 @@ public class TbsActivityDebugApplicationService { |
|
|
|
BigDecimal releaseAmt = totalBudgetLogAmount(releaseLogs); |
|
|
|
|
|
|
|
//检查下占用预算和释放
|
|
|
|
|
|
|
|
if(applyAmt.compareTo(activity.getTotalAmount())!=0){ |
|
|
|
log.warn("历史预算占用金额异常"); |
|
|
|
if(applyAmt.negate().compareTo(activity.getTotalAmount())!=0){ |
|
|
|
log.info("历史预算占用金额异常"); |
|
|
|
} |
|
|
|
|
|
|
|
if(activity.getReleaseAmount()!=null && releaseAmt.compareTo(activity.getReleaseAmount())!=0){ |
|
|
|
log.warn("历史预算释放金额异常"); |
|
|
|
log.info("历史预算释放金额异常"); |
|
|
|
} |
|
|
|
|
|
|
|
List<TbsBudgetLog> newApplyLogList = new ArrayList<>(); |
|
|
|