1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
| -- =====================================================
| -- 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:%';
| */
|
|