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