Files
nanguangszwlback/sql/20260831_wms_oms_add_purchase_date.sql
rcx da84b7bb69 feat(wms,oms):库存管理-库存查询新增进货日期、入库日期查询条件,新增进货日期字段贯通收货-上架-库存全链路
需求: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)。

说明:历史库存进货日期为空,按进货日期查询查不到存量数据(无来源可回填),区间查询会排除空值行。
2026-08-31 13:41:19 +08:00

69 lines
4.1 KiB
SQL

-- =============================================================================
-- 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 会报错)
-- =============================================================================