-- 1. 创建报警记录表
DROP TABLE IF EXISTS `mes_device_fault_record`;
CREATE TABLE IF NOT EXISTS `mes_device_fault_record` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '报警记录ID',
    `device_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '设备名称',
    `sensor_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '传感器名/通道',
    `device_status` tinyint NOT NULL DEFAULT 2 COMMENT '设备状态：0-停机，1-待机，2-生产',
    `nominal_value` decimal(10, 2) NULL DEFAULT NULL COMMENT '标称值（标准/理想值）',
    `normal_min` decimal(10, 2) NOT NULL COMMENT '正常范围下限（下限）',
    `normal_max` decimal(10, 2) NOT NULL COMMENT '正常范围上限（上限）',
    `lower_lower_limit` decimal(10, 2) NULL DEFAULT NULL COMMENT '下下限（严重超限下限）',
    `upper_upper_limit` decimal(10, 2) NULL DEFAULT NULL COMMENT '上上限（严重超限上限）',
    `actual_value` decimal(10, 2) NOT NULL COMMENT '实测值',
    `deviation_rate` decimal(10, 2) NULL COMMENT '偏离度(%)',
    `fault_level` tinyint NULL DEFAULT 1 COMMENT '故障等级：1-轻微，2-一般，3-严重',
    `fault_tag` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '故障标注/描述',
    `analysis_type` tinyint NOT NULL DEFAULT 1 COMMENT '分析类型：1-瞬态，2-趋势',
    `fault_time` datetime NOT NULL COMMENT '故障发生时间',
    `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
    `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
    `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
    `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
    `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除：0-未删除，1-已删除',
    `tenant_id` bigint NOT NULL DEFAULT 1 COMMENT '租户ID',
    PRIMARY KEY (`id`) USING BTREE,
    INDEX `idx_device_name`(`device_name`) USING BTREE COMMENT '设备名称索引',
    INDEX `idx_sensor_name`(`sensor_name`) USING BTREE COMMENT '传感器名索引',
    INDEX `idx_fault_time`(`fault_time`) USING BTREE COMMENT '故障时间索引',
    INDEX `idx_device_status`(`device_status`) USING BTREE COMMENT '设备状态索引',
    INDEX `idx_fault_level`(`fault_level`) USING BTREE COMMENT '故障等级索引'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '设备报警记录表' ROW_FORMAT = DYNAMIC;

-- 2. 插入二级菜单：报警记录（父菜单为设备管理，menu_id=2168）
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('设备报警记录', 2168, 10, 'faultRecord', 'mes/device/faultRecord/index', NULL, 1, 0, 'C', '0', '0', 'device:faultRecord:list', 'log', 'admin', NOW(), '', NULL, '报警记录菜单');

-- 获取刚插入的菜单ID
SET @menu_id = LAST_INSERT_ID();

-- 3. 插入按钮权限
-- 报警记录查询
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('报警记录查询', @menu_id, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'device:faultRecord:query', '#', 'admin', NOW(), '', NULL, '');

-- 报警记录导出
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES ('报警记录导出', @menu_id, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'device:faultRecord:export', '#', 'admin', NOW(), '', NULL, '');

-- 注意：趋势分析功能已合并到报警记录页面中，使用圆滑折线图展示

-- 4. 添加门限类型字段（如果表已存在，执行此ALTER语句）
ALTER TABLE `mes_device_fault_record` ADD COLUMN `threshold_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '门限类型（如：温度、压力、流量等）' AFTER `upper_upper_limit`;

-- 5.门限可为空
ALTER TABLE mes_device_fault_record MODIFY COLUMN normal_min decimal(10,2) NULL;
ALTER TABLE mes_device_fault_record MODIFY COLUMN normal_max decimal(10,2) NULL;

-- 6.修改fault_level字段类型为varchar（如果表已存在，执行此ALTER语句）
ALTER TABLE `mes_device_fault_record` MODIFY COLUMN `fault_level` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '报警类型：超上限、超上上限、超下限、超下下限、其他';

-- =============================================
-- LabVIEW写入示例（供LabVIEW端参考）
-- =============================================

-- 发酵罐1号 温度传感器-CH01 跨月测试数据（跨度6个月，门限类型和门限值会变化）
-- INSERT INTO `mes_device_fault_record`
-- (`device_name`, `sensor_name`, `device_status`, `nominal_value`, `normal_min`, `normal_max`, `lower_lower_limit`, `upper_upper_limit`, `threshold_type`, `actual_value`, `deviation_rate`, `fault_level`, `fault_tag`, `analysis_type`, `fault_time`, `create_by`, `create_time`)
-- VALUES
-- ('发酵罐1号', '温度传感器-CH01', 2, 25.00, 20.00, 30.00, 15.00, 35.00, '温度℃', 31.50, 26.00, 2, '7月温度偏高', 1, '2025-07-08 14:22:35', 'labview', NOW()),
-- ('发酵罐1号', '温度传感器-CH01', 2, 26.00, 21.00, 31.00, 16.00, 36.00, '温度℃', 36.80, 41.54, 3, '8月高温报警（门限调整后）', 1, '2025-08-15 09:45:18', 'labview', NOW()),
-- ('发酵罐1号', '温度传感器-CH01', 2, 24.00, 19.00, 29.00, 14.00, 34.00, '温度℃', 18.20, 24.17, 2, '9月温度偏低（门限下调）', 1, '2025-09-03 16:33:42', 'labview', NOW()),
-- ('发酵罐1号', '温度传感器-CH01', 2, 25.00, 20.00, 30.00, 15.00, 35.00, '温度℃', 32.50, 30.00, 2, '10月温度超上限', 1, '2025-10-22 11:08:27', 'labview', NOW()),
-- ('发酵罐1号', '温度传感器-CH01', 2, 23.00, 18.00, 28.00, 13.00, 33.00, '温度℃', 12.50, 45.65, 3, '11月低温严重报警（冬季门限）', 1, '2025-11-18 08:55:13', 'labview', NOW()),
-- ('发酵罐1号', '温度传感器-CH01', 2, 22.00, 17.00, 27.00, 12.00, 32.00, '温度℃', 28.80, 30.91, 2, '12月温度超上限（冬季门限）', 1, '2025-12-10 15:42:56', 'labview', NOW());

-- =============================================
-- 字段说明（供LabVIEW端参考）
-- =============================================
-- device_name       : 设备名称（必填）如：发酵罐1号、搅拌器1号、进料泵1号
-- sensor_name       : 传感器名/通道（必填）如：温度传感器-CH01、压力传感器-CH02
-- device_status     : 设备状态（必填）0-停机，1-待机，2-生产
-- nominal_value     : 标称值（选填）标准/理想值，可为NULL
-- normal_min        : 正常范围下限（必填）
-- normal_max        : 正常范围上限（必填）
-- lower_lower_limit : 下下限（选填）严重超限下限
-- upper_upper_limit : 上上限（选填）严重超限上限
-- threshold_type    : 门限类型（选填）如：温度℃、压力MPa、流量L/min等
-- actual_value      : 实测值（必填）
-- deviation_rate    : 偏离度%（必填）计算公式：|actual_value - nominal_value| / nominal_value * 100
-- fault_level       : 报警类型（选填）超上限、超上上限、超下限、超下下限、其他
-- fault_tag         : 报警标注（选填）描述报警原因
-- analysis_type     : 分析类型（必填）1-瞬态，2-趋势
-- fault_time        : 报警发生时间（必填）格式：YYYY-MM-DD HH:MM:SS
-- create_by         : 创建者（必填）固定为 'labview'
-- create_time       : 创建时间（必填）使用 NOW() 获取当前时间
-- 
-- 报警类型说明:
-- 超上限：实测值超过正常范围上限
-- 超上上限：实测值超过严重范围上限
-- 超下限：实测值低于正常范围下限
-- 超下下限：实测值低于严重范围下限
-- 其他：其他类型的报警