From 4c63b2a63ade1a5e603f3220f63cfbd9ac184d1a Mon Sep 17 00:00:00 2001 From: wanglei <3085637232@qq.com> Date: Wed, 17 Dec 2025 19:41:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=A0=B9=E6=8D=AE=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E8=8C=83=E5=9B=B4=E6=9F=A5=E8=AF=A2=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../water/controller/WorkOrderController.java | 19 ++++++++++++++++++ .../water/service/WorkOrderService.java | 6 ++++++ .../water/service/WorkOrderServiceImpl.java | 20 +++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/src/main/java/com/campus/water/controller/WorkOrderController.java b/src/main/java/com/campus/water/controller/WorkOrderController.java index eecc63f..d269f3b 100644 --- a/src/main/java/com/campus/water/controller/WorkOrderController.java +++ b/src/main/java/com/campus/water/controller/WorkOrderController.java @@ -4,11 +4,13 @@ import com.campus.water.entity.WorkOrder; import com.campus.water.service.WorkOrderService; import com.campus.water.util.ResultVO; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.Authentication; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.web.bind.annotation.*; +import java.time.LocalDateTime; import java.util.List; @RestController @@ -145,6 +147,23 @@ public class WorkOrderController { } } + // 新增:按时间范围(+可选区域/状态)查询工单(复用已有Repository方法) + @GetMapping("/by-time-range") + @PreAuthorize("hasAnyRole('SUPER_ADMIN', 'AREA_ADMIN')") + public ResultVO> getOrdersByTimeRange( + @RequestParam(required = false) String areaId, // 可选:区域ID + @RequestParam(required = false) WorkOrder.OrderStatus status, // 可选:工单状态 + @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime startTime, // 必选:开始时间 + @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime endTime) { // 必选:结束时间 + try { + // 直接调用Service,复用已有Repository的findByCreatedTimeBetween方法 + List orders = workOrderService.getOrdersByConditions(areaId, status, startTime, endTime); + return ResultVO.success(orders); + } catch (Exception e) { + return ResultVO.error(500, "按时间范围查询工单失败:" + e.getMessage()); + } + } + // 获取维修工自己的工单 - 维修人员和管理员可访问 @GetMapping("/my") @PreAuthorize("hasAnyRole('REPAIRMAN', 'SUPER_ADMIN', 'AREA_ADMIN')") diff --git a/src/main/java/com/campus/water/service/WorkOrderService.java b/src/main/java/com/campus/water/service/WorkOrderService.java index e3220a4..98a1e82 100644 --- a/src/main/java/com/campus/water/service/WorkOrderService.java +++ b/src/main/java/com/campus/water/service/WorkOrderService.java @@ -1,6 +1,8 @@ package com.campus.water.service; import com.campus.water.entity.WorkOrder; + +import java.time.LocalDateTime; import java.util.List; public interface WorkOrderService { @@ -31,4 +33,8 @@ public interface WorkOrderService { // 按状态查询工单的方法 List getOrdersByStatus(WorkOrder.OrderStatus status); List getOrdersByAreaAndStatus(String areaId, WorkOrder.OrderStatus status); + + // 核心:复用已有Repository的时间范围查询,新增组合条件查询方法 + List getOrdersByConditions(String areaId, WorkOrder.OrderStatus status, + LocalDateTime startTime, LocalDateTime endTime); } \ No newline at end of file diff --git a/src/main/java/com/campus/water/service/WorkOrderServiceImpl.java b/src/main/java/com/campus/water/service/WorkOrderServiceImpl.java index 97745aa..c8e9d49 100644 --- a/src/main/java/com/campus/water/service/WorkOrderServiceImpl.java +++ b/src/main/java/com/campus/water/service/WorkOrderServiceImpl.java @@ -258,4 +258,24 @@ public class WorkOrderServiceImpl implements WorkOrderService { public List getOrdersByAreaAndStatus(String areaId, WorkOrder.OrderStatus status) { return workOrderRepository.findByAreaIdAndStatus(areaId, status); } + + @Override + public List getOrdersByConditions(String areaId, WorkOrder.OrderStatus status, + LocalDateTime startTime, LocalDateTime endTime) { + // 分步组合查询条件,核心复用已有findByCreatedTimeBetween方法 + List timeRangeOrders = workOrderRepository.findByCreatedTimeBetween(startTime, endTime); + + // 过滤区域和状态(如果传了这些参数) + return timeRangeOrders.stream() + .filter(order -> { + // 区域过滤:如果传了areaId则匹配,没传则不过滤 + boolean areaMatch = (areaId == null || areaId.trim().isEmpty()) + || order.getAreaId().equals(areaId); + // 状态过滤:如果传了status则匹配,没传则不过滤 + boolean statusMatch = (status == null) + || order.getStatus() == status; + return areaMatch && statusMatch; + }) + .toList(); + } } \ No newline at end of file -- 2.34.1