fix: allow leaders to publish for managed demand departments
This commit is contained in:
parent
68e17b0a83
commit
821c3bf22c
@ -840,4 +840,57 @@ public class DepartmentService {
|
||||
|
||||
return count != null && count > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户可管理的需求侧发起部门
|
||||
* - 直接负责的 demand / primary_demand 部门
|
||||
* - 如果负责的是一级需求部门,则其子需求部门也视为可发起部门
|
||||
*/
|
||||
public List<Department> getUserManagedPublishingDepartments(Long userId) {
|
||||
if (userId == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
List<Department> leadingDepts = departmentMapper.selectList(
|
||||
new LambdaQueryWrapper<Department>()
|
||||
.eq(Department::getLeaderId, userId)
|
||||
.eq(Department::getStatus, 1)
|
||||
.eq(Department::getDeleted, 0)
|
||||
);
|
||||
|
||||
if (CollectionUtils.isEmpty(leadingDepts)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
List<Department> result = new ArrayList<>();
|
||||
for (Department dept : leadingDepts) {
|
||||
if (dept == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ("demand".equals(dept.getDeptType()) || "primary_demand".equals(dept.getDeptType())) {
|
||||
result.add(dept);
|
||||
}
|
||||
|
||||
if ("primary_demand".equals(dept.getDeptType())) {
|
||||
List<Department> childDepts = departmentMapper.selectList(
|
||||
new LambdaQueryWrapper<Department>()
|
||||
.eq(Department::getParentId, dept.getId())
|
||||
.eq(Department::getStatus, 1)
|
||||
.eq(Department::getDeleted, 0)
|
||||
);
|
||||
|
||||
childDepts.stream()
|
||||
.filter(child -> "demand".equals(child.getDeptType()) || "primary_demand".equals(child.getDeptType()))
|
||||
.forEach(result::add);
|
||||
}
|
||||
}
|
||||
|
||||
return result.stream()
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.collectingAndThen(
|
||||
Collectors.toMap(Department::getId, dept -> dept, (left, right) -> left, java.util.LinkedHashMap::new),
|
||||
map -> new ArrayList<>(map.values())
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1336,6 +1336,15 @@ public class TaskService {
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 需求部门负责人可以按其管理的需求部门发起任务,不要求必须挂在 sys_user_department
|
||||
List<Department> managedPublishingDepartments = departmentService.getUserManagedPublishingDepartments(user.getId());
|
||||
if (!managedPublishingDepartments.isEmpty()) {
|
||||
java.util.LinkedHashMap<Long, Department> publishingDeptMap = new java.util.LinkedHashMap<>();
|
||||
publishingDepartments.forEach(dept -> publishingDeptMap.put(dept.getId(), dept));
|
||||
managedPublishingDepartments.forEach(dept -> publishingDeptMap.put(dept.getId(), dept));
|
||||
publishingDepartments = new java.util.ArrayList<>(publishingDeptMap.values());
|
||||
}
|
||||
|
||||
if (requestedDeptId != null) {
|
||||
Department requestedDept = departmentService.getDepartmentById(requestedDeptId);
|
||||
if (requestedDept == null) {
|
||||
|
||||
@ -706,6 +706,19 @@ const availablePublishingDepartments = computed<PublishingDepartmentOption[]>(()
|
||||
seen.add(dept.deptId)
|
||||
})
|
||||
|
||||
const managedDepartments = Array.isArray(userInfo.managedDepartments) ? userInfo.managedDepartments : []
|
||||
managedDepartments.forEach((dept) => {
|
||||
if (!dept?.deptId || seen.has(dept.deptId)) return
|
||||
if (dept.deptType !== 'demand' && dept.deptType !== 'primary_demand') return
|
||||
result.push({
|
||||
deptId: dept.deptId,
|
||||
deptName: dept.deptName,
|
||||
deptType: dept.deptType,
|
||||
isPrimary: 0
|
||||
})
|
||||
seen.add(dept.deptId)
|
||||
})
|
||||
|
||||
if (
|
||||
userInfo.deptId &&
|
||||
!seen.has(userInfo.deptId) &&
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user