From 4855420c865babb9f769a940496488e47162876e Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Tue, 24 Feb 2026 15:21:37 +0800 Subject: [PATCH] =?UTF-8?q?feat(flow):=20=E6=B7=BB=E5=8A=A0=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E5=AE=9E=E4=BE=8B=E6=92=A4=E9=94=80=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在控制器中新增撤销申请接口 /revoke/{instId} - 实现服务层撤销逻辑,检查实例和任务状态 - 验证只有运行中的实例且所有任务都为待办状态时才允许撤销 - 更新实例和相关任务的状态为已撤销 - 添加事务管理确保数据一致性 - 完善接口文档注释说明撤销条件和返回值 --- .../controller/HrmFlowInstanceController.java | 6 ++++ .../hrm/service/IHrmFlowInstanceService.java | 7 ++++ .../impl/HrmFlowInstanceServiceImpl.java | 36 +++++++++++++++++++ 3 files changed, 49 insertions(+) diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowInstanceController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowInstanceController.java index 11b2e70..d043efd 100644 --- a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowInstanceController.java +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmFlowInstanceController.java @@ -73,4 +73,10 @@ public class HrmFlowInstanceController extends BaseController { public R> all(HrmFlowInstanceBo bo) { return R.ok(service.queryList(bo)); } + + @Log(title = "撤销申请", businessType = BusinessType.UPDATE) + @PutMapping("/revoke/{instId}") + public R revoke(@PathVariable @NotNull Long instId) { + return toAjax(service.revokeInstance(instId)); + } } diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowInstanceService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowInstanceService.java index 8f3458d..89bc8af 100644 --- a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowInstanceService.java +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmFlowInstanceService.java @@ -31,4 +31,11 @@ public interface IHrmFlowInstanceService { Boolean updateByBo(HrmFlowInstanceBo bo); Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 撤销申请:只有instance和所有相关task都是审批中状态时,才能撤销 + * @param instId 实例ID + * @return 是否成功 + */ + Boolean revokeInstance(Long instId); } diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowInstanceServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowInstanceServiceImpl.java index 9e62b6d..707412c 100644 --- a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowInstanceServiceImpl.java +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowInstanceServiceImpl.java @@ -171,6 +171,42 @@ public class HrmFlowInstanceServiceImpl implements IHrmFlowInstanceService { return baseMapper.deleteBatchIds(ids) > 0; } + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean revokeInstance(Long instId) { + // 查询实例 + HrmFlowInstance instance = baseMapper.selectById(instId); + if (instance == null || !"running".equals(instance.getStatus())) { + throw new RuntimeException("实例不存在或状态不允许撤销"); + } + + // 检查所有相关任务状态 + List tasks = taskMapper.selectList(Wrappers.lambdaQuery() + .eq(HrmFlowTask::getInstId, instId) + .eq(HrmFlowTask::getDelFlag, 0)); // 未删除的任务 + for (HrmFlowTask task : tasks) { + if (!"pending".equals(task.getStatus())) { + throw new RuntimeException("存在非待办状态的任务,无法撤销"); + } + } + + // 更新实例状态 + HrmFlowInstance updateInstance = new HrmFlowInstance(); + updateInstance.setInstId(instId); + updateInstance.setStatus("revoked"); + baseMapper.updateById(updateInstance); + + // 更新所有任务状态 + for (HrmFlowTask task : tasks) { + HrmFlowTask updateTask = new HrmFlowTask(); + updateTask.setTaskId(task.getTaskId()); + updateTask.setStatus("revoked"); + taskMapper.updateById(updateTask); + } + + return true; + } + private LambdaQueryWrapper buildQueryWrapper(HrmFlowInstanceBo bo) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getInstId() != null, HrmFlowInstance::getInstId, bo.getInstId());