From cb231cb998a44cc2e9001ce0d09fcfada8115863 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Wed, 25 Feb 2026 09:30:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(flow):=20=E6=B7=BB=E5=8A=A0=E9=A9=B3?= =?UTF-8?q?=E5=9B=9E=E5=AE=9E=E4=BE=8B=E5=88=A0=E9=99=A4=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在HrmFlowInstanceController中新增deleteRejected接口用于删除驳回状态的流程实例 - 在HrmFlowInstanceService中实现deleteRejectedInstance方法,包含状态校验和级联删除逻辑 - 修复代码中的缩进格式问题,统一代码风格 - 优化HrmFlowTaskServiceImpl中查询待办任务的逻辑,避免空指针异常 - 更新注释中的引号格式,保持代码一致性 - 添加数据验证注解确保参数合法性 --- .../controller/HrmFlowInstanceController.java | 6 ++++ .../hrm/service/IHrmFlowInstanceService.java | 3 ++ .../impl/HrmFlowInstanceServiceImpl.java | 32 ++++++++++++++++--- .../service/impl/HrmFlowTaskServiceImpl.java | 8 +++-- 4 files changed, 41 insertions(+), 8 deletions(-) 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 d043efd..8190c54 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 @@ -79,4 +79,10 @@ public class HrmFlowInstanceController extends BaseController { public R revoke(@PathVariable @NotNull Long instId) { return toAjax(service.revokeInstance(instId)); } + + @Log(title = "删除驳回实例", businessType = BusinessType.DELETE) + @DeleteMapping("/deleteRejected/{instId}") + public R deleteRejectedInstance(@PathVariable @NotNull Long instId) { + return toAjax(service.deleteRejectedInstance(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 89bc8af..286fa55 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 @@ -5,6 +5,7 @@ import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.hrm.domain.bo.HrmFlowInstanceBo; import com.ruoyi.hrm.domain.vo.HrmFlowInstanceVo; +import javax.validation.constraints.NotNull; import java.util.Collection; import java.util.List; @@ -38,4 +39,6 @@ public interface IHrmFlowInstanceService { * @return 是否成功 */ Boolean revokeInstance(Long instId); + + Boolean deleteRejectedInstance(@NotNull 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 707412c..661d9fe 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 @@ -82,9 +82,9 @@ public class HrmFlowInstanceServiceImpl implements IHrmFlowInstanceService { // 有模板:找首节点 HrmFlowNode firstNode = nodeMapper.selectOne(Wrappers.lambdaQuery() - .eq(HrmFlowNode::getTplId, bo.getTplId()) - .orderByAsc(HrmFlowNode::getOrderNo) - .last("limit 1")); + .eq(HrmFlowNode::getTplId, bo.getTplId()) + .orderByAsc(HrmFlowNode::getOrderNo) + .last("limit 1")); if (firstNode == null) { throw new RuntimeException("流程模板无节点,无法启动"); } @@ -182,8 +182,8 @@ public class HrmFlowInstanceServiceImpl implements IHrmFlowInstanceService { // 检查所有相关任务状态 List tasks = taskMapper.selectList(Wrappers.lambdaQuery() - .eq(HrmFlowTask::getInstId, instId) - .eq(HrmFlowTask::getDelFlag, 0)); // 未删除的任务 + .eq(HrmFlowTask::getInstId, instId) + .eq(HrmFlowTask::getDelFlag, 0)); // 未删除的任务 for (HrmFlowTask task : tasks) { if (!"pending".equals(task.getStatus())) { throw new RuntimeException("存在非待办状态的任务,无法撤销"); @@ -207,6 +207,28 @@ public class HrmFlowInstanceServiceImpl implements IHrmFlowInstanceService { return true; } + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean deleteRejectedInstance(Long instId) { + // 查询实例 + HrmFlowInstance instance = baseMapper.selectById(instId); + if (instance == null) { + throw new RuntimeException("未找到对应的流程实例"); + } + + // 判断实例状态是否为驳回 + if (!"rejected".equals(instance.getStatus())) { + throw new RuntimeException("只有驳回状态的实例才能被删除"); + } + + // 删除实例及对应的任务 + // 先删除关联的任务 + taskMapper.delete(Wrappers.lambdaQuery().eq(HrmFlowTask::getInstId, instId)); + + // 再删除实例本身 + return baseMapper.deleteById(instId) > 0; + } + private LambdaQueryWrapper buildQueryWrapper(HrmFlowInstanceBo bo) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getInstId() != null, HrmFlowInstance::getInstId, bo.getInstId()); diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowTaskServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowTaskServiceImpl.java index 7268a2f..cad19f7 100644 --- a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowTaskServiceImpl.java +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowTaskServiceImpl.java @@ -295,7 +295,7 @@ public class HrmFlowTaskServiceImpl implements IHrmFlowTaskService { reTask.setNodeId(0L); reTask.setBizType(inst.getBizType()); reTask.setBizId(inst.getBizId()); - // 撤回后回到“原审批人”(撤回前的办理人) + // 撤回后回到"原审批人"(撤回前的办理人) reTask.setAssigneeUserId(task.getAssigneeUserId()); reTask.setStatus("pending"); baseMapper.insert(reTask); @@ -358,7 +358,7 @@ public class HrmFlowTaskServiceImpl implements IHrmFlowTaskService { @Override public HrmFlowTaskVo queryTodoByBiz(String bizType, Long bizId, Long assigneeUserId) { - // 只取“待办 pending”的一条(理论上同一 biz 同一时刻最多一条待办) + // 只取"待办 pending"的一条(理论上同一 biz 同一时刻最多一条待办) LambdaQueryWrapper lqw = Wrappers.lambdaQuery() .eq(bizType != null, HrmFlowTask::getBizType, bizType) .eq(bizId != null, HrmFlowTask::getBizId, bizId) @@ -367,7 +367,9 @@ public class HrmFlowTaskServiceImpl implements IHrmFlowTaskService { .orderByDesc(HrmFlowTask::getTaskId) .last("limit 1"); HrmFlowTaskVo hrmFlowTaskVo = baseMapper.selectVoOne(lqw); - hrmFlowTaskVo.setAssigneeNickName(userService.selectNickNameById(hrmFlowTaskVo.getAssigneeUserId())); + if (hrmFlowTaskVo != null) { + hrmFlowTaskVo.setAssigneeNickName(userService.selectNickNameById(hrmFlowTaskVo.getAssigneeUserId())); + } return hrmFlowTaskVo; }