From 4a2b62cf924e333304c59e07a6803eb43e03e500 Mon Sep 17 00:00:00 2001 From: dfdg <2710245601@qq.com> Date: Tue, 9 Sep 2025 21:52:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=91=E7=9A=84=E4=BB=BB=E5=8A=A1bug?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DesVolumeFileServiceImpl.java | 4 +- .../workflow/domain/bo/FlowInstanceBo.java | 3 + .../workflow/domain/bo/FlowTaskBo.java | 2 + .../workflow/mapper/FlwTaskMapper.java | 3 + .../service/impl/FlwInstanceServiceImpl.java | 18 +++ .../service/impl/FlwTaskServiceImpl.java | 70 +++++++++- .../mapper/workflow/FlwTaskMapper.xml | 120 ++++++++++++++++++ 7 files changed, 212 insertions(+), 8 deletions(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeFileServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeFileServiceImpl.java index 508c0124..a799d375 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeFileServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeFileServiceImpl.java @@ -94,7 +94,9 @@ public class DesVolumeFileServiceImpl extends ServiceImpl result = baseMapper.selectVoPage(pageQuery.build(), lqw); for (DesVolumeFileVo vo : result.getRecords()) { SysOssVo ossVo = ossService.getById(vo.getFileId()); - vo.setFileUrl(ossVo.getUrl()); + if (ossVo != null) { + vo.setFileUrl(ossVo.getUrl()); + } } return TableDataInfo.build(result); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/FlowInstanceBo.java b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/FlowInstanceBo.java index fb1fe611..909c28bd 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/FlowInstanceBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/FlowInstanceBo.java @@ -27,6 +27,9 @@ public class FlowInstanceBo implements Serializable { */ private String flowCode; + private String projectId; + + /** * 任务发起人 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/FlowTaskBo.java b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/FlowTaskBo.java index 64dd0825..86f94c2a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/FlowTaskBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/FlowTaskBo.java @@ -32,6 +32,8 @@ public class FlowTaskBo implements Serializable { */ private String flowCode; + private String projectId; + /** * 流程分类id */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java index fd86c82d..9679fd1e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java @@ -28,6 +28,7 @@ public interface FlwTaskMapper { * @return 结果 */ Page getListRunTask(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + Page getListRunTaskDefinitionIds(@Param("page") Page page, @Param("definitionIds") List definitionIds, @Param(Constants.WRAPPER) Wrapper queryWrapper); /** * 获取待办信息 @@ -45,6 +46,7 @@ public interface FlwTaskMapper { * @return 结果 */ Page getListFinishTask(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + Page getListFinishDefinitionIdsTask(@Param("page") Page page,@Param("definitionIds") List definitionIds, @Param(Constants.WRAPPER) Wrapper queryWrapper); /** * 查询当前用户的抄送 @@ -54,4 +56,5 @@ public interface FlwTaskMapper { * @return 结果 */ Page getTaskCopyByPage(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + Page getTaskCopyDefinitionIdsByPage(@Param("page") Page page,@Param("definitionIds") List definitionIds, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java index a3e272f7..6e6434d9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java @@ -28,9 +28,11 @@ import org.dromara.warm.flow.core.enums.NodeType; import org.dromara.warm.flow.core.service.DefService; import org.dromara.warm.flow.core.service.InsService; import org.dromara.warm.flow.core.service.TaskService; +import org.dromara.warm.flow.orm.entity.FlowDefinition; import org.dromara.warm.flow.orm.entity.FlowHisTask; import org.dromara.warm.flow.orm.entity.FlowInstance; import org.dromara.warm.flow.orm.entity.FlowTask; +import org.dromara.warm.flow.orm.mapper.FlowDefinitionMapper; import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper; import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper; import org.dromara.workflow.common.ConditionalOnEnable; @@ -71,6 +73,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { private final IFlwTaskService flwTaskService; private final FlwInstanceMapper flwInstanceMapper; private final FlwCategoryMapper flwCategoryMapper; + private final FlowDefinitionMapper flowDefinitionMapper; /** * 分页查询正在运行的流程实例 @@ -264,6 +267,21 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { @Override public TableDataInfo selectCurrentInstanceList(FlowInstanceBo instanceBo, PageQuery pageQuery) { QueryWrapper queryWrapper = buildQueryWrapper(instanceBo); + if (!"0".equals(instanceBo.getProjectId())){ + List flowDefinitions = flowDefinitionMapper.selectList(new LambdaQueryWrapper() + .select(FlowDefinition::getId) + .like(FlowDefinition::getFlowCode, instanceBo.getProjectId())); + List definitionIds = new ArrayList<>(); + if (flowDefinitions != null && !flowDefinitions.isEmpty()) { + flowDefinitions.forEach(flowDefinition -> { + definitionIds.add(flowDefinition.getId()); + }); + } + if (definitionIds.isEmpty()) { + return null; + } + queryWrapper.in("fi.definition_id",definitionIds); + } queryWrapper.eq("fi.create_by", LoginHelper.getUserIdStr()); Page page = flwInstanceMapper.selectInstanceList(pageQuery.build(), queryWrapper); return TableDataInfo.build(page); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index e2783a84..0854b887 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -33,10 +33,7 @@ import org.dromara.warm.flow.core.service.*; import org.dromara.warm.flow.core.utils.ExpressionUtil; import org.dromara.warm.flow.core.utils.MapUtil; import org.dromara.warm.flow.orm.entity.*; -import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper; -import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper; -import org.dromara.warm.flow.orm.mapper.FlowNodeMapper; -import org.dromara.warm.flow.orm.mapper.FlowTaskMapper; +import org.dromara.warm.flow.orm.mapper.*; import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.common.constant.FlowConstant; import org.dromara.workflow.common.enums.TaskAssigneeType; @@ -86,6 +83,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { private final IFlwTaskAssigneeService flwTaskAssigneeService; private final IFlwCommonService flwCommonService; private final IFlwNodeExtService flwNodeExtService; + private final FlowDefinitionMapper flowDefinitionMapper; /** * 启动任务 @@ -273,10 +271,24 @@ public class FlwTaskServiceImpl implements IFlwTaskService { @Override public TableDataInfo pageByTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) { QueryWrapper queryWrapper = buildQueryWrapper(flowTaskBo); + List definitionIds = new ArrayList<>(); + if (!"0".equals(flowTaskBo.getProjectId())){ + List flowDefinitions = flowDefinitionMapper.selectList(new LambdaQueryWrapper() + .select(FlowDefinition::getId) + .like(FlowDefinition::getFlowCode, flowTaskBo.getProjectId())); + if (flowDefinitions != null && !flowDefinitions.isEmpty()) { + flowDefinitions.forEach(flowDefinition -> { + definitionIds.add(flowDefinition.getId()); + }); + } + if (definitionIds.isEmpty()) { + return null; + } + } queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey()); queryWrapper.in("t.processed_by", LoginHelper.getUserIdStr()); queryWrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus()); - Page page = this.getFlowTaskVoPage(pageQuery, queryWrapper); + Page page = this.getFlowTaskDefinitionIdsVoPage(pageQuery,definitionIds, queryWrapper); return TableDataInfo.build(page); } @@ -289,10 +301,24 @@ public class FlwTaskServiceImpl implements IFlwTaskService { @Override public TableDataInfo pageByTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery) { QueryWrapper queryWrapper = buildQueryWrapper(flowTaskBo); + List definitionIds = new ArrayList<>(); + if (!"0".equals(flowTaskBo.getProjectId())){ + List flowDefinitions = flowDefinitionMapper.selectList(new LambdaQueryWrapper() + .select(FlowDefinition::getId) + .like(FlowDefinition::getFlowCode, flowTaskBo.getProjectId())); + if (flowDefinitions != null && !flowDefinitions.isEmpty()) { + flowDefinitions.forEach(flowDefinition -> { + definitionIds.add(flowDefinition.getId()); + }); + } + if (definitionIds.isEmpty()) { + return null; + } + } queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey()); queryWrapper.in("t.approver", LoginHelper.getUserIdStr()); queryWrapper.orderByDesc("t.create_time").orderByDesc("t.update_time"); - Page page = flwTaskMapper.getListFinishTask(pageQuery.build(), queryWrapper); + Page page = flwTaskMapper.getListFinishDefinitionIdsTask(pageQuery.build(),definitionIds, queryWrapper); return TableDataInfo.build(page); } @@ -326,6 +352,22 @@ public class FlwTaskServiceImpl implements IFlwTaskService { } return page; } + private Page getFlowTaskDefinitionIdsVoPage(PageQuery pageQuery, List definitionIds, QueryWrapper queryWrapper) { + Page page = flwTaskMapper.getListRunTaskDefinitionIds(pageQuery.build(),definitionIds, queryWrapper); + List records = page.getRecords(); + if (CollUtil.isNotEmpty(records)) { + List taskIds = StreamUtils.toList(records, FlowTaskVo::getId); + Map> listMap = currentTaskAllUser(taskIds); + records.forEach(t -> { + List userList = listMap.getOrDefault(t.getId(), Collections.emptyList()); + if (CollUtil.isNotEmpty(userList)) { + t.setAssigneeIds(StreamUtils.join(userList, e -> String.valueOf(e.getUserId()))); + t.setAssigneeNames(StreamUtils.join(userList, UserDTO::getNickName)); + } + }); + } + return page; + } /** * 查询已办任务 @@ -349,8 +391,22 @@ public class FlwTaskServiceImpl implements IFlwTaskService { @Override public TableDataInfo pageByTaskCopy(FlowTaskBo flowTaskBo, PageQuery pageQuery) { QueryWrapper queryWrapper = buildQueryWrapper(flowTaskBo); + List definitionIds = new ArrayList<>(); + if (!"0".equals(flowTaskBo.getProjectId())){ + List flowDefinitions = flowDefinitionMapper.selectList(new LambdaQueryWrapper() + .select(FlowDefinition::getId) + .like(FlowDefinition::getFlowCode, flowTaskBo.getProjectId())); + if (flowDefinitions != null && !flowDefinitions.isEmpty()) { + flowDefinitions.forEach(flowDefinition -> { + definitionIds.add(flowDefinition.getId()); + }); + } + if (definitionIds.isEmpty()) { + return null; + } + } queryWrapper.in("t.processed_by", LoginHelper.getUserIdStr()); - Page page = flwTaskMapper.getTaskCopyByPage(pageQuery.build(), queryWrapper); + Page page = flwTaskMapper.getTaskCopyDefinitionIdsByPage(pageQuery.build(),definitionIds, queryWrapper); return TableDataInfo.build(page); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml index f539030b..c632b0dc 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml @@ -42,6 +42,46 @@ ) t ${ew.getCustomSqlSegment} + + +