Files
aiot-platform-cloud/sql/mysql/ops_device_trajectory.sql
lzh bf5aa21648 feat(trajectory): 新增轨迹事件消费与落库模型
- 新增 ops_device_trajectory 表及轨迹数据对象、Mapper\n- 消费 trajectory-enter / trajectory-leave 事件并做幂等处理\n- 落地设备进入/离开区域记录,补充停留时长与离开原因字段\n- 在服务层封装轨迹写入、关闭未离场记录等核心逻辑
2026-03-31 22:56:18 +08:00

38 lines
2.6 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.

-- =============================================
-- 设备轨迹记录表
-- 记录工牌设备进出各区域的轨迹(进入时创建,离开时更新)
-- =============================================
CREATE TABLE IF NOT EXISTS `ops_device_trajectory` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`device_id` BIGINT NOT NULL COMMENT '工牌设备ID',
`device_name` VARCHAR(64) DEFAULT NULL COMMENT '设备名称(冗余)',
`nickname` VARCHAR(64) DEFAULT NULL COMMENT '设备备注名称(冗余)',
`person_id` BIGINT DEFAULT NULL COMMENT '人员ID(预留)',
`person_name` VARCHAR(64) DEFAULT NULL COMMENT '人员名称(预留)',
`area_id` BIGINT NOT NULL COMMENT '区域ID',
`area_name` VARCHAR(128) DEFAULT NULL COMMENT '区域名称(冗余)',
`beacon_mac` VARCHAR(64) DEFAULT NULL COMMENT '匹配的Beacon MAC',
`enter_time` DATETIME NOT NULL COMMENT '进入时间',
`leave_time` DATETIME DEFAULT NULL COMMENT '离开时间',
`duration_seconds` INT DEFAULT NULL COMMENT '停留时长(秒)',
`leave_reason` VARCHAR(32) DEFAULT NULL COMMENT '离开原因: SIGNAL_LOSS/AREA_SWITCH/DEVICE_OFFLINE',
`enter_rssi` INT DEFAULT NULL COMMENT '进入时RSSI',
`tenant_id` BIGINT NOT NULL DEFAULT 0 COMMENT '租户ID',
`creator` VARCHAR(64) DEFAULT '' COMMENT '创建者',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updater` VARCHAR(64) DEFAULT '' COMMENT '更新者',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` BIT(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
PRIMARY KEY (`id`),
INDEX `idx_device_enter` (`device_id`, `enter_time`),
INDEX `idx_area_enter` (`area_id`, `enter_time`),
INDEX `idx_device_area` (`device_id`, `area_id`),
INDEX `idx_tenant` (`tenant_id`),
INDEX `idx_device_area_leave` (`device_id`, `area_id`, `leave_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='设备轨迹记录';
-- 优化:为 selectOpenRecord 查询device_id + area_id + leave_time IS NULL添加索引
-- 注:已有数据的线上环境需单独执行以下 ALTER如数据量大请在低峰期执行
-- ALTER TABLE `ops_device_trajectory` ADD INDEX `idx_device_area_leave` (`device_id`, `area_id`, `leave_time`);