diff --git a/backend/src/main/java/com/designhub/controller/TaskItemController.java b/backend/src/main/java/com/designhub/controller/TaskItemController.java index 347091e..75cd672 100644 --- a/backend/src/main/java/com/designhub/controller/TaskItemController.java +++ b/backend/src/main/java/com/designhub/controller/TaskItemController.java @@ -11,6 +11,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -19,6 +20,7 @@ import java.util.Map; /** * 任务子项控制器(流水线任务) */ +@Slf4j @Tag(name = "流水线任务管理", description = "流水线任务子项相关接口") @RestController @RequestMapping("/api/tasks/items") @@ -289,13 +291,20 @@ public class TaskItemController { String actualToken = token.replace("Bearer ", ""); Long userId = jwtUtil.getUserIdFromToken(actualToken); + log.info("===== 获取待审核子任务组 API 调用 ====="); + log.info("请求用户ID: {}", userId); + // 检查是否是管理员 com.designhub.entity.User user = userMapper.selectById(userId); boolean isAdmin = user != null && Integer.valueOf(1).equals(user.getIsAdmin()); + log.info("用户信息: 姓名={}, 是否管理员={}", user != null ? user.getRealName() : "null", isAdmin); + // 管理员可以看到所有待审核子任务组 if (isAdmin) { + log.info("管理员模式,获取所有待审核子任务组"); List> groups = taskItemService.getPendingApprovalGroups(null); + log.info("返回 {} 个待审核子任务组", groups.size()); return Result.success(groups); } @@ -306,8 +315,14 @@ public class TaskItemController { .eq(com.designhub.entity.Department::getStatus, 1) ); + log.info("用户 {} 负责的部门数量: {}", userId, leadingDepts.size()); + for (com.designhub.entity.Department dept : leadingDepts) { + log.info(" - 部门ID: {}, 部门名称: {}", dept.getId(), dept.getDeptName()); + } + if (leadingDepts.isEmpty()) { // 不是任何部门的负责人,返回空列表 + log.info("用户不是任何部门的负责人,返回空列表"); return Result.success(new java.util.ArrayList<>()); } @@ -316,7 +331,9 @@ public class TaskItemController { java.util.Set addedKeys = new java.util.HashSet<>(); for (com.designhub.entity.Department dept : leadingDepts) { + log.info("查询部门 {} ({}) 的待审核子任务组", dept.getId(), dept.getDeptName()); List> groups = taskItemService.getPendingApprovalGroups(dept.getId()); + log.info("部门 {} 返回 {} 个子任务组", dept.getId(), groups.size()); for (Map group : groups) { String key = group.get("taskId") + "-" + group.get("groupNo"); if (!addedKeys.contains(key)) { @@ -326,6 +343,7 @@ public class TaskItemController { } } + log.info("最终返回 {} 个待审核子任务组", allGroups.size()); return Result.success(allGroups); } } diff --git a/backend/src/main/java/com/designhub/service/TaskItemService.java b/backend/src/main/java/com/designhub/service/TaskItemService.java index c56964b..c6c0ff1 100644 --- a/backend/src/main/java/com/designhub/service/TaskItemService.java +++ b/backend/src/main/java/com/designhub/service/TaskItemService.java @@ -1012,36 +1012,55 @@ public class TaskItemService { * @param receiverDeptId 接单部门ID,null表示查询所有(管理员) */ public List> getPendingApprovalGroups(Long receiverDeptId) { + log.info("===== getPendingApprovalGroups 开始 ====="); + log.info("查询参数 receiverDeptId: {}", receiverDeptId); + // 查询所有有待审核子任务组的主任务 List pendingItems = taskItemMapper.selectList( new LambdaQueryWrapper() .eq(TaskItem::getStatus, "pending_approval") ); + + log.info("找到 {} 个 pending_approval 状态的子任务", pendingItems.size()); // 按主任务和组号分组 Map> groupMap = new HashMap<>(); for (TaskItem item : pendingItems) { + log.info("处理子任务 ID: {}, item_no: {}, task_type_id: {}", + item.getId(), item.getItemNo(), item.getTaskTypeId()); + Task mainTask = taskMapper.selectById(item.getTaskId()); - if (mainTask == null) continue; + if (mainTask == null) { + log.warn("子任务 {} 的主任务不存在,跳过", item.getId()); + continue; + } // 判断是否有权限查看该子任务 boolean hasPermission = false; if (receiverDeptId == null) { // 管理员可以看到所有任务 hasPermission = true; + log.info("管理员模式,有权限"); } else { // 部门负责人:检查子任务的任务类型配置的 allowed_dept_ids 是否包含该部门 Long targetDeptId = getTargetDeptIdFromTaskType(item.getTaskTypeId()); + log.info("子任务 {} 的目标部门ID: {}, 查询的部门ID: {}", + item.getId(), targetDeptId, receiverDeptId); + if (targetDeptId != null && targetDeptId.equals(receiverDeptId)) { hasPermission = true; + log.info("匹配成功(通过任务类型配置)"); } // 兼容:也检查主任务的 receiver_dept_id if (!hasPermission && mainTask.getReceiverDeptId() != null && mainTask.getReceiverDeptId().equals(receiverDeptId)) { hasPermission = true; + log.info("匹配成功(通过主任务接单部门)"); } } + log.info("子任务 {} 权限检查结果: {}", item.getId(), hasPermission); + if (hasPermission) { String key = item.getTaskId() + "-" + item.getGroupNo(); if (!groupMap.containsKey(key)) { @@ -1069,22 +1088,31 @@ public class TaskItemService { * 如果当前类型未配置,则递归向上查找父级类型的配置 */ private Long getTargetDeptIdFromTaskType(Long taskTypeId) { + log.debug("getTargetDeptIdFromTaskType 调用, taskTypeId: {}", taskTypeId); + if (taskTypeId == null) { + log.debug("taskTypeId 为空,返回 null"); return null; } com.designhub.entity.DemandType taskType = demandTypeMapper.selectById(taskTypeId); if (taskType == null) { + log.warn("任务类型 {} 不存在", taskTypeId); return null; } + log.debug("任务类型: id={}, name={}, parentId={}, allowedDeptIds={}", + taskType.getId(), taskType.getTypeName(), taskType.getParentId(), taskType.getAllowedDeptIds()); + // 如果当前类型配置了allowed_dept_ids,返回第一个部门ID String allowedDeptIds = taskType.getAllowedDeptIds(); if (allowedDeptIds != null && !allowedDeptIds.isEmpty()) { try { String[] deptIds = allowedDeptIds.split(","); if (deptIds.length > 0) { - return Long.parseLong(deptIds[0].trim()); + Long result = Long.parseLong(deptIds[0].trim()); + log.debug("找到 allowed_dept_ids: {}, 返回第一个: {}", allowedDeptIds, result); + return result; } } catch (NumberFormatException e) { log.warn("解析allowed_dept_ids失败: {}", allowedDeptIds, e); @@ -1093,9 +1121,11 @@ public class TaskItemService { // 如果当前类型未配置,递归查找父级 if (taskType.getParentId() != null) { + log.debug("当前类型未配置 allowed_dept_ids, 递归查找父级: {}", taskType.getParentId()); return getTargetDeptIdFromTaskType(taskType.getParentId()); } + log.debug("未找到配置的部门,返回 null"); return null; } }