-- ============================================ -- 兴万达MES系统改进 - 数据库变更脚本 -- 创建时间:2025-10-16 -- 最后更新:2025-10-17 -- ============================================ -- -- 本脚本包含以下改进内容: -- 1. 设备维修单审批流程优化 -- 2. 设备故障树功能 -- 3. 销售订单批次号功能 -- -- 执行前请备份数据库! -- ============================================ -- ============================================ -- 模块1:设备维修单审批流程优化 -- ============================================ -- 1.1 在设备维修单主表添加审批流程相关字段 ALTER TABLE `dm_repair_order` ADD COLUMN `approver_user_id` BIGINT DEFAULT NULL COMMENT '审核人ID' AFTER `confirm_time`, ADD COLUMN `approver_user_name` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '审核人名称' AFTER `approver_user_id`, ADD COLUMN `approve_time` DATETIME DEFAULT NULL COMMENT '审核时间' AFTER `approver_user_name`, ADD COLUMN `approve_status` VARCHAR(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '审核状态(1=通过,0=不通过,NULL=待审核)' AFTER `approve_time`, ADD COLUMN `confirm_status` VARCHAR(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '验收状态(1=通过,0=不通过,NULL=待验收)' AFTER `approve_status`; -- 1.2 更新设备维修单状态字典标签 -- 调整流程:开始报修 → 待维修(审核通过)→ 待验收(维修完成)→ 已完成(验收通过) UPDATE sys_dict_data SET dict_label = '开始报修', dict_sort = 1, remark = '新建维修单的初始状态,等待审核' WHERE dict_type = 'repair_order_status' AND dict_value = 'A'; UPDATE sys_dict_data SET dict_label = '待维修', dict_sort = 2, remark = '审核通过后的状态,等待维修人维修' WHERE dict_type = 'repair_order_status' AND dict_value = 'B'; UPDATE sys_dict_data SET dict_label = '待验收', dict_sort = 3, remark = '维修完成后的状态,等待验收人验收' WHERE dict_type = 'repair_order_status' AND dict_value = 'C'; UPDATE sys_dict_data SET dict_label = '已完成', dict_sort = 4, remark = '验收完成或审核驳回' WHERE dict_type = 'repair_order_status' AND dict_value = 'D'; -- ============================================ -- 模块2:设备故障树功能 -- ============================================ -- 2.1 创建设备故障树表(三级树形结构) CREATE TABLE IF NOT EXISTS `dm_equipment_fault_tree` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '故障ID', `fault_code` VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '故障编码', `fault_name` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '故障名称', `parent_id` BIGINT NOT NULL DEFAULT 0 COMMENT '父故障ID(0表示根节点)', `tree_level` INT NOT NULL DEFAULT 1 COMMENT '层级(1/2/3)', `order_num` INT NOT NULL DEFAULT 0 COMMENT '显示顺序', `status` CHAR(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' COMMENT '状态(0正常 1停用)', `remark` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '备注', `create_by` VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建人', `create_time` DATETIME DEFAULT NULL COMMENT '创建时间', `update_by` VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '更新人', `update_time` DATETIME DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), INDEX `idx_parent_id` (`parent_id`) USING BTREE, INDEX `idx_tree_level` (`tree_level`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='设备故障树'; -- 2.2 在维修单明细表添加故障字段 ALTER TABLE `dm_repair_order_entry` ADD COLUMN `fault_id` BIGINT DEFAULT NULL COMMENT '故障ID(关联dm_equipment_fault_tree.id)' AFTER `item_standard`, ADD COLUMN `fault_name` VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '故障名称(冗余字段)' AFTER `fault_id`; -- ============================================ -- 模块3:销售订单批次号功能 -- ============================================ -- 3.1 在销售订单主表添加批次号字段 -- 说明:批次号是订单级别的属性,只存储在主表中 ALTER TABLE `sal_order` ADD COLUMN `batch_number` VARCHAR(50) DEFAULT NULL COMMENT '批次号(格式:PC+yyyyMMdd+3位序号)'; -- 3.2 为批次号字段创建索引(提高查询性能) CREATE INDEX `idx_sal_order_batch_number` ON `sal_order`(`batch_number`); -- 3.3 清理和修复字段扩展配置 -- 说明:使用动态字段扩展系统来配置前端列表显示 -- 3.3.1 停用旧的banxing字段(如果存在) UPDATE `sys_field_extend` SET `status` = 1 WHERE `source_bill` = 'saleOrderEntry' AND `field` = 'banxing'; -- 3.3.2 修复销售订单明细列表的批次号显示 -- 重要:field 设置为 'salOrder.batchNumber' 以从主表关联显示 -- 注意:is_system='Y' 表示从对象属性读取,而非 extendFieldJson UPDATE `sys_field_extend` SET `status` = 0, `field` = 'salOrder.batchNumber', `is_system` = 'Y' WHERE `source_bill` = 'saleOrderEntry' AND (`field` = 'batchNumber' OR `field` = 'salOrder.batchNumber'); -- 备用方案:如果上面的条件匹配不到,直接通过 id 更新 -- UPDATE sys_field_extend SET status = 0, field = 'salOrder.batchNumber', is_system = 'Y' WHERE id = 99; -- 3.3.3 删除生产工单重复的批次号字段扩展配置 -- 问题:workOrder 可能有多条 batchNumber 记录,导致列表重复显示 DELETE FROM `sys_field_extend` WHERE `source_bill` = 'workOrder' AND `field` = 'batchNumber' AND `id` != ( SELECT min_id FROM ( SELECT MIN(id) as min_id FROM sys_field_extend WHERE source_bill = 'workOrder' AND field = 'batchNumber' ) AS temp ); -- 3.3.4 更新生产工单的批次号字段扩展配置 -- 确保 is_system='Y',这样前端才能从 WorkOrder 对象的 batchNumber 属性读取数据 UPDATE `sys_field_extend` SET `is_system` = 'Y', `status` = 0 WHERE `source_bill` = 'workOrder' AND `field` = 'batchNumber'; -- ============================================ -- 可选:数据清理 -- ============================================ -- 如果之前错误地在明细表添加了批次号字段,可以选择删除 -- 警告:执行前请确认明细表确实有此字段且不需要保留数据 -- ALTER TABLE sal_order_entry DROP COLUMN IF EXISTS batch_number; -- ============================================ -- 验证查询(执行后运行这些查询验证结果) -- ============================================ -- 验证1:检查销售订单主表批次号字段 -- SELECT COLUMN_NAME, COLUMN_TYPE, COLUMN_COMMENT -- FROM INFORMATION_SCHEMA.COLUMNS -- WHERE TABLE_SCHEMA = DATABASE() -- AND TABLE_NAME = 'sal_order' -- AND COLUMN_NAME = 'batch_number'; -- 验证2:检查字段扩展配置 -- SELECT id, source_bill, field, field_name, is_system, status -- FROM sys_field_extend -- WHERE source_bill IN ('saleOrderEntry', 'workOrder') -- AND (field LIKE '%batchNumber%' OR field LIKE '%batch%') -- ORDER BY source_bill, id; -- 验证3:检查设备维修单新增字段 -- SELECT COLUMN_NAME, COLUMN_TYPE, COLUMN_COMMENT -- FROM INFORMATION_SCHEMA.COLUMNS -- WHERE TABLE_SCHEMA = DATABASE() -- AND TABLE_NAME = 'dm_repair_order' -- AND COLUMN_NAME IN ('approver_user_id', 'approve_time', 'approve_status', 'confirm_status'); -- 验证4:检查故障树表是否创建成功 -- SELECT COUNT(*) as table_exists -- FROM INFORMATION_SCHEMA.TABLES -- WHERE TABLE_SCHEMA = DATABASE() -- AND TABLE_NAME = 'dm_equipment_fault_tree'; -- ============================================ -- 脚本执行完成 -- ============================================ -- -- 执行后请验证: -- 1. 重启后端服务 -- 2. 清除浏览器缓存 -- 3. 测试销售订单批次号生成和显示 -- 4. 测试生产工单批次号关联和显示 -- 5. 测试设备维修单审批流程 -- 6. 测试故障树选择功能 -- -- ============================================