1 parent
329e27b515
commit
8ffeb59dd4
33 files changed
+3427
-111
No files matched your search
@@ -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 连通性探针表(非业务表)';
|
||||
@@ -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 补列)';
|
||||
@@ -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 分机注册状态流水(只追加)';
|
||||
@@ -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 设备报警';
|
||||
@@ -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_* 本轮不建(延后域)
|
||||
@@ -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
|
||||
);
|
||||
@@ -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;
|
||||
Reference in new issue
Block a user