214 lines
11 KiB
SQL
214 lines
11 KiB
SQL
-- =============================================================================
|
||
-- IT-0 验收校验脚本(表 13-10 验收③ / MS-0)
|
||
-- 预期:business_table_count = 59;missing_pk = 0;missing_gyid = 0
|
||
-- 口径:apt_* 36 + gy_*/gygl_* 18 + duty_* 5 = 59(CR-02 表 3-25、公寓端/03 表 3-8)
|
||
-- apt_ops_probe 为连通性探针表,显式排除,不计入 59 张。
|
||
-- 追加:第 7~13 段为 IT-3(DV-3)增量校验,见文件末段说明。
|
||
-- =============================================================================
|
||
SELECT '=== 1. 业务表总数(应为 59)===' AS section;
|
||
SELECT COUNT(*) AS business_table_count
|
||
FROM information_schema.TABLES
|
||
WHERE TABLE_SCHEMA = DATABASE()
|
||
AND TABLE_TYPE = 'BASE TABLE'
|
||
AND (TABLE_NAME LIKE 'apt\_%' OR TABLE_NAME LIKE 'gy\_%'
|
||
OR TABLE_NAME LIKE 'gygl\_%' OR TABLE_NAME LIKE 'duty\_%')
|
||
AND TABLE_NAME <> 'apt_ops_probe';
|
||
|
||
SELECT '=== 2. 分前缀分布(应为 apt 36 / gy 17 / gygl 1 / duty 5)===' AS section;
|
||
SELECT CASE
|
||
WHEN TABLE_NAME LIKE 'apt\_%' THEN 'apt'
|
||
WHEN TABLE_NAME LIKE 'gygl\_%' THEN 'gygl'
|
||
WHEN TABLE_NAME LIKE 'gy\_%' THEN 'gy'
|
||
ELSE 'duty'
|
||
END AS prefix, COUNT(*) AS cnt
|
||
FROM information_schema.TABLES
|
||
WHERE TABLE_SCHEMA = DATABASE()
|
||
AND (TABLE_NAME LIKE 'apt\_%' OR TABLE_NAME LIKE 'gy\_%'
|
||
OR TABLE_NAME LIKE 'gygl\_%' OR TABLE_NAME LIKE 'duty\_%')
|
||
AND TABLE_NAME <> 'apt_ops_probe'
|
||
GROUP BY prefix ORDER BY prefix;
|
||
|
||
SELECT '=== 3. 缺主键的业务表(应为 0 行)===' AS section;
|
||
SELECT t.TABLE_NAME
|
||
FROM information_schema.TABLES t
|
||
WHERE t.TABLE_SCHEMA = DATABASE()
|
||
AND (t.TABLE_NAME LIKE 'apt\_%' OR t.TABLE_NAME LIKE 'gy\_%'
|
||
OR t.TABLE_NAME LIKE 'gygl\_%' OR t.TABLE_NAME LIKE 'duty\_%')
|
||
AND t.TABLE_NAME <> 'apt_ops_probe'
|
||
AND NOT EXISTS (
|
||
SELECT 1 FROM information_schema.TABLE_CONSTRAINTS c
|
||
WHERE c.TABLE_SCHEMA = t.TABLE_SCHEMA AND c.TABLE_NAME = t.TABLE_NAME
|
||
AND c.CONSTRAINT_TYPE = 'PRIMARY KEY'
|
||
);
|
||
|
||
SELECT '=== 4. 缺 gyid 列的业务表(应为 0 行)===' AS section;
|
||
SELECT t.TABLE_NAME
|
||
FROM information_schema.TABLES t
|
||
WHERE t.TABLE_SCHEMA = DATABASE()
|
||
AND (t.TABLE_NAME LIKE 'apt\_%' OR t.TABLE_NAME LIKE 'gy\_%'
|
||
OR t.TABLE_NAME LIKE 'gygl\_%' OR t.TABLE_NAME LIKE 'duty\_%')
|
||
AND t.TABLE_NAME <> 'apt_ops_probe'
|
||
AND NOT EXISTS (
|
||
SELECT 1 FROM information_schema.COLUMNS c
|
||
WHERE c.TABLE_SCHEMA = t.TABLE_SCHEMA AND c.TABLE_NAME = t.TABLE_NAME
|
||
AND c.COLUMN_NAME = 'gyid'
|
||
);
|
||
|
||
SELECT '=== 5. 外键数量(应为 0:docs/10 表 5-6 明确不建外键)===' AS section;
|
||
SELECT COUNT(*) AS foreign_key_count
|
||
FROM information_schema.TABLE_CONSTRAINTS
|
||
WHERE TABLE_SCHEMA = DATABASE() AND CONSTRAINT_TYPE = 'FOREIGN KEY';
|
||
|
||
SELECT '=== 6. 探针表与基线种子 ===' AS section;
|
||
SELECT (SELECT COUNT(*) FROM apt_ops_probe) AS probe_rows,
|
||
(SELECT COUNT(*) FROM apt_master_version WHERE source = 'LOCAL') AS local_baseline_rows,
|
||
(SELECT COUNT(*) FROM apt_ops_selfcheck) AS selfcheck_item_rows;
|
||
|
||
-- =============================================================================
|
||
-- IT-3 追加校验(DV-3 / 13 表 13-13 验收①)
|
||
-- 预期:IT-3 增量列 6 条;人脸权限点 7 行(6 F + 1 C);IT-7 置灰项授权 0;
|
||
-- N-34 可申请设备 2 台;注册链三处「泄漏」计数均为 0。
|
||
-- =============================================================================
|
||
SELECT '=== 7. IT-3 增量列(应 6:回执态 3 + §12 设备范围 3)===' AS section;
|
||
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_DEFAULT
|
||
FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = DATABASE()
|
||
AND ( (TABLE_NAME = 'apt_person_face_reg' AND COLUMN_NAME IN ('platform_version','unit_code'))
|
||
OR (TABLE_NAME = 'apt_master_person' AND COLUMN_NAME = 'face_platform_version')
|
||
OR (TABLE_NAME = 'gy_sb' AND COLUMN_NAME IN ('device_class','face_scope_value','face_cache_enabled')))
|
||
ORDER BY TABLE_NAME, COLUMN_NAME;
|
||
|
||
SELECT '=== 8. 人脸权限点与页面菜单(应 7 行:6 F + 1 C)===' AS section;
|
||
SELECT menu_id, menu_name, menu_type, visible, status, perms
|
||
FROM sys_menu WHERE menu_id BETWEEN 3201 AND 3216 ORDER BY menu_id;
|
||
|
||
SELECT '=== 9. IT-7 预留点置灰且未授权(3213~3216 应为 0)===' AS section;
|
||
SELECT COUNT(*) AS it3_grey_bound
|
||
FROM sys_role_menu rm JOIN sys_menu m ON m.menu_id = rm.menu_id
|
||
WHERE m.menu_id IN (3213, 3214, 3215, 3216);
|
||
|
||
SELECT '=== 10. N-34 可申请设备(state <> DISABLED,应 2)===' AS section;
|
||
SELECT COUNT(*) AS it3_apply_device_count
|
||
FROM gy_sb
|
||
WHERE device_code IN ('DEV-CHECKIN-01', 'DEV-TABLET-01', 'DEV-CHECKIN-99')
|
||
AND state <> 'DISABLED';
|
||
|
||
SELECT '=== 11. 注册链一致性:APPLIED 不得带 ryid、CONFIRMED 必带 ryid(均应 0)===' AS section;
|
||
SELECT
|
||
(SELECT COUNT(*) FROM apt_person_face_reg
|
||
WHERE reg_state = 'APPLIED' AND (confirmed_ryid IS NOT NULL OR local_only <> 1)) AS it3_applied_leak,
|
||
(SELECT COUNT(*) FROM apt_person_face_reg
|
||
WHERE reg_state = 'CONFIRMED' AND confirmed_ryid IS NULL) AS it3_confirmed_without_ryid,
|
||
(SELECT COUNT(*) FROM apt_person_face_reg
|
||
WHERE reg_state = 'REJECTED' AND confirmed_ryid IS NOT NULL) AS it3_rejected_with_ryid;
|
||
|
||
SELECT '=== 12. 双路状态链独立:CONFIRMED 行不得缺 upload_state / dispatch_state(应 0)===' AS section;
|
||
SELECT reg_id, upload_state, dispatch_state, verdict, platform_version
|
||
FROM apt_person_face_reg
|
||
WHERE reg_state = 'CONFIRMED' AND (upload_state IS NULL OR dispatch_state IS NULL);
|
||
|
||
SELECT '=== 13. 确认行必须有对应人员主档(应 0 孤儿)===' AS section;
|
||
SELECT COUNT(*) AS it3_confirmed_orphan
|
||
FROM apt_person_face_reg r
|
||
WHERE r.reg_state = 'CONFIRMED'
|
||
AND NOT EXISTS (
|
||
SELECT 1 FROM apt_master_person p
|
||
WHERE p.gyid = r.gyid AND p.ryid = r.confirmed_ryid AND p.deleted = 0
|
||
);
|
||
|
||
-- =============================================================================
|
||
-- IT-4 追加校验(入住作业核心 / 表 11-4、表 11-9、CR-02 表 3-57 验收 18~20)
|
||
-- 预期:增量列 26 条;流程态字典 8/5 值;入住权限点 5 行;三处链路泄漏均为 0。
|
||
-- =============================================================================
|
||
SELECT '=== 14. IT-4 apt_local_task 增量列(应 27)===' AS section;
|
||
SELECT COUNT(*) AS it4_local_task_columns
|
||
FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'apt_local_task'
|
||
AND COLUMN_NAME IN ('device_code','device_event_id','work_no','name_snapshot','reg_id',
|
||
'reg_state_at_apply','jch','kcsj_snapshot','verified_ryid','verified_at','feature_version',
|
||
'source','submitted_at','occurred_at','review_note','adjusted_by','adjusted_at','adjust_reason',
|
||
'reported_at','matched_at','task_ready_at','matched_plan_key','base_kcsj','base_jcfs',
|
||
'origin_jcsj','derived_rule_version','jllx');
|
||
|
||
SELECT '=== 15. 流程态字典(checkin_state 8 值 / sync_state 5 值 / 事件含 ROOM_SWAP)===' AS section;
|
||
SELECT CONSTRAINT_NAME, CHECK_CLAUSE
|
||
FROM information_schema.CHECK_CONSTRAINTS
|
||
WHERE CONSTRAINT_SCHEMA = DATABASE()
|
||
AND CONSTRAINT_NAME IN ('ck_lt_checkin','ck_lt_sync','ck_lye_type')
|
||
ORDER BY CONSTRAINT_NAME;
|
||
|
||
SELECT '=== 16. 入住权限点与页面菜单(应 5 行)===' AS section;
|
||
SELECT menu_id, menu_name, menu_type, visible, status, perms
|
||
FROM sys_menu WHERE menu_id IN (3005, 3202, 3217, 3218, 3219) ORDER BY menu_id;
|
||
|
||
SELECT '=== 17. 任务就绪必须已复算 jcsj(应 0)===' AS section;
|
||
SELECT COUNT(*) AS it4_task_ready_without_jcsj
|
||
FROM apt_local_task
|
||
WHERE sync_state = 'TASK_READY' AND jcsj IS NULL AND deleted = 0;
|
||
|
||
SELECT '=== 18. CHECKED_IN 必须有 gy_jcxx 行(应 0 孤儿)===' AS section;
|
||
SELECT COUNT(*) AS it4_checked_in_orphan
|
||
FROM apt_local_task t
|
||
WHERE t.checkin_state = 'CHECKED_IN' AND t.deleted = 0
|
||
AND NOT EXISTS (
|
||
SELECT 1 FROM gy_jcxx j WHERE j.gyid = t.gyid AND j.jcid = t.jcid AND j.deleted = 0
|
||
);
|
||
|
||
SELECT '=== 19. 未入住不得提前生成叫乘行(应 0 泄漏)===' AS section;
|
||
SELECT COUNT(*) AS it4_checkin_leak
|
||
FROM apt_local_task t
|
||
WHERE t.checkin_state IN ('SUBMITTED','REVIEWING','APPROVED','ROOM_ADJUSTED','REJECTED')
|
||
AND t.deleted = 0
|
||
AND EXISTS (SELECT 1 FROM gy_jcxx j WHERE j.gyid = t.gyid AND j.jcid = t.jcid AND j.deleted = 0);
|
||
|
||
-- =============================================================================
|
||
-- IT-5 追加校验(叫乘执行与状态机 / 表 3-10、表 4-9、表 5-20、表 7-3 M3)
|
||
-- 预期:增量列 11 条;叫乘权限点 5 行;平板字典 3 个 CHECK;
|
||
-- 状态一致性四类泄漏全为 0;平板链路无 #24 语音摘要。
|
||
-- =============================================================================
|
||
SELECT '=== 20. IT-5 gy_jcxx 增量列(应 12)===' AS section;
|
||
SELECT COUNT(*) AS it5_jcxx_columns
|
||
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');
|
||
|
||
SELECT '=== 21. 叫乘权限点与页面菜单(应 5 行)===' AS section;
|
||
SELECT menu_id, menu_name, menu_type, visible, status, perms
|
||
FROM sys_menu WHERE menu_id IN (3004, 3220, 3221, 3222, 3203) ORDER BY menu_id;
|
||
|
||
SELECT '=== 22. 平板字典 CHECK(应 3:face / result_type / applied_state)===' AS section;
|
||
SELECT CONSTRAINT_NAME, CHECK_CLAUSE
|
||
FROM information_schema.CHECK_CONSTRAINTS
|
||
WHERE CONSTRAINT_SCHEMA = DATABASE()
|
||
AND CONSTRAINT_NAME IN ('ck_tabletresult_face','ck_tabletresult_type','ck_tabletresult_applied')
|
||
ORDER BY CONSTRAINT_NAME;
|
||
|
||
SELECT '=== 23. 终态一致性:ryzt=3 必须 finish_jc=1(应 0)===' AS section;
|
||
SELECT COUNT(*) AS it5_answered_without_finish
|
||
FROM gy_jcxx
|
||
WHERE deleted = 0 AND ryzt = '3' AND finish_jc <> '1';
|
||
|
||
SELECT '=== 24. 已结束叫乘不得回退到未完成态(应 0)===' AS section;
|
||
SELECT COUNT(*) AS it5_finished_regressed
|
||
FROM gy_jcxx
|
||
WHERE deleted = 0 AND finish_jc = '1' AND ryzt IN ('0','1');
|
||
|
||
SELECT '=== 25. 平板任务与结果一致:DONE 任务必须有结果行(应 0)===' AS section;
|
||
SELECT COUNT(*) AS it5_task_done_without_result
|
||
FROM apt_tablet_task t
|
||
WHERE t.pull_state = 'DONE'
|
||
AND NOT EXISTS (
|
||
SELECT 1 FROM apt_tablet_call_result r
|
||
WHERE r.gyid = t.gyid AND r.task_id = t.task_id
|
||
);
|
||
|
||
SELECT '=== 26. 平板链路不得上报 #24 语音摘要(应 0)===' AS section;
|
||
SELECT COUNT(*) AS it5_tablet_voice_summary
|
||
FROM apt_report_outbox o
|
||
WHERE o.biz_type = 'VOICE_SUMMARY'
|
||
AND EXISTS (
|
||
SELECT 1 FROM gy_jcxx j
|
||
WHERE j.gyid = o.gyid AND j.jcid = o.biz_id AND j.call_mode = 'TABLET'
|
||
);
|