第一阶段任务,相关数据库定义。
IT-0 verify / verify (push) Canceled after 0s

This commit is contained in:
zfjia committed 2026-11-10 14:52:54 +08:00
1 parent 329e27b515
commit 8ffeb59dd4
33 files changed
+3427 -111

No files matched your search

+50
View File
@@ -0,0 +1,50 @@
-- =============================================================================
-- IT-0 / DV-0 分域增量 DDL —— 公共部分(幂等辅助 + 连通性探针表)
-- 目标库:apt_rev01 @ 127.0.0.1:3306 / MySQL 9.5
-- 设计口径:CR-02 表 3-25(59 张)、表 3-33(PK/UK/IDX/迁移顺序)、
-- 公寓端/03 表 3-8~3-15、公寓端/13 表 13-10 验收③(二次执行幂等)
-- 通用规则:
-- 1) InnoDB / utf8mb4 / utf8mb4_0900_ai_ci
-- 2) 代理主键 id bigint AUTO_INCREMENT;业务幂等键一律 UK 且以 gyid 打头
-- 3) 不建外键(docs/10 表 5-6:跨端/分库场景用应用层约束 + 对账兜底)
-- 4) 状态用 varchar 大写下划线枚举 + CHECK,不用 MySQL ENUM、不用数字码
-- 5) 金额 decimal(12,2)、比率 decimal(6,4)、时间 datetime(3)、禁止浮点
-- 6) deleted tinyint NOT NULL DEFAULT 0;create_time/update_time 审计列
-- 7) 所有 CREATE TABLE 带 IF NOT EXISTS,可重复执行
-- =============================================================================
SET NAMES utf8mb4;
SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
-- 幂等补列存储过程:供 07_patch_columns.sql 与后续迭代增量迁移使用
DROP PROCEDURE IF EXISTS apt_add_column_if_missing;
DELIMITER $$
CREATE PROCEDURE apt_add_column_if_missing(
IN p_table VARCHAR(64),
IN p_column VARCHAR(64),
IN p_ddl TEXT)
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = p_table
AND COLUMN_NAME = p_column
) THEN
SET @apt_ddl = CONCAT('ALTER TABLE `', p_table, '` ADD COLUMN ', p_ddl);
PREPARE apt_stmt FROM @apt_ddl;
EXECUTE apt_stmt;
DEALLOCATE PREPARE apt_stmt;
END IF;
END$$
DELIMITER ;
-- 连通性探针专用表(不计入 59 张业务表):只做 INSERT/SELECT/DELETE 闭环验证
CREATE TABLE IF NOT EXISTS apt_ops_probe (
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '代理主键',
gyid VARCHAR(32) NOT NULL COMMENT '公寓隔离标识',
probe_key VARCHAR(64) NOT NULL COMMENT '探针幂等键',
payload VARCHAR(256) NULL COMMENT '探针载荷',
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '写入时刻',
PRIMARY KEY (id),
UNIQUE KEY uk_probe_gyid_key (gyid, probe_key),
KEY idx_probe_gyid_time (gyid, created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='IT-0 连通性探针表(非业务表)';
+260
View File
@@ -0,0 +1,260 @@
-- =============================================================================
-- 域 1:主数据快照 + 计划任务 + 本地建单(11 张)
-- 来源:公寓端/03 表 3-1(7)、表 3-2(3)、CR-01 表 1-17(apt_local_task)
-- 列级定义:apt_local_task 见 CR-01 表 1-17 + 公寓端/11 表 11-7;
-- 其余 10 张文档只给「表名/owner/写入口」,字段按接口契约与
-- 公寓端/03 表 3-9/3-15 通用规则推断(标注 [推断]),待阶段二冻结评审。
-- =============================================================================
-- 1 主数据版本(platform-down,只读快照;Mock 时 source='LOCAL')
CREATE TABLE IF NOT EXISTS apt_master_version (
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '代理主键',
gyid VARCHAR(32) NOT NULL COMMENT '公寓隔离标识',
domain VARCHAR(32) NOT NULL COMMENT '快照域 APARTMENT/ROOM/PERSON/ROUTE/RULE/HOLIDAY',
source_version BIGINT NOT NULL DEFAULT 0 COMMENT '平台版本号,单调递增',
source VARCHAR(20) NOT NULL DEFAULT 'PLATFORM' COMMENT 'PLATFORM / LOCAL(Mock 数据标 LOCAL)',
state VARCHAR(20) NOT NULL DEFAULT 'APPLIED' COMMENT 'PENDING/APPLIED/FAILED',
applied_at DATETIME(3) NULL COMMENT '生效时刻',
remark VARCHAR(256) NULL,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_mv_gyid_domain (gyid, domain),
KEY idx_mv_gyid_state (gyid, state, applied_at),
CONSTRAINT ck_mv_source CHECK (source IN ('PLATFORM','LOCAL')),
CONSTRAINT ck_mv_state CHECK (state IN ('PENDING','APPLIED','FAILED'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='主数据版本快照 [推断]';
-- 2 公寓档案
CREATE TABLE IF NOT EXISTS apt_master_apartment (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
apartment_code VARCHAR(64) NOT NULL COMMENT '公寓编码',
apartment_name VARCHAR(128) NULL,
city_code VARCHAR(32) NULL,
address VARCHAR(256) NULL,
contact_ref VARCHAR(128) NULL COMMENT '联系方式只存引用',
state VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
source_version BIGINT NOT NULL DEFAULT 0,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_ma_gyid_code (gyid, apartment_code),
CONSTRAINT ck_ma_state CHECK (state IN ('ACTIVE','DISABLED'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='公寓档案 [推断]';
-- 3 房间主数据(含 CR-02 表 3-32 补列 building;Q-20 未决前列存在但不启用)
CREATE TABLE IF NOT EXISTS apt_master_room (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
room_id VARCHAR(64) NOT NULL COMMENT '房间主键(平台下发)',
room_no VARCHAR(32) NOT NULL COMMENT '房号',
room_floor VARCHAR(32) NULL COMMENT '楼层(Q-20 未决前的筛选落点)',
building VARCHAR(64) NULL COMMENT '楼栋;Q-20 未决,保留列不启用(表 3-32)',
bed_count INT NOT NULL DEFAULT 0,
orientation VARCHAR(32) NULL,
room_type VARCHAR(32) NULL,
state VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
state_version BIGINT NOT NULL DEFAULT 1 COMMENT '房态乐观锁,与 source_version 语义不同',
source_version BIGINT NOT NULL DEFAULT 0 COMMENT '平台快照版本;改快照字段返回 40904',
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_mr_gyid_room (gyid, room_id),
KEY idx_mr_gyid_floor_no (gyid, room_floor, room_no),
CONSTRAINT ck_mr_state CHECK (state IN ('ACTIVE','DISABLED'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='房间主数据(platform-down 只读)[推断+补列]';
-- 4 人员主数据(含 公寓端/10 表 10-6 人脸补列:媒体只存引用与校验和)
CREATE TABLE IF NOT EXISTS apt_master_person (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
ryid VARCHAR(64) NOT NULL COMMENT '人员 ID',
xm VARCHAR(64) NOT NULL COMMENT '姓名(快照字段,改则返回 40904)',
work_no VARCHAR(64) NULL COMMENT '工号,平台侧校验唯一性',
dept_code VARCHAR(64) NULL,
person_category VARCHAR(20) NOT NULL DEFAULT 'TRANSIENT' COMMENT 'TRANSIENT / LONG_TERM',
photo_ref VARCHAR(512) NULL COMMENT '照片引用,不存原图二进制',
photo_checksum VARCHAR(128) NULL,
feature_ref VARCHAR(512) NULL COMMENT '特征值引用,不存特征大对象',
feature_checksum VARCHAR(128) NULL,
feature_algo VARCHAR(32) NULL,
feature_version BIGINT NOT NULL DEFAULT 1,
face_sync_state VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING/SYNCED/FAILED/STALE',
state VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
source_version BIGINT NOT NULL DEFAULT 0,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_mp_gyid_ryid (gyid, ryid),
KEY idx_mp_gyid_workno (gyid, work_no),
KEY idx_mp_gyid_name (gyid, xm),
CONSTRAINT ck_mp_category CHECK (person_category IN ('TRANSIENT','LONG_TERM')),
CONSTRAINT ck_mp_face CHECK (face_sync_state IN ('PENDING','SYNCED','FAILED','STALE'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='人员主数据(含 §12 补列)';
-- 5 交路主数据
CREATE TABLE IF NOT EXISTS apt_master_route (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
jlid VARCHAR(64) NOT NULL COMMENT '交路 ID;重复新增返回 40901',
cc VARCHAR(64) NOT NULL COMMENT '车次(必填,缺则 40001)',
kcsj DATETIME(3) NOT NULL COMMENT '开车时刻(必填)',
route_name VARCHAR(128) NULL,
start_station VARCHAR(64) NULL,
end_station VARCHAR(64) NULL,
state VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
stop_reason VARCHAR(256) NULL COMMENT '停用原因(必填,审计留痕)',
source_version BIGINT NOT NULL DEFAULT 0,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_mroute_gyid_jlid (gyid, jlid),
KEY idx_mroute_gyid_cc_time (gyid, cc, kcsj),
CONSTRAINT ck_mroute_state CHECK (state IN ('ACTIVE','STOPPED'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='交路主数据 [推断]';
-- 6 叫乘规则(规则体用 JSON,避免频繁改表)
CREATE TABLE IF NOT EXISTS apt_master_rule (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
rule_id VARCHAR(64) NOT NULL,
rule_type VARCHAR(32) NOT NULL COMMENT 'CALL_TIME / HOLIDAY / TIMEOUT',
rule_version BIGINT NOT NULL DEFAULT 1,
rule_body JSON NULL COMMENT '规则体 JSON',
effective_from DATETIME(3) NULL,
effective_to DATETIME(3) NULL,
state VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
source_version BIGINT NOT NULL DEFAULT 0,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_mrule_gyid_id_ver (gyid, rule_id, rule_version),
KEY idx_mrule_gyid_type (gyid, rule_type, state)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='叫乘规则快照 [推断]';
-- 7 节假日
CREATE TABLE IF NOT EXISTS apt_holiday (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
holiday_date DATE NOT NULL,
holiday_name VARCHAR(64) NULL,
holiday_type VARCHAR(20) NOT NULL DEFAULT 'HOLIDAY',
source_version BIGINT NOT NULL DEFAULT 0,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_holiday_gyid_date (gyid, holiday_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='节假日表 [推断]';
-- 8 平台计划下行落库(jcsj 仅基线,权威值恒由公寓复算 CR-C06)
CREATE TABLE IF NOT EXISTS gy_syn_jcxx (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
jcid VARCHAR(64) NOT NULL COMMENT '叫乘计划 ID',
jlid VARCHAR(64) NULL,
cc VARCHAR(64) NULL,
ryid VARCHAR(64) NULL,
xm VARCHAR(64) NULL,
fjh VARCHAR(32) NULL COMMENT '房间号',
kcsj DATETIME(3) NULL,
jcsj DATETIME(3) NULL COMMENT '平台计划基线(非权威)',
computed_jcsj DATETIME(3) NULL COMMENT '公寓复算值(权威)',
plan_version BIGINT NOT NULL DEFAULT 1,
sync_state VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING/SYNCED/FAILED/DRIFT',
source_version BIGINT NOT NULL DEFAULT 0,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_syn_gyid_jcid (gyid, jcid),
KEY idx_syn_gyid_jlid_time (gyid, jlid, jcsj),
CONSTRAINT ck_syn_state CHECK (sync_state IN ('PENDING','SYNCED','FAILED','DRIFT'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='平台计划下行 [推断]';
-- 9 计划同步状态
CREATE TABLE IF NOT EXISTS gy_syn_jcxx_status (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
jcid VARCHAR(64) NOT NULL,
sync_state VARCHAR(20) NOT NULL DEFAULT 'PENDING',
last_sync_at DATETIME(3) NULL,
error_code VARCHAR(64) NULL,
error_msg VARCHAR(512) NULL,
retry_count INT NOT NULL DEFAULT 0,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_synst_gyid_jcid (gyid, jcid),
KEY idx_synst_gyid_state (gyid, sync_state, last_sync_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='计划同步状态 [推断]';
-- 10 叫乘任务租约锁(防止重复生成任务)
CREATE TABLE IF NOT EXISTS gy_call_duty_match_lock (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
lock_key VARCHAR(128) NOT NULL COMMENT '租约键',
jcid VARCHAR(64) NULL,
owner_ref VARCHAR(64) NULL COMMENT '持锁实例',
lease_until DATETIME(3) NOT NULL COMMENT '租约到期',
state VARCHAR(20) NOT NULL DEFAULT 'HELD',
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_lock_gyid_key (gyid, lock_key),
KEY idx_lock_gyid_lease (gyid, lease_until),
CONSTRAINT ck_lock_state CHECK (state IN ('HELD','RELEASED','EXPIRED'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='叫乘任务租约锁 [推断]';
-- 11 本地建单 / 入住申请(CR-01 表 1-17 + 公寓端/11 表 11-7 补列)
-- Q-40 未冻结前:扩展要素落 request_payload JSON 兜底,不新增列(表 13-10)
CREATE TABLE IF NOT EXISTS apt_local_task (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
task_id VARCHAR(64) NOT NULL COMMENT '本地任务 ID(幂等键)',
jcid VARCHAR(64) NULL COMMENT '预分配叫乘 ID,与 apply_id 一对一',
apply_id VARCHAR(64) NULL COMMENT '入住申请 ID',
origin VARCHAR(20) NOT NULL DEFAULT 'LOCAL' COMMENT 'LOCAL/PLATFORM/DEVICE',
local_version BIGINT NOT NULL DEFAULT 1,
biz_version BIGINT NOT NULL DEFAULT 1,
match_state VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING/MATCHED/UNMATCHED/LOCKED/REJECTED',
checkin_state VARCHAR(24) NOT NULL DEFAULT 'SUBMITTED' COMMENT 'SUBMITTED/AUDITED/CHECKED_IN/REJECTED',
sync_state VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING/SENT/FAILED/DEAD/RETRIED',
fjh VARCHAR(32) NULL,
fjh_final VARCHAR(32) NULL COMMENT '审核后房间',
room_adjust_seq INT NOT NULL DEFAULT 0,
face_verify_state VARCHAR(20) NULL COMMENT 'VERIFIED/UNVERIFIED/SKIPPED',
face_device_code VARCHAR(64) NULL,
face_verified_at DATETIME(3) NULL,
ryid VARCHAR(64) NULL,
xm VARCHAR(64) NULL,
jlid VARCHAR(64) NULL,
cc VARCHAR(64) NULL,
jcsj DATETIME(3) NULL,
request_payload JSON NULL COMMENT 'Q-40 冻结前的 JSON 兜底留痕',
audited_by VARCHAR(64) NULL,
audited_at DATETIME(3) NULL,
checked_in_at DATETIME(3) NULL,
reject_reason VARCHAR(256) NULL,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_lt_gyid_task (gyid, task_id),
UNIQUE KEY uk_lt_gyid_jcid (gyid, jcid),
KEY idx_lt_gyid_apply (gyid, apply_id),
KEY idx_lt_gyid_state (gyid, match_state, checkin_state),
CONSTRAINT ck_lt_match CHECK (match_state IN ('PENDING','MATCHED','UNMATCHED','LOCKED','REJECTED')),
CONSTRAINT ck_lt_checkin CHECK (checkin_state IN ('SUBMITTED','AUDITED','CHECKED_IN','REJECTED')),
CONSTRAINT ck_lt_sync CHECK (sync_state IN ('PENDING','SENT','FAILED','DEAD','RETRIED')),
CONSTRAINT ck_lt_face CHECK (face_verify_state IS NULL OR face_verify_state IN ('VERIFIED','UNVERIFIED','SKIPPED'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='本地建单/入住申请(申请阶段不建 gy_jcxx 行)';
@@ -0,0 +1,254 @@
-- =============================================================================
-- 域 2:执行域(7 张)+ 设备域(4 张)= 11 张
-- 来源:公寓端/03 表 3-3 / 3-4;字段口径见 公寓端/03 表 3-9、表 3-11、表 3-15
-- 说明:gy_jcxx 存量 70 列(docs/11 表 2-1),此处按接口契约给出核心列 + CR-02 表 3-32
-- 两处补列;其余存量列在阶段二冻结后由 07_patch_columns.sql 幂等补齐。
-- 硬约束:ryzt / finish_jc / finish_ly / stoped 只有 apt.duty.state 一个写入口,
-- SQL 必须带 gyid 与条件更新(where id=? and ryzt=?),禁止直接 UPDATE。
-- =============================================================================
-- 12 叫乘主表(执行事实 + 业务终态)
CREATE TABLE IF NOT EXISTS gy_jcxx (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
jcid VARCHAR(64) NOT NULL COMMENT '叫乘 ID',
jlid VARCHAR(64) NULL,
cc VARCHAR(64) NULL,
ryid VARCHAR(64) NULL,
xm VARCHAR(64) NULL,
fjh VARCHAR(32) NULL,
kcsj DATETIME(3) NULL COMMENT '开车时刻',
jcsj DATETIME(3) NULL COMMENT '叫乘时刻(公寓复算,权威)',
jcsj_platform DATETIME(3) NULL COMMENT '平台计划基线(仅对照)',
ryzt VARCHAR(8) NOT NULL DEFAULT '0' COMMENT '叫乘状态 0~5(存量数字码,不跨端)',
finish_jc VARCHAR(2) NOT NULL DEFAULT '0' COMMENT '0 未完成 / 1 已完成',
finish_ly VARCHAR(2) NOT NULL DEFAULT '0' COMMENT '0 在寓 / 1 已离寓',
stoped VARCHAR(2) NOT NULL DEFAULT '0' COMMENT '人工停止',
sjlysj DATETIME(3) NULL COMMENT '实际离寓时间;与 finish_ly 共同判「已入住」',
call_mode VARCHAR(20) NOT NULL DEFAULT 'SIP' COMMENT 'CR-02 表 3-32 补列:SIP / TABLET',
dispatch_seq BIGINT NULL COMMENT 'CR-02 表 3-32 补列:平板派发序号',
biz_version BIGINT NOT NULL DEFAULT 1 COMMENT '条件更新乐观锁',
occurred_at DATETIME(3) NULL COMMENT '业务发生时刻(不判日切)',
received_at DATETIME(3) NULL COMMENT '本地入库时刻',
platform_recv_at DATETIME(3) NULL COMMENT '平台接收时刻(归日以此为准)',
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_jcxx_gyid_jcid (gyid, jcid),
KEY idx_jcxx_gyid_time (gyid, jcsj),
KEY idx_jcxx_gyid_state (gyid, ryzt, finish_ly),
KEY idx_jcxx_gyid_seq (gyid, dispatch_seq),
CONSTRAINT ck_jcxx_ryzt CHECK (ryzt IN ('0','1','2','3','4','5')),
CONSTRAINT ck_jcxx_finish_jc CHECK (finish_jc IN ('0','1')),
CONSTRAINT ck_jcxx_finish_ly CHECK (finish_ly IN ('0','1')),
CONSTRAINT ck_jcxx_stoped CHECK (stoped IN ('0','1')),
CONSTRAINT ck_jcxx_mode CHECK (call_mode IN ('SIP','TABLET'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='叫乘主表;状态字段单写入口 apt.duty.state';
-- 13 叫乘归档(只读,#13 ARCHIVE 摘要来源)
CREATE TABLE IF NOT EXISTS gy_jcxx_his (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
jcid VARCHAR(64) NOT NULL,
jlid VARCHAR(64) NULL,
cc VARCHAR(64) NULL,
ryid VARCHAR(64) NULL,
xm VARCHAR(64) NULL,
fjh VARCHAR(32) NULL,
jcsj DATETIME(3) NULL,
ryzt VARCHAR(8) NULL,
finish_jc VARCHAR(2) NULL,
finish_ly VARCHAR(2) NULL,
sjlysj DATETIME(3) NULL,
archive_batch VARCHAR(64) NULL,
archived_at DATETIME(3) NULL,
summary_payload JSON NULL COMMENT '§15 分组计数 satisfaction{} / roomOccupancy{}',
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_jcxxhis_gyid_jcid (gyid, jcid),
KEY idx_jcxxhis_gyid_date (gyid, archived_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='叫乘归档历史 [推断]';
-- 14 离寓/入住事件(设备与人工登记事实)
CREATE TABLE IF NOT EXISTS gygl_ly_event (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
event_id VARCHAR(64) NOT NULL COMMENT '事件幂等键',
event_type VARCHAR(20) NOT NULL COMMENT 'CHECKIN / CHECKOUT',
event_source VARCHAR(20) NOT NULL COMMENT 'DEVICE / FACE / MANUAL',
jcid VARCHAR(64) NULL,
ryid VARCHAR(64) NULL,
fjh VARCHAR(32) NULL,
occurred_at DATETIME(3) NOT NULL,
received_at DATETIME(3) NULL,
platform_recv_at DATETIME(3) NULL,
report_state VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING/SENT/FAILED/DEAD/RETRIED',
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_lye_gyid_event (gyid, event_id),
KEY idx_lye_gyid_type_time (gyid, event_type, occurred_at),
CONSTRAINT ck_lye_type CHECK (event_type IN ('CHECKIN','CHECKOUT')),
CONSTRAINT ck_lye_source CHECK (event_source IN ('DEVICE','FACE','MANUAL')),
CONSTRAINT ck_lye_report CHECK (report_state IN ('PENDING','SENT','FAILED','DEAD','RETRIED'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='离寓/入住事件 [推断+§13]';
-- 15 房态(唯一写入口 apt-stay,条件更新带 state_version)
CREATE TABLE IF NOT EXISTS gy_rooms (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
room_id VARCHAR(64) NOT NULL,
room_no VARCHAR(32) NOT NULL,
room_floor VARCHAR(32) NULL,
room_status VARCHAR(8) NOT NULL DEFAULT '1' COMMENT '1 空闲/2 住满/3 待清扫/4 不能入住/5 未满/6 保洁中',
in_person_count INT NOT NULL DEFAULT 0,
state_version BIGINT NOT NULL DEFAULT 1 COMMENT '乐观锁:where id=? and state_version=?',
disabled_reason VARCHAR(256) NULL,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_rooms_gyid_room (gyid, room_id),
KEY idx_rooms_gyid_status (gyid, room_status, room_floor),
CONSTRAINT ck_rooms_status CHECK (room_status IN ('1','2','3','4','5','6'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='房间与房态(apt-stay 写入)';
-- 16 保洁任务
CREATE TABLE IF NOT EXISTS gy_clean_task (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
task_id VARCHAR(64) NOT NULL,
room_id VARCHAR(64) NULL,
state VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING/PROCESSING/DONE/CANCELLED',
assignee_ref VARCHAR(64) NULL,
scheduled_at DATETIME(3) NULL,
finished_at DATETIME(3) NULL,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_cleantask_gyid_task (gyid, task_id),
KEY idx_cleantask_gyid_state (gyid, state, scheduled_at),
CONSTRAINT ck_cleantask_state CHECK (state IN ('PENDING','PROCESSING','DONE','CANCELLED'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='保洁任务 [推断]';
-- 17 报警记录
CREATE TABLE IF NOT EXISTS gy_bjxx (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
alarm_id VARCHAR(64) NOT NULL,
jcid VARCHAR(64) NULL,
room_id VARCHAR(64) NULL,
alarm_type VARCHAR(32) NOT NULL,
severity VARCHAR(20) NOT NULL DEFAULT 'WARN',
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',
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_bjxx_gyid_alarm (gyid, alarm_id),
KEY idx_bjxx_gyid_type_time (gyid, alarm_type, occurred_at),
KEY idx_bjxx_gyid_handled (gyid, handled_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报警记录 [推断]';
-- 18 报警日汇总(#13 摘要来源)
CREATE TABLE IF NOT EXISTS gy_bjcstj (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
stat_date DATE NOT NULL,
alarm_count INT NOT NULL DEFAULT 0,
handled_count INT NOT NULL DEFAULT 0,
report_state VARCHAR(20) NOT NULL DEFAULT 'PENDING',
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_bjcstj_gyid_date (gyid, stat_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报警日汇总 [推断]';
-- 19 设备档案(含 §12 人脸设备范围补列)
CREATE TABLE IF NOT EXISTS gy_sb (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
device_code VARCHAR(64) NOT NULL COMMENT '设备编码,入库大写',
device_type VARCHAR(32) NOT NULL COMMENT 'TABLET / FACE / SIP / BROADCAST',
room_id VARCHAR(64) NULL,
state VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
face_scope_type VARCHAR(20) NULL COMMENT '§12:设备人脸范围类型',
face_scope_ref VARCHAR(128) NULL COMMENT '§12:设备人脸范围引用',
last_seen_at DATETIME(3) NULL,
biz_version BIGINT NOT NULL DEFAULT 1,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_sb_gyid_code (gyid, device_code),
KEY idx_sb_gyid_type_state (gyid, device_type, state),
CONSTRAINT ck_sb_state CHECK (state IN ('ACTIVE','DISABLED','OFFLINE'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='设备档案(含 §12 补列)';
-- 20 设备心跳与在线状态
CREATE TABLE IF NOT EXISTS gy_sb_xt (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
device_code VARCHAR(64) NOT NULL,
online_state VARCHAR(20) NOT NULL DEFAULT 'OFFLINE',
app_version VARCHAR(32) NULL,
ip_ref VARCHAR(64) NULL COMMENT '只存引用,不落内网地址',
heartbeat_at DATETIME(3) NULL,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_sbxt_gyid_code (gyid, device_code),
KEY idx_sbxt_gyid_state (gyid, online_state, heartbeat_at),
CONSTRAINT ck_sbxt_state CHECK (online_state IN ('ONLINE','OFFLINE','UNKNOWN'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='设备心跳 [推断]';
-- 21 设备历史指令(存量兼容,只读,不新增写入)
CREATE TABLE IF NOT EXISTS gy_sb_zl (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
command_id VARCHAR(64) NOT NULL,
device_code VARCHAR(64) NULL,
command_type VARCHAR(32) NULL,
state VARCHAR(20) NULL,
occurred_at DATETIME(3) NULL,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_sbzl_gyid_cmd (gyid, command_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='设备历史指令(只读存量兼容)[推断]';
-- 22 设备指令队列(只入队 PENDING,无心跳不伪造 ACKED)
CREATE TABLE IF NOT EXISTS apt_device_command (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
command_id VARCHAR(64) NOT NULL COMMENT '命令幂等键',
device_code VARCHAR(64) NOT NULL,
command_type VARCHAR(32) NOT NULL COMMENT 'FACE_ISSUE/FACE_ERASE/FACE_FULL_SYNC/PLAY_TASK',
payload_json JSON NULL,
state VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING/SENT/ACKED/EXPIRED/FAILED',
protocol_confirmed TINYINT NOT NULL DEFAULT 0 COMMENT '默认 0,设备 ACK 前不置 1',
face_scope_ref VARCHAR(128) NULL COMMENT '§12 补列',
sent_at DATETIME(3) NULL,
acked_at DATETIME(3) NULL,
expire_at DATETIME(3) NULL,
last_error VARCHAR(512) NULL,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_devcmd_gyid_cmd (gyid, command_id),
KEY idx_devcmd_gyid_state (gyid, state, create_time),
CONSTRAINT ck_devcmd_state CHECK (state IN ('PENDING','SENT','ACKED','EXPIRED','FAILED'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='设备指令队列(§12 补列)';
+227
View File
@@ -0,0 +1,227 @@
-- =============================================================================
-- 域 3:语音域(11 张)+ §10 补遗 T-17 apt_sip_reg_status(1 张)= 12 张
-- 来源:公寓端/03 表 3-5;docs/10 表 5-3(PK/UK/IDX/关键字段)、表 5-4(MySQL 类型适配);
-- 公寓端/00 表 0-6~0-8(endpoint / session / recording 逐列)、表 0-9(T-17 逐列);
-- CR-02 表 3-40(T-17 关键约束:只追加、无 update_time)
-- 约束:分机号不可原地改号(改号返回 40906);sync_state 仅 4 值 + CHECK;
-- 录音只存引用与校验和,不落二进制;表上不建外键。
-- =============================================================================
-- 23 分机台账
CREATE TABLE IF NOT EXISTS apt_sip_endpoint (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
endpoint_id VARCHAR(64) NOT NULL,
extension VARCHAR(8) NOT NULL COMMENT '分机号 char(8),入库统一大写',
room_id VARCHAR(64) NULL,
display_name VARCHAR(64) NULL,
config_version BIGINT NOT NULL DEFAULT 1 COMMENT '分机配置版本(区别于 state_version/biz_version)',
sync_state VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '仅 PENDING/SYNCED/FAILED/DRIFT',
enabled TINYINT NOT NULL DEFAULT 1,
last_qualify_at DATETIME(3) NULL,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_endpoint_gyid_id (gyid, endpoint_id),
UNIQUE KEY uk_endpoint_gyid_ext (gyid, extension),
KEY idx_endpoint_gyid_sync (gyid, sync_state),
CONSTRAINT ck_endpoint_sync CHECK (sync_state IN ('PENDING','SYNCED','FAILED','DRIFT'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='SIP 分机台账(先库后 Asterisk + 异步收敛)';
-- 24 分机-房间绑定
CREATE TABLE IF NOT EXISTS apt_sip_binding (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
binding_id VARCHAR(64) NOT NULL,
endpoint_id VARCHAR(64) NOT NULL,
room_id VARCHAR(64) NOT NULL,
effective_from DATETIME(3) NOT NULL,
effective_to DATETIME(3) NULL,
state VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_binding_gyid_id (gyid, binding_id),
KEY idx_binding_gyid_room (gyid, room_id, state)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='分机绑定 [推断]';
-- 25 中继
CREATE TABLE IF NOT EXISTS apt_trunk (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
trunk_id VARCHAR(64) NOT NULL,
trunk_name VARCHAR(64) NULL,
host_ref VARCHAR(128) NULL COMMENT '只存引用,不落内网地址',
state VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
config_version BIGINT NOT NULL DEFAULT 1,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_trunk_gyid_id (gyid, trunk_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='中继 [推断]';
-- 26 通话会话
CREATE TABLE IF NOT EXISTS apt_call_session (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
session_id VARCHAR(64) NOT NULL,
jcid VARCHAR(64) NULL,
endpoint_id VARCHAR(64) NULL,
conf_no VARCHAR(64) NULL COMMENT '单 Conf-01 兼容值,不加唯一约束',
call_mode VARCHAR(20) NOT NULL DEFAULT 'SIP',
call_state VARCHAR(20) NOT NULL DEFAULT 'INIT',
started_at DATETIME(3) NULL,
answered_at DATETIME(3) NULL,
ended_at DATETIME(3) NULL,
hangup_cause VARCHAR(64) NULL,
biz_version BIGINT NOT NULL DEFAULT 1,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_callsession_gyid_id (gyid, session_id),
KEY idx_callsession_gyid_jcid (gyid, jcid),
KEY idx_callsession_gyid_state (gyid, call_state, started_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='通话会话(ConfbridgeJoin 判接通)';
-- 27 AMI 事件(只追加,明细不上报)
CREATE TABLE IF NOT EXISTS apt_call_event (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
event_seq BIGINT NOT NULL COMMENT '同会话单调',
event_id VARCHAR(64) NOT NULL,
session_id VARCHAR(64) NULL,
event_type VARCHAR(32) NOT NULL,
event_payload JSON NULL,
occurred_at DATETIME(3) NOT NULL,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_callevent_gyid_id (gyid, event_id),
UNIQUE KEY uk_callevent_gyid_seq (gyid, session_id, event_seq),
KEY idx_callevent_gyid_time (gyid, occurred_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AMI 事件(只追加)[推断]';
-- 28 AMI 事件归档(只读)
CREATE TABLE IF NOT EXISTS apt_call_event_his (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
event_id VARCHAR(64) NOT NULL,
event_seq BIGINT NOT NULL,
session_id VARCHAR(64) NULL,
event_type VARCHAR(32) NULL,
event_payload JSON NULL,
occurred_at DATETIME(3) NULL,
archived_at DATETIME(3) NULL,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_calleventhis_gyid_id (gyid, event_id),
KEY idx_calleventhis_gyid_date (gyid, archived_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AMI 事件归档 [推断]';
-- 29 录音索引(只存引用,PURGED 返回 41001)
CREATE TABLE IF NOT EXISTS apt_recording (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
recording_id VARCHAR(64) NOT NULL,
session_id VARCHAR(64) NULL,
file_ref VARCHAR(512) NULL COMMENT '签名地址引用,不落二进制',
checksum VARCHAR(128) NULL,
duration_ms BIGINT NULL,
state VARCHAR(20) NOT NULL DEFAULT 'RECORDING' COMMENT 'RECORDING/AVAILABLE/MISSING/PURGED',
expire_at DATETIME(3) NULL,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_recording_gyid_id (gyid, recording_id),
KEY idx_recording_gyid_session (gyid, session_id),
CONSTRAINT ck_recording_state CHECK (state IN ('RECORDING','AVAILABLE','MISSING','PURGED'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='录音索引(§12:录音不出公寓)';
-- 30 TTS 播报记录
CREATE TABLE IF NOT EXISTS apt_tts_utterance (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
utterance_id VARCHAR(64) NOT NULL,
text_ref VARCHAR(256) NULL,
audio_ref VARCHAR(512) NULL,
state VARCHAR(20) NOT NULL DEFAULT 'PENDING',
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_tts_gyid_id (gyid, utterance_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='TTS 播报 [推断]';
-- 31 Asterisk 配置版本
CREATE TABLE IF NOT EXISTS apt_ast_config_version (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
version_id VARCHAR(64) NOT NULL,
config_type VARCHAR(32) NOT NULL,
config_version BIGINT NOT NULL DEFAULT 1,
checksum VARCHAR(128) NULL,
applied_at DATETIME(3) NULL,
state VARCHAR(20) NOT NULL DEFAULT 'DRAFT',
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_astcfg_gyid_ver (gyid, version_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Asterisk 配置版本 [推断]';
-- 32 配置漂移对账
CREATE TABLE IF NOT EXISTS apt_ast_drift (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
drift_id VARCHAR(64) NOT NULL,
endpoint_id VARCHAR(64) NULL,
drift_type VARCHAR(32) NOT NULL,
expected_ref VARCHAR(256) NULL,
actual_ref VARCHAR(256) NULL,
detected_at DATETIME(3) NOT NULL,
resolved_at DATETIME(3) NULL,
state VARCHAR(20) NOT NULL DEFAULT 'OPEN',
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_astdrift_gyid_id (gyid, drift_id),
KEY idx_astdrift_gyid_state (gyid, state, detected_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='配置漂移 [推断]';
-- 33 AMI 会话
CREATE TABLE IF NOT EXISTS apt_ast_ami_session (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
ami_session_id VARCHAR(64) NOT NULL,
connected_at DATETIME(3) NULL,
disconnected_at DATETIME(3) NULL,
reconnect_count INT NOT NULL DEFAULT 0,
state VARCHAR(20) NOT NULL DEFAULT 'DOWN',
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_amisession_gyid_id (gyid, ami_session_id),
KEY idx_amisession_gyid_state (gyid, state, connected_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AMI 会话 [推断]';
-- 34 T-17 分机注册状态流水(CR-02 §10 补遗 / 公寓端/00 表 0-9)
-- 只追加、无 update_time;event_seq 同分机单调;恢复只追加不清空
CREATE TABLE IF NOT EXISTS apt_sip_reg_status (
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '代理主键',
gyid VARCHAR(32) NOT NULL,
endpoint_id VARCHAR(64) NOT NULL,
event_seq BIGINT NOT NULL COMMENT '同分机单调递增',
state VARCHAR(20) NOT NULL COMMENT 'REGISTERED/UNREGISTERED/UNREACHABLE/UNKNOWN',
prev_state VARCHAR(20) NULL,
source VARCHAR(20) NOT NULL COMMENT 'AMI_EVENT/QUALIFY/PROBE/MANUAL/RECONCILE',
alarm_id VARCHAR(64) NULL COMMENT '关联 apt_device_alarm',
alarm_event_key VARCHAR(128) NULL COMMENT 'hash(gyid,endpoint_id,SIP_OFFLINE,offline_since)',
offline_since DATETIME(3) NULL,
occurred_at DATETIME(3) NOT NULL,
biz_version BIGINT NOT NULL DEFAULT 1,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_sipreg_gyid_seq (gyid, endpoint_id, event_seq),
KEY idx_sipreg_gyid_state_time (gyid, state, occurred_at),
KEY idx_sipreg_gyid_ep_time (gyid, endpoint_id, occurred_at),
CONSTRAINT ck_sipreg_state CHECK (state IN ('REGISTERED','UNREGISTERED','UNREACHABLE','UNKNOWN')),
CONSTRAINT ck_sipreg_source CHECK (source IN ('AMI_EVENT','QUALIFY','PROBE','MANUAL','RECONCILE'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='T-17 分机注册状态流水(只追加)';
+145
View File
@@ -0,0 +1,145 @@
-- =============================================================================
-- 域 4:账务本地域(5 张)+ T-11 apt_ledger_offline(1 张)= 6 张
-- 来源:公寓端/03 表 3-6;公寓端/12 表 12-7~12-9(双额度 / 状态链 / 补列);
-- CR-02 表 3-30(T-11 列级定义);CR-C34 金额口径、CR-C37 现金充值计收入
-- 重要:本域属「延后域」(IT-9~IT-11 / P2)。按 公寓端/13 表 13-29,
-- 第一轮**只建表结构、预置错误码与权限点,不开放任何读写、不建业务代码**;
-- 平台统计账务三类指标按 NO_DATA / BLOCKED 输出,不推断不补零。
-- =============================================================================
-- 35 余额主数据(公寓本地缓存;platform-ledger 为余额主账唯一写者)
CREATE TABLE IF NOT EXISTS gy_ykt_remainder (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
ryid VARCHAR(64) NOT NULL,
xm VARCHAR(64) NULL,
knye DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '卡内/补贴额度',
xjye DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '现金额度(充值只增此列)',
xfze DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '消费总额',
bzze DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '补助总额',
xfxjje DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '现金消费额',
xfbzje DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '补助消费额',
balance_version BIGINT NOT NULL DEFAULT 1 COMMENT '平台主账版本',
local_balance_version BIGINT NOT NULL DEFAULT 1 COMMENT '本地 CAS 版本',
last_reconciled_on DATE NULL,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_remainder_gyid_ryid (gyid, ryid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='双额度余额缓存(延后域,本期不读写)';
-- 36 消费流水(一笔消费只一条 flow_id)
CREATE TABLE IF NOT EXISTS gy_ykt_consume (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
flow_id VARCHAR(64) NOT NULL COMMENT '消费流水幂等键',
ryid VARCHAR(64) NOT NULL,
amount DECIMAL(12,2) NOT NULL,
allowance_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '补贴部分(CR-C38 统计取此列)',
cash_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '现金补足部分',
recipe_version VARCHAR(64) NULL,
device_code VARCHAR(64) NULL,
device_event_id VARCHAR(64) NULL COMMENT '设备事件幂等键',
ledger_state VARCHAR(24) NOT NULL DEFAULT 'SUBMITTED' COMMENT 'SUBMITTED/DEDUCTED/REPORTED/RECONCILED/REJECTED/REVERSED',
offline_scope VARCHAR(20) NOT NULL DEFAULT 'LOCAL_ONLY' COMMENT 'LOCAL_ONLY/SYNCED/RECONCILED',
occurred_at DATETIME(3) NOT NULL,
received_at DATETIME(3) NULL,
platform_recv_at DATETIME(3) NULL COMMENT '归日以此为准',
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_consume_gyid_flow (gyid, flow_id),
UNIQUE KEY uk_consume_gyid_devevt (gyid, device_event_id),
KEY idx_consume_gyid_time (gyid, occurred_at),
CONSTRAINT ck_consume_ledger CHECK (ledger_state IN ('SUBMITTED','DEDUCTED','REPORTED','RECONCILED','REJECTED','REVERSED'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='消费流水(延后域,本期不读写)';
-- 37 补贴发放
CREATE TABLE IF NOT EXISTS gy_ykt_allowance (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
allowance_id VARCHAR(64) NOT NULL,
ryid VARCHAR(64) NOT NULL,
amount DECIMAL(12,2) NOT NULL,
period VARCHAR(20) NULL,
issue_at DATETIME(3) NULL,
state VARCHAR(20) NOT NULL DEFAULT 'ISSUED',
report_state VARCHAR(20) NOT NULL DEFAULT 'PENDING',
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_allowance_gyid_id (gyid, allowance_id),
KEY idx_allowance_gyid_ryid (gyid, ryid, issue_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='补贴发放(延后域,本期不读写)[推断]';
-- 38 线下充值申请(申请表不存金额,金额由管理员核对后写入记录)
CREATE TABLE IF NOT EXISTS gy_ykt_cash_request (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
request_id VARCHAR(64) NOT NULL,
ryid VARCHAR(64) NOT NULL,
request_state VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING/COMPLETED/CANCELLED',
confirmed_by VARCHAR(64) NULL,
confirmed_at DATETIME(3) NULL,
cancel_reason VARCHAR(256) NULL,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_cashreq_gyid_id (gyid, request_id),
KEY idx_cashreq_gyid_state (gyid, request_state, create_time),
CONSTRAINT ck_cashreq_state CHECK (request_state IN ('PENDING','COMPLETED','CANCELLED'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='线下充值申请(申请表不存金额)';
-- 39 现金充值记录(计收入,不与消费抵销 CR-C37)
CREATE TABLE IF NOT EXISTS gy_ykt_xjczjl (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
flow_id VARCHAR(64) NOT NULL,
request_id VARCHAR(64) NULL,
ryid VARCHAR(64) NOT NULL,
amount DECIMAL(12,2) NOT NULL COMMENT '正数,计期间收入',
recharge_channel VARCHAR(20) NOT NULL DEFAULT 'OFFLINE_CASH',
occurred_at DATETIME(3) NOT NULL,
platform_recv_at DATETIME(3) NULL,
report_state VARCHAR(20) NOT NULL DEFAULT 'PENDING',
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_xjczjl_gyid_flow (gyid, flow_id),
KEY idx_xjczjl_gyid_time (gyid, occurred_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='现金充值记录(延后域,本期不读写)';
-- 40 T-11 断网本地流水(CR-02 表 3-30 列级定义 + §14 补列)
CREATE TABLE IF NOT EXISTS apt_ledger_offline (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
flow_id VARCHAR(64) NOT NULL,
type VARCHAR(30) NOT NULL COMMENT 'CONSUME / RECHARGE',
ryid VARCHAR(64) NOT NULL,
card_no VARCHAR(64) NULL,
device_code VARCHAR(64) NULL,
amount DECIMAL(12,2) NOT NULL COMMENT '扣减记负数,充值记正数',
allowance_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '§14 补列:补贴部分',
cash_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '§14 补列:现金部分',
balance_before DECIMAL(12,2) NOT NULL COMMENT 'CAS 前值',
balance_after DECIMAL(12,2) NOT NULL COMMENT 'CAS 后值',
offline_scope VARCHAR(20) NOT NULL DEFAULT 'LOCAL_ONLY' COMMENT 'LOCAL_ONLY/SYNCED/RECONCILED',
local_balance_version BIGINT NOT NULL DEFAULT 1,
quota_ref VARCHAR(64) NULL COMMENT '#1 离线额度批次',
idempotency_key VARCHAR(128) NULL COMMENT 'hash(gyId+bizType+bizId+bizVersion)',
occurred_at DATETIME(3) NOT NULL,
synced_at DATETIME(3) NULL,
platform_recv_at DATETIME(3) NULL,
reconcile_state VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING/RECONCILED/DIFF/REVERSED',
last_error VARCHAR(512) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_ledgeroff_gyid_type_flow (gyid, type, flow_id),
KEY idx_ledgeroff_gyid_state (gyid, reconcile_state, occurred_at),
CONSTRAINT ck_ledgeroff_type CHECK (type IN ('CONSUME','RECHARGE')),
CONSTRAINT ck_ledgeroff_scope CHECK (offline_scope IN ('LOCAL_ONLY','SYNCED','RECONCILED'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='T-11 断网本地账务流水(延后域)';
@@ -0,0 +1,215 @@
-- =============================================================================
-- 域 5:上报 / 值班 / 运维(7 张)+ T-09 / T-10 / T-12 / T-13(4 张)= 11 张
-- 来源:公寓端/03 表 3-7;CR-02 表 3-29(T-12/T-13)、表 3-30(T-09/T-10)、表 3-32(补列)
-- 关键区分:apt_report_outbox 是「队列」(本地状态机 PENDING/SENDING/SENT/FAILED/DEAD,
-- 见 公寓端/03 表 3-11),apt_report_history 是「终态流水」,两者不互换(CR-C10)。
-- 跨端信封 reportState 正式五值 PENDING/SENT/FAILED/DEAD/RETRIED(CR-02 表 3-21)。
-- =============================================================================
-- 41 上报 outbox 队列(含 CR-02 表 3-32 补列 retry_batch_id)
CREATE TABLE IF NOT EXISTS apt_report_outbox (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
idempotency_key VARCHAR(128) NOT NULL COMMENT 'hash(gyId+bizType+bizId+bizVersion)',
biz_type VARCHAR(64) NOT NULL COMMENT '既有 bizType,不新增枚举',
biz_id VARCHAR(64) NOT NULL,
biz_version BIGINT NOT NULL DEFAULT 1,
payload JSON NULL,
state VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '本地队列态(表 3-11)',
retry_batch_id VARCHAR(64) NULL COMMENT 'CR-02 表 3-32 补列',
retry_count INT NOT NULL DEFAULT 0,
watermark BIGINT NOT NULL DEFAULT 0 COMMENT '对账三维 max(watermark)',
next_retry_at DATETIME(3) NULL,
last_error VARCHAR(512) NULL,
occurred_at DATETIME(3) NOT NULL,
received_at DATETIME(3) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_outbox_gyid_idem (gyid, idempotency_key),
KEY idx_outbox_gyid_state_wm (gyid, state, watermark),
KEY idx_outbox_gyid_biz (gyid, biz_type, biz_id),
CONSTRAINT ck_outbox_state CHECK (state IN ('PENDING','SENDING','SENT','FAILED','DEAD'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='上报 outbox 队列(非终态流水)';
-- 42 上报水位
CREATE TABLE IF NOT EXISTS apt_report_watermark (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
current_watermark BIGINT NOT NULL DEFAULT 0,
acked_watermark BIGINT NOT NULL DEFAULT 0,
last_heartbeat_at DATETIME(3) NULL,
clock_skew_ms BIGINT NULL COMMENT '#14 心跳时钟偏差',
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_watermark_gyid (gyid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='上报水位 [推断]';
-- 43 值班操作审计(所有写操作经审计切面;Q-40 冻结前也作 JSON 兜底载体)
CREATE TABLE IF NOT EXISTS duty_operation_log (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
log_id VARCHAR(64) NOT NULL,
operator_ref VARCHAR(64) NULL,
module VARCHAR(64) NULL,
action VARCHAR(64) NULL,
detail JSON NULL COMMENT 'Q-40 / Q-48 冻结前的 JSON 兜底留痕',
trace_id VARCHAR(64) NULL,
occurred_at DATETIME(3) NOT NULL,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_oplog_gyid_log (gyid, log_id),
KEY idx_oplog_gyid_time (gyid, occurred_at),
KEY idx_oplog_gyid_trace (gyid, trace_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='值班操作审计 [推断]';
-- 44 人工命令(只提交命令,由 apt.duty.state 落状态)
CREATE TABLE IF NOT EXISTS duty_manual_action (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
action_id VARCHAR(64) NOT NULL COMMENT '与 command_id 对齐,幂等键',
jcid VARCHAR(64) NULL,
action_type VARCHAR(32) NOT NULL COMMENT 'STOP / RE_CALL / CORRECT',
state VARCHAR(20) NOT NULL DEFAULT 'PENDING',
duplicated TINYINT NOT NULL DEFAULT 0 COMMENT '重复命令返回 duplicated=true',
result_code VARCHAR(64) NULL,
requested_by VARCHAR(64) NULL,
occurred_at DATETIME(3) NOT NULL,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_manual_gyid_action (gyid, action_id),
KEY idx_manual_gyid_jcid (gyid, jcid, occurred_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='人工命令(不直写业务状态)[推断]';
-- 45 交班日志
CREATE TABLE IF NOT EXISTS duty_shift_handover (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
handover_id VARCHAR(64) NOT NULL,
shift_id VARCHAR(64) NULL,
from_operator VARCHAR(64) NULL,
to_operator VARCHAR(64) NULL,
content JSON NULL,
handed_at DATETIME(3) NULL,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_handover_gyid_id (gyid, handover_id),
KEY idx_handover_gyid_time (gyid, handed_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='交班日志 [推断]';
-- 46 运维自检(12 项)
CREATE TABLE IF NOT EXISTS apt_ops_selfcheck (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
check_id VARCHAR(64) NOT NULL,
check_item VARCHAR(64) NOT NULL,
result VARCHAR(20) NOT NULL DEFAULT 'UNKNOWN',
call_ready TINYINT NOT NULL DEFAULT 0,
detail VARCHAR(512) NULL,
checked_at DATETIME(3) NOT NULL,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_selfcheck_gyid_id (gyid, check_id),
KEY idx_selfcheck_gyid_time (gyid, checked_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='运维自检 12 项 [推断]';
-- 47 人员账号映射
CREATE TABLE IF NOT EXISTS apt_person_account (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
ryid VARCHAR(64) NOT NULL,
sys_user_id BIGINT NULL,
state VARCHAR(20) NOT NULL DEFAULT 'ACTIVE',
source_version BIGINT NOT NULL DEFAULT 0,
deleted TINYINT NOT NULL DEFAULT 0,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
update_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_personacct_gyid_ryid (gyid, ryid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='人员账号映射 [推断]';
-- 48 T-09 上报终态流水(CR-02 表 3-30;不是队列)
CREATE TABLE IF NOT EXISTS apt_report_history (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
idempotency_key VARCHAR(128) NOT NULL,
biz_type VARCHAR(64) NOT NULL,
biz_id VARCHAR(64) NOT NULL,
biz_version BIGINT NOT NULL DEFAULT 1,
batch_id VARCHAR(64) NULL,
retry_batch_id VARCHAR(64) NULL,
state VARCHAR(20) NOT NULL COMMENT 'SENT/FAILED/DEAD/RETRIED',
result_code VARCHAR(64) NULL,
last_error VARCHAR(512) NULL,
occurred_at DATETIME(3) NULL,
sent_at DATETIME(3) NULL,
platform_recv_at DATETIME(3) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_reporthis_gyid_idem (gyid, idempotency_key),
KEY idx_reporthis_gyid_state (gyid, state, sent_at),
CONSTRAINT ck_reporthis_state CHECK (state IN ('SENT','FAILED','DEAD','RETRIED'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='T-09 上报终态流水';
-- 49 T-10 续报批次(CR-02 表 3-30)
CREATE TABLE IF NOT EXISTS apt_report_retry_batch (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
batch_id VARCHAR(64) NOT NULL,
state VARCHAR(20) NOT NULL DEFAULT 'RUNNING',
trigger_type VARCHAR(20) NOT NULL DEFAULT 'MANUAL' COMMENT 'MANUAL / AUTO',
item_count INT NOT NULL DEFAULT 0,
success_count INT NOT NULL DEFAULT 0,
from_watermark BIGINT NOT NULL DEFAULT 0,
to_watermark BIGINT NOT NULL DEFAULT 0,
started_at DATETIME(3) NULL,
finished_at DATETIME(3) NULL,
created_by VARCHAR(64) NULL,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_retrybatch_gyid_id (gyid, batch_id),
CONSTRAINT ck_retrybatch_trigger CHECK (trigger_type IN ('MANUAL','AUTO'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='T-10 续报批次(复用原幂等键)';
-- 50 T-12 排班(CR-02 表 3-29)
CREATE TABLE IF NOT EXISTS duty_roster (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
shift_id VARCHAR(64) NOT NULL COMMENT '日期 + 班次',
ryid VARCHAR(64) NOT NULL,
shift_date DATE NOT NULL,
shift_type VARCHAR(20) NOT NULL DEFAULT 'DAY' COMMENT 'DAY / NIGHT',
start_at DATETIME(3) NOT NULL,
end_at DATETIME(3) NOT NULL,
state VARCHAR(20) NOT NULL DEFAULT 'PLANNED' COMMENT 'PLANNED/CONFIRMED/CANCELLED',
created_by VARCHAR(64) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_roster_gyid_shift_ryid (gyid, shift_id, ryid),
KEY idx_roster_gyid_date (gyid, shift_date),
CONSTRAINT ck_roster_state CHECK (state IN ('PLANNED','CONFIRMED','CANCELLED')),
CONSTRAINT ck_roster_type CHECK (shift_type IN ('DAY','NIGHT'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='T-12 排班';
-- 51 T-13 盯控质量考核(CR-02 表 3-29;本地算、平台汇总)
CREATE TABLE IF NOT EXISTS duty_performance (
id BIGINT NOT NULL AUTO_INCREMENT,
gyid VARCHAR(32) NOT NULL,
ryid VARCHAR(64) NOT NULL,
shift_id VARCHAR(64) NULL,
stat_date DATE NOT NULL,
response_sec_avg DECIMAL(10,2) NOT NULL DEFAULT 0.00,
alarm_handled_rate DECIMAL(10,2) NOT NULL DEFAULT 0.00,
call_success_rate DECIMAL(10,2) NOT NULL DEFAULT 0.00,
manual_action_count INT NOT NULL DEFAULT 0,
alarm_missed_count INT NOT NULL DEFAULT 0,
calc_version BIGINT NOT NULL DEFAULT 1,
report_state VARCHAR(20) NOT NULL DEFAULT 'PENDING',
calculated_at DATETIME(3) NULL,
create_time DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_perf_gyid_date_ryid (gyid, stat_date, ryid),
KEY idx_perf_gyid_date (gyid, stat_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='T-13 盯控质量考核';
@@ -0,0 +1,196 @@
-- =============================================================================
-- 域 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 设备报警';
+41
View File
@@ -0,0 +1,41 @@
-- =============================================================================
-- 增量补列(幂等):CR-02 表 3-32 / §12 表 10-6 / §13 表 11-7 / §14 表 12-7~12-9
-- 用法:先执行 00_common.sql 建立 apt_add_column_if_missing,再执行本文件。
-- 说明:本轮 apt_rev01 为空库,01~06 已把补列直接建在表内,本文件为空操作(no-op);
-- 它服务于「已有旧库的后续迭代」与阶段二冻结评审后的增量迁移,重复执行不报错。
-- Q-20 / Q-40 / Q-43 / Q-48 未决项:一律不新增列,按表 13-10 用 JSON 兜底
-- (duty_operation_log.detail / apt_local_task.request_payload / PL_JOB_*)。
-- =============================================================================
CALL apt_add_column_if_missing('gy_jcxx', 'call_mode',
"call_mode VARCHAR(20) NOT NULL DEFAULT 'SIP' COMMENT 'SIP / TABLET'");
CALL apt_add_column_if_missing('gy_jcxx', 'dispatch_seq',
'dispatch_seq BIGINT NULL COMMENT ''平板派发序号''');
CALL apt_add_column_if_missing('apt_report_outbox', 'retry_batch_id',
'retry_batch_id VARCHAR(64) NULL COMMENT ''续报批次''');
CALL apt_add_column_if_missing('apt_master_room', 'building',
'building VARCHAR(64) NULL COMMENT ''楼栋;Q-20 未决前列存在但不启用''');
CALL apt_add_column_if_missing('apt_master_person', 'photo_ref',
'photo_ref VARCHAR(512) NULL COMMENT ''照片引用''');
CALL apt_add_column_if_missing('apt_master_person', 'feature_ref',
'feature_ref VARCHAR(512) NULL COMMENT ''特征值引用''');
CALL apt_add_column_if_missing('apt_master_person', 'face_sync_state',
"face_sync_state VARCHAR(20) NOT NULL DEFAULT 'PENDING'");
CALL apt_add_column_if_missing('apt_local_task', 'apply_id',
'apply_id VARCHAR(64) NULL COMMENT ''入住申请 ID''');
CALL apt_add_column_if_missing('apt_local_task', 'checkin_state',
"checkin_state VARCHAR(24) NOT NULL DEFAULT 'SUBMITTED'");
CALL apt_add_column_if_missing('apt_local_task', 'request_payload',
'request_payload JSON NULL COMMENT ''Q-40 冻结前 JSON 兜底''');
CALL apt_add_column_if_missing('gy_ykt_remainder', 'local_balance_version',
'local_balance_version BIGINT NOT NULL DEFAULT 1');
CALL apt_add_column_if_missing('gy_sb', 'face_scope_type',
'face_scope_type VARCHAR(20) NULL COMMENT ''§12 人脸设备范围''');
-- 未决项显式留痕(不做 DDL):
-- Q-20 楼栋字段启用 -> apt_master_room.building 已建但不参与筛选
-- Q-40 apt_local_task 补列冻结 -> request_payload JSON 兜底
-- Q-43 账务补列冻结 -> 04_domain_04_ledger.sql 只建结构,不开放读写
-- Q-48 平台统计表冻结 -> 平台库 pl_apt_stat_* 本轮不建(延后域)
+44
View File
@@ -0,0 +1,44 @@
-- =============================================================================
-- 可重放回填种子(DDL 与回填分离;CR-02 表 3-33 / 表 13-10 验收③)
-- 所有 INSERT 均为「不存在才插入」,重复执行不产生重复数据。
-- 执行前可用以下方式覆盖公寓标识(需与环境变量 APT_GY_ID 保持一致):
-- mysql ... -e "SET @apt_gyid='YOUR_GYID'; SOURCE 08_seed_replayable.sql"
-- =============================================================================
SET @apt_gyid := COALESCE(NULLIF(@apt_gyid, ''), 'APT-REV01-001');
-- 主数据版本基线:Mock 阶段显式标 LOCAL、source_version=0
INSERT INTO apt_master_version (gyid, domain, source_version, source, state, applied_at, remark)
SELECT @apt_gyid, d.domain_name, 0, 'LOCAL', 'APPLIED', NOW(3), 'IT-0 基线种子(非平台下发)'
FROM (
SELECT 'APARTMENT' AS domain_name UNION ALL SELECT 'ROOM' UNION ALL SELECT 'PERSON'
UNION ALL SELECT 'ROUTE' UNION ALL SELECT 'RULE' UNION ALL SELECT 'HOLIDAY'
) d
WHERE NOT EXISTS (
SELECT 1 FROM apt_master_version v WHERE v.gyid = @apt_gyid AND v.domain = d.domain_name
);
-- 上报水位初始行
INSERT INTO apt_report_watermark (gyid, current_watermark, acked_watermark)
SELECT @apt_gyid, 0, 0
WHERE NOT EXISTS (SELECT 1 FROM apt_report_watermark w WHERE w.gyid = @apt_gyid);
-- 12 项自检项定义(只登记检查项,结果由 IT-7 落库;本轮不写业务结果)
INSERT INTO apt_ops_selfcheck (gyid, check_id, check_item, result, call_ready, checked_at)
SELECT @apt_gyid, c.check_id, c.check_item, 'UNKNOWN', 0, NOW(3)
FROM (
SELECT 'IT0-01' AS check_id, 'DB_CONNECT' AS check_item UNION ALL
SELECT 'IT0-02', 'DB_READ_WRITE' UNION ALL
SELECT 'IT0-03', 'REDIS_CONNECT' UNION ALL
SELECT 'IT0-04', 'REDIS_DB_INDEX' UNION ALL
SELECT 'IT0-05', 'REDIS_READ_WRITE' UNION ALL
SELECT 'IT0-06', 'DDL_TABLE_COUNT' UNION ALL
SELECT 'IT0-07', 'DDL_PK_UK_IDX' UNION ALL
SELECT 'IT0-08', 'GYID_ISOLATION' UNION ALL
SELECT 'IT0-09', 'CREDENTIAL_SCAN' UNION ALL
SELECT 'IT0-10', 'QUARTZ_STORE' UNION ALL
SELECT 'IT0-11', 'AMI_REACHABLE' UNION ALL
SELECT 'IT0-12', 'CALL_READY'
) c
WHERE NOT EXISTS (
SELECT 1 FROM apt_ops_selfcheck s WHERE s.gyid = @apt_gyid AND s.check_id = c.check_id
);
+64
View File
@@ -0,0 +1,64 @@
-- =============================================================================
-- IT-0 验收校验脚本(表 13-10 验收③ / MS-0)
-- 预期:business_table_count = 59;missing_pk = 0;missing_gyid = 0
-- 口径:apt_* 36 + gy_*/gygl_* 18 + duty_* 5 = 59(CR-02 表 3-25、公寓端/03 表 3-8)
-- apt_ops_probe 为连通性探针表,显式排除,不计入 59 张。
-- =============================================================================
SELECT '=== 1. 业务表总数(应为 59)===' AS section;
SELECT COUNT(*) AS business_table_count
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_TYPE = 'BASE TABLE'
AND (TABLE_NAME LIKE 'apt\_%' OR TABLE_NAME LIKE 'gy\_%'
OR TABLE_NAME LIKE 'gygl\_%' OR TABLE_NAME LIKE 'duty\_%')
AND TABLE_NAME <> 'apt_ops_probe';
SELECT '=== 2. 分前缀分布(应为 apt 36 / gy 17 / gygl 1 / duty 5)===' AS section;
SELECT CASE
WHEN TABLE_NAME LIKE 'apt\_%' THEN 'apt'
WHEN TABLE_NAME LIKE 'gygl\_%' THEN 'gygl'
WHEN TABLE_NAME LIKE 'gy\_%' THEN 'gy'
ELSE 'duty'
END AS prefix, COUNT(*) AS cnt
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND (TABLE_NAME LIKE 'apt\_%' OR TABLE_NAME LIKE 'gy\_%'
OR TABLE_NAME LIKE 'gygl\_%' OR TABLE_NAME LIKE 'duty\_%')
AND TABLE_NAME <> 'apt_ops_probe'
GROUP BY prefix ORDER BY prefix;
SELECT '=== 3. 缺主键的业务表(应为 0 行)===' AS section;
SELECT t.TABLE_NAME
FROM information_schema.TABLES t
WHERE t.TABLE_SCHEMA = DATABASE()
AND (t.TABLE_NAME LIKE 'apt\_%' OR t.TABLE_NAME LIKE 'gy\_%'
OR t.TABLE_NAME LIKE 'gygl\_%' OR t.TABLE_NAME LIKE 'duty\_%')
AND t.TABLE_NAME <> 'apt_ops_probe'
AND NOT EXISTS (
SELECT 1 FROM information_schema.TABLE_CONSTRAINTS c
WHERE c.TABLE_SCHEMA = t.TABLE_SCHEMA AND c.TABLE_NAME = t.TABLE_NAME
AND c.CONSTRAINT_TYPE = 'PRIMARY KEY'
);
SELECT '=== 4. 缺 gyid 列的业务表(应为 0 行)===' AS section;
SELECT t.TABLE_NAME
FROM information_schema.TABLES t
WHERE t.TABLE_SCHEMA = DATABASE()
AND (t.TABLE_NAME LIKE 'apt\_%' OR t.TABLE_NAME LIKE 'gy\_%'
OR t.TABLE_NAME LIKE 'gygl\_%' OR t.TABLE_NAME LIKE 'duty\_%')
AND t.TABLE_NAME <> 'apt_ops_probe'
AND NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS c
WHERE c.TABLE_SCHEMA = t.TABLE_SCHEMA AND c.TABLE_NAME = t.TABLE_NAME
AND c.COLUMN_NAME = 'gyid'
);
SELECT '=== 5. 外键数量(应为 0:docs/10 表 5-6 明确不建外键)===' AS section;
SELECT COUNT(*) AS foreign_key_count
FROM information_schema.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = DATABASE() AND CONSTRAINT_TYPE = 'FOREIGN KEY';
SELECT '=== 6. 探针表与基线种子 ===' AS section;
SELECT (SELECT COUNT(*) FROM apt_ops_probe) AS probe_rows,
(SELECT COUNT(*) FROM apt_master_version WHERE source = 'LOCAL') AS local_baseline_rows,
(SELECT COUNT(*) FROM apt_ops_selfcheck) AS selfcheck_item_rows;