-- ===================================================== -- Batch 1: WMS API 模块建设 - 数据库变更脚本 -- 版本: v1.0 -- 日期: 2026-06-26 -- 说明: 新增库存预留相关表,扩展库存字段 -- ===================================================== -- ===================================================== -- 1. 新增库存预留表 -- ===================================================== -- 库存预留表(用于销售订单等业务预留库存) CREATE TABLE IF NOT EXISTS `wms_inventory_reserve` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '编号', `reserve_no` VARCHAR(64) NOT NULL COMMENT '预留单号', `biz_type` INT NOT NULL COMMENT '业务类型(10=销售预留 20=生产预留)', `biz_id` BIGINT NOT NULL COMMENT '业务单据ID', `biz_no` VARCHAR(64) DEFAULT NULL COMMENT '业务单据号', `sku_id` BIGINT NOT NULL COMMENT 'SKU编号', `warehouse_id` BIGINT NOT NULL COMMENT '仓库编号', `reserve_quantity` DECIMAL(24,6) NOT NULL COMMENT '预留数量', `used_quantity` DECIMAL(24,6) DEFAULT 0 COMMENT '已使用数量', `status` INT NOT NULL DEFAULT 0 COMMENT '状态(0=预留中 1=部分使用 2=已使用 3=已释放)', `expire_time` DATETIME DEFAULT NULL COMMENT '过期时间', `remark` VARCHAR(255) DEFAULT NULL COMMENT '备注', `creator` VARCHAR(64) DEFAULT '' COMMENT '创建者', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` VARCHAR(64) DEFAULT '' COMMENT '更新者', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` BIT(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`), UNIQUE KEY `uk_reserve_no` (`reserve_no`), KEY `idx_biz` (`biz_type`, `biz_id`), KEY `idx_sku_warehouse` (`sku_id`, `warehouse_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='库存预留表'; -- ===================================================== -- 2. 新增库存事务流水表 -- ===================================================== CREATE TABLE IF NOT EXISTS `wms_inventory_transaction` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '编号', `transaction_no` VARCHAR(64) NOT NULL COMMENT '事务流水号', `transaction_type` INT NOT NULL COMMENT '事务类型(10=入库 20=出库 30=预留 40=释放 50=盘点 60=调拨)', `biz_type` INT NOT NULL COMMENT '业务类型', `biz_id` BIGINT NOT NULL COMMENT '业务单据ID', `biz_no` VARCHAR(64) DEFAULT NULL COMMENT '业务单据号', `sku_id` BIGINT NOT NULL COMMENT 'SKU编号', `warehouse_id` BIGINT NOT NULL COMMENT '仓库编号', `quantity` DECIMAL(24,6) NOT NULL COMMENT '变动数量(正数入库,负数出库)', `before_quantity` DECIMAL(24,6) DEFAULT NULL COMMENT '变动前数量', `after_quantity` DECIMAL(24,6) DEFAULT NULL COMMENT '变动后数量', `reserve_id` BIGINT DEFAULT NULL COMMENT '关联预留ID', `reserve_no` VARCHAR(64) DEFAULT NULL COMMENT '关联预留单号', `transaction_time` DATETIME NOT NULL COMMENT '事务时间', `remark` VARCHAR(255) DEFAULT NULL COMMENT '备注', `creator` VARCHAR(64) DEFAULT '' COMMENT '创建者', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` VARCHAR(64) DEFAULT '' COMMENT '更新者', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` BIT(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`), UNIQUE KEY `uk_transaction_no` (`transaction_no`), KEY `idx_biz` (`biz_type`, `biz_id`), KEY `idx_sku` (`sku_id`), KEY `idx_transaction_time` (`transaction_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='库存事务流水表'; -- ===================================================== -- 3. 数据字典新增 -- ===================================================== -- 库存预留业务类型 INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES ('WMS 库存预留业务类型', 'wms_reserve_biz_type', 0, '库存预留的业务来源类型', '1', NOW(), '1', NOW(), b'0') ON DUPLICATE KEY UPDATE `name` = 'WMS 库存预留业务类型'; INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (10, '销售预留', '10', 'wms_reserve_biz_type', 0, 'primary', '', '销售订单预留库存', '1', NOW(), '1', NOW(), b'0'), (20, '生产预留', '20', 'wms_reserve_biz_type', 0, 'success', '', '生产工单预留库存', '1', NOW(), '1', NOW(), b'0') ON DUPLICATE KEY UPDATE `label` = VALUES(`label`); -- 库存事务类型 INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES ('WMS 库存事务类型', 'wms_transaction_type', 0, '库存事务流水类型', '1', NOW(), '1', NOW(), b'0') ON DUPLICATE KEY UPDATE `name` = 'WMS 库存事务类型'; INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (10, '入库', '10', 'wms_transaction_type', 0, 'success', '', '库存入库', '1', NOW(), '1', NOW(), b'0'), (20, '出库', '20', 'wms_transaction_type', 0, 'warning', '', '库存出库', '1', NOW(), '1', NOW(), b'0'), (30, '预留', '30', 'wms_transaction_type', 0, 'primary', '', '库存预留', '1', NOW(), '1', NOW(), b'0'), (40, '释放', '40', 'wms_transaction_type', 0, 'info', '', '预留释放', '1', NOW(), '1', NOW(), b'0'), (50, '盘点', '50', 'wms_transaction_type', 0, 'default', '', '库存盘点', '1', NOW(), '1', NOW(), b'0'), (60, '调拨', '60', 'wms_transaction_type', 0, 'default', '', '库存调拨', '1', NOW(), '1', NOW(), b'0') ON DUPLICATE KEY UPDATE `label` = VALUES(`label`); -- 库存预留状态 INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES ('WMS 库存预留状态', 'wms_reserve_status', 0, '库存预留状态', '1', NOW(), '1', NOW(), b'0') ON DUPLICATE KEY UPDATE `name` = 'WMS 库存预留状态'; INSERT INTO `system_dict_data` (`sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (0, '预留中', '0', 'wms_reserve_status', 0, 'primary', '', '库存预留中', '1', NOW(), '1', NOW(), b'0'), (1, '部分使用', '1', 'wms_reserve_status', 0, 'warning', '', '部分已使用', '1', NOW(), '1', NOW(), b'0'), (2, '已使用', '2', 'wms_reserve_status', 0, 'success', '', '已全部使用', '1', NOW(), '1', NOW(), b'0'), (3, '已释放', '3', 'wms_reserve_status', 0, 'info', '', '预留已释放', '1', NOW(), '1', NOW(), b'0') ON DUPLICATE KEY UPDATE `label` = VALUES(`label`); -- ===================================================== -- 4. 菜单新增(库存预留管理) -- ===================================================== -- 库存预留放在"库存管理"菜单下(ID: 6440) -- 如果库存管理菜单不存在,则放在 WMS 系统菜单下(ID: 6400) -- 方案一:使用固定的库存管理菜单ID(推荐,如果数据库结构一致) -- SET @inventory_menu_id = 6440; -- 方案二:动态查询库存管理菜单ID(更安全) SET @inventory_menu_id = (SELECT `id` FROM `system_menu` WHERE `name` = '库存管理' AND `parent_id` = 6400 AND `deleted` = b'0' LIMIT 1); -- 如果库存管理菜单不存在,使用 WMS 系统菜单ID SET @inventory_menu_id = IFNULL(@inventory_menu_id, 6400); -- 新增库存预留菜单 INSERT INTO `system_menu` (`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES ('库存预留', '', 2, 30, @inventory_menu_id, 'reserve', 'ep:lock', 'wms/inventory/reserve/index', 'WmsInventoryReserve', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0') ON DUPLICATE KEY UPDATE `name` = '库存预留'; -- 获取菜单ID SET @reserve_menu_id = (SELECT `id` FROM `system_menu` WHERE `path` = 'reserve' AND `parent_id` = @inventory_menu_id AND `deleted` = b'0'); -- 查询按钮 INSERT INTO `system_menu` (`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES ('库存预留查询', 'wms:inventory-reserve:query', 3, 1, @reserve_menu_id, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0') ON DUPLICATE KEY UPDATE `permission` = 'wms:inventory-reserve:query'; -- 释放按钮 INSERT INTO `system_menu` (`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES ('库存预留释放', 'wms:inventory-reserve:release', 3, 2, @reserve_menu_id, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0') ON DUPLICATE KEY UPDATE `permission` = 'wms:inventory-reserve:release'; -- ===================================================== -- 回滚脚本(如需回滚,执行以下语句) -- ===================================================== /* -- 删除新增表 DROP TABLE IF EXISTS `wms_inventory_reserve`; DROP TABLE IF EXISTS `wms_inventory_transaction`; -- 删除字典 DELETE FROM `system_dict_type` WHERE `type` = 'wms_reserve_biz_type'; DELETE FROM `system_dict_data` WHERE `dict_type` = 'wms_reserve_biz_type'; DELETE FROM `system_dict_type` WHERE `type` = 'wms_transaction_type'; DELETE FROM `system_dict_data` WHERE `dict_type` = 'wms_transaction_type'; DELETE FROM `system_dict_type` WHERE `type` = 'wms_reserve_status'; DELETE FROM `system_dict_data` WHERE `dict_type` = 'wms_reserve_status'; -- 删除菜单 DELETE FROM `system_menu` WHERE `path` = 'reserve' AND `name` = '库存预留'; DELETE FROM `system_menu` WHERE `permission` LIKE 'wms:inventory-reserve:%'; */