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); } /**