fix: 修复流水线子任务组在待审核列表中不显示的问题

1. getPendingApprovalGroups: 使用任务类型配置的allowed_dept_ids判断权限
2. approveReceivingLevel: 支持任务类型配置的部门权限验证
3. 兼容主任务receiver_dept_id的旧逻辑
This commit is contained in:
Your Name 2026-01-07 16:51:56 +08:00
parent 6d00eb4ba1
commit 4ceacdf327

View File

@ -682,11 +682,42 @@ public class TaskItemService {
boolean isAdmin = approver != null && Integer.valueOf(1).equals(approver.getIsAdmin());
if (!isAdmin) {
if (mainTask.getReceiverDeptId() == null) {
throw new BusinessException(ResultCode.FORBIDDEN, "任务未指定接单部门");
// 获取该组的子任务,检查审核人是否是对应部门的负责人
List<TaskItem> checkItems = taskItemMapper.selectList(
new LambdaQueryWrapper<TaskItem>()
.eq(TaskItem::getTaskId, taskId)
.eq(TaskItem::getGroupNo, groupNo)
.eq(TaskItem::getStatus, "pending_approval")
.last("LIMIT 1")
);
if (checkItems.isEmpty()) {
throw new BusinessException(ResultCode.PARAM_ERROR, "该组没有待审核的子任务");
}
com.designhub.entity.Department receiverDept = departmentMapper.selectById(mainTask.getReceiverDeptId());
if (receiverDept == null || !approverId.equals(receiverDept.getLeaderId())) {
// 从子任务的任务类型配置获取接单部门
TaskItem firstItem = checkItems.get(0);
Long targetDeptId = getTargetDeptIdFromTaskType(firstItem.getTaskTypeId());
boolean hasPermission = false;
// 检查任务类型配置的接单部门
if (targetDeptId != null) {
com.designhub.entity.Department receiverDept = departmentMapper.selectById(targetDeptId);
if (receiverDept != null && approverId.equals(receiverDept.getLeaderId())) {
hasPermission = true;
}
}
// 兼容:也检查主任务的 receiver_dept_id
if (!hasPermission && mainTask.getReceiverDeptId() != null) {
com.designhub.entity.Department receiverDept = departmentMapper.selectById(mainTask.getReceiverDeptId());
if (receiverDept != null && approverId.equals(receiverDept.getLeaderId())) {
hasPermission = true;
}
}
if (!hasPermission) {
throw new BusinessException(ResultCode.FORBIDDEN, "只有接单部门负责人可以审核子任务组");
}
} else {
@ -991,8 +1022,27 @@ public class TaskItemService {
Map<String, Map<String, Object>> groupMap = new HashMap<>();
for (TaskItem item : pendingItems) {
Task mainTask = taskMapper.selectById(item.getTaskId());
// receiverDeptId为null表示管理员,可以看到所有任务
if (mainTask != null && (receiverDeptId == null || receiverDeptId.equals(mainTask.getReceiverDeptId()))) {
if (mainTask == null) continue;
// 判断是否有权限查看该子任务
boolean hasPermission = false;
if (receiverDeptId == null) {
// 管理员可以看到所有任务
hasPermission = true;
} else {
// 部门负责人:检查子任务的任务类型配置的 allowed_dept_ids 是否包含该部门
Long targetDeptId = getTargetDeptIdFromTaskType(item.getTaskTypeId());
if (targetDeptId != null && targetDeptId.equals(receiverDeptId)) {
hasPermission = true;
}
// 兼容:也检查主任务的 receiver_dept_id
if (!hasPermission && mainTask.getReceiverDeptId() != null
&& mainTask.getReceiverDeptId().equals(receiverDeptId)) {
hasPermission = true;
}
}
if (hasPermission) {
String key = item.getTaskId() + "-" + item.getGroupNo();
if (!groupMap.containsKey(key)) {
Map<String, Object> groupInfo = new HashMap<>();