fix: 修复部门负责人看任务卡片逻辑 - 通过leader_id查找负责的部门
1. 通过sys_dept.leader_id查找用户负责的所有部门 2. 支持一个人是多个部门的负责人 3. 支持同时是需求部门和接单部门的负责人
This commit is contained in:
parent
0ef762baa4
commit
552c9900f0
@ -64,25 +64,25 @@ public class TaskItemController {
|
||||
com.designhub.entity.User user = userMapper.selectById(userId);
|
||||
boolean isAdmin = user != null && Integer.valueOf(1).equals(user.getIsAdmin());
|
||||
|
||||
// 检查用户是否是部门负责人
|
||||
boolean isDeptLeader = false;
|
||||
Long userDeptId = null;
|
||||
if (user != null && user.getDeptId() != null) {
|
||||
userDeptId = user.getDeptId();
|
||||
// 查询该部门,检查当前用户是否是负责人
|
||||
com.designhub.entity.Department dept = departmentMapper.selectById(userDeptId);
|
||||
if (dept != null && userId.equals(dept.getLeaderId())) {
|
||||
isDeptLeader = true;
|
||||
}
|
||||
}
|
||||
// 检查用户是否是某个部门的负责人(通过leader_id查找)
|
||||
List<com.designhub.entity.Department> leadingDepts = departmentMapper.selectList(
|
||||
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<com.designhub.entity.Department>()
|
||||
.eq(com.designhub.entity.Department::getLeaderId, userId)
|
||||
.eq(com.designhub.entity.Department::getStatus, 1)
|
||||
);
|
||||
boolean isDeptLeader = !leadingDepts.isEmpty();
|
||||
|
||||
IPage<TaskItem> items;
|
||||
if (isAdmin) {
|
||||
// 管理员:看到所有进行中的子任务
|
||||
items = taskItemService.getInProgressItems(page, pageSize, null, null);
|
||||
} else if (isDeptLeader) {
|
||||
// 部门负责人:看到本部门所有成员的子任务
|
||||
items = taskItemService.getInProgressItems(page, pageSize, null, userDeptId);
|
||||
// 部门负责人:看到自己负责的所有部门的子任务
|
||||
// 获取所有负责的部门ID
|
||||
List<Long> leadingDeptIds = leadingDepts.stream()
|
||||
.map(com.designhub.entity.Department::getId)
|
||||
.collect(java.util.stream.Collectors.toList());
|
||||
items = taskItemService.getInProgressItemsByDeptIds(page, pageSize, leadingDeptIds);
|
||||
} else {
|
||||
// 普通设计师:只看自己的子任务
|
||||
items = taskItemService.getInProgressItems(page, pageSize, userId, null);
|
||||
@ -110,24 +110,24 @@ public class TaskItemController {
|
||||
com.designhub.entity.User user = userMapper.selectById(userId);
|
||||
boolean isAdmin = user != null && Integer.valueOf(1).equals(user.getIsAdmin());
|
||||
|
||||
// 检查用户是否是部门负责人
|
||||
boolean isDeptLeader = false;
|
||||
Long userDeptId = null;
|
||||
if (user != null && user.getDeptId() != null) {
|
||||
userDeptId = user.getDeptId();
|
||||
com.designhub.entity.Department dept = departmentMapper.selectById(userDeptId);
|
||||
if (dept != null && userId.equals(dept.getLeaderId())) {
|
||||
isDeptLeader = true;
|
||||
}
|
||||
}
|
||||
// 检查用户是否是某个部门的负责人(通过leader_id查找)
|
||||
List<com.designhub.entity.Department> leadingDepts = departmentMapper.selectList(
|
||||
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<com.designhub.entity.Department>()
|
||||
.eq(com.designhub.entity.Department::getLeaderId, userId)
|
||||
.eq(com.designhub.entity.Department::getStatus, 1)
|
||||
);
|
||||
boolean isDeptLeader = !leadingDepts.isEmpty();
|
||||
|
||||
IPage<TaskItem> items;
|
||||
if (isAdmin) {
|
||||
// 管理员:看到所有已完成的子任务
|
||||
items = taskItemService.getCompletedItems(page, pageSize, null, null);
|
||||
} else if (isDeptLeader) {
|
||||
// 部门负责人:看到本部门所有成员的子任务
|
||||
items = taskItemService.getCompletedItems(page, pageSize, null, userDeptId);
|
||||
// 部门负责人:看到自己负责的所有部门的子任务
|
||||
List<Long> leadingDeptIds = leadingDepts.stream()
|
||||
.map(com.designhub.entity.Department::getId)
|
||||
.collect(java.util.stream.Collectors.toList());
|
||||
items = taskItemService.getCompletedItemsByDeptIds(page, pageSize, leadingDeptIds);
|
||||
} else {
|
||||
// 普通设计师:只看自己的子任务
|
||||
items = taskItemService.getCompletedItems(page, pageSize, userId, null);
|
||||
|
||||
@ -134,6 +134,80 @@ public interface TaskItemMapper extends BaseMapper<TaskItem> {
|
||||
@Param("receiverId") Long receiverId,
|
||||
@Param("deptId") Long deptId);
|
||||
|
||||
/**
|
||||
* 查询进行中的子任务列表(按多个部门ID过滤,用于部门负责人)
|
||||
*/
|
||||
@Select("<script>" +
|
||||
"SELECT ti.*, " +
|
||||
" t.title AS mainTaskTitle, " +
|
||||
" t.pipeline_mode AS pipelineMode, " +
|
||||
" t.spu_info AS spuInfo, " +
|
||||
" t.task_sub_type AS taskSubType, " +
|
||||
" t.attachment_url AS attachmentUrl, " +
|
||||
" t.preview_image AS previewImage, " +
|
||||
" b.brand_name AS brandName, " +
|
||||
" c.category_name AS categoryName, " +
|
||||
" p.platform_name AS platformName, " +
|
||||
" dt.type_name AS taskTypeName, " +
|
||||
" u.real_name AS publisherName, " +
|
||||
" r.real_name AS receiverName, " +
|
||||
" (SELECT COUNT(*) FROM task_item WHERE task_id = ti.task_id) AS totalItems " +
|
||||
"FROM task_item ti " +
|
||||
"LEFT JOIN task t ON ti.task_id = t.id " +
|
||||
"LEFT JOIN brand b ON t.brand_id = b.id " +
|
||||
"LEFT JOIN category c ON t.category_id = c.id " +
|
||||
"LEFT JOIN platform p ON t.platform_id = p.id " +
|
||||
"LEFT JOIN task_type dt ON ti.task_type_id = dt.id " +
|
||||
"LEFT JOIN sys_user u ON t.publisher_id = u.id " +
|
||||
"LEFT JOIN sys_user r ON ti.receiver_id = r.id " +
|
||||
"WHERE ti.status = 'in_progress' " +
|
||||
" AND t.deleted = 0 " +
|
||||
" AND ti.receiver_dept_id IN " +
|
||||
" <foreach collection='deptIds' item='deptId' open='(' separator=',' close=')'>" +
|
||||
" #{deptId}" +
|
||||
" </foreach> " +
|
||||
"ORDER BY ti.update_time DESC" +
|
||||
"</script>")
|
||||
IPage<TaskItem> selectInProgressItemsByDeptIds(Page<TaskItem> page,
|
||||
@Param("deptIds") List<Long> deptIds);
|
||||
|
||||
/**
|
||||
* 查询已完成的子任务列表(按多个部门ID过滤,用于部门负责人)
|
||||
*/
|
||||
@Select("<script>" +
|
||||
"SELECT ti.*, " +
|
||||
" t.title AS mainTaskTitle, " +
|
||||
" t.pipeline_mode AS pipelineMode, " +
|
||||
" t.spu_info AS spuInfo, " +
|
||||
" t.task_sub_type AS taskSubType, " +
|
||||
" t.attachment_url AS attachmentUrl, " +
|
||||
" t.preview_image AS previewImage, " +
|
||||
" b.brand_name AS brandName, " +
|
||||
" c.category_name AS categoryName, " +
|
||||
" p.platform_name AS platformName, " +
|
||||
" dt.type_name AS taskTypeName, " +
|
||||
" u.real_name AS publisherName, " +
|
||||
" r.real_name AS receiverName, " +
|
||||
" (SELECT COUNT(*) FROM task_item WHERE task_id = ti.task_id) AS totalItems " +
|
||||
"FROM task_item ti " +
|
||||
"LEFT JOIN task t ON ti.task_id = t.id " +
|
||||
"LEFT JOIN brand b ON t.brand_id = b.id " +
|
||||
"LEFT JOIN category c ON t.category_id = c.id " +
|
||||
"LEFT JOIN platform p ON t.platform_id = p.id " +
|
||||
"LEFT JOIN task_type dt ON ti.task_type_id = dt.id " +
|
||||
"LEFT JOIN sys_user u ON t.publisher_id = u.id " +
|
||||
"LEFT JOIN sys_user r ON ti.receiver_id = r.id " +
|
||||
"WHERE ti.status = 'completed' " +
|
||||
" AND t.deleted = 0 " +
|
||||
" AND ti.receiver_dept_id IN " +
|
||||
" <foreach collection='deptIds' item='deptId' open='(' separator=',' close=')'>" +
|
||||
" #{deptId}" +
|
||||
" </foreach> " +
|
||||
"ORDER BY ti.complete_time DESC" +
|
||||
"</script>")
|
||||
IPage<TaskItem> selectCompletedItemsByDeptIds(Page<TaskItem> page,
|
||||
@Param("deptIds") List<Long> deptIds);
|
||||
|
||||
/**
|
||||
* 根据任务ID查询所有子任务
|
||||
*/
|
||||
|
||||
@ -62,6 +62,15 @@ public class TaskItemService {
|
||||
public IPage<TaskItem> getInProgressItems(Integer page, Integer pageSize, Long receiverId) {
|
||||
return getInProgressItems(page, pageSize, receiverId, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取进行中的子任务列表(部门负责人:按多个部门ID过滤)
|
||||
* @param deptIds 部门ID列表
|
||||
*/
|
||||
public IPage<TaskItem> getInProgressItemsByDeptIds(Integer page, Integer pageSize, List<Long> deptIds) {
|
||||
Page<TaskItem> pageParam = new Page<>(page, pageSize);
|
||||
return taskItemMapper.selectInProgressItemsByDeptIds(pageParam, deptIds);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取已完成的子任务列表
|
||||
@ -79,6 +88,15 @@ public class TaskItemService {
|
||||
public IPage<TaskItem> getCompletedItems(Integer page, Integer pageSize, Long receiverId) {
|
||||
return getCompletedItems(page, pageSize, receiverId, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取已完成的子任务列表(部门负责人:按多个部门ID过滤)
|
||||
* @param deptIds 部门ID列表
|
||||
*/
|
||||
public IPage<TaskItem> getCompletedItemsByDeptIds(Integer page, Integer pageSize, List<Long> deptIds) {
|
||||
Page<TaskItem> pageParam = new Page<>(page, pageSize);
|
||||
return taskItemMapper.selectCompletedItemsByDeptIds(pageParam, deptIds);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据任务ID获取所有子任务
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user