diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java index 48147364a..edf9ee280 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java @@ -195,7 +195,10 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { } // 发送事件 processDeleteHandler(flowInstances); - return insService.remove(StreamUtils.toList(flowInstances, FlowInstance::getId)); + List instanceIds = StreamUtils.toList(flowInstances, FlowInstance::getId); + // 删除抄送任务关联的用户记录 + deleteCopyTaskUsers(instanceIds); + return insService.remove(instanceIds); } /** @@ -214,8 +217,11 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { } // 发送事件 processDeleteHandler(flowInstances); + List validInstanceIds = StreamUtils.toList(flowInstances, FlowInstance::getId); + // 删除抄送任务关联的用户记录 + deleteCopyTaskUsers(validInstanceIds); // 删除实例 - return insService.remove(instanceIds); + return insService.remove(validInstanceIds); } /** @@ -234,16 +240,56 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { } // 发送事件 processDeleteHandler(flowInstances); - List flowTaskList = flwTaskService.selectByInstIds(instanceIds); - if (CollUtil.isNotEmpty(flowTaskList)) { - FlowEngine.userService().deleteByTaskIds(StreamUtils.toList(flowTaskList, FlowTask::getId)); - } - FlowEngine.taskService().deleteByInsIds(instanceIds); - FlowEngine.hisTaskService().deleteByInsIds(instanceIds); - FlowEngine.insService().removeByIds(instanceIds); + List validInstanceIds = StreamUtils.toList(flowInstances, FlowInstance::getId); + List flowTaskList = flwTaskService.selectByInstIds(validInstanceIds); + List taskIds = new ArrayList<>(StreamUtils.toList(flowTaskList, FlowTask::getId)); + taskIds.addAll(selectCopyTaskIds(validInstanceIds)); + deleteTaskUsers(taskIds); + FlowEngine.taskService().deleteByInsIds(validInstanceIds); + FlowEngine.hisTaskService().deleteByInsIds(validInstanceIds); + FlowEngine.insService().removeByIds(validInstanceIds); return true; } + /** + * 查询流程实例下的抄送任务id + * + * @param instanceIds 流程实例id + * @return 抄送任务id + */ + private List selectCopyTaskIds(List instanceIds) { + if (CollUtil.isEmpty(instanceIds)) { + return Collections.emptyList(); + } + List copyTaskList = flowHisTaskMapper.selectList( + new LambdaQueryWrapper<>(FlowHisTask.class) + .select(FlowHisTask::getTaskId) + .eq(FlowHisTask::getFlowStatus, TaskStatusEnum.COPY.getStatus()) + .in(FlowHisTask::getInstanceId, instanceIds) + ); + return StreamUtils.toList(copyTaskList, FlowHisTask::getTaskId); + } + + /** + * 删除抄送任务关联的用户记录 + * + * @param instanceIds 流程实例id + */ + private void deleteCopyTaskUsers(List instanceIds) { + deleteTaskUsers(selectCopyTaskIds(instanceIds)); + } + + /** + * 删除任务关联的用户记录 + * + * @param taskIds 任务id + */ + private void deleteTaskUsers(List taskIds) { + if (CollUtil.isNotEmpty(taskIds)) { + FlowEngine.userService().deleteByTaskIds(taskIds); + } + } + private void processDeleteHandler(List flowInstances) {