From ff371a66659451c349d1412aa336fbcfd9e72413 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 16 Jan 2026 16:58:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=8F=AF=E6=8E=A5?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=AD=9B=E9=80=89=E6=8E=A5=E5=8D=95=E9=83=A8?= =?UTF-8?q?=E9=97=A8=E6=97=B6=E5=AD=90=E4=BB=BB=E5=8A=A1=E6=9C=AA=E6=AD=A3?= =?UTF-8?q?=E7=A1=AE=E8=BF=87=E6=BB=A4=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. TaskItemController 增加 filterDeptId 参数 2. TaskItemService 增加按接单部门筛选逻辑 3. TaskItemMapper 增加 selectAvailableItemsByTaskTypes 方法 --- .../controller/TaskItemController.java | 5 +- .../com/designhub/mapper/TaskItemMapper.java | 49 ++++++++++++++++++ .../designhub/service/TaskItemService.java | 51 ++++++++++++++++++- 3 files changed, 102 insertions(+), 3 deletions(-) diff --git a/backend/src/main/java/com/designhub/controller/TaskItemController.java b/backend/src/main/java/com/designhub/controller/TaskItemController.java index 48b6775..21e7ac0 100644 --- a/backend/src/main/java/com/designhub/controller/TaskItemController.java +++ b/backend/src/main/java/com/designhub/controller/TaskItemController.java @@ -53,9 +53,10 @@ public class TaskItemController { @Parameter(description = "页码") @RequestParam(defaultValue = "1") Integer page, @Parameter(description = "每页数量") @RequestParam(defaultValue = "10") Integer pageSize, @Parameter(description = "任务类型ID") @RequestParam(required = false) Long taskTypeId, - @Parameter(description = "搜索关键词") @RequestParam(required = false) String keyword) { + @Parameter(description = "搜索关键词") @RequestParam(required = false) String keyword, + @Parameter(description = "筛选可接单部门ID") @RequestParam(required = false) Long filterDeptId) { - IPage items = taskItemService.getAvailableItems(page, pageSize, taskTypeId, keyword); + IPage items = taskItemService.getAvailableItems(page, pageSize, taskTypeId, keyword, filterDeptId); return Result.success(items); } diff --git a/backend/src/main/java/com/designhub/mapper/TaskItemMapper.java b/backend/src/main/java/com/designhub/mapper/TaskItemMapper.java index 4cd78af..5a3e80e 100644 --- a/backend/src/main/java/com/designhub/mapper/TaskItemMapper.java +++ b/backend/src/main/java/com/designhub/mapper/TaskItemMapper.java @@ -60,6 +60,55 @@ public interface TaskItemMapper extends BaseMapper { @Param("taskTypeId") Long taskTypeId, @Param("keyword") String keyword); + /** + * 查询可接单的子任务列表(按任务类型ID列表筛选,用于接单部门筛选功能) + */ + @Select("") + IPage selectAvailableItemsByTaskTypes(Page page, + @Param("taskTypeId") Long taskTypeId, + @Param("keyword") String keyword, + @Param("allowedTaskTypeIds") List allowedTaskTypeIds); + /** * 查询进行中的子任务列表 * @param receiverId 接单人ID,null表示不按接单人过滤 diff --git a/backend/src/main/java/com/designhub/service/TaskItemService.java b/backend/src/main/java/com/designhub/service/TaskItemService.java index 9b539f5..c53b2b7 100644 --- a/backend/src/main/java/com/designhub/service/TaskItemService.java +++ b/backend/src/main/java/com/designhub/service/TaskItemService.java @@ -50,8 +50,57 @@ public class TaskItemService { * 获取可接单的子任务列表 */ public IPage getAvailableItems(Integer page, Integer pageSize, Long taskTypeId, String keyword) { + return getAvailableItems(page, pageSize, taskTypeId, keyword, null); + } + + /** + * 获取可接单的子任务列表(支持按接单部门筛选) + * @param filterDeptId 筛选可接单部门ID(可选) + */ + public IPage getAvailableItems(Integer page, Integer pageSize, Long taskTypeId, String keyword, Long filterDeptId) { Page pageParam = new Page<>(page, pageSize); - return taskItemMapper.selectAvailableItems(pageParam, taskTypeId, keyword); + + // 如果没有指定筛选部门,直接查询 + if (filterDeptId == null) { + return taskItemMapper.selectAvailableItems(pageParam, taskTypeId, keyword); + } + + // 获取该部门可接单的任务类型ID列表 + List allDemandTypes = demandTypeMapper.selectList(null); + Map demandTypeMap = allDemandTypes.stream() + .collect(java.util.stream.Collectors.toMap(com.designhub.entity.DemandType::getId, dt -> dt)); + + List filterDeptAllowedTypeIds = allDemandTypes.stream() + .filter(dt -> { + String allowedDepts = dt.getAllowedDeptIds(); + if ((allowedDepts == null || allowedDepts.isEmpty()) && dt.getParentId() != null) { + com.designhub.entity.DemandType parentType = demandTypeMap.get(dt.getParentId()); + if (parentType != null) { + allowedDepts = parentType.getAllowedDeptIds(); + } + } + // 只筛选明确指定了该部门的任务类型 + if (allowedDepts == null || allowedDepts.isEmpty()) { + return false; + } + String[] deptIds = allowedDepts.split(","); + for (String deptId : deptIds) { + if (deptId.trim().equals(String.valueOf(filterDeptId))) { + return true; + } + } + return false; + }) + .map(com.designhub.entity.DemandType::getId) + .collect(java.util.stream.Collectors.toList()); + + // 如果没有找到匹配的任务类型,返回空结果 + if (filterDeptAllowedTypeIds.isEmpty()) { + return new Page<>(page, pageSize); + } + + // 查询并筛选 + return taskItemMapper.selectAvailableItemsByTaskTypes(pageParam, taskTypeId, keyword, filterDeptAllowedTypeIds); } /**