-- ============================================================================ -- 需求:基础参数(工艺参数)可与工序绑定,绑定后报工需填写参数字段 -- 一键整合脚本:可直接手动执行(含幂等保护,重复执行不报错) -- -- 第一部分:功能迁移(工序-参数绑定) -- 第二部分:活库漂移修复(代码已引用但库缺失的列/表,需补齐才能建任务/报工) -- ============================================================================ -- ============================================================================ -- 第一部分:功能迁移 -- ============================================================================ -- ---------- 1.1 工序/任务/工单工序 增加 param_template_id(参数模板关联,功能链路前置) ---------- SET @exists = (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'mes_pro_task' AND column_name = 'param_template_id'); SET @sql = IF(@exists = 0, 'ALTER TABLE mes_pro_task ADD COLUMN param_template_id bigint DEFAULT NULL COMMENT ''工艺参数模板编号'' AFTER process_id', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @exists = (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'mes_pro_route_process' AND column_name = 'param_template_id'); SET @sql = IF(@exists = 0, 'ALTER TABLE mes_pro_route_process ADD COLUMN param_template_id bigint DEFAULT NULL COMMENT ''工艺参数模板编号'' AFTER process_id', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @exists = (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'mes_pro_work_order_process' AND column_name = 'param_template_id'); SET @sql = IF(@exists = 0, 'ALTER TABLE mes_pro_work_order_process ADD COLUMN param_template_id bigint DEFAULT NULL COMMENT ''工艺参数模板编号'' AFTER process_id', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- ---------- 1.2 新建 工序-工艺参数绑定表 ---------- CREATE TABLE IF NOT EXISTS `mes_pro_process_param` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', `process_id` bigint NOT NULL COMMENT '工序编号(关联 mes_pro_process)', `process_param_id` bigint NOT NULL COMMENT '工艺参数编号(关联 mes_pd_process_param)', `required` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否必填', `sort` int NULL DEFAULT NULL COMMENT '排序', `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注', `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL 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`) USING BTREE, INDEX `idx_process_id`(`process_id` ASC) USING BTREE, INDEX `idx_process_param_id`(`process_param_id` ASC) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'MES 工序-工艺参数绑定' ROW_FORMAT = DYNAMIC; -- ---------- 1.3 参数记录主表模板字段允许为空(工序绑定参数生成时无模板) ---------- ALTER TABLE mes_pro_work_order_param_record MODIFY COLUMN template_id bigint NULL DEFAULT NULL COMMENT '参数模板编号(工序绑定参数生成时为空)'; ALTER TABLE mes_pro_work_order_param_record MODIFY COLUMN template_name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '模板名称(快照)'; -- ---------- 1.4 参数记录明细增加 required 快照(报工必填校验用) ---------- SET @exists = (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'mes_pro_work_order_param_record_detail' AND column_name = 'required'); SET @sql = IF(@exists = 0, 'ALTER TABLE mes_pro_work_order_param_record_detail ADD COLUMN required bit(1) NOT NULL DEFAULT b''0'' COMMENT ''是否必填(快照)'' AFTER param_type', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- ============================================================================ -- 第二部分:活库漂移修复(代码已引用但库缺失;若你的库已有这些列/表可忽略) -- ============================================================================ -- ---------- 2.1 mes_pro_work_order 缺失列(报工审批 BPM 相关) ---------- SET @exists = (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'mes_pro_work_order' AND column_name = 'is_feedback_approve'); SET @sql = IF(@exists = 0, 'ALTER TABLE mes_pro_work_order ADD COLUMN is_feedback_approve tinyint(1) DEFAULT NULL COMMENT ''是否开启报工审批 (1: 开启, 0/NULL: 关闭)'' AFTER deleted', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @exists = (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'mes_pro_work_order' AND column_name = 'process_definition_key'); SET @sql = IF(@exists = 0, 'ALTER TABLE mes_pro_work_order ADD COLUMN process_definition_key varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT ''BPM 流程定义 Key'' AFTER is_feedback_approve', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @exists = (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'mes_pro_work_order' AND column_name = 'feedback_role'); SET @sql = IF(@exists = 0, 'ALTER TABLE mes_pro_work_order ADD COLUMN feedback_role varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT ''报工角色 (多个角色以逗号分隔)'' AFTER process_definition_key', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- ---------- 2.2 mes_pro_feedback 缺失列(报工 BPM 相关) ---------- SET @exists = (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'mes_pro_feedback' AND column_name = 'process_instance_id'); SET @sql = IF(@exists = 0, 'ALTER TABLE mes_pro_feedback ADD COLUMN process_instance_id varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT ''BPM 流程实例编号'' AFTER remark', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @exists = (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'mes_pro_feedback' AND column_name = 'process_definition_key'); SET @sql = IF(@exists = 0, 'ALTER TABLE mes_pro_feedback ADD COLUMN process_definition_key varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT ''BPM 流程定义 Key'' AFTER process_instance_id', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- ---------- 2.3 缺失表:任务指定报工人员、任务停工记录(此前迁移未应用) ---------- CREATE TABLE IF NOT EXISTS `mes_pro_task_assignee` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号', `task_id` bigint(20) NOT NULL COMMENT '生产任务 ID', `user_id` bigint(20) NOT NULL COMMENT '系统用户 ID (指定报工人员)', `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_task_id` (`task_id`), KEY `idx_user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生产任务指定报工人员表'; CREATE TABLE IF NOT EXISTS `mes_pro_task_pause_record` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号', `task_id` bigint(20) NOT NULL COMMENT '任务编号', `work_order_id` bigint(20) DEFAULT NULL COMMENT '工单编号', `workstation_id` bigint(20) DEFAULT NULL COMMENT '工作站编号', `reason` varchar(255) NOT NULL COMMENT '停工原因', `pause_time` datetime NOT NULL COMMENT '停工时间', `pause_user_id` bigint(20) NOT NULL COMMENT '停工操作人ID', `resume_time` datetime DEFAULT NULL COMMENT '复工时间', `resume_user_id` bigint(20) DEFAULT NULL COMMENT '复工操作人ID', `remark` varchar(500) DEFAULT NULL COMMENT '备注', `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci 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`) USING BTREE, KEY `idx_task_id` (`task_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='生产任务停工记录表'; -- ============================================================================ -- 执行完成。可执行以下语句核对: -- SHOW TABLES LIKE 'mes_pro_process_param'; -- SHOW COLUMNS FROM mes_pro_work_order_param_record_detail LIKE 'required'; -- ============================================================================