Files
jcgl-dev/dev/sql/apt_rev01/03_domain_03_voice.sql
T

227 lines
12 KiB
SQL
Raw Normal View History

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