Files
jcgl-dev/dev/sql/apt_rev01/03_domain_03_voice.sql
T
zfjia 8ffeb59dd4
IT-0 verify / verify (push) Canceled after 0s
第一阶段任务,相关数据库定义。
2026-11-10 14:52:54 +08:00

228 lines
12 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =============================================================================
-- 域 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 分机注册状态流水(只追加)';