174 lines
12 KiB
SQL
174 lines
12 KiB
SQL
-- ========================================
|
||
-- FastBee 设备监测报告引擎 SQL 脚本
|
||
-- 创建日期: 2026-08-16
|
||
-- 说明:
|
||
-- 1. iot_product 增加监测分类编码列
|
||
-- 2. 新增 iot_report_threshold / report_template / report_record 三张表
|
||
-- 3. oss_config 插入 MinIO 默认配置(存储决策:未购买云 OSS,统一使用自建 MinIO)
|
||
-- 4. 历史报表菜单与按钮权限
|
||
-- 注意: 存量库执行前请先备份;增量脚本可重复执行(使用 / INSERT IGNORE)
|
||
-- ========================================
|
||
|
||
-- ------------------------------------------------------------
|
||
-- 1. iot_product 增加监测分类编码列(MySQL 8.0.29 以下不支持 加列,故直接 ALTER)
|
||
-- ------------------------------------------------------------
|
||
ALTER TABLE `iot_product` ADD COLUMN `monitor_category_code` VARCHAR(64) DEFAULT NULL COMMENT '监测分类编码(CRACK_METER/DEEP_DISPLACEMENT/AXIAL_FORCE/STATIC_LEVEL/VIBRATING_WIRE/STRAIN_GAUGE/WATER_LEVEL/RANGING_METER/INCLINOMETER/THERMOMETER/RAIN_GAUGE)' AFTER `category_name`;
|
||
|
||
-- 存量产品按产品名回填监测分类
|
||
UPDATE `iot_product` SET `monitor_category_code` = 'CRACK_METER'
|
||
WHERE (`monitor_category_code` IS NULL OR `monitor_category_code` = '')
|
||
AND (`product_name` LIKE '%裂缝%' OR `product_name` LIKE '%测缝%');
|
||
|
||
UPDATE `iot_product` SET `monitor_category_code` = 'DEEP_DISPLACEMENT'
|
||
WHERE (`monitor_category_code` IS NULL OR `monitor_category_code` = '')
|
||
AND (`product_name` LIKE '%位移%' OR `product_name` LIKE '%测斜%');
|
||
|
||
UPDATE `iot_product` SET `monitor_category_code` = 'AXIAL_FORCE'
|
||
WHERE (`monitor_category_code` IS NULL OR `monitor_category_code` = '')
|
||
AND (`product_name` LIKE '%轴力%' OR `product_name` LIKE '%应力%' OR `product_name` LIKE '%锚索%' OR `product_name` LIKE '%钢筋计%');
|
||
|
||
UPDATE `iot_product` SET `monitor_category_code` = 'STATIC_LEVEL'
|
||
WHERE (`monitor_category_code` IS NULL OR `monitor_category_code` = '')
|
||
AND (`product_name` LIKE '%水准%');
|
||
|
||
UPDATE `iot_product` SET `monitor_category_code` = 'VIBRATING_WIRE'
|
||
WHERE (`monitor_category_code` IS NULL OR `monitor_category_code` = '')
|
||
AND (`product_name` LIKE '%振弦%');
|
||
|
||
UPDATE `iot_product` SET `monitor_category_code` = 'STRAIN_GAUGE'
|
||
WHERE (`monitor_category_code` IS NULL OR `monitor_category_code` = '')
|
||
AND (`product_name` LIKE '%应变%');
|
||
|
||
UPDATE `iot_product` SET `monitor_category_code` = 'WATER_LEVEL'
|
||
WHERE (`monitor_category_code` IS NULL OR `monitor_category_code` = '')
|
||
AND (`product_name` LIKE '%水位%');
|
||
|
||
UPDATE `iot_product` SET `monitor_category_code` = 'RANGING_METER'
|
||
WHERE (`monitor_category_code` IS NULL OR `monitor_category_code` = '')
|
||
AND (`product_name` LIKE '%测距%' OR `product_name` LIKE '%激光测距%');
|
||
|
||
UPDATE `iot_product` SET `monitor_category_code` = 'INCLINOMETER'
|
||
WHERE (`monitor_category_code` IS NULL OR `monitor_category_code` = '')
|
||
AND (`product_name` LIKE '%倾角%' OR `product_name` LIKE '%倾斜%');
|
||
|
||
UPDATE `iot_product` SET `monitor_category_code` = 'THERMOMETER'
|
||
WHERE (`monitor_category_code` IS NULL OR `monitor_category_code` = '')
|
||
AND (`product_name` LIKE '%温度%');
|
||
|
||
UPDATE `iot_product` SET `monitor_category_code` = 'RAIN_GAUGE'
|
||
WHERE (`monitor_category_code` IS NULL OR `monitor_category_code` = '')
|
||
AND (`product_name` LIKE '%雨量%');
|
||
|
||
-- ------------------------------------------------------------
|
||
-- 2.1 报告阈值表(查询优先级:device_id > product_id > 全局默认 product_id=0)
|
||
-- ------------------------------------------------------------
|
||
CREATE TABLE `iot_report_threshold` (
|
||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`product_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '产品ID(0=全局默认)',
|
||
`device_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '设备ID(0=不限定设备)',
|
||
`monitor_category_code` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '监测分类编码',
|
||
`metric_identifier` varchar(64) COLLATE utf8_unicode_ci NOT NULL COMMENT '物模型标识符',
|
||
`warning_value` decimal(20,6) DEFAULT NULL COMMENT '预警值',
|
||
`alarm_value` decimal(20,6) DEFAULT NULL COMMENT '报警值',
|
||
`control_value` decimal(20,6) DEFAULT NULL COMMENT '控制值',
|
||
`unit` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '单位',
|
||
`create_by` varchar(64) COLLATE utf8_unicode_ci DEFAULT '' COMMENT '创建者',
|
||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||
`update_by` varchar(64) COLLATE utf8_unicode_ci DEFAULT '' COMMENT '更新者',
|
||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`) USING BTREE,
|
||
KEY `idx_threshold_device` (`device_id`, `metric_identifier`) USING BTREE,
|
||
KEY `idx_threshold_product` (`product_id`, `metric_identifier`) USING BTREE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='报告结构化阈值';
|
||
|
||
-- ------------------------------------------------------------
|
||
-- 2.2 Word 模板表
|
||
-- ------------------------------------------------------------
|
||
CREATE TABLE `report_template` (
|
||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`template_code` varchar(64) COLLATE utf8_unicode_ci NOT NULL COMMENT '模板编码,如 DEVICE_CRACK_METER_V1',
|
||
`template_name` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '模板名称',
|
||
`monitor_category_code` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '监测分类编码',
|
||
`version` int(11) NOT NULL DEFAULT 1 COMMENT '版本号',
|
||
`file_path` varchar(512) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '模板文件路径(classpath 或 MinIO 路径)',
|
||
`status` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0' COMMENT '状态(0=启用 1=停用)',
|
||
`del_flag` char(1) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
|
||
`create_by` varchar(64) COLLATE utf8_unicode_ci DEFAULT '' COMMENT '创建者',
|
||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||
`update_by` varchar(64) COLLATE utf8_unicode_ci DEFAULT '' COMMENT '更新者',
|
||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`) USING BTREE,
|
||
UNIQUE KEY `uk_template_code_version` (`template_code`, `version`) USING BTREE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='报告模板表';
|
||
|
||
INSERT IGNORE INTO `report_template`
|
||
(template_code, template_name, monitor_category_code, version, file_path, status, del_flag, create_by, create_time)
|
||
VALUES
|
||
('DEVICE_CRACK_METER_V1', '裂缝计监测分析报告V1', 'CRACK_METER', 1, 'templates/DEVICE_CRACK_METER_V1.docx', '0', '0', 'admin', NOW()),
|
||
('DEVICE_DEEP_DISPLACEMENT_V1', '深部位移监测分析报告V1', 'DEEP_DISPLACEMENT', 1, 'templates/DEVICE_DEEP_DISPLACEMENT_V1.docx', '0', '0', 'admin', NOW()),
|
||
('DEVICE_AXIAL_FORCE_V1', '轴力应力监测分析报告V1', 'AXIAL_FORCE', 1, 'templates/DEVICE_AXIAL_FORCE_V1.docx', '0', '0', 'admin', NOW()),
|
||
('DEVICE_STATIC_LEVEL_V1', '静力水准监测分析报告V1', 'STATIC_LEVEL', 1, 'templates/DEVICE_STATIC_LEVEL_V1.docx', '0', '0', 'admin', NOW()),
|
||
('DEVICE_VIBRATING_WIRE_V1', '振弦监测分析报告V1', 'VIBRATING_WIRE', 1, 'templates/DEVICE_VIBRATING_WIRE_V1.docx', '0', '0', 'admin', NOW()),
|
||
('DEVICE_STRAIN_GAUGE_V1', '应变计监测分析报告V1', 'STRAIN_GAUGE', 1, 'templates/DEVICE_STRAIN_GAUGE_V1.docx', '0', '0', 'admin', NOW()),
|
||
('DEVICE_WATER_LEVEL_V1', '水位计监测分析报告V1', 'WATER_LEVEL', 1, 'templates/DEVICE_WATER_LEVEL_V1.docx', '0', '0', 'admin', NOW()),
|
||
('DEVICE_RANGING_METER_V1', '测距仪监测分析报告V1', 'RANGING_METER', 1, 'templates/DEVICE_RANGING_METER_V1.docx', '0', '0', 'admin', NOW()),
|
||
('DEVICE_INCLINOMETER_V1', '倾角计监测分析报告V1', 'INCLINOMETER', 1, 'templates/DEVICE_INCLINOMETER_V1.docx', '0', '0', 'admin', NOW()),
|
||
('DEVICE_THERMOMETER_V1', '温度计监测分析报告V1', 'THERMOMETER', 1, 'templates/DEVICE_THERMOMETER_V1.docx', '0', '0', 'admin', NOW()),
|
||
('DEVICE_RAIN_GAUGE_V1', '雨量计监测分析报告V1', 'RAIN_GAUGE', 1, 'templates/DEVICE_RAIN_GAUGE_V1.docx', '0', '0', 'admin', NOW());
|
||
|
||
-- ------------------------------------------------------------
|
||
-- 2.3 报告生成记录表(保留期 1 个月:expire_time = create_time + 30 天)
|
||
-- ------------------------------------------------------------
|
||
CREATE TABLE `report_record` (
|
||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`report_no` varchar(64) COLLATE utf8_unicode_ci NOT NULL COMMENT '报告编号,如 REPORT-202608160001',
|
||
`device_id` bigint(20) NOT NULL COMMENT '设备ID',
|
||
`device_name` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '设备名称',
|
||
`monitor_category_code` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '监测分类编码',
|
||
`period` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '周期(DAY/WEEK/HALF_MONTH/MONTH/CUSTOM)',
|
||
`start_time` datetime DEFAULT NULL COMMENT '统计开始时间',
|
||
`end_time` datetime DEFAULT NULL COMMENT '统计结束时间',
|
||
`status` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '状态(CREATING/SUCCESS/FAILED)',
|
||
`file_name` varchar(256) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '文件名称',
|
||
`file_url` varchar(512) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '文件地址',
|
||
`expire_time` datetime DEFAULT NULL COMMENT '过期时间(= create_time + 30 天)',
|
||
`error_message` varchar(1024) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '失败原因',
|
||
`tenant_id` bigint(20) DEFAULT NULL COMMENT '租户ID',
|
||
`create_by` varchar(64) COLLATE utf8_unicode_ci DEFAULT '' COMMENT '创建者',
|
||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||
`update_by` varchar(64) COLLATE utf8_unicode_ci DEFAULT '' COMMENT '更新者',
|
||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`id`) USING BTREE,
|
||
KEY `idx_device_time` (`device_id`, `create_time`) USING BTREE,
|
||
KEY `idx_expire` (`expire_time`) USING BTREE,
|
||
UNIQUE KEY `uk_report_no` (`report_no`) USING BTREE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='报告生成记录';
|
||
|
||
-- ------------------------------------------------------------
|
||
-- 3. oss_config:MinIO 默认配置(未购买云 OSS → 自建 MinIO)
|
||
-- endpoint:后端连接 MinIO 的 S3 API 地址(若后端与 MinIO 同机可改为 http://127.0.0.1:9000)
|
||
-- domain:为空时 getUrl() 返回 http://<endpoint>/<bucketName>;可配置 CDN/公网域名生成更友好的 URL
|
||
-- 注意:端口 9000 需在安全组/防火墙放行;下载统一走后端代理,桶保持私有(access_policy=0)
|
||
-- ------------------------------------------------------------
|
||
UPDATE `oss_config` SET `status` = '1' WHERE `config_key` IN ('aliyun', 'qiniu');
|
||
|
||
INSERT IGNORE INTO `oss_config`
|
||
(tenant_id, tenant_name, config_key, access_key, secret_key, bucket_name, prefix,
|
||
endpoint, domain, is_https, region, access_policy, status, del_flag, create_by, create_time, update_by, update_time, remark)
|
||
VALUES
|
||
(1, 'admin', 'minio', 'yack-superme', 'yack-minio20260816', 'fastbee', 'report',
|
||
'http://47.121.180.229:9000', '', 'N', '', '0', '0', '0', 'admin', NOW(), 'admin', NOW(), 'MinIO默认存储');
|
||
|
||
-- ------------------------------------------------------------
|
||
-- 4. 历史报表菜单与权限(数据中心 3343 下新增)
|
||
-- ------------------------------------------------------------
|
||
INSERT IGNORE INTO `sys_menu`
|
||
(menu_id, 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
|
||
(3610, '历史报表', 3343, 4, 'reportHistory', 'dataCenter/reportHistory', NULL, 1, 0, 'C', '0', '0', 'iot:report:list', 'documentation', 'admin', NOW(), 'admin', NOW(), '设备监测报告历史报表'),
|
||
(3611, '报表生成', 3610, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'iot:report:generate', '#', 'admin', NOW(), 'admin', NOW(), '生成并导出报表');
|
||
|
||
INSERT IGNORE INTO `sys_menu_translate` (id, zh_cn, en_us) VALUES
|
||
(3610, '历史报表', 'Report history'),
|
||
(3611, '报表生成', 'Generate report');
|