From 552c9900f03d4e1676cfc1795539a3b1c06daf46 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 7 Jan 2026 15:19:09 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E8=B4=9F=E8=B4=A3=E4=BA=BA=E7=9C=8B=E4=BB=BB=E5=8A=A1=E5=8D=A1?= =?UTF-8?q?=E7=89=87=E9=80=BB=E8=BE=91=20-=20=E9=80=9A=E8=BF=87leader=5Fid?= =?UTF-8?q?=E6=9F=A5=E6=89=BE=E8=B4=9F=E8=B4=A3=E7=9A=84=E9=83=A8=E9=97=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 通过sys_dept.leader_id查找用户负责的所有部门 2. 支持一个人是多个部门的负责人 3. 支持同时是需求部门和接单部门的负责人 --- .../controller/TaskItemController.java | 50 ++++++------- .../com/designhub/mapper/TaskItemMapper.java | 74 +++++++++++++++++++ .../designhub/service/TaskItemService.java | 18 +++++ 3 files changed, 117 insertions(+), 25 deletions(-) diff --git a/backend/src/main/java/com/designhub/controller/TaskItemController.java b/backend/src/main/java/com/designhub/controller/TaskItemController.java index 59578d3..edc39eb 100644 --- a/backend/src/main/java/com/designhub/controller/TaskItemController.java +++ b/backend/src/main/java/com/designhub/controller/TaskItemController.java @@ -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 leadingDepts = departmentMapper.selectList( + new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() + .eq(com.designhub.entity.Department::getLeaderId, userId) + .eq(com.designhub.entity.Department::getStatus, 1) + ); + boolean isDeptLeader = !leadingDepts.isEmpty(); IPage items; if (isAdmin) { // 管理员:看到所有进行中的子任务 items = taskItemService.getInProgressItems(page, pageSize, null, null); } else if (isDeptLeader) { - // 部门负责人:看到本部门所有成员的子任务 - items = taskItemService.getInProgressItems(page, pageSize, null, userDeptId); + // 部门负责人:看到自己负责的所有部门的子任务 + // 获取所有负责的部门ID + List 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 leadingDepts = departmentMapper.selectList( + new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() + .eq(com.designhub.entity.Department::getLeaderId, userId) + .eq(com.designhub.entity.Department::getStatus, 1) + ); + boolean isDeptLeader = !leadingDepts.isEmpty(); IPage items; if (isAdmin) { // 管理员:看到所有已完成的子任务 items = taskItemService.getCompletedItems(page, pageSize, null, null); } else if (isDeptLeader) { - // 部门负责人:看到本部门所有成员的子任务 - items = taskItemService.getCompletedItems(page, pageSize, null, userDeptId); + // 部门负责人:看到自己负责的所有部门的子任务 + List 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); diff --git a/backend/src/main/java/com/designhub/mapper/TaskItemMapper.java b/backend/src/main/java/com/designhub/mapper/TaskItemMapper.java index 0470441..1808738 100644 --- a/backend/src/main/java/com/designhub/mapper/TaskItemMapper.java +++ b/backend/src/main/java/com/designhub/mapper/TaskItemMapper.java @@ -134,6 +134,80 @@ public interface TaskItemMapper extends BaseMapper { @Param("receiverId") Long receiverId, @Param("deptId") Long deptId); + /** + * 查询进行中的子任务列表(按多个部门ID过滤,用于部门负责人) + */ + @Select("") + IPage selectInProgressItemsByDeptIds(Page page, + @Param("deptIds") List deptIds); + + /** + * 查询已完成的子任务列表(按多个部门ID过滤,用于部门负责人) + */ + @Select("") + IPage selectCompletedItemsByDeptIds(Page page, + @Param("deptIds") List deptIds); + /** * 根据任务ID查询所有子任务 */ diff --git a/backend/src/main/java/com/designhub/service/TaskItemService.java b/backend/src/main/java/com/designhub/service/TaskItemService.java index 59094a1..12a13b4 100644 --- a/backend/src/main/java/com/designhub/service/TaskItemService.java +++ b/backend/src/main/java/com/designhub/service/TaskItemService.java @@ -62,6 +62,15 @@ public class TaskItemService { public IPage getInProgressItems(Integer page, Integer pageSize, Long receiverId) { return getInProgressItems(page, pageSize, receiverId, null); } + + /** + * 获取进行中的子任务列表(部门负责人:按多个部门ID过滤) + * @param deptIds 部门ID列表 + */ + public IPage getInProgressItemsByDeptIds(Integer page, Integer pageSize, List deptIds) { + Page pageParam = new Page<>(page, pageSize); + return taskItemMapper.selectInProgressItemsByDeptIds(pageParam, deptIds); + } /** * 获取已完成的子任务列表 @@ -79,6 +88,15 @@ public class TaskItemService { public IPage getCompletedItems(Integer page, Integer pageSize, Long receiverId) { return getCompletedItems(page, pageSize, receiverId, null); } + + /** + * 获取已完成的子任务列表(部门负责人:按多个部门ID过滤) + * @param deptIds 部门ID列表 + */ + public IPage getCompletedItemsByDeptIds(Integer page, Integer pageSize, List deptIds) { + Page pageParam = new Page<>(page, pageSize); + return taskItemMapper.selectCompletedItemsByDeptIds(pageParam, deptIds); + } /** * 根据任务ID获取所有子任务