diff --git a/src/main/java/com/qs/serve/modules/tzc/controller/TzcPolicyItemController.java b/src/main/java/com/qs/serve/modules/tzc/controller/TzcPolicyItemController.java index 03e0105f..475197f4 100644 --- a/src/main/java/com/qs/serve/modules/tzc/controller/TzcPolicyItemController.java +++ b/src/main/java/com/qs/serve/modules/tzc/controller/TzcPolicyItemController.java @@ -75,6 +75,17 @@ public class TzcPolicyItemController { return R.ok(); } + /** + * 取消释放政策 + * @param policyItemId + * @return + */ + @GetMapping("/cancelReleasePolicyByItemId") + public R cancelReleasePolicyByItemId(Long policyItemId){ + policyApplicationService.cancelReleasePolicyItem(policyItemId); + return R.ok(); + } + /** * 列表 * @param param diff --git a/src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyItem.java b/src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyItem.java index 4c0f11b4..027929d0 100644 --- a/src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyItem.java +++ b/src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyItem.java @@ -85,6 +85,7 @@ public class TzcPolicyItem implements Serializable { private Integer releaseFlag; /** 释放时间 */ + @TableField(updateStrategy = FieldStrategy.NOT_NULL) private LocalDateTime releaseTime; private String releaseUserId; diff --git a/src/main/java/com/qs/serve/modules/tzc/mapper/TzcPolicyMapper.java b/src/main/java/com/qs/serve/modules/tzc/mapper/TzcPolicyMapper.java index b9a7dd5a..46757958 100644 --- a/src/main/java/com/qs/serve/modules/tzc/mapper/TzcPolicyMapper.java +++ b/src/main/java/com/qs/serve/modules/tzc/mapper/TzcPolicyMapper.java @@ -43,7 +43,7 @@ public interface TzcPolicyMapper extends BaseMapper { * 获取需要释放的Item * @return */ - List listExpireItemIds(); + List listExpireItemIds(); /** * 替换继承人 diff --git a/src/main/java/com/qs/serve/modules/tzc/service/TzcPolicyApplicationService.java b/src/main/java/com/qs/serve/modules/tzc/service/TzcPolicyApplicationService.java index 1df62152..7d60257d 100644 --- a/src/main/java/com/qs/serve/modules/tzc/service/TzcPolicyApplicationService.java +++ b/src/main/java/com/qs/serve/modules/tzc/service/TzcPolicyApplicationService.java @@ -27,7 +27,9 @@ public interface TzcPolicyApplicationService { */ void syncExpireRelease(); - void releasePolicyItem(Long policyId, SysUser user); + void cancelReleasePolicyItem(Long policyItemId); + + void releasePolicyItem(Long policyItemId, SysUser user); /** * 创建费用占用结果 diff --git a/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java b/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java index c907fcca..da54e851 100644 --- a/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java @@ -1,6 +1,7 @@ package com.qs.serve.modules.tzc.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.qs.serve.common.config.DevEnvironmentConfig; import com.qs.serve.common.config.properties.ProjectApisProperties; import com.qs.serve.common.config.properties.ProjectProperties; @@ -134,12 +135,69 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ } catch (Exception e) { log.error("释放过期费用失败,itemId:{} 原因:{}",id,e.getMessage()); } - return; } } @Override - @Transactional + @Transactional(rollbackFor = Exception.class) + public void cancelReleasePolicyItem(Long policyItemId) { + TzcPolicyItem policyItem = tzcPolicyItemService.getById(policyItemId); + if(policyItem.getPolicyEndDate().atStartOfDay().isBefore(LocalDateTime.now())){ + Assert.throwEx("政策项已过期,不支持取消释放"); + } + if(!policyItem.getPolicyItemStatus().equals(TzPolicyItemStatus.Status_3_Finished)|| + !policyItem.getReleaseFlag().equals(1)){ + Assert.throwEx("政策项的状态不支持"); + } + //查询已转移金额,金额为正数 + BigDecimal usedAmt = tzcPolicyItemMapper.sumPolicyItemTranAmt(policyItem.getId()); + if(policyItem.getUsedAmount().compareTo(usedAmt)!=0){ + Assert.throwEx("政策的已用金额异常"); + } + + //移除流水 + vtbFundFlowService.remove(new LambdaQueryWrapper() + .eq(VtbFundFlow::getPolicyItemId,policyItemId) + .eq(VtbFundFlow::getFundType,VtbFundFlowType.Release) + ); + + //移除Log释放 + List budgetLogList = budgetLogService.list(new LambdaQueryWrapper() + .eq(TbsBudgetLog::getOptType,BudgetLogOptFlag.State_16.getCode()) + .eq(TbsBudgetLog::getPolicyItemId,policyItemId) + ); + BigDecimal totalRelease = BigDecimal.ZERO; + for (TbsBudgetLog budgetLog : budgetLogList) { + totalRelease = totalRelease.add(budgetLog.getAmount()); + } + if(policyItem.getReleaseAmount().compareTo(totalRelease)!=0){ + Assert.throwEx("释放金额异常"); + } + List logIds = budgetLogList.stream().map(TbsBudgetLog::getId).collect(Collectors.toList()); + budgetLogService.removeBatchByIds(logIds); + + //恢复状态 + policyItem.setReleaseAmount(BigDecimal.ZERO); + policyItem.setReleaseFlag(0); + policyItem.setReleaseTime(null); + policyItem.setReleaseUserId(""); + policyItem.setReleaseUserCode(""); + policyItem.setReleaseUserName(""); + policyItem.setPolicyItemStatus(TzPolicyItemStatus.Status_2_SyncSuccess); + tzcPolicyItemService.updateById(policyItem); + + //恢复主表状态 + Long policyId = policyItem.getPolicyId(); + TzcPolicy policy = tzcPolicyService.getById(policyId); + if(policy.getPolicyStatus().equals(TzcPolicyStatus.Status_3_Success)){ + policy.setPolicyStatus(TzcPolicyStatus.Status_2_PassSuccess); + tzcPolicyService.updateById(policy); + } + + } + + @Override + @Transactional(rollbackFor = Exception.class) public void releasePolicyItem(Long policyItemId, SysUser user) { TzcPolicyItem policyItem = tzcPolicyItemService.getById(policyItemId); if(!policyItem.getPolicyItemStatus().equals(TzPolicyItemStatus.Status_2_SyncSuccess)){