- 新增 ops_device_trajectory 表及轨迹数据对象、Mapper\n- 消费 trajectory-enter / trajectory-leave 事件并做幂等处理\n- 落地设备进入/离开区域记录,补充停留时长与离开原因字段\n- 在服务层封装轨迹写入、关闭未离场记录等核心逻辑
38 lines
2.6 KiB
SQL
38 lines
2.6 KiB
SQL
-- =============================================
|
||
-- 设备轨迹记录表
|
||
-- 记录工牌设备进出各区域的轨迹(进入时创建,离开时更新)
|
||
-- =============================================
|
||
|
||
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`);
|