diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwChartExtServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwChartExtServiceImpl.java index fcdf06933..c5533c198 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwChartExtServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwChartExtServiceImpl.java @@ -27,10 +27,7 @@ import org.dromara.workflow.common.constant.FlowConstant; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -74,10 +71,12 @@ public class FlwChartExtServiceImpl implements ChartExtService { Map> groupedByNode = StreamUtils.groupByKey(flowHisTasks, FlowHisTask::getNodeCode); // 批量查询所有审批人的用户信息 - List userDTOList = userService.selectListByIds(StreamUtils.toList(flowHisTasks, e -> Convert.toLong(e.getApprover()))); + List userDTOList = userService.selectListByIds(StreamUtils.toSet(flowHisTasks, e -> Convert.toLong(e.getApprover()))); // 将查询到的用户列表转换为以用户ID为key的映射 Map userMap = StreamUtils.toIdentityMap(userDTOList, UserDTO::getUserId); + Set deptIds = StreamUtils.toSet(userDTOList, UserDTO::getDeptId); + Map deptNameMap = deptService.selectDeptNamesByIds(deptIds); Map dictType = dictService.getAllDictByDictType(FlowConstant.WF_TASK_STATUS); @@ -100,7 +99,7 @@ public class FlwChartExtServiceImpl implements ChartExtService { )); // 处理当前节点的扩展信息 - this.processNodeExtInfo(nodeJson, latestPerApprover, userMap, dictType); + this.processNodeExtInfo(nodeJson, latestPerApprover, userMap, deptNameMap, dictType); } } @@ -168,9 +167,11 @@ public class FlwChartExtServiceImpl implements ChartExtService { * @param nodeJson 当前流程节点对象,包含节点基础信息和提示内容容器 * @param taskList 当前节点关联的历史审批任务列表,用于生成提示信息 * @param userMap 用户信息映射表,key 为用户ID,value 为用户DTO对象,用于获取审批人信息 + * @param deptNameMap 部门名称映射表,key 为部门ID,value 为部门名称 * @param dictType 数据字典映射表,key 为字典项编码,value 为对应显示值,用于翻译审批状态等 */ - private void processNodeExtInfo(NodeJson nodeJson, List taskList, Map userMap, Map dictType) { + private void processNodeExtInfo(NodeJson nodeJson, List taskList, Map userMap, + Map deptNameMap, Map dictType) { // 获取节点提示内容对象中的 info 列表,用于追加提示项 List info = nodeJson.getPromptContent().getInfo(); @@ -182,8 +183,7 @@ public class FlwChartExtServiceImpl implements ChartExtService { continue; } - // 查询用户所属部门名称 - String deptName = deptService.selectDeptNameByIds(Convert.toStr(userDTO.getDeptId())); + String deptName = deptNameMap.getOrDefault(userDTO.getDeptId(), StringUtils.EMPTY); // 添加标题项,如:👤 张三(市场部) info.add(new PromptContent.InfoItem() diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index 2ea66e2d6..9f0e5aa33 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -338,10 +338,14 @@ public class FlwTaskServiceImpl implements IFlwTaskService { return; } // 添加抄送人记录 - FlowHisTask flowHisTask = flowHisTaskMapper.selectList( + List flowHisTasks = flowHisTaskMapper.selectList( QueryBuilder.lambda(FlowHisTask.class) .eq(FlowHisTask::getTaskId, task.getId()) - .build()).get(0); + .build()); + if (CollUtil.isEmpty(flowHisTasks)) { + throw new ServiceException("流程历史任务不存在,无法添加抄送记录"); + } + FlowHisTask flowHisTask = flowHisTasks.get(0); FlowNode flowNode = new FlowNode(); flowNode.setNodeCode(flowHisTask.getTargetNodeCode()); flowNode.setNodeName(flowHisTask.getTargetNodeName()); @@ -897,7 +901,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { if (CollUtil.isEmpty(userList)) { return Collections.emptyList(); } - return userService.selectListByIds(StreamUtils.toList(userList, e -> Convert.toLong(e.getProcessedBy()))); + return userService.selectListByIds(StreamUtils.toSet(userList, e -> Convert.toLong(e.getProcessedBy()))); } /**