From 22f2b66ffac950e8b90c92191276c647b8e3a034 Mon Sep 17 00:00:00 2001 From: rcx <3084692334@qq.com> Date: Fri, 21 Aug 2026 15:13:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(oms,wms):=E5=BA=93=E5=AD=98=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E6=8C=89=E5=88=B0=E6=9C=9F=E6=97=A5=E5=88=86=E7=BB=84?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=B9=B6=E5=90=88=E5=B9=B6=E5=90=8C=E7=89=A9?= =?UTF-8?q?=E6=96=99=E5=90=8C=E5=88=B0=E6=9C=9F=E6=97=A5=E5=BA=93=E5=AD=98?= =?UTF-8?q?(=E4=BB=85wlExpiry=E6=9F=A5=E8=AF=A2=E7=94=9F=E6=95=88)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 需求:库存查询导出按商品到期日分组归类、相同到期日相邻显示,相同物料相同 到期日合并库存。仅在 queryRule=wlExpiry(物料+到期日汇总查询)导出时生效, 列表显示不变;同时回退 8fedb6d6 对列表默认排序的改动。 一、列表默认查询还原(回退 8fedb6d6):OMS queryList 恢复 order by a.update_time desc, Api 恢复 update_time 内存重排(空值最后),两侧列表排序与改动前一致。 二、导出排序(OMS/WMS queryListByWlExpiry):/list 新增可选参数 orderByExpiryDate, 仅 queryRule=wlExpiry 时生效: 1. wlExpiry + orderByExpiryDate=true(导出):到期日倒序(日期近的在前)、空值最后、 0库存靠后、同到期日按更新时间倒序;排序在SQL层,跨页/全量导出分组不被打散; OMS Api 传参时跳过 update_time 内存重排,避免覆盖SQL排序 2. 仅 wlExpiry 不带参数:排序保持原样(sort_order+更新时间倒序) 3. 其他查询方式:不受影响,参数被忽略 三、合并:wlExpiry 查询 GROUP BY 物料+到期日+货主(货主隔离),相同物料相同到期日 合并一行,库存/可用/冻结数量及净重/毛重/体积/面积 SUM 汇总(复用现成查询,未改) 四、前端导出:/list + queryRule=wlExpiry + orderByExpiryDate=true + 当前查询条件(不分页) --- .../todo/ReservationMaterialInventoryDO.java | 3 +++ .../ReservationMaterialInventoryApi.java | 21 +++++++++++++++---- .../MaterialInventoryMapper.xml | 19 +++++++++++------ .../repository/todo/MaterialInventoryDO.java | 3 +++ .../MaterialInventoryApi.java | 5 ++++- .../MaterialInventoryMapper.xml | 13 +++++++++++- 6 files changed, 52 insertions(+), 12 deletions(-) diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/todo/ReservationMaterialInventoryDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/todo/ReservationMaterialInventoryDO.java index b0335b885..c31872418 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/todo/ReservationMaterialInventoryDO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/todo/ReservationMaterialInventoryDO.java @@ -255,4 +255,7 @@ public class ReservationMaterialInventoryDO extends MaterialBaseDO { private String productionDateStr; private String expiryDateStart; private String expiryDateEnd; + + @ApiModelProperty("导出按到期日分组排序标识:仅 queryRule=wlExpiry 时生效,true-到期日倒序(日期近的在前、空值最后、0库存靠后);不传-保持原有排序") + private Boolean orderByExpiryDate; } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationMaterialInventory/ReservationMaterialInventoryApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationMaterialInventory/ReservationMaterialInventoryApi.java index 80282b72b..7d1368cf8 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationMaterialInventory/ReservationMaterialInventoryApi.java +++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationMaterialInventory/ReservationMaterialInventoryApi.java @@ -52,7 +52,8 @@ public class ReservationMaterialInventoryApi extends BaseController { public TableDataInfo list(ReservationMaterialInventoryDTO materialInventoryDTO, @RequestParam(value = "customerName", required = false) String customerName, @RequestParam(value = "expiryDateStart", required = false) String expiryDateStart, - @RequestParam(value = "expiryDateEnd", required = false) String expiryDateEnd) + @RequestParam(value = "expiryDateEnd", required = false) String expiryDateEnd, + @RequestParam(value = "orderByExpiryDate", required = false) Boolean orderByExpiryDate) { // 出库分配前端传的是客户名称 customerName,这里通过名称查询货主ID,使用精确匹配(不模糊匹配) String shipperName = null; // 保存查询到的货主名称 @@ -82,12 +83,24 @@ public class ReservationMaterialInventoryApi extends BaseController { materialInventoryDO.setProductionDateStr(materialInventoryDTO.getProductionDate()); materialInventoryDO.setExpiryDateStart(expiryDateStart); materialInventoryDO.setExpiryDateEnd(expiryDateEnd); + // 导出场景:queryRule=wlExpiry + orderByExpiryDate=true 时 SQL 按到期日倒序分组 + // (日期近的在前、空值最后、0库存靠后、同到期日按更新时间倒序) + materialInventoryDO.setOrderByExpiryDate(orderByExpiryDate); startPage(); // 使用带批次属性的查询方法,批次属性值从库存表中获取 - // 排序由 SQL 统一处理:到期日倒序(日期近的在前、空值最后)、同到期日按更新时间倒序(空值最后), - // 查询列表与导出(同一接口)均按到期日分组,相同到期日的数据相邻显示; - // 不在内存重排,避免覆盖 SQL 排序导致跨页分组被打散 List list = materialInventoryApplicationService.queryListWithBatchAttributes(materialInventoryDO); + // 按更新时间倒序排序;update_time 为空的数据放最后 + // (导出 orderByExpiryDate=true 时跳过该重排,避免覆盖 SQL 的到期日分组排序) + if (!Boolean.TRUE.equals(orderByExpiryDate)) { + list.sort((o1, o2) -> { + Date t1 = o1.getUpdateTime(); + Date t2 = o2.getUpdateTime(); + if (t1 == null && t2 == null) return 0; + if (t1 == null) return 1; + if (t2 == null) return -1; + return t2.compareTo(t1); // desc + }); + } TableDataInfo tableDataInfo = getDataTable(list); return tableDataInfo; } diff --git a/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml b/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml index ce58f8970..0297f8a29 100644 --- a/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml +++ b/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml @@ -292,11 +292,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - group by a.MATERIAL_INVENTORY_ID - - order by CASE WHEN a.expiry_date IS NULL THEN 1 ELSE 0 END ASC, a.expiry_date DESC, - CASE WHEN a.update_time IS NULL THEN 1 ELSE 0 END ASC, a.update_time DESC + group by a.MATERIAL_INVENTORY_ID order by a.update_time desc