-- ============================================================================= -- 域 6:CR-02 新增业务表 T-01~T-08(8 张) -- 列级定义来源:CR-02 表 3-27(T-01~T-03)、表 3-28(T-04/T-05/T-08)、 -- 表 3-29(T-06/T-07);§12 表 10-6 的补列已合并进 T-04 -- 迁移顺序:按 CR-02 表 3-33,本域在存量 44 张之后执行;DDL 与回填分离。 -- ============================================================================= -- 52 T-01 平板设备 CREATE TABLE IF NOT EXISTS apt_tablet_device ( id BIGINT NOT NULL AUTO_INCREMENT, gyid VARCHAR(32) NOT NULL, device_code VARCHAR(64) NOT NULL COMMENT '设备编码,入库大写', room_id VARCHAR(64) NULL, activation_code_ref VARCHAR(128) NULL COMMENT '激活码只存引用,不存明文', register_status VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT 'ACTIVE/DISABLED/PENDING', app_version VARCHAR(32) NULL, last_seen_at DATETIME(3) NULL, last_cursor VARCHAR(128) NULL, created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), PRIMARY KEY (id), UNIQUE KEY uk_tabletdev_gyid_code (gyid, device_code), CONSTRAINT ck_tabletdev_status CHECK (register_status IN ('ACTIVE','DISABLED','PENDING')) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='T-01 平板设备'; -- 53 T-02 平板任务(按 jcsj 顺序派发,dispatch_seq 单调递增) CREATE TABLE IF NOT EXISTS apt_tablet_task ( id BIGINT NOT NULL AUTO_INCREMENT, gyid VARCHAR(32) NOT NULL, task_id VARCHAR(64) NOT NULL, jcid VARCHAR(64) NOT NULL, dispatch_seq BIGINT NOT NULL, call_mode VARCHAR(20) NOT NULL DEFAULT 'TABLET', jcsj DATETIME(3) NULL COMMENT '叫乘基准时刻(本地复算值)', device_code VARCHAR(64) NULL, pull_state VARCHAR(20) NOT NULL DEFAULT 'WAITING' COMMENT 'WAITING/PULLED/EXPIRED/DONE', pulled_at DATETIME(3) NULL, pulled_by VARCHAR(64) NULL, expire_at DATETIME(3) NULL, created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), PRIMARY KEY (id), UNIQUE KEY uk_tablettask_gyid_task (gyid, task_id), KEY idx_tablettask_gyid_seq (gyid, dispatch_seq), KEY idx_tablettask_gyid_time (gyid, jcsj), CONSTRAINT ck_tablettask_pull CHECK (pull_state IN ('WAITING','PULLED','EXPIRED','DONE')) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='T-02 平板派发任务'; -- 54 T-03 平板叫乘结果(result_id 幂等;平板链路不发 #24) CREATE TABLE IF NOT EXISTS apt_tablet_call_result ( id BIGINT NOT NULL AUTO_INCREMENT, gyid VARCHAR(32) NOT NULL, result_id VARCHAR(64) NOT NULL COMMENT '幂等键', task_id VARCHAR(64) NOT NULL, jcid VARCHAR(64) NOT NULL, face_verify_state VARCHAR(20) NOT NULL COMMENT 'VERIFIED/UNVERIFIED/SKIPPED', verified_ryid VARCHAR(64) NULL, result_type VARCHAR(20) NOT NULL COMMENT 'ANSWERED/NO_ANSWER/FAILED/CANCELLED', person_count INT NOT NULL DEFAULT 0, device_code VARCHAR(64) NOT NULL, occurred_at DATETIME(3) NOT NULL, received_at DATETIME(3) NOT NULL, applied_state VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING/APPLIED/IGNORED', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (id), UNIQUE KEY uk_tabletresult_gyid_id (gyid, result_id), KEY idx_tabletresult_gyid_task (gyid, task_id), KEY idx_tabletresult_gyid_state (gyid, applied_state, occurred_at), CONSTRAINT ck_tabletresult_face CHECK (face_verify_state IN ('VERIFIED','UNVERIFIED','SKIPPED')), CONSTRAINT ck_tabletresult_type CHECK (result_type IN ('ANSWERED','NO_ANSWER','FAILED','CANCELLED')), CONSTRAINT ck_tabletresult_applied CHECK (applied_state IN ('PENDING','APPLIED','IGNORED')) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='T-03 平板叫乘结果'; -- 55 T-04 人脸注册申请(生效点在公寓;平台回执不决定本地生效) -- 合并 公寓端/10 表 10-6 补列:双路状态链、媒体引用、person_category CREATE TABLE IF NOT EXISTS apt_person_face_reg ( id BIGINT NOT NULL AUTO_INCREMENT, gyid VARCHAR(32) NOT NULL, reg_id VARCHAR(64) NOT NULL, work_no VARCHAR(64) NULL, name VARCHAR(64) NOT NULL, face_feature_ref VARCHAR(256) NOT NULL COMMENT '不存特征大对象', photo_ref VARCHAR(512) NULL COMMENT '不存原图二进制', photo_checksum VARCHAR(128) NULL, feature_checksum VARCHAR(128) NULL, feature_algo VARCHAR(32) NULL, feature_version BIGINT NOT NULL DEFAULT 1, person_category VARCHAR(20) NOT NULL DEFAULT 'TRANSIENT' COMMENT 'TRANSIENT / LONG_TERM', reg_state VARCHAR(20) NOT NULL DEFAULT 'APPLIED' COMMENT 'APPLIED/CONFIRMED/REJECTED/ARCHIVED', local_only TINYINT(1) NOT NULL DEFAULT 1, verdict VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '平台同步回执 ACCEPTED/REJECTED', confirmed_ryid VARCHAR(64) NULL, reject_reason VARCHAR(256) NULL, verdict_version BIGINT NULL, apply_device_code VARCHAR(64) NULL, applied_at DATETIME(3) NULL, confirmed_by VARCHAR(64) NULL, confirmed_at DATETIME(3) NULL, upload_state VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '上传平台状态链(独立)', dispatch_state VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '下发设备状态链(独立)', face_sync_state VARCHAR(20) NOT NULL DEFAULT 'PENDING', registered_by VARCHAR(64) NULL, device_code VARCHAR(64) NULL, occurred_at DATETIME(3) NOT NULL, report_state VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING/SENT/FAILED/DEAD/RETRIED', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (id), UNIQUE KEY uk_facereg_gyid_reg (gyid, reg_id), KEY idx_facereg_gyid_state (gyid, reg_state, occurred_at), KEY idx_facereg_gyid_workno (gyid, work_no), CONSTRAINT ck_facereg_state CHECK (reg_state IN ('APPLIED','CONFIRMED','REJECTED','ARCHIVED')), CONSTRAINT ck_facereg_verdict CHECK (verdict IN ('PENDING','ACCEPTED','REJECTED')), CONSTRAINT ck_facereg_category CHECK (person_category IN ('TRANSIENT','LONG_TERM')), CONSTRAINT ck_facereg_upload CHECK (upload_state IN ('PENDING','SENT','FAILED','DEAD','ACKED')), CONSTRAINT ck_facereg_dispatch CHECK (dispatch_state IN ('PENDING','ISSUED','FAILED','DEAD','ACKED')), CONSTRAINT ck_facereg_report CHECK (report_state IN ('PENDING','SENT','FAILED','DEAD','RETRIED')) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='T-04 人脸注册申请(§12 补列已合并)'; -- 56 T-05 换乘单(CR-02 表 3-28) CREATE TABLE IF NOT EXISTS apt_transfer_order ( id BIGINT NOT NULL AUTO_INCREMENT, gyid VARCHAR(32) NOT NULL, transfer_id VARCHAR(64) NOT NULL, jcid VARCHAR(64) NOT NULL, jlid VARCHAR(64) NOT NULL, old_room_id VARCHAR(64) NULL, new_room_id VARCHAR(64) NULL, new_dep_time DATETIME(3) NOT NULL, new_call_time DATETIME(3) NOT NULL, recomputed_call_time DATETIME(3) NOT NULL COMMENT '与 new_call_time 不等时告警,不静默覆盖', state VARCHAR(20) NOT NULL DEFAULT 'DRAFT', command_id VARCHAR(64) NULL, reason VARCHAR(256) NULL, biz_version BIGINT NOT NULL DEFAULT 1, applied_at DATETIME(3) NULL, created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (id), UNIQUE KEY uk_transfer_gyid_id (gyid, transfer_id), KEY idx_transfer_gyid_jcid (gyid, jcid) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='T-05 换乘单'; -- 57 T-06 保洁人员 CREATE TABLE IF NOT EXISTS apt_clean_staff ( id BIGINT NOT NULL AUTO_INCREMENT, gyid VARCHAR(32) NOT NULL, staff_id VARCHAR(64) NOT NULL, name VARCHAR(64) NOT NULL, state VARCHAR(20) NOT NULL DEFAULT 'ACTIVE', phone_ref VARCHAR(128) NULL COMMENT '联系方式只存引用', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (id), UNIQUE KEY uk_cleanstaff_gyid_id (gyid, staff_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='T-06 保洁人员'; -- 58 T-07 保洁记录 CREATE TABLE IF NOT EXISTS apt_clean_record ( id BIGINT NOT NULL AUTO_INCREMENT, gyid VARCHAR(32) NOT NULL, record_id VARCHAR(64) NOT NULL, staff_id VARCHAR(64) NOT NULL, room_id VARCHAR(64) NOT NULL, clean_type VARCHAR(20) NOT NULL, state VARCHAR(20) NOT NULL, task_id VARCHAR(64) NULL, started_at DATETIME(3) NULL, finished_at DATETIME(3) NULL, remark VARCHAR(256) NULL, report_state VARCHAR(20) NOT NULL DEFAULT 'PENDING', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (id), UNIQUE KEY uk_cleanrecord_gyid_id (gyid, record_id), KEY idx_cleanrecord_gyid_room (gyid, room_id, started_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='T-07 保洁记录'; -- 59 T-08 设备报警(CR-02 表 3-28;alarm_event_key 与 /ws/duty 去重一致) CREATE TABLE IF NOT EXISTS apt_device_alarm ( id BIGINT NOT NULL AUTO_INCREMENT, gyid VARCHAR(32) NOT NULL, alarm_id VARCHAR(64) NOT NULL, device_code VARCHAR(64) NOT NULL, alarm_source VARCHAR(20) NOT NULL DEFAULT 'DEVICE', alarm_type VARCHAR(20) NOT NULL, severity VARCHAR(20) NOT NULL DEFAULT 'WARN', alarm_event_key VARCHAR(128) NOT NULL, occurred_at DATETIME(3) NOT NULL, handled_at DATETIME(3) NULL, handled_by VARCHAR(64) NULL, handled_result VARCHAR(256) NULL, biz_version BIGINT NOT NULL DEFAULT 1, report_state VARCHAR(20) NOT NULL DEFAULT 'PENDING', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (id), UNIQUE KEY uk_devalarm_gyid_id (gyid, alarm_id), UNIQUE KEY uk_devalarm_gyid_key (gyid, alarm_event_key), KEY idx_devalarm_gyid_state (gyid, alarm_type, occurred_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='T-08 设备报警';