fastbee/sql/iot-measure-point.sql
2026-09-27 14:46:05 +08:00

60 lines
4.0 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.

-- =============================================
-- 蓝牙网关测点采集(产品-设备-测点链路)
-- yack-mini 上报 topic: /{productId}/{sn}/{measurePointId}/measure/post
-- 协议: 产品 protocol_code = MEASURE-MODBUS(Modbus 直解析)
-- 版本: 2.0 2026-09-27 测点数据表改为「一帧一行」,解析结果整体存 JSON 数组
-- =============================================
-- 测点表(measure_point_id 为测点唯一识别号,前端手动输入)
CREATE TABLE IF NOT EXISTS `iot_measure_point` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`measure_point_id` VARCHAR(64) NOT NULL COMMENT '唯一采集ID(测点唯一识别号,前端输入,正则^[A-Za-z0-9_-]{1,64}$)',
`product_id` BIGINT DEFAULT NULL COMMENT '产品id',
`serial_number` VARCHAR(64) DEFAULT NULL COMMENT '采集设备编号',
`point_name` VARCHAR(64) DEFAULT NULL COMMENT '测点名称',
`last_data_time` DATETIME(3) DEFAULT NULL COMMENT '最后采集时间(落库时维护,列表活跃度展示)',
`data_count` BIGINT NOT NULL DEFAULT 0 COMMENT '累计帧数(一次上报=一帧,落库时累加)',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_measure_point_id` (`measure_point_id`),
KEY `idx_serial_number` (`serial_number`),
KEY `idx_last_data_time` (`last_data_time`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '蓝牙网关采集测点表';
-- =============================================
-- 测点数据表:一帧一行
--
-- 一次上报(MQTT 一条消息)解析出的全部指标,合并为零散在 data_json 里的有序数组:
-- [{"identifier":"Ang_x","modelName":"X轴角度","value":"1042.5417"}, ...]
--
-- 为何一帧一行而不是「一行一 identifier」:
-- ModbusProtocol 在寄存器循环内逐条 DateUtils.getNowDate(),同帧各行的 ts 会跨毫秒
-- (实测 34 帧中有 6 帧如此),按 ts 归组会拆帧。整帧整体落一行则帧身份天然存在,
-- 不需要额外的批次号字段,也不需要「先取帧再拉明细」的两步查询。
--
-- modelName 为落库快照,取自 iot_things_model.model_name(中文原文):
-- 物模型改名后历史帧仍保留采集当时的名称,列表列头也直接由数据自身提供。
-- =============================================
CREATE TABLE IF NOT EXISTS `iot_measure_point_data` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键(帧标识)',
`measure_point_id` VARCHAR(64) NOT NULL COMMENT '测点唯一识别号',
`product_id` BIGINT DEFAULT NULL COMMENT '产品id',
`serial_number` VARCHAR(64) DEFAULT NULL COMMENT '采集设备编号',
`ts` DATETIME(3) NOT NULL COMMENT '帧时间(一次上报取定,帧内指标统一)',
`data_json` JSON NOT NULL COMMENT '帧解析结果 [{identifier,modelName,value}],顺序即解析顺序',
PRIMARY KEY (`id`),
-- 主查询路径:按测点+时间范围过滤并倒序;最左前缀覆盖单列 measure_point_id(故不建单列索引)
KEY `idx_point_ts` (`measure_point_id`, `ts`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '蓝牙网关测点数据表(一帧一行,解析结果存JSON)';
-- =============================================
-- 菜单:数据中心 → 测点数据(yack-web 展示入口)
-- 父菜单 3343 = 数据中心;菜单ID 段 3620-3629 未被占用
-- 注意:菜单为裸 INSERT,重复执行会主键冲突,仅需执行一次
-- =============================================
INSERT INTO `sys_menu` VALUES(3620, '测点数据', 3343, 5, 'measurePoint', 'dataCenter/measurePoint', NULL, 1, 0, 'C', '0', '0', 'dataCenter:history:list', 'monitor', 'admin', NOW(), '', NULL, '蓝牙网关测点上报数据查询');
INSERT INTO `sys_menu` VALUES(3621, '测点数据查询', 3620, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'dataCenter:history:list', '#', 'admin', NOW(), '', NULL, '');