228 lines
12 KiB
SQL
228 lines
12 KiB
SQL
-- =============================================================================
|
||
-- 域 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 分机注册状态流水(只追加)';
|