-- =============================================
-- 设备轨迹记录表
-- 记录工牌设备进出各区域的轨迹（进入时创建，离开时更新）
-- =============================================

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`);
