-- ============================================= -- 设备轨迹记录表 -- 记录工牌设备进出各区域的轨迹(进入时创建,离开时更新) -- ============================================= 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`);