4 天以前 06321d70dd7617fdc7d475b190e629143fec3263
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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
-- =============================================
-- MES 生产管控 - 批次生产管理 + 赋码管理(一袋一码)初始化脚本
-- 包含:生产批次表、批次人员配置表、托盘码表、袋码赋码表、
--       批次号自动编码规则、字典数据、菜单权限
-- MySQL 8.4 适用
-- =============================================
 
SET NAMES utf8mb4;
 
-- ----------------------------
-- 1. 生产批次表(人—机—种)
-- ----------------------------
CREATE TABLE IF NOT EXISTS `mes_pro_batch` (
    `id`              BIGINT       NOT NULL AUTO_INCREMENT COMMENT '编号',
    `code`            VARCHAR(64)  NOT NULL COMMENT '批次号(自动生成:前缀+日期+产线+品种+流水号)',
    `item_id`         BIGINT       NOT NULL COMMENT '品种(产品物料)编号,关联 mdm_item.id',
    `line_code`       VARCHAR(32)  DEFAULT NULL COMMENT '产线编码(手填,参与批次号生成)',
    `line_name`       VARCHAR(64)  DEFAULT NULL COMMENT '产线名称(手填)',
    `machinery_id`    BIGINT       DEFAULT NULL COMMENT '生产设备编号(机),关联 mes_dv_machinery.id',
    `work_order_id`   BIGINT       DEFAULT NULL COMMENT '关联生产工单编号,关联 mes_pro_work_order.id',
    `produce_date`    DATETIME     DEFAULT NULL COMMENT '生产日期',
    `plan_quantity`   DECIMAL(24, 6) DEFAULT NULL COMMENT '计划数量',
    `owner_user_id`   BIGINT       DEFAULT NULL COMMENT '责任人用户编号(责任落实到人),关联 system_users.id',
    `bag_quantity`    INT          NOT NULL DEFAULT 0 COMMENT '已生成袋码数量(一袋一码)',
    `pallet_quantity` INT          NOT NULL DEFAULT 0 COMMENT '已生成托盘码数量',
    `status`          TINYINT      NOT NULL DEFAULT 10 COMMENT '批次状态(字典 mes_pro_batch_status:10 草稿 20 生产中 30 已完成 40 已作废)',
    `remark`          VARCHAR(500) 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_code` (`code`),
    KEY `idx_item_id` (`item_id`),
    KEY `idx_work_order_id` (`work_order_id`),
    KEY `idx_status` (`status`)
) ENGINE = InnoDB COMMENT = 'MES 生产批次';
 
-- ----------------------------
-- 2. 批次生产人员配置表(责任落实到人)
-- ----------------------------
CREATE TABLE IF NOT EXISTS `mes_pro_batch_worker` (
    `id`          BIGINT       NOT NULL AUTO_INCREMENT COMMENT '编号',
    `batch_id`    BIGINT       NOT NULL COMMENT '生产批次编号,关联 mes_pro_batch.id',
    `user_id`     BIGINT       NOT NULL COMMENT '生产人员用户编号,关联 system_users.id',
    `worker_type` TINYINT      NOT NULL COMMENT '岗位类型(字典 mes_pro_batch_worker_type:10 组长 20 操作工 30 包装工 40 质检员 50 其他)',
    `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`),
    KEY `idx_batch_id` (`batch_id`),
    KEY `idx_user_id` (`user_id`)
) ENGINE = InnoDB COMMENT = 'MES 生产批次人员配置';
 
-- ----------------------------
-- 3. 托盘码表(与批次号自动关联)
-- ----------------------------
CREATE TABLE IF NOT EXISTS `mes_pro_pallet` (
    `id`         BIGINT       NOT NULL AUTO_INCREMENT COMMENT '编号',
    `code`       VARCHAR(64)  NOT NULL COMMENT '托盘码(批次号-P+托盘序号,全局唯一)',
    `batch_id`   BIGINT       NOT NULL COMMENT '生产批次编号,关联 mes_pro_batch.id',
    `batch_code` VARCHAR(64)  DEFAULT NULL COMMENT '批次号(冗余,便于展示)',
    `pallet_no`  INT          NOT NULL COMMENT '批次内托盘序号',
    `capacity`   INT          DEFAULT NULL COMMENT '可装袋数(袋/托盘)',
    `bag_count`  INT          NOT NULL DEFAULT 0 COMMENT '已绑定袋码数量',
    `status`     TINYINT      NOT NULL DEFAULT 10 COMMENT '状态(字典 mes_pro_pallet_status:10 启用 20 作废)',
    `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_code` (`code`),
    KEY `idx_batch_id` (`batch_id`)
) ENGINE = InnoDB COMMENT = 'MES 托盘码';
 
-- ----------------------------
-- 4. 袋码赋码表(一袋一码,二维码数据包)
-- ----------------------------
CREATE TABLE IF NOT EXISTS `mes_pro_bag_code` (
    `id`          BIGINT       NOT NULL AUTO_INCREMENT COMMENT '编号',
    `uuid`        VARCHAR(32)  DEFAULT NULL COMMENT '生成组 UUID(标记同一次生成的数据包)',
    `code`        VARCHAR(64)  NOT NULL COMMENT '袋码(二维码内容:批次号-袋序号,全局唯一)',
    `bag_no`      INT          NOT NULL COMMENT '批次内袋序号',
    `batch_id`    BIGINT       NOT NULL COMMENT '生产批次编号,关联 mes_pro_batch.id',
    `batch_code`  VARCHAR(64)  DEFAULT NULL COMMENT '批次号(冗余,便于展示)',
    `item_id`     BIGINT       DEFAULT NULL COMMENT '品种(产品物料)编号(冗余自批次)',
    `pallet_id`   BIGINT       DEFAULT NULL COMMENT '绑定托盘编号,关联 mes_pro_pallet.id',
    `pallet_code` VARCHAR(64)  DEFAULT NULL COMMENT '托盘码(冗余,便于展示)',
    `status`      TINYINT      NOT NULL DEFAULT 10 COMMENT '状态(字典 mes_pro_bag_code_status:10 已生成 20 已导出印刷 30 已作废)',
    `print_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_code` (`code`),
    KEY `idx_batch_id` (`batch_id`),
    KEY `idx_uuid` (`uuid`),
    KEY `idx_pallet_id` (`pallet_id`)
) ENGINE = InnoDB COMMENT = 'MES 袋码赋码(一袋一码)';
 
-- ----------------------------
-- 5. 批次号自动编码规则:PRO_BATCH_CODE
--    结构:固定字符(PC) + 日期(yyyyMMdd) + 输入字符(产线编码+品种编码) + 流水号(3位,按日循环)
--    示例:PC20260818L01NY001
-- ----------------------------
INSERT INTO `mes_md_auto_code_rule` (`code`, `name`, `description`, `max_length`, `padded`, `padded_char`, `padded_method`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 'PRO_BATCH_CODE', '生产批次编码', '生产批次号:前缀+日期+产线+品种+流水号', 24, b'0', NULL, NULL, 0, '批次生产管理模块批次号', '1', NOW(), '1', NOW(), b'0'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM (SELECT id FROM mes_md_auto_code_rule WHERE code = 'PRO_BATCH_CODE' AND deleted = 0) t);
 
-- 规则分段(整体幂等:仅当该规则尚无任何分段时一次性插入 4 段)
INSERT INTO `mes_md_auto_code_part` (`rule_id`, `sort`, `type`, `length`, `date_format`, `fix_character`, `serial_start_no`, `serial_step`, `cycle_flag`, `cycle_method`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT r.id, t.sort, t.type, t.length, t.date_format, t.fix_character, t.serial_start_no, t.serial_step, t.cycle_flag, t.cycle_method, t.remark, '1', NOW(), '1', NOW(), b'0'
FROM mes_md_auto_code_rule r
JOIN (
    SELECT 1 AS sort, 3 AS type, 2 AS length, NULL AS date_format, 'PC' AS fix_character, NULL AS serial_start_no, NULL AS serial_step, b'0' AS cycle_flag, NULL AS cycle_method, '固定前缀' AS remark
    UNION ALL SELECT 2, 2, 8, 'yyyyMMdd', NULL, NULL, NULL, b'0', NULL, '生产日期'
    UNION ALL SELECT 3, 1, 8, NULL, NULL, NULL, NULL, b'0', NULL, '产线编码+品种编码(输入字符)'
    UNION ALL SELECT 4, 4, 3, NULL, NULL, 1, 1, b'1', 3, '流水号(按日循环)'
) t
WHERE r.code = 'PRO_BATCH_CODE' AND r.deleted = 0
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.deleted = 0);
 
-- ----------------------------
-- 6. 字典类型 + 字典数据
-- ----------------------------
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 'MES 生产批次状态', 'mes_pro_batch_status', 0, '批次生产管理', '1', NOW(), '1', NOW(), b'0' FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM (SELECT id FROM system_dict_type WHERE type = 'mes_pro_batch_status' AND deleted = 0) t);
 
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 'MES 批次人员岗位类型', 'mes_pro_batch_worker_type', 0, '批次生产人员配置', '1', NOW(), '1', NOW(), b'0' FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM (SELECT id FROM system_dict_type WHERE type = 'mes_pro_batch_worker_type' AND deleted = 0) t);
 
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 'MES 袋码状态', 'mes_pro_bag_code_status', 0, '赋码管理(一袋一码)', '1', NOW(), '1', NOW(), b'0' FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM (SELECT id FROM system_dict_type WHERE type = 'mes_pro_bag_code_status' AND deleted = 0) t);
 
INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT 'MES 托盘码状态', 'mes_pro_pallet_status', 0, '托盘码管理', '1', NOW(), '1', NOW(), b'0' FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM (SELECT id FROM system_dict_type WHERE type = 'mes_pro_pallet_status' AND deleted = 0) t);
 
-- 字典数据(显式 ID,避免冲突)
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES
(1065350, 1, '草稿', '10', 'mes_pro_batch_status', 0, 'info', '', '1', NOW(), '1', NOW(), b'0'),
(1065351, 2, '生产中', '20', 'mes_pro_batch_status', 0, 'primary', '', '1', NOW(), '1', NOW(), b'0'),
(1065352, 3, '已完成', '30', 'mes_pro_batch_status', 0, 'success', '', '1', NOW(), '1', NOW(), b'0'),
(1065353, 4, '已作废', '40', 'mes_pro_batch_status', 0, 'danger', '', '1', NOW(), '1', NOW(), b'0'),
(1065354, 1, '组长', '10', 'mes_pro_batch_worker_type', 0, 'primary', '', '1', NOW(), '1', NOW(), b'0'),
(1065355, 2, '操作工', '20', 'mes_pro_batch_worker_type', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'),
(1065356, 3, '包装工', '30', 'mes_pro_batch_worker_type', 0, 'default', '', '1', NOW(), '1', NOW(), b'0'),
(1065357, 4, '质检员', '40', 'mes_pro_batch_worker_type', 0, 'warning', '', '1', NOW(), '1', NOW(), b'0'),
(1065358, 5, '其他', '50', 'mes_pro_batch_worker_type', 0, 'info', '', '1', NOW(), '1', NOW(), b'0'),
(1065359, 1, '已生成', '10', 'mes_pro_bag_code_status', 0, 'info', '', '1', NOW(), '1', NOW(), b'0'),
(1065360, 2, '已导出印刷', '20', 'mes_pro_bag_code_status', 0, 'success', '', '1', NOW(), '1', NOW(), b'0'),
(1065361, 3, '已作废', '30', 'mes_pro_bag_code_status', 0, 'danger', '', '1', NOW(), '1', NOW(), b'0'),
(1065362, 1, '启用', '10', 'mes_pro_pallet_status', 0, 'primary', '', '1', NOW(), '1', NOW(), b'0'),
(1065363, 2, '作废', '20', 'mes_pro_pallet_status', 0, 'danger', '', '1', NOW(), '1', NOW(), b'0');
 
-- ----------------------------
-- 7. 菜单与按钮权限(挂在 5700 生产管理 下)
-- ----------------------------
-- 批次生产管理
INSERT INTO `system_menu` (`id`, `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 (602612, '批次生产管理', '', 2, 10, 5700, 'batch', 'ep:collection-tag', 'mes/pro/batch/index', 'MesProBatch', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');
 
INSERT INTO `system_menu` (`id`, `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
(602613, '生产批次查询', 'mes:pro-batch:query', 3, 1, 602612, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(602614, '生产批次创建', 'mes:pro-batch:create', 3, 2, 602612, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(602615, '生产批次更新', 'mes:pro-batch:update', 3, 3, 602612, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(602616, '生产批次删除', 'mes:pro-batch:delete', 3, 4, 602612, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(602617, '生产批次导出', 'mes:pro-batch:export', 3, 5, 602612, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');
 
-- 赋码管理(一袋一码)
INSERT INTO `system_menu` (`id`, `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 (602618, '赋码管理', '', 2, 11, 5700, 'bag-code', 'ep:connection', 'mes/pro/bagCode/index', 'MesProBagCode', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');
 
INSERT INTO `system_menu` (`id`, `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
(602619, '袋码查询', 'mes:pro-bag-code:query', 3, 1, 602618, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(602620, '生成二维码数据包', 'mes:pro-bag-code:generate', 3, 2, 602618, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(602621, '袋码删除', 'mes:pro-bag-code:delete', 3, 3, 602618, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(602622, '袋码导出', 'mes:pro-bag-code:export', 3, 4, 602618, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(602623, '袋码绑定托盘', 'mes:pro-bag-code:bind', 3, 5, 602618, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');
 
-- 托盘码管理
INSERT INTO `system_menu` (`id`, `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 (602624, '托盘码管理', '', 2, 12, 5700, 'pallet', 'ep:box', 'mes/pro/pallet/index', 'MesProPallet', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');
 
INSERT INTO `system_menu` (`id`, `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
(602625, '托盘码查询', 'mes:pro-pallet:query', 3, 1, 602624, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(602626, '托盘码生成', 'mes:pro-pallet:create', 3, 2, 602624, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(602627, '托盘码删除', 'mes:pro-pallet:delete', 3, 3, 602624, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'),
(602628, '托盘码导出', 'mes:pro-pallet:export', 3, 4, 602624, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');