Files
zfjia 35751b4f00
IT-0 verify / verify (push) Waiting to run
1111
2026-11-11 18:30:31 +08:00

115 lines
6.5 KiB
SQL
Raw Permalink 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.
-- =============================================================================
-- IT-5 叫乘执行与状态机(M3)增量 DDL(可重放)
-- 依据:公寓端/03 表 3-10(状态迁移矩阵)、公寓端/04 表 4-9(叫乘接口)、
-- 公寓端/05 表 5-7(干预动作)/ 表 5-20(终态矩阵)、13 表 13-15
-- 口径:
-- 1) 不新增业务表(59 张口径不变);只补 gy_jcxx 的时间戳/标志位存量列
-- 与 duty_manual_action 的 reason 列。
-- 2) ryzt / finish_jc / finish_ly / stoped 仍只有 apt.duty.state 一个写入口,
-- 本脚本不写任何业务数据。
-- 3) 幂等:补列走 apt_add_column_if_missing,索引先查 information_schema。
-- =============================================================================
SET NAMES utf8mb4;
-- -----------------------------------------------------------------------------
-- 1. gy_jcxx 存量列补齐(表 3-10 的「同表写入」列)
-- 注意:apt_add_column_if_missing(p_table, p_column, p_ddl) 的 p_ddl 必须
-- **自带列名**(过程只拼 "ALTER TABLE `t` ADD COLUMN "),
-- 与 07_patch_columns.sql 的写法一致。
-- -----------------------------------------------------------------------------
CALL apt_add_column_if_missing('gy_jcxx', 'jcsj_s',
"jcsj_s DATETIME(3) NULL COMMENT '实际开始叫乘时刻(CALL_START 条件更新写入)'");
CALL apt_add_column_if_missing('gy_jcxx', 'jch',
"jch VARCHAR(32) NULL COMMENT '机次;表 4-9 correct 白名单字段(存量表缺列,IT-5 补齐)'");
CALL apt_add_column_if_missing('gy_jcxx', 'hjxysj',
"hjxysj DATETIME(3) NULL COMMENT '应答时刻:SIP ConfbridgeJoin / 平板 VERIFIED'");
CALL apt_add_column_if_missing('gy_jcxx', 'jcbjsj_s',
"jcbjsj_s DATETIME(3) NULL COMMENT '叫乘报警时刻(无应答 / NO_ANSWER)'");
CALL apt_add_column_if_missing('gy_jcxx', 'fjsj_s',
"fjsj_s DATETIME(3) NULL COMMENT '复叫时刻(RE_CALL 或自动复叫)'");
CALL apt_add_column_if_missing('gy_jcxx', 'lybjsj',
"lybjsj DATETIME(3) NULL COMMENT '离寓报警时刻'");
CALL apt_add_column_if_missing('gy_jcxx', 'is_jcbj',
"is_jcbj VARCHAR(2) NOT NULL DEFAULT '0' COMMENT '叫乘报警标志 0/1'");
CALL apt_add_column_if_missing('gy_jcxx', 'is_lybj',
"is_lybj VARCHAR(2) NOT NULL DEFAULT '0' COMMENT '离寓报警标志 0/1'");
CALL apt_add_column_if_missing('gy_jcxx', 'is_temp_call',
"is_temp_call VARCHAR(2) NOT NULL DEFAULT '0' COMMENT '临时叫乘标志(人工临时叫乘仅置 1)'");
CALL apt_add_column_if_missing('gy_jcxx', 'leave_type',
"leave_type VARCHAR(20) NULL COMMENT '离寓类型:MANUAL / DEVICE / FACE 等'");
CALL apt_add_column_if_missing('gy_jcxx', 'leave_event_id',
"leave_event_id VARCHAR(64) NULL COMMENT '离寓事件 ID(gygl_ly_event.event_id)'");
CALL apt_add_column_if_missing('gy_jcxx', 'leave_remark',
"leave_remark VARCHAR(256) NULL COMMENT '离寓/修正备注(correct 白名单字段)'");
-- -----------------------------------------------------------------------------
-- 2. duty_manual_action:reason 列 + 动作枚举注释扩展
-- 表 4-9 第 5 个接口的 5 个命令全部先落本表,再由 apt.duty.state 执行
-- -----------------------------------------------------------------------------
CALL apt_add_column_if_missing('duty_manual_action', 'reason',
"reason VARCHAR(256) NULL COMMENT '命令原因(审计与追责用)'");
ALTER TABLE duty_manual_action
MODIFY COLUMN action_type VARCHAR(32) NOT NULL
COMMENT 'STOP / RE_CALL / FORCE_FINISH / MARK_LEAVE / CANCEL / CORRECT';
ALTER TABLE duty_manual_action
MODIFY COLUMN state VARCHAR(20) NOT NULL DEFAULT 'PENDING'
COMMENT 'PENDING / DONE / FAILED / DUPLICATED';
-- -----------------------------------------------------------------------------
-- 3. gy_jcxx 派发扫描索引(平板补任务 + SIP 超时扫描)
-- -----------------------------------------------------------------------------
SET @apt_idx_mode = (SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'gy_jcxx'
AND INDEX_NAME = 'idx_jcxx_gyid_mode_state');
SET @apt_sql_mode = IF(@apt_idx_mode = 0,
'ALTER TABLE gy_jcxx ADD KEY idx_jcxx_gyid_mode_state (gyid, call_mode, ryzt, finish_ly)',
'SELECT 1');
PREPARE apt_stmt_mode FROM @apt_sql_mode;
EXECUTE apt_stmt_mode;
DEALLOCATE PREPARE apt_stmt_mode;
-- 平板结果按 (gyid, occurred_at) 归日统计的覆盖索引
SET @apt_idx_result = (SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'apt_tablet_call_result'
AND INDEX_NAME = 'idx_tabletresult_gyid_time');
SET @apt_sql_result = IF(@apt_idx_result = 0,
'ALTER TABLE apt_tablet_call_result ADD KEY idx_tabletresult_gyid_time (gyid, occurred_at)',
'SELECT 1');
PREPARE apt_stmt_result FROM @apt_sql_result;
EXECUTE apt_stmt_result;
DEALLOCATE PREPARE apt_stmt_result;
-- -----------------------------------------------------------------------------
-- 4. 校验
-- -----------------------------------------------------------------------------
SELECT '=== IT-5 gy_jcxx 增量列(应 12)===' AS section;
SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_DEFAULT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'gy_jcxx'
AND COLUMN_NAME IN ('jcsj_s','hjxysj','jcbjsj_s','fjsj_s','lybjsj','is_jcbj',
'is_lybj','is_temp_call','leave_type','leave_event_id','leave_remark','jch')
ORDER BY COLUMN_NAME;
SELECT '=== IT-5 duty_manual_action 动作枚举(应含 5 命令 + CORRECT / reason 列)===' AS section;
SELECT COLUMN_NAME, COLUMN_TYPE, COLUMN_COMMENT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'duty_manual_action'
AND COLUMN_NAME IN ('action_type','state','reason');
SELECT '=== IT-5 索引(应 2:gy_jcxx 模式扫描 + 平板结果归日)===' AS section;
SELECT TABLE_NAME, INDEX_NAME, GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) AS cols
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND INDEX_NAME IN ('idx_jcxx_gyid_mode_state','idx_tabletresult_gyid_time')
GROUP BY TABLE_NAME, INDEX_NAME;
SELECT '=== IT-5 状态字段初值兜底(应 0:不得出现 NULL/stoped 非法值)===' AS section;
SELECT COUNT(*) AS illegal_state_rows
FROM gy_jcxx
WHERE deleted = 0
AND (stoped IS NULL OR stoped NOT IN ('0','1')
OR finish_jc IS NULL OR finish_jc NOT IN ('0','1')
OR finish_ly IS NULL OR finish_ly NOT IN ('0','1'));