fastbee/sql/fastbee-report.sql
2026-09-22 09:54:51 +08:00

175 lines
12 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.

-- ========================================
-- FastBee 设备监测报告引擎 SQL 脚本
-- 创建日期: 2026-08-16
-- 说明:
-- 1. iot_product 增加监测分类编码列
-- 2. 新增 iot_things_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_things_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 '控制值',
`warning_rate` DECIMAL(18, 6) DEFAULT NULL COMMENT '变化速率预警值(单位/天)',
`alarm_rate` DECIMAL(18, 6) DEFAULT NULL COMMENT '变化速率报警值(单位/天)' ,
`control_rate` DECIMAL(18, 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 报告生成记录表(保留期由 LogCleanTask#cleanLogs(days) 统一管理,按 create_time 倒推清理)
-- ------------------------------------------------------------
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 '文件地址',
`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,
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');