debug: 添加详细日志调试待审核子任务组获取问题

This commit is contained in:
Your Name 2026-01-07 17:12:31 +08:00
parent 62fd513df7
commit 8198f7d497
2 changed files with 50 additions and 2 deletions

View File

@ -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<Map<String, Object>> 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<String> addedKeys = new java.util.HashSet<>();
for (com.designhub.entity.Department dept : leadingDepts) {
log.info("查询部门 {} ({}) 的待审核子任务组", dept.getId(), dept.getDeptName());
List<Map<String, Object>> groups = taskItemService.getPendingApprovalGroups(dept.getId());
log.info("部门 {} 返回 {} 个子任务组", dept.getId(), groups.size());
for (Map<String, Object> 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);
}
}

View File

@ -1012,36 +1012,55 @@ public class TaskItemService {
* @param receiverDeptId 接单部门ID,null表示查询所有(管理员)
*/
public List<Map<String, Object>> getPendingApprovalGroups(Long receiverDeptId) {
log.info("===== getPendingApprovalGroups 开始 =====");
log.info("查询参数 receiverDeptId: {}", receiverDeptId);
// 查询所有有待审核子任务组的主任务
List<TaskItem> pendingItems = taskItemMapper.selectList(
new LambdaQueryWrapper<TaskItem>()
.eq(TaskItem::getStatus, "pending_approval")
);
log.info("找到 {} 个 pending_approval 状态的子任务", pendingItems.size());
// 按主任务和组号分组
Map<String, Map<String, Object>> 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;
}
}