Files
MES/yawei-mes/.sql/2025-11-10_init前的sql文件/2025-10-16_兴万达改进.sql
2026-04-02 10:39:03 +08:00

187 lines
8.1 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ============================================
-- 兴万达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 '父故障ID0表示根节点',
`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. 测试故障树选择功能
--
-- ============================================