diff --git a/src/main/java/com/campus/water/controller/web/AreaController.java b/src/main/java/com/campus/water/controller/web/AreaController.java index d303526..3ad45e5 100644 --- a/src/main/java/com/campus/water/controller/web/AreaController.java +++ b/src/main/java/com/campus/water/controller/web/AreaController.java @@ -114,6 +114,22 @@ public class AreaController { } } + /** + * 查询所有未设置负责人的片区 + * 权限:超级管理员/区域管理员可查看(与区域管理相关权限一致) + */ + @GetMapping("/without-manager") + @PreAuthorize("hasAnyRole('SUPER_ADMIN', 'AREA_ADMIN')") + public ResponseEntity> getAreasWithoutManager() { + try { + List areas = areaService.getAreasWithoutManager(); + return ResponseEntity.ok(buildResponse(200, "查询无负责人片区成功", areas)); + } catch (Exception e) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(buildResponse(500, "查询无负责人片区失败:" + e.getMessage(), null)); + } + } + /** * 根据市区ID查询下属校园 * 权限:超级管理员/区域管理员/维修人员均可查看 diff --git a/src/main/java/com/campus/water/mapper/AreaRepository.java b/src/main/java/com/campus/water/mapper/AreaRepository.java index bbb80d1..da36134 100644 --- a/src/main/java/com/campus/water/mapper/AreaRepository.java +++ b/src/main/java/com/campus/water/mapper/AreaRepository.java @@ -49,4 +49,12 @@ public interface AreaRepository extends JpaRepository { long countByParentAreaId(String areaId); List findByAreaTypeAndParentAreaIdIsNull(Area.AreaType areaType); boolean existsByAreaId(String cityId); + + /** + * 查询没有负责人的片区(manager为null或空字符串) + * 覆盖未设置负责人的所有场景 + */ + @Query("SELECT a FROM Area a WHERE a.manager IS NULL OR a.manager = ''") + List findAreasWithoutManager(); + } \ No newline at end of file diff --git a/src/main/java/com/campus/water/service/AreaService.java b/src/main/java/com/campus/water/service/AreaService.java index 7aaaddd..d2f7aff 100644 --- a/src/main/java/com/campus/water/service/AreaService.java +++ b/src/main/java/com/campus/water/service/AreaService.java @@ -140,6 +140,15 @@ public class AreaService { return areaRepository.findByAreaTypeAndParentAreaIdIsNull(Area.AreaType.zone); } + /** + * 获取所有未设置负责人的片区(manager为空或null) + * @return 无负责人片区列表 + */ + @Transactional(readOnly = true) // 只读事务,提升查询性能 + public List getAreasWithoutManager() { + return areaRepository.findAreasWithoutManager(); + } + /** * 根据市区ID查询下属校园 * @param cityId 市区ID(areaId)