From da84b7bb69a3c2140624739860a39ec4cb3e4f1c Mon Sep 17 00:00:00 2001 From: rcx <3084692334@qq.com> Date: Mon, 31 Aug 2026 13:41:19 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms,oms)=EF=BC=9A=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E7=AE=A1=E7=90=86-=E5=BA=93=E5=AD=98=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=BF=9B=E8=B4=A7=E6=97=A5=E6=9C=9F=E3=80=81?= =?UTF-8?q?=E5=85=A5=E5=BA=93=E6=97=A5=E6=9C=9F=E6=9F=A5=E8=AF=A2=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E6=96=B0=E5=A2=9E=E8=BF=9B=E8=B4=A7=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E5=AD=97=E6=AE=B5=E8=B4=AF=E9=80=9A=E6=94=B6=E8=B4=A7?= =?UTF-8?q?-=E4=B8=8A=E6=9E=B6-=E5=BA=93=E5=AD=98=E5=85=A8=E9=93=BE?= =?UTF-8?q?=E8=B7=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 需求:OMS/WMS 库存管理-库存查询页增加查询条件:物料分类(后端已支持,无需改动)、 进货日期(新增字段)、入库日期。 一、DDL(sql/20260831_wms_oms_add_purchase_date.sql) WMS 收货明细、上架明细、物料库存及 OMS 预留库存共 4 张表新增 PURCHASE_DATE DATE 列, 附批次明细配置模板、执行前检查与回滚语句;须先执行 DDL 再发布服务。 二、进货日期录入与落库链路(收货→上架→WMS库存→OMS库存) 1、录入入口为收货批次属性「进货日期」标签(批次规则配置,标签须一字不差), ReceiptMaterialDetailImpl 两处标签解析新增分支; 2、收货明细→上架明细:StockReceiptOrderDomainService 6 处日期拷贝点补 setPurchaseDate(含子项); 3、上架落库:stockIn/sj 赋值写入 material_inventory; 4、同步 OMS:MaterialInventoryOmsParamDO 新增字段经 Feign omsEdit 传递, 写入 reservation_material_inventory; 5、库存行合并键:批次规则勾选后进货日期参与分行(getParam 映射 + selectListByWhere 全等匹配), OMS omsEdit 行匹配同步按进货日期区分,避免不同进货日期误合并到同一行。 三、查询条件(两模块 /list 接口) 1、进货日期:purchaseDate(单日精确)+ purchaseDateStart/purchaseDateEnd(区间,End 含当天); 2、入库日期:WMS 新增 createTimeStart/createTimeEnd(按库存行创建时间过滤,与 OMS 现有口径一致); 3、列表/导出返回新增 purchaseDate 字段,分组查询取 MAX(purchase_date)。 说明:历史库存进货日期为空,按进货日期查询查不到存量数据(无来源可回填),区间查询会排除空值行。 --- .../domain/MaterialInventoryOmsParamDO.java | 2 + .../entity/ReservationMaterialInventory.java | 6 ++ .../ReservationMaterialInventoryImpl.java | 9 +++ .../po/ReservationMaterialInventoryPO.java | 6 ++ .../todo/ReservationMaterialInventoryDO.java | 9 +++ .../todo/ReservationMaterialInventoryDTO.java | 2 + .../ReservationMaterialInventoryApi.java | 5 ++ .../MaterialInventoryMapper.xml | 14 +++- .../entity/MaterialInventory.java | 6 ++ .../persistence/MaterialInventoryImpl.java | 1 + .../repository/po/MaterialInventoryPO.java | 6 ++ .../repository/todo/MaterialInventoryDO.java | 14 ++++ .../todo/MaterialInventoryParamDO.java | 2 + .../entity/ReceiptMaterialDetail.java | 5 ++ .../ReceiptMaterialDetailImpl.java | 18 +++++ .../po/ReceiptMaterialDetailPO.java | 5 ++ .../todo/ReceiptMaterialDetailDO.java | 5 ++ .../entity/ShelfMaterialDetail.java | 7 ++ .../todo/ShelfMaterialDetailDO.java | 6 ++ .../StockReceiptOrderDomainService.java | 12 +++- .../service/StockShelfOrderDomainService.java | 5 ++ .../MaterialInventoryDTO.java | 10 +++ .../ShelfMaterialDetailDTO.java | 6 ++ .../MaterialInventoryApi.java | 7 +- .../MaterialInventoryMapper.xml | 28 +++++++- sql/20260831_wms_oms_add_purchase_date.sql | 68 +++++++++++++++++++ 26 files changed, 257 insertions(+), 7 deletions(-) create mode 100644 sql/20260831_wms_oms_add_purchase_date.sql diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/MaterialInventoryOmsParamDO.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/MaterialInventoryOmsParamDO.java index 242ad102f..05f165a1a 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/MaterialInventoryOmsParamDO.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/MaterialInventoryOmsParamDO.java @@ -83,6 +83,8 @@ public class MaterialInventoryOmsParamDO extends BaseVOEntity { private Date productionDate; //过期日期 private Date expiryDate; + //进货日期 + private Date purchaseDate; private String executioOrderNumber; diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/entity/ReservationMaterialInventory.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/entity/ReservationMaterialInventory.java index e75764b66..41d50c856 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/entity/ReservationMaterialInventory.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/entity/ReservationMaterialInventory.java @@ -210,6 +210,12 @@ public class ReservationMaterialInventory extends BaseVOEntity { @Excel(name = "存货日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date inventoryDate; + @ApiModelProperty("进货日期") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "进货日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date purchaseDate; + @ApiModelProperty("ExtAttr3") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java index 508bf043b..d7840252b 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java @@ -127,6 +127,9 @@ public class ReservationMaterialInventoryImpl extends ServiceImpl param = new LambdaQueryWrapper() // .eq(ReservationMaterialInventory::getInOrderNumber, inOrderNumber) //.eq(ReservationMaterialInventory::getLotNumber, lotNumber) @@ -148,6 +151,11 @@ public class ReservationMaterialInventoryImpl extends ServiceImpl reservationMaterialInventories = materialInventoryMapper.selectList(param); if (reservationMaterialInventories != null && reservationMaterialInventories.size() > 0) { ReservationMaterialInventory reservationMaterialInventory = reservationMaterialInventories.get(0); @@ -542,6 +550,7 @@ public class ReservationMaterialInventoryImpl extends ServiceImpl + @@ -138,7 +139,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" IFNULL (sum(a.GROSS_WEIGHT), 0) GROSS_WEIGHT, IFNULL (sum(a.VOLUME), 0) VOLUME, a.ext_attr_1, a.ext_attr_2, a.ext_attr_3, a.ext_attr_4, - a.production_date, a.expiry_date, a.inventory_date, + a.production_date, a.expiry_date, a.inventory_date, a.purchase_date, a.BATCH_REF_NO, a.SHEET_REF_NO, a.BOX_PALLET_NO,nvl(a.unit_name,b.unit_name) as unit_name, a.bar_code as inv_bar_code, a.in_order_number,a.lot_number @@ -280,6 +281,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and a.expiry_date DATEADD(DAY, 1, #{expiryDateEnd}) + + AND TO_CHAR(a.purchase_date, 'yyyy-MM-dd') = #{purchaseDateStr} + + + and a.purchase_date >= #{purchaseDateStart} + + + and a.purchase_date DATEADD(DAY, 1, #{purchaseDateEnd}) + @@ -534,6 +550,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" MAX(a.unit_name) AS unit_name, MAX(a.production_date) AS production_date, MAX(a.inventory_date) AS inventory_date, + MAX(a.purchase_date) AS purchase_date, MAX(a.batch_ref_no) AS batch_ref_no, MAX(a.sheet_ref_no) AS sheet_ref_no, MAX(a.box_pallet_no) AS box_pallet_no, MAX(a.bar_code) AS inv_bar_code, MAX(a.in_order_number) AS in_order_number, MAX(a.lot_number) AS lot_number, @@ -1195,6 +1212,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -1513,6 +1531,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND TRUNC(a.PRODUCTION_DATE) = TRUNC(#{productionDate}) + + AND TRUNC(a.purchase_date) = TRUNC(#{purchaseDate}) + AND a.EXT_ATTR_2 = #{extAttr2} @@ -1544,6 +1565,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND a.PRODUCTION_DATE is null + + AND a.purchase_date is null + AND a.EXT_ATTR_2 = #{extAttr2} diff --git a/sql/20260831_wms_oms_add_purchase_date.sql b/sql/20260831_wms_oms_add_purchase_date.sql new file mode 100644 index 000000000..a521b45c7 --- /dev/null +++ b/sql/20260831_wms_oms_add_purchase_date.sql @@ -0,0 +1,68 @@ +-- ============================================================================= +-- OMS/WMS 库存查询新增「进货日期」查询条件 —— 新增 PURCHASE_DATE 列 +-- 日期: 2026-08-31 +-- 数据库: 达梦(DM8), 兼容 Oracle 语法, 表名/字段名统一大写 +-- 模式: NGWL_TEST_WMS (mhd_wms) / NGWL_TEST_OMS (mhd_oms) +-- 需求: +-- OMS-库存管理-库存查询 / WMS-库存管理-库存查询 增加查询条件: +-- 物料分类(后端已支持, 无需改表)、进货日期(本脚本, 新字段)、入库日期(复用 +-- create_time, 无需改表)。 +-- 说明: +-- 1. 进货日期录入入口为「收货批次属性」(batch_detail 配置标签「进货日期」), +-- 链路: 收货明细 -> 上架明细 -> WMS 物料库存 -> Feign -> OMS 预留库存。 +-- 2. 列追加在表尾(DM 不支持 AFTER 定位); 历史数据该列为空, 按进货日期查询 +-- 查不到存量库存(无来源可回填)。 +-- 3. DATE 类型与同表现有 PRODUCTION_DATE/EXPIRY_DATE/INVENTORY_DATE 保持一致。 +-- ============================================================================= + +-- WMS 收货明细 +ALTER TABLE "NGWL_TEST_WMS"."RECEIPT_MATERIAL_DETAIL" ADD COLUMN PURCHASE_DATE DATE; +COMMENT ON COLUMN "NGWL_TEST_WMS"."RECEIPT_MATERIAL_DETAIL".PURCHASE_DATE IS '进货日期'; + +-- WMS 上架明细 +ALTER TABLE "NGWL_TEST_WMS"."SHELF_MATERIAL_DETAIL" ADD COLUMN PURCHASE_DATE DATE; +COMMENT ON COLUMN "NGWL_TEST_WMS"."SHELF_MATERIAL_DETAIL".PURCHASE_DATE IS '进货日期'; + +-- WMS 物料库存 +ALTER TABLE "NGWL_TEST_WMS"."MATERIAL_INVENTORY" ADD COLUMN PURCHASE_DATE DATE; +COMMENT ON COLUMN "NGWL_TEST_WMS"."MATERIAL_INVENTORY".PURCHASE_DATE IS '进货日期'; + +-- OMS 预留库存 +ALTER TABLE "NGWL_TEST_OMS"."RESERVATION_MATERIAL_INVENTORY" ADD COLUMN PURCHASE_DATE DATE; +COMMENT ON COLUMN "NGWL_TEST_OMS"."RESERVATION_MATERIAL_INVENTORY".PURCHASE_DATE IS '进货日期'; + +-- ============================================================================= +-- 批次明细配置(可选, 数据操作): 需要按进货日期录入/分行的物料, 在其批次规则中 +-- 新增一条明细。BATCH_LABELS 必须一字不差为「进货日期」(后端 setMore() 按标签 +-- 精确匹配解析); IS_DISPLAY=1 时同时参与库存行合并键(不同进货日期分库存行)。 +-- +-- 参考现有「生产日期」配置行(格式/控件取值对齐): +-- SELECT * FROM "NGWL_TEST_SYSTEM"."BATCH_DETAIL" WHERE BATCH_LABELS = '生产日期'; +-- +-- 配置模板(BATCH_ID 等按实际批次规则替换, 建议直接在 系统-批次管理 界面新增): +-- INSERT INTO "NGWL_TEST_SYSTEM"."BATCH_DETAIL" +-- (BATCH_DETAIL_ID, ORGANIZATION_ID, TOP_ORGANIZATION_ID, BATCH_ID, +-- BATCH_LABELS, FIELD_NAME, INPUT_CONTROL, ATTRIBUTE_FORMAT, IS_DISPLAY) +-- VALUES +-- (<主键>, <组织ID>, <顶级组织ID>, <批次规则ID>, +-- '进货日期', 'purchase_date', <同生产日期行>, '2', 1); +-- -- ATTRIBUTE_FORMAT: 2-日期 +-- ============================================================================= + +-- ============================================================================= +-- 执行前检查(确认列不存在, 避免重复执行报错; DM 数据字典标识符按大写存储) +-- SELECT OWNER, TABLE_NAME, COLUMN_NAME +-- FROM ALL_TAB_COLUMNS +-- WHERE COLUMN_NAME = 'PURCHASE_DATE' +-- AND OWNER IN ('NGWL_TEST_WMS', 'NGWL_TEST_OMS') +-- AND TABLE_NAME IN ('RECEIPT_MATERIAL_DETAIL', 'SHELF_MATERIAL_DETAIL', +-- 'MATERIAL_INVENTORY', 'RESERVATION_MATERIAL_INVENTORY'); +-- +-- 回滚(发布前执行了本脚本需回退时) +-- ALTER TABLE "NGWL_TEST_WMS"."RECEIPT_MATERIAL_DETAIL" DROP COLUMN PURCHASE_DATE; +-- ALTER TABLE "NGWL_TEST_WMS"."SHELF_MATERIAL_DETAIL" DROP COLUMN PURCHASE_DATE; +-- ALTER TABLE "NGWL_TEST_WMS"."MATERIAL_INVENTORY" DROP COLUMN PURCHASE_DATE; +-- ALTER TABLE "NGWL_TEST_OMS"."RESERVATION_MATERIAL_INVENTORY" DROP COLUMN PURCHASE_DATE; +-- +-- 发布顺序: 先执行本 DDL 再发布服务(实体带新字段而表无列, MyBatis-Plus insert 会报错) +-- =============================================================================