diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/controller/ImprovementProposalController.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/controller/ImprovementProposalController.java index 7541d3f..e4780b9 100644 --- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/controller/ImprovementProposalController.java +++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/controller/ImprovementProposalController.java @@ -171,6 +171,22 @@ public class ImprovementProposalController { } } + /** + * 删除运行中的流程并回退草稿。提案基本信息和业务附件会保留,流程产生的评分、投票数据会清空。 + */ + @AutoLog(value = "改善提案-删除流程并回退草稿") + @Operation(summary = "改善提案-删除流程并回退草稿") + @RequiresPermissions("improvementproposal:improvement_proposal:delete") + @PostMapping(value = "/withdrawProcess") + public Result withdrawProcess(@RequestParam(name = "id") String id) { + try { + improvementProposalService.withdrawProcess(id); + return Result.OK("流程已删除,提案已回退为草稿"); + } catch (IllegalStateException e) { + return Result.error(e.getMessage()); + } + } + @PostMapping(value = "/bpm/initialReview") @Operation(summary = "保存部门精益专员初审结果") public Result saveInitialReview(@RequestBody ImprovementProposalBpmActionDTO action) { diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/service/IImprovementProposalService.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/service/IImprovementProposalService.java index 6eb58b4..bf720fc 100644 --- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/service/IImprovementProposalService.java +++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/improvementproposal/service/IImprovementProposalService.java @@ -31,6 +31,13 @@ public interface IImprovementProposalService extends IService resetWrapper = new LambdaUpdateWrapper() + .eq(ImprovementProposal::getId, proposal.getId()) + .set(ImprovementProposal::getProcessInstanceId, null) + .set(ImprovementProposal::getBpmStatus, BPM_STATUS_DRAFT) + .set(ImprovementProposal::getInitialAward, null) + .set(ImprovementProposal::getNeedDeptScore, null) + .set(ImprovementProposal::getDeptAvgScore, null) + .set(ImprovementProposal::getSuggestedAward, null) + .set(ImprovementProposal::getLeaderFinalAward, null) + .set(ImprovementProposal::getIsneedvote, null) + .set(ImprovementProposal::getInstituteVoters, null) + .set(ImprovementProposal::getInstituteTotalVoters, null) + .set(ImprovementProposal::getInstituteAgreeCount, null) + .set(ImprovementProposal::getInstituteDisagreeCount, null) + .set(ImprovementProposal::getInstituteVoteResult, null) + .set(ImprovementProposal::getFinalAward, null) + .set(ImprovementProposal::getManualConfirmResult, null) + .set(ImprovementProposal::getArchiveBy, null) + .set(ImprovementProposal::getArchiveTime, null); + if (improvementProposalMapper.update(null, resetWrapper) != 1) { + throw new IllegalStateException("流程已删除,但提案回退草稿失败"); + } + } + + /** 清理仅属于本次流程实例的审批、抄送和日志数据,不影响提案申请附件。 */ + private void clearProcessRelatedData(String processInstanceId) { + taskApprovalOpinionService.remove(new LambdaQueryWrapper() + .eq(TaskApprovalOpinion::getProcessInstId, processInstanceId)); + extActTaskCcService.remove(new LambdaQueryWrapper() + .eq(ExtActTaskCc::getProcInstId, processInstanceId)); + extActFlowDataService.remove(new LambdaQueryWrapper() + .eq(ExtActFlowData::getProcessInstId, processInstanceId)); + + List bpmLogs = extActBpmLogService.list(new LambdaQueryWrapper() + .eq(ExtActBpmLog::getProcInstId, processInstanceId)); + if (!bpmLogs.isEmpty()) { + List bpmLogIds = new ArrayList<>(); + for (ExtActBpmLog bpmLog : bpmLogs) { + if (oConvertUtils.isNotEmpty(bpmLog.getId())) { + bpmLogIds.add(bpmLog.getId()); + } + } + if (!bpmLogIds.isEmpty()) { + extActBpmFileService.remove(new LambdaQueryWrapper() + .in(ExtActBpmFile::getBpmLogId, bpmLogIds)); + } + extActBpmLogService.remove(new LambdaQueryWrapper() + .eq(ExtActBpmLog::getProcInstId, processInstanceId)); + } + } + @Override public List getMyProposalDepartments(LoginUser loginUser) { if (loginUser == null || oConvertUtils.isEmpty(loginUser.getId())) { @@ -814,6 +903,23 @@ public class ImprovementProposalServiceImpl extends ServiceImpl