From c57435233141b59be14b648f443f997baf2c73c7 Mon Sep 17 00:00:00 2001 From: Yen Date: Mon, 7 Aug 2023 10:47:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=B4=B9=E7=94=A8=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E5=BC=82=E5=B8=B8=EF=BC=9B=E8=B4=B9=E7=94=A8=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E5=90=88=E5=B9=B6=E9=87=8A=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tbs/entity/bo/TbsAffairCommitBo.java | 3 + .../TbsCostApplyOperationServiceImpl.java | 93 +++++++++++-------- .../modules/vtb/entity/VtbVerification.java | 3 + .../service/VtbVerificationApplication.java | 29 ++++++ 4 files changed, 91 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java index 316bdf54..9451991f 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsAffairCommitBo.java @@ -40,6 +40,9 @@ public class TbsAffairCommitBo { private String caseRemark; + /** 释放费用 */ + private Integer releaseFlag; + /** * 修改金额列表(核销和费用审批接口专用) */ diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java index 41bc3c9c..0f8f3e9c 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java @@ -2,6 +2,8 @@ package com.qs.serve.modules.tbs.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.qs.serve.common.framework.manager.AsyncFactory; +import com.qs.serve.common.framework.manager.AsyncManager; import com.qs.serve.common.model.enums.BudgetLogOptFlag; import com.qs.serve.common.model.consts.BudgetLogRollbackFlag; import com.qs.serve.common.model.dto.R; @@ -198,7 +200,7 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService Long targetId = Long.parseLong(this.getTargetId(param)); // 更新金额 TbsCostApply apply = new TbsCostApply(); - // TODO 1.有修改金额为0的异常;2.需要调整预算占用 + // 有修改金额,调整预算占用 BigDecimal totalApply = checkToChangeAmount(param); apply.setId(targetId); if(totalApply!=null){ @@ -231,7 +233,12 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService Long targetId = Long.parseLong(this.getTargetId(param)); // 更新金额 TbsCostApply apply = new TbsCostApply(); - BigDecimal totalApply = checkToChangeAmount(param); + BigDecimal totalApply = null; + try { + totalApply = checkToChangeAmount(param); + } catch (Exception e) { + e.printStackTrace(); + } apply.setId(targetId); if(totalApply!=null){ apply.setTotalActivityAmount(totalApply); @@ -247,41 +254,7 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService } //判断审批过程,是否修改了金额 if(costApply.getEditAmountFlag().equals(1)){ - //修改预算占用 - TbsActivityCenterGoodsService tbsActivityCenterGoodsService = SpringUtils.getBean(TbsActivityCenterGoodsService.class); - List activityCenterGoodsList = tbsActivityCenterGoodsService.listByCostApplyId(costApply.getId()); - //查询当前预算占用 - LambdaQueryWrapper logLqw = new LambdaQueryWrapper<>(); - logLqw.eq(TbsBudgetLog::getRollbackFlag,BudgetLogRollbackFlag.State_0); - logLqw.eq(TbsBudgetLog::getCostApplyId,costApply.getId()); - logLqw.and(qw->{ - qw.eq(TbsBudgetLog::getOptType,BudgetLogOptFlag.State_1.getCode()).or() - .eq(TbsBudgetLog::getOptType,BudgetLogOptFlag.State_6.getCode()); - }); - //设置为回滚完成,防止出现多次查询 - List 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.setCreateBy(null); - bl.setCreateTime(null); - bl.setUpdateTime(null); - bl.setUpdateBy(null); - }); - tbsBudgetLogService.saveBatch(budgetLogList); - //保存新的预算占用 - SysUser sysUser = sysUserService.getById(costApply.getUserId()); - List budgetCostItemList = tbsBudgetCostItemService.listByCostApplyId(costApply.getId()); - List budgetIds = budgetCostItemList.stream().map(TbsBudgetCostItem::getBudgetId).collect(Collectors.toList()); - List budgetList = tbsBudgetMapper.selectBatchIds(budgetIds); - List newBudgetLogList = this.createNewBudgetLogs(costApply, activityCenterGoodsList, sysUser, budgetCostItemList, budgetList); - tbsBudgetLogService.saveBatch(newBudgetLogList); + doEditAmtCallback(costApply); } //更新活动通过时间 TbsActivity tbsActivity = new TbsActivity(); @@ -291,9 +264,52 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService actLqw.eq(TbsActivity::getCostApplyId,targetId); tbsActivityMapper.update(tbsActivity,actLqw); activitySlottingFeeMapper.updatePassFlagByCostApplyId(targetId,1); + return null; } + /** + * 编辑金额后预算调整 + * @param costApply + */ + private void doEditAmtCallback(TbsCostApply costApply) { + //修改预算占用 + TbsActivityCenterGoodsService tbsActivityCenterGoodsService = SpringUtils.getBean(TbsActivityCenterGoodsService.class); + List activityCenterGoodsList = tbsActivityCenterGoodsService.listByCostApplyId(costApply.getId()); + //查询当前预算占用 + LambdaQueryWrapper logLqw = new LambdaQueryWrapper<>(); + logLqw.eq(TbsBudgetLog::getRollbackFlag,BudgetLogRollbackFlag.State_0); + logLqw.eq(TbsBudgetLog::getCostApplyId, costApply.getId()); + logLqw.and(qw->{ + qw.eq(TbsBudgetLog::getOptType,BudgetLogOptFlag.State_1.getCode()).or() + .eq(TbsBudgetLog::getOptType,BudgetLogOptFlag.State_6.getCode()); + }); + //设置为回滚完成,防止出现多次查询 + List 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.setCreateBy(null); + bl.setCreateTime(null); + bl.setUpdateTime(null); + bl.setUpdateBy(null); + }); + tbsBudgetLogService.saveBatch(budgetLogList); + //保存新的预算占用 + SysUser sysUser = sysUserService.getById(costApply.getUserId()); + List budgetCostItemList = tbsBudgetCostItemService.listByCostApplyId(costApply.getId()); + List budgetIds = budgetCostItemList.stream().map(TbsBudgetCostItem::getBudgetId).collect(Collectors.toList()); + List budgetList = tbsBudgetMapper.selectBatchIds(budgetIds); + List newBudgetLogList = this.createNewBudgetLogs(costApply, activityCenterGoodsList, sysUser, budgetCostItemList, budgetList); + tbsBudgetLogService.saveBatch(newBudgetLogList); + } + /** * 创建新的预算占用记录 * @param costApply @@ -573,6 +589,7 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService // 判断是否含有下个节点 String flag = result.getData(); //审批中(next)、完成(finish)、拒绝(refused) + log.warn("审批节点返回结果:{}",flag); if("finish".equals(flag)){ this.doFinished(affairCommit); return R.ok(); @@ -586,6 +603,8 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService } }else if ("next".equals(flag)){ this.doNext(affairCommit); + //特殊记录需要异步 + AsyncManager.me().execute(AsyncFactory.submitCostApply(costApply)); return R.ok(); } }else if (result.getStatus()==500){ diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerification.java b/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerification.java index aeaae18e..c42d5e13 100644 --- a/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerification.java +++ b/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerification.java @@ -67,6 +67,9 @@ public class VtbVerification implements Serializable { /** 支付状态:0-未支付;1-已支付 */ private Integer paymentState; + /** 记录释放标识 */ + private Integer regReleaseFlag; + /** 金额 */ private BigDecimal amount; diff --git a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java index d6f53de8..c044057c 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.vtb.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qs.serve.common.model.dto.R; import com.qs.serve.common.util.CollectionUtil; import com.qs.serve.common.util.CopierUtil; @@ -11,6 +12,7 @@ import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.service.SysPostUserService; import com.qs.serve.modules.sys.service.SysUserService; import com.qs.serve.modules.tbs.common.TbsActivityState; +import com.qs.serve.modules.tbs.common.TbsCostApplyState; import com.qs.serve.modules.tbs.common.TbsSeeYonConst; import com.qs.serve.modules.tbs.entity.TbsActivity; import com.qs.serve.modules.tbs.entity.TbsActivityPayCondition; @@ -120,6 +122,13 @@ public class VtbVerificationApplication { @NotNull @Transactional(rollbackFor = Exception.class) public R commitAffairSuccess(TbsAffairCommitBo affairCommit, VtbVerification verification, boolean isBackCommit, String flag) { + //更新释放标识 + if(affairCommit.getReleaseFlag()!=null){ + VtbVerification vtbVer = new VtbVerification(); + vtbVer.setId(verification.getId()); + vtbVer.setRegReleaseFlag(affairCommit.getReleaseFlag()); + vtbVerificationService.updateById(vtbVer); + } //保存审批线结果 VtbVerificationYard yard = new VtbVerificationYard(); yard.setVerificationId(verification.getId()); @@ -236,6 +245,12 @@ public class VtbVerificationApplication { vtbVerificationService.updateById(vtbVer); } } + + //释放费用 + boolean isRelease = affairCommit.getReleaseFlag()!=null&&affairCommit.getReleaseFlag().equals(1); + if( isRelease &&(isFinish||isStop)){ + this.vtbVerificationService.release(verification.getActivityId()); + } return R.ok(); } @@ -245,6 +260,7 @@ public class VtbVerificationApplication { * @param totalAmount */ public void finishCallBack(VtbVerification verification, BigDecimal totalAmount) { + Long costId = null; if(verification.getPayConditionId()!=null){ //支付条件完成 TbsActivityPayCondition payCondition = activityPayConditionService.getById(verification.getPayConditionId()); @@ -270,8 +286,21 @@ public class VtbVerificationApplication { vtbVer.setVerificationState(VtbVerificationState.Finished.getCode()); vtbVer.setAmount(totalAmount); vtbVer.setFinishedTime(LocalDateTime.now()); + vtbVer.setRegReleaseFlag(verification.getRegReleaseFlag()); vtbVerificationService.updateById(vtbVer); vtbVerificationService.successCommit(verification.getId()); + + LambdaQueryWrapper countOLqw = new LambdaQueryWrapper<>(); + countOLqw.eq(TbsActivity::getCostApplyId,costId); + countOLqw.eq(TbsActivity::getActivityState,TbsActivityState.STATE_0_Todo); + countOLqw.eq(TbsActivity::getReleaseFlag,0); + Long count = tbsActivityService.count(countOLqw); + if(count==0){ + TbsCostApply costApply = new TbsCostApply(); + costApply.setId(costId); + costApply.setChargeState(TbsCostApplyState.State_3_finished.getCode()); + tbsCostApplyService.updateById(costApply); + } } /**