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());