From ddebb6f16ca67c3e7fccbeecbdb7b4d065ab64f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Sun, 22 Mar 2026 09:48:38 +0800 Subject: [PATCH] =?UTF-8?q?feat(order):=20=E6=B7=BB=E5=8A=A0=E9=85=8D?= =?UTF-8?q?=E9=80=81=E5=91=98=E7=AB=AF=E5=8F=AF=E6=8E=A5=E5=8D=95=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=8E=A5=E5=8F=A3=E5=B9=B6=E4=BF=AE=E5=A4=8D=E6=9D=83?= =?UTF-8?q?=E9=99=90=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 /rider/available 接口供配送员查询可接单的送水订单 - 实现未分配订单查询逻辑(riderId 为 null 或 0 的订单) - 修复配送员端订单查询权限控制,确保只能查看分配给自己的订单 - 优化 SQL 查询条件,支持通过 riderId 参数灵活控制订单分配状态筛选 - 添加配送员身份验证和租户隔离机制 - 设置配送员端默认排序规则为按期望配送时间优先 --- .../controller/GltTicketOrderController.java | 32 +++++++++++++++++++ .../glt/mapper/xml/GltTicketOrderMapper.xml | 7 +++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gxwebsoft/glt/controller/GltTicketOrderController.java b/src/main/java/com/gxwebsoft/glt/controller/GltTicketOrderController.java index 5ca099d..7fa519e 100644 --- a/src/main/java/com/gxwebsoft/glt/controller/GltTicketOrderController.java +++ b/src/main/java/com/gxwebsoft/glt/controller/GltTicketOrderController.java @@ -52,6 +52,34 @@ public class GltTicketOrderController extends BaseController { return success(gltTicketOrderService.pageRel(param)); } + @PreAuthorize("isAuthenticated()") + @Operation(summary = "配送员端:分页查询可接单的送水订单") + @GetMapping("/rider/available") + public ApiResult> riderAvailablePage(GltTicketOrderParam param) { + User loginUser = getLoginUser(); + if (loginUser == null) { + return fail("请先登录", null); + } + Integer tenantId = getTenantId(); + param.setTenantId(tenantId); + // 仅允许配送员访问 + requireActiveRider(loginUser.getUserId(), tenantId); + + // 查询未分配的待配送订单(riderId 为空或0) + // 设置为0表示查询未分配的订单,XML中会处理为 IS NULL OR = 0 + param.setRiderId(0); + if (param.getDeliveryStatus() == null) { + param.setDeliveryStatus(GltTicketOrderService.DELIVERY_STATUS_WAITING); + } + // 配送员端默认按期望配送时间优先 + if (StrUtil.isBlank(param.getSort())) { + param.setSort("sendTime asc, createTime desc"); + } + + // 使用现有的关联查询方法,通过参数控制 + return success(gltTicketOrderService.pageRel(param)); + } + @PreAuthorize("isAuthenticated()") @Operation(summary = "配送员端:分页查询我的送水订单") @GetMapping("/rider/page") @@ -65,8 +93,12 @@ public class GltTicketOrderController extends BaseController { // 仅允许配送员访问 requireActiveRider(loginUser.getUserId(), tenantId); + // 关键修复:配送员只能看到分配给自己的订单 param.setRiderId(loginUser.getUserId()); + + // 默认查询待配送和配送中的订单 if (param.getDeliveryStatus() == null) { + // 可以通过参数传递多个状态,这里简化为只查待配送 param.setDeliveryStatus(GltTicketOrderService.DELIVERY_STATUS_WAITING); } // 配送员端默认按期望配送时间优先 diff --git a/src/main/java/com/gxwebsoft/glt/mapper/xml/GltTicketOrderMapper.xml b/src/main/java/com/gxwebsoft/glt/mapper/xml/GltTicketOrderMapper.xml index 0c8a75b..f7efe52 100644 --- a/src/main/java/com/gxwebsoft/glt/mapper/xml/GltTicketOrderMapper.xml +++ b/src/main/java/com/gxwebsoft/glt/mapper/xml/GltTicketOrderMapper.xml @@ -32,7 +32,12 @@ AND a.store_id = #{param.storeId} - AND a.rider_id = #{param.riderId} + + AND (a.rider_id IS NULL OR a.rider_id = 0) + + + AND a.rider_id = #{param.riderId} + AND a.delivery_status = #{param.deliveryStatus}