diff --git a/ruoyi-gateway/src/main/java/org/dromara/gateway/handler/GatewayExceptionHandler.java b/ruoyi-gateway/src/main/java/org/dromara/gateway/handler/GatewayExceptionHandler.java index d5f69514a..70097f0e1 100644 --- a/ruoyi-gateway/src/main/java/org/dromara/gateway/handler/GatewayExceptionHandler.java +++ b/ruoyi-gateway/src/main/java/org/dromara/gateway/handler/GatewayExceptionHandler.java @@ -34,8 +34,9 @@ public class GatewayExceptionHandler { public void handle(HttpServletRequest request, HttpServletResponse response, Throwable ex) throws IOException { int code; String msg; + String exceptionMessage = ex.getMessage(); if ("NotFoundException".equals(ex.getClass().getSimpleName()) - || ex.getMessage().contains("Unable to find instance")) { + || (exceptionMessage != null && exceptionMessage.contains("Unable to find instance"))) { code = HttpStatus.NOT_FOUND; msg = "服务未找到"; } else if (ex instanceof ResponseStatusException responseStatusException) { @@ -46,7 +47,7 @@ public class GatewayExceptionHandler { msg = "内部服务器错误"; } - log.error("[网关异常处理]请求路径:{},异常信息:{}", request.getRequestURI(), ex.getMessage(), ex); + log.error("[网关异常处理]请求路径:{},异常信息:{}", request.getRequestURI(), exceptionMessage, ex); writeJson(response, code, msg); } 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 42d31f1d6..abd17c71b 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 @@ -31,6 +31,7 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; @@ -77,10 +78,12 @@ public class FlwChartExtServiceImpl implements ChartExtService { Map> groupedByNode = StreamUtils.groupByKey(flowHisTasks, FlowHisTask::getNodeCode); // 批量查询所有审批人的用户信息 - List userDTOList = remoteUserService.selectListByIds(StreamUtils.toList(flowHisTasks, e -> Convert.toLong(e.getApprover()))); + List userDTOList = remoteUserService.selectListByIds(StreamUtils.toSet(flowHisTasks, e -> Convert.toLong(e.getApprover()))); // 将查询到的用户列表转换为以用户ID为key的映射 Map userMap = StreamUtils.toIdentityMap(userDTOList, RemoteUserVo::getUserId); + Set deptIds = StreamUtils.toSet(userDTOList, RemoteUserVo::getDeptId); + Map deptNameMap = remoteDeptService.selectDeptNamesByIds(deptIds); Map dictType = dictService.getAllDictByDictType(FlowConstant.WF_TASK_STATUS); @@ -103,7 +106,7 @@ public class FlwChartExtServiceImpl implements ChartExtService { )); // 处理当前节点的扩展信息 - this.processNodeExtInfo(nodeJson, latestPerApprover, userMap, dictType); + this.processNodeExtInfo(nodeJson, latestPerApprover, userMap, deptNameMap, dictType); } } @@ -171,9 +174,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(); @@ -185,8 +190,7 @@ public class FlwChartExtServiceImpl implements ChartExtService { continue; } - // 查询用户所属部门名称 - String deptName = remoteDeptService.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 b1be88916..9444dda4e 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 @@ -339,10 +339,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()); @@ -876,7 +880,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { if (CollUtil.isEmpty(userList)) { return Collections.emptyList(); } - return remoteUserService.selectListByIds(StreamUtils.toList(userList, e -> Convert.toLong(e.getProcessedBy()))); + return remoteUserService.selectListByIds(StreamUtils.toSet(userList, e -> Convert.toLong(e.getProcessedBy()))); } /**