feat(oms,wms,system): OMS下单冻结库存(防超卖)——仓库级库存锁定模式

- 仓库新增stock_lock_mode开关(1-下单冻结 2-分配库存冻结默认),查询/独立切换接口+在途冻结单切换守卫
- WMS新增out_order_freeze_record冻结记录表:下单冻结/编辑原子重锁/取消解冻/分配承接/交接扣减/反审还原全状态机,条件更新防并发超卖
- OMS下单即冻结(失败阻断+落库失败补偿解冻)、已下发禁编辑、cancelIssueOrder补调WMS清理(修存量不同步)、cancelAuditState镜像还原修复
- 达梦SQL脚本3个(WAREHOUSE加列/冻结记录建表/主键列名修复),测试库已执行并全流程实测通过
This commit is contained in:
rcx
2026-09-14 15:41:32 +08:00
parent 888a293ebd
commit b1d92fdda8
31 changed files with 1587 additions and 47 deletions
@@ -0,0 +1,33 @@
-- ============================================================
-- 功能:仓库表新增"库存锁定模式"字段(OMS下单冻结库存/防超卖功能开关)
-- 数据库:达梦(DM8),兼容 Oracle 语法,表名/字段名统一大写
-- 模式:NGWL_TEST_SYSTEMmhd-system 服务对应业务库;生产环境按实际模式名替换)
-- 表名:WAREHOUSE
-- 日期:2026-09-12
-- 说明:
-- 1-下单冻结:OMS出库业务单「下单」即冻结WMS库存(可用-、冻结+,库存数量不变)
-- 2-分配库存冻结:现有模式,WMS「分配库存」时才冻结(默认值,存量仓库行为零变化)
-- 不变式:库存数量 = 可用数量 + 冻结数量(出库交接前全程成立)
-- NULL 视为 2(代码侧 isOrderFreezeWarehouse 仅 =1 才走下单冻结,兜底降级安全)
-- ============================================================
-- 0. 执行前检查(确认列是否已存在,已存在则跳过本脚本)
-- SELECT OWNER, TABLE_NAME, COLUMN_NAME, DATA_TYPE
-- FROM ALL_TAB_COLUMNS
-- WHERE OWNER = 'NGWL_TEST_SYSTEM'
-- AND TABLE_NAME = 'WAREHOUSE'
-- AND COLUMN_NAME = 'STOCK_LOCK_MODE';
-- 1. 添加字段(达梦 ADD COLUMN 不支持 AFTER,列追加在表尾;带 DEFAULT 时存量行自动填默认值)
ALTER TABLE NGWL_TEST_SYSTEM.WAREHOUSE ADD STOCK_LOCK_MODE TINYINT DEFAULT 2;
-- 2. 添加注释(达梦必须单独写)
COMMENT ON COLUMN NGWL_TEST_SYSTEM.WAREHOUSE.STOCK_LOCK_MODE IS '库存锁定模式: 1-下单冻结 2-分配库存冻结';
-- 3. 验证
-- SELECT WAREHOUSE_ID, WAREHOUSE_CODE, STOCK_LOCK_MODE FROM NGWL_TEST_SYSTEM.WAREHOUSE WHERE ROWNUM <= 10;
-- ----------------------------
-- 回滚脚本(按需,须确认无 status∈(1,2) 的在途冻结单后再执行)
-- ALTER TABLE NGWL_TEST_SYSTEM.WAREHOUSE DROP COLUMN STOCK_LOCK_MODE;
-- ----------------------------