Files
MES/yawei-mes/.sql/2025-11-10_init前的sql文件/2025-10-16_兴万达改进.sql

187 lines
8.1 KiB
MySQL
Raw Normal View History

2026-04-02 10:38:23 +08:00
-- ============================================
-- 兴万达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. 测试故障树选择功能
--
-- ============================================