187 lines
8.1 KiB
SQL
187 lines
8.1 KiB
SQL
-- ============================================
|
||
-- 兴万达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. 测试故障树选择功能
|
||
--
|
||
-- ============================================
|