|
|
@ -54,6 +54,7 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService |
|
|
|
|
|
|
|
private final TbsCostApplyService costApplyService; |
|
|
|
private final TbsActivityMapper tbsActivityMapper; |
|
|
|
private final TbsActivitySubjectYarnMapper tbsActivitySubjectYarnMapper; |
|
|
|
private final SysUserMapper userMapper; |
|
|
|
private final TbsActivitySlottingFeeMapper activitySlottingFeeMapper; |
|
|
|
private final TbsBudgetLogMapper tbsBudgetLogMapper; |
|
|
@ -227,12 +228,12 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService |
|
|
|
Long targetId = Long.parseLong(this.getTargetId(param)); |
|
|
|
// 更新金额
|
|
|
|
TbsCostApply apply = new TbsCostApply(); |
|
|
|
//BigDecimal totalApply = checkToChangeAmount(param);
|
|
|
|
BigDecimal totalApply = checkToChangeAmount(param); |
|
|
|
apply.setId(targetId); |
|
|
|
// if(totalApply!=null){
|
|
|
|
// apply.setTotalActivityAmount(totalApply);
|
|
|
|
// apply.setEditAmountFlag(1);
|
|
|
|
// }
|
|
|
|
if(totalApply!=null){ |
|
|
|
apply.setTotalActivityAmount(totalApply); |
|
|
|
apply.setEditAmountFlag(1); |
|
|
|
} |
|
|
|
apply.setChargeState(TbsCostApplyState.State_2_actioning.getCode()); |
|
|
|
costApplyService.updateById(apply); |
|
|
|
TbsCostApply costApply = costApplyService.getById(targetId); |
|
|
@ -254,14 +255,17 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService |
|
|
|
qw.eq(TbsBudgetLog::getOptType,BudgetLogOptFlag.State_1.getCode()).or() |
|
|
|
.eq(TbsBudgetLog::getOptType,BudgetLogOptFlag.State_6.getCode()); |
|
|
|
}); |
|
|
|
//设置为回滚完成,防止出现多次查询
|
|
|
|
List<TbsBudgetLog> budgetLogList = tbsBudgetLogService.list(logLqw); |
|
|
|
budgetLogList.forEach(bl->{ |
|
|
|
bl.setRollbackFlag(BudgetLogRollbackFlag.State_2); |
|
|
|
}); |
|
|
|
tbsBudgetLogService.updateBatchById(budgetLogList); |
|
|
|
//移除旧预算占用,即添预算
|
|
|
|
budgetLogList.forEach(bl->{ |
|
|
|
bl.setId(null); |
|
|
|
bl.setOptType(BudgetLogOptFlag.State_5.getCode()); |
|
|
|
bl.setAmount(bl.getAmount().negate()); |
|
|
|
//标记已完成
|
|
|
|
bl.setRollbackFlag(BudgetLogRollbackFlag.State_2); |
|
|
|
bl.setCreateBy(null); |
|
|
|
bl.setCreateTime(null); |
|
|
|
bl.setUpdateTime(null); |
|
|
@ -321,8 +325,8 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService |
|
|
|
} |
|
|
|
TbsBudgetLog budgetLog = budgetCostItem.toBudgetLog( |
|
|
|
costApply, |
|
|
|
//BudgetLogOptFlag.State_6,
|
|
|
|
BudgetLogOptFlag.State_7, |
|
|
|
BudgetLogOptFlag.State_6, |
|
|
|
//BudgetLogOptFlag.State_7,
|
|
|
|
currentCenterGoods.getCenterGoodsAmount(), |
|
|
|
sysUser, |
|
|
|
budgetCode |
|
|
@ -333,11 +337,11 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService |
|
|
|
} |
|
|
|
|
|
|
|
public BigDecimal checkToChangeAmount(TbsAffairCommitBo param) { |
|
|
|
SysUser sysUser = sysUserService.getById( AuthContextUtils.getSysUserId()); |
|
|
|
Long targetId = Long.parseLong(this.getTargetId(param)); |
|
|
|
TbsCostApply costApply = costApplyService.getById(targetId); |
|
|
|
boolean noChanged = costApply.getEditAmountFlag().equals(0); |
|
|
|
if(CollectionUtil.isNotEmpty(param.getAffairSubjectLines())){ |
|
|
|
BigDecimal n100 = new BigDecimal("100"); |
|
|
|
QueryWrapper comm_qw = new QueryWrapper(); |
|
|
|
comm_qw.eq("cost_apply_id", targetId); |
|
|
|
List<TbsActivity> activityList = tbsActivityMapper.selectList(comm_qw); |
|
|
@ -357,30 +361,88 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService |
|
|
|
//初始化重新计算
|
|
|
|
activityList.forEach(a->a.setTotalAmount(BigDecimal.ZERO)); |
|
|
|
//先计算科目的费用
|
|
|
|
List<TbsActivitySubjectYarn> subjectYarnList = new ArrayList<>(); |
|
|
|
for (TbsActivitySubject subject : activitySubjectList) { |
|
|
|
for (TbsAffairCommitBo.AffairSubjectLine subjectLine : param.getAffairSubjectLines()) { |
|
|
|
if(subjectLine.getAmount().compareTo(BigDecimal.ZERO)<=0){ |
|
|
|
continue; |
|
|
|
} |
|
|
|
if(subjectLine.getSubjectId().equals(subject.getId())){ |
|
|
|
BigDecimal subjectAmount = subjectLine.getAmount(); |
|
|
|
//重新计算活动金额
|
|
|
|
TbsActivity currActivity = new TbsActivity(); |
|
|
|
for (TbsActivity activity : activityList) { |
|
|
|
if(subject.getActivityId().equals(activity.getId())){ |
|
|
|
activity.setTotalAmount(activity.getTotalAmount().add(subjectAmount)); |
|
|
|
currActivity = activity; |
|
|
|
} |
|
|
|
} |
|
|
|
//保持流程记录
|
|
|
|
TbsActivitySubjectYarn subjectYarn = this.createActivitySubjectYarn(param, sysUser, costApply, subject, subjectLine, currActivity); |
|
|
|
tbsActivitySubjectYarnMapper.insert(subjectYarn); |
|
|
|
if(noChanged){ |
|
|
|
//只对第一次赋值
|
|
|
|
subject.setOrgAmount(subject.getAmount()); |
|
|
|
} |
|
|
|
|
|
|
|
subject.setAmount(subjectAmount); |
|
|
|
subject.setCountPerson(subjectLine.getCountPerson()); |
|
|
|
subject.setCountSession(subjectLine.getCountSession()); |
|
|
|
//更新科目
|
|
|
|
activitySubjectMapper.updateById(subject); |
|
|
|
//计算科目下的成本中心
|
|
|
|
this.changeActivityCenterGoodsAmt(noChanged, activityCenterList, activityCenterGoodsList, subject, subjectAmount); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//更新活动
|
|
|
|
BigDecimal total = BigDecimal.ZERO; |
|
|
|
for (TbsActivity activity : activityList) { |
|
|
|
tbsActivityMapper.updateById(activity); |
|
|
|
total = total.add(activity.getTotalAmount()); |
|
|
|
} |
|
|
|
//更新活动的商品
|
|
|
|
tbsActivityCenterGoodsService.updateBatchById(activityCenterGoodsList); |
|
|
|
return total; |
|
|
|
} |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
@NotNull |
|
|
|
private TbsActivitySubjectYarn createActivitySubjectYarn(TbsAffairCommitBo param, SysUser sysUser, TbsCostApply costApply, TbsActivitySubject subject, TbsAffairCommitBo.AffairSubjectLine subjectLine, TbsActivity currActivity) { |
|
|
|
TbsActivitySubjectYarn subjectYarn = new TbsActivitySubjectYarn(); |
|
|
|
subjectYarn.setCheckId(param.getAffairId()); |
|
|
|
subjectYarn.setUserId(sysUser.getId()); |
|
|
|
subjectYarn.setUserCode(sysUser.getCode()); |
|
|
|
subjectYarn.setUserName(sysUser.getName()); |
|
|
|
subjectYarn.setUserHrInfo(sysUser.getHrSystemInfo()); |
|
|
|
subjectYarn.setCostApplyId(costApply.getId()); |
|
|
|
subjectYarn.setCostApplyCode(costApply.getCode()); |
|
|
|
subjectYarn.setCostApplyTitle(costApply.getChargeTheme()); |
|
|
|
subjectYarn.setActivityId(currActivity.getId()); |
|
|
|
subjectYarn.setActivityCode(currActivity.getActivityCode()); |
|
|
|
subjectYarn.setActivityTitle(currActivity.getActTitle()); |
|
|
|
subjectYarn.setSubjectId(subject.getSubjectId()); |
|
|
|
subjectYarn.setSubjectCode(subject.getSubjectCode()); |
|
|
|
subjectYarn.setSubjectName(subject.getSubjectName()); |
|
|
|
subjectYarn.setOrgAmount(subject.getAmount()); |
|
|
|
subjectYarn.setOrgCountSession(subject.getCountSession()); |
|
|
|
subjectYarn.setOrgCountPerson(subject.getCountSession()); |
|
|
|
subjectYarn.setAmount(subjectLine.getAmount()); |
|
|
|
subjectYarn.setCountSession(subjectLine.getCountSession()); |
|
|
|
subjectYarn.setCountPerson(subjectLine.getCountPerson()); |
|
|
|
subjectYarn.setReason(param.getCaseRemark()); |
|
|
|
return subjectYarn; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 修改ActivityCenterGoods金额 |
|
|
|
* @param noChanged |
|
|
|
* @param activityCenterList |
|
|
|
* @param activityCenterGoodsList |
|
|
|
* @param subject |
|
|
|
* @param subjectAmount |
|
|
|
*/ |
|
|
|
private void changeActivityCenterGoodsAmt(boolean noChanged, List<TbsActivityCenter> activityCenterList, List<TbsActivityCenterGoods> activityCenterGoodsList, TbsActivitySubject subject, BigDecimal subjectAmount) { |
|
|
|
BigDecimal n100 = new BigDecimal("100"); |
|
|
|
for (TbsActivityCenter activityCenter : activityCenterList) { |
|
|
|
boolean eqActivity = activityCenter.getActivityId().equals(subject.getActivityId()); |
|
|
|
boolean eqSubject = activityCenter.getSubjectId().equals(subject.getSubjectId()); |
|
|
@ -409,7 +471,7 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService |
|
|
|
} |
|
|
|
centerGoods.setCenterAmount(centerAmt); |
|
|
|
BigDecimal centerGoodAmt = null; |
|
|
|
if(i+1==activityCenterGoodsList.size()){ |
|
|
|
if(i+1== activityCenterGoodsList.size()){ |
|
|
|
centerGoodAmt = tmpCenterAmt; |
|
|
|
}else { |
|
|
|
centerGoodAmt = centerAmt.multiply(centerGoods.getCenterGoodsRate()).divide(n100,2,RoundingMode.HALF_DOWN); |
|
|
@ -420,21 +482,6 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
//更新活动
|
|
|
|
BigDecimal total = BigDecimal.ZERO; |
|
|
|
for (TbsActivity activity : activityList) { |
|
|
|
tbsActivityMapper.updateById(activity); |
|
|
|
total = total.add(activity.getTotalAmount()); |
|
|
|
} |
|
|
|
//更新活动的商品
|
|
|
|
tbsActivityCenterGoodsService.updateBatchById(activityCenterGoodsList); |
|
|
|
return total; |
|
|
|
} |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|