fix: 修复流水线子任务组在待审核列表中不显示的问题
1. getPendingApprovalGroups: 使用任务类型配置的allowed_dept_ids判断权限 2. approveReceivingLevel: 支持任务类型配置的部门权限验证 3. 兼容主任务receiver_dept_id的旧逻辑
This commit is contained in:
parent
6d00eb4ba1
commit
4ceacdf327
@ -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<>();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user