USE zhiyuantong; SET NAMES utf8mb4; SET @review_run_id = UUID(); SET @reviewer = 'system:safe-batch-review-2025-v1'; SET @rule_version = 'safe-batch-review-2025-v1'; SET @review_scope = 'all-current-records'; INSERT INTO automated_review_runs ( review_run_id, rule_version, reviewer_name, review_scope, run_status, notes ) VALUES ( @review_run_id, @rule_version, @reviewer, @review_scope, 'running', '开放数据集记录保持needs_review;只有来源非open_dataset_csv且关键结构规则通过的业务记录自动approved。来源档案本身只审核可追溯性。' ) ON DUPLICATE KEY UPDATE review_run_id=review_run_id; SELECT review_run_id INTO @effective_run_id FROM automated_review_runs WHERE rule_version=@rule_version AND review_scope=@review_scope; START TRANSACTION; -- 来源档案审核的是“来源记录是否可追溯”,不代表来源内容已经通过官方复核。 INSERT INTO review_records ( entity_type, entity_key, review_status, reviewer_name, review_note, reviewed_at ) SELECT 'data_source', CAST(source.source_id AS CHAR), CASE WHEN source.publisher<>'' AND source.title<>'' AND CHAR_LENGTH(source.sha256)=64 THEN 'approved' ELSE 'needs_review' END, @reviewer, CASE WHEN source.publisher<>'' AND source.title<>'' AND CHAR_LENGTH(source.sha256)=64 THEN '自动审核通过:来源身份、标题和SHA-256记录完整;不代表来源中的业务数据已完成官方复核。' ELSE '自动审核未通过:来源身份或SHA-256记录不完整。' END, NOW() FROM data_sources source LEFT JOIN review_records existing ON existing.entity_type='data_source' AND existing.entity_key=CAST(source.source_id AS CHAR) WHERE existing.review_id IS NULL; INSERT INTO review_records ( entity_type, entity_key, review_status, reviewer_name, review_note, reviewed_at ) SELECT 'school', school.school_id, CASE WHEN source.source_type<>'open_dataset_csv' AND school.official_name<>'' AND school.province_name<>'' AND school.city_name<>'' AND school.education_level<>'' THEN 'approved' ELSE 'needs_review' END, @reviewer, CASE WHEN source.source_type='open_dataset_csv' THEN '自动审核未通过:开放数据集来源尚未完成官方复核。' WHEN school.official_name='' OR school.province_name='' OR school.city_name='' OR school.education_level='' THEN '自动审核未通过:院校关键字段不完整。' ELSE '自动审核通过:来源可追溯且院校关键字段完整。' END, NOW() FROM schools school JOIN data_sources source ON source.source_id=school.source_id LEFT JOIN review_records existing ON existing.entity_type='school' AND existing.entity_key=school.school_id WHERE existing.review_id IS NULL; INSERT INTO review_records ( entity_type, entity_key, review_status, reviewer_name, review_note, reviewed_at ) SELECT 'admission_batch', CAST(base.admission_batch_id AS CHAR), CASE WHEN source.source_type<>'open_dataset_csv' AND base.province_name<>'' AND base.batch_name<>'' AND base.admission_category<>'' AND base.education_level<>'' AND base.volunteer_mode<>'' THEN 'approved' ELSE 'needs_review' END, @reviewer, CASE WHEN source.source_type='open_dataset_csv' THEN '自动审核未通过:开放数据集来源尚未完成官方复核。' WHEN base.province_name='' OR base.batch_name='' OR base.admission_category='' OR base.education_level='' OR base.volunteer_mode='' THEN '自动审核未通过:招生批次关键字段不完整。' ELSE '自动审核通过:来源可追溯且招生批次关键字段完整。' END, NOW() FROM admission_batches base JOIN data_sources source ON source.source_id=base.source_id LEFT JOIN review_records existing ON existing.entity_type='admission_batch' AND existing.entity_key=CAST(base.admission_batch_id AS CHAR) WHERE existing.review_id IS NULL; INSERT INTO review_records ( entity_type, entity_key, review_status, reviewer_name, review_note, reviewed_at ) SELECT 'plan_release', CAST(base.plan_release_id AS CHAR), CASE WHEN source.source_type<>'open_dataset_csv' AND base.province_name<>'' AND base.release_title<>'' AND base.plan_round<>'' AND base.coverage_scope<>'' THEN 'approved' ELSE 'needs_review' END, @reviewer, CASE WHEN source.source_type='open_dataset_csv' THEN '自动审核未通过:开放数据集来源尚未完成官方复核。' WHEN base.province_name='' OR base.release_title='' OR base.plan_round='' OR base.coverage_scope='' THEN '自动审核未通过:计划发布批次关键字段不完整。' ELSE '自动审核通过:来源可追溯且计划发布批次关键字段完整。' END, NOW() FROM admission_plan_releases base JOIN data_sources source ON source.source_id=base.source_id LEFT JOIN review_records existing ON existing.entity_type='plan_release' AND existing.entity_key=CAST(base.plan_release_id AS CHAR) WHERE existing.review_id IS NULL; INSERT INTO review_records ( entity_type, entity_key, review_status, reviewer_name, review_note, reviewed_at ) SELECT 'admission_group', CAST(base.admission_group_id AS CHAR), CASE WHEN source.source_type<>'open_dataset_csv' AND base.school_id IS NOT NULL AND base.school_name_raw<>'' AND base.subject_category<>'' AND base.batch_name<>'' THEN 'approved' ELSE 'needs_review' END, @reviewer, CASE WHEN source.source_type<>'open_dataset_csv' AND base.school_id IS NOT NULL AND base.school_name_raw<>'' AND base.subject_category<>'' AND base.batch_name<>'' THEN '自动审核通过:来源可追溯、院校已匹配且院校专业组关键字段完整。' WHEN source.source_type='open_dataset_csv' THEN '自动审核未通过:开放数据集来源尚未完成官方复核。' WHEN base.school_id IS NULL THEN '自动审核未通过:未匹配全国院校稳定ID。' ELSE '自动审核未通过:院校专业组关键字段不完整。' END, NOW() FROM admission_groups base JOIN data_sources source ON source.source_id=base.source_id LEFT JOIN review_records existing ON existing.entity_type='admission_group' AND existing.entity_key=CAST(base.admission_group_id AS CHAR) WHERE existing.review_id IS NULL; INSERT INTO review_records ( entity_type, entity_key, review_status, reviewer_name, review_note, reviewed_at ) SELECT 'major_plan', CAST(base.major_plan_id AS CHAR), CASE WHEN source.source_type<>'open_dataset_csv' AND scope.school_id IS NOT NULL AND base.major_name<>'' AND base.plan_count IS NOT NULL AND base.plan_count>0 THEN 'approved' ELSE 'needs_review' END, @reviewer, CASE WHEN source.source_type<>'open_dataset_csv' AND scope.school_id IS NOT NULL AND base.major_name<>'' AND base.plan_count IS NOT NULL AND base.plan_count>0 THEN '自动审核通过:来源可追溯、院校已匹配且招生计划人数有效。' WHEN source.source_type='open_dataset_csv' THEN '自动审核未通过:开放数据集来源尚未完成官方复核。' WHEN scope.school_id IS NULL THEN '自动审核未通过:未匹配全国院校稳定ID。' WHEN base.plan_count IS NULL OR base.plan_count=0 THEN '自动审核未通过:招生计划人数缺失或为0。' ELSE '自动审核未通过:专业计划关键字段不完整。' END, NOW() FROM admission_major_plans base JOIN admission_groups scope ON scope.admission_group_id=base.admission_group_id JOIN data_sources source ON source.source_id=base.source_id LEFT JOIN review_records existing ON existing.entity_type='major_plan' AND existing.entity_key=CAST(base.major_plan_id AS CHAR) WHERE existing.review_id IS NULL; INSERT INTO review_records ( entity_type, entity_key, review_status, reviewer_name, review_note, reviewed_at ) SELECT 'major_admission', CAST(base.major_line_id AS CHAR), CASE WHEN source.source_type<>'open_dataset_csv' AND base.school_id IS NOT NULL AND base.school_name_raw<>'' AND base.major_name<>'' AND (base.min_score IS NOT NULL OR base.min_rank IS NOT NULL) THEN 'approved' ELSE 'needs_review' END, @reviewer, CASE WHEN source.source_type<>'open_dataset_csv' AND base.school_id IS NOT NULL AND base.school_name_raw<>'' AND base.major_name<>'' AND (base.min_score IS NOT NULL OR base.min_rank IS NOT NULL) THEN '自动审核通过:来源可追溯、院校已匹配且专业录取关键字段有效。' WHEN source.source_type='open_dataset_csv' THEN '自动审核未通过:开放数据集来源尚未完成官方复核。' WHEN base.school_id IS NULL THEN '自动审核未通过:未匹配全国院校稳定ID。' ELSE '自动审核未通过:专业录取关键字段不完整。' END, NOW() FROM admission_major_lines base JOIN data_sources source ON source.source_id=base.source_id LEFT JOIN review_records existing ON existing.entity_type='major_admission' AND existing.entity_key=CAST(base.major_line_id AS CHAR) WHERE existing.review_id IS NULL; INSERT INTO review_records ( entity_type, entity_key, review_status, reviewer_name, review_note, reviewed_at ) SELECT 'score_rank', CAST(base.score_rank_id AS CHAR), CASE WHEN source.source_type<>'open_dataset_csv' AND base.score>=0 AND base.rank_from>=1 AND base.rank_to>=base.rank_from AND base.cumulative_count>=base.rank_to THEN 'approved' ELSE 'needs_review' END, @reviewer, CASE WHEN source.source_type<>'open_dataset_csv' AND base.score>=0 AND base.rank_from>=1 AND base.rank_to>=base.rank_from AND base.cumulative_count>=base.rank_to THEN '自动审核通过:来源可追溯且一分一段结构规则有效。' WHEN source.source_type='open_dataset_csv' THEN '自动审核未通过:开放数据集来源尚未完成官方复核。' ELSE '自动审核未通过:一分一段位次区间或累计人数不满足结构规则。' END, NOW() FROM score_rank_points base JOIN data_sources source ON source.source_id=base.source_id LEFT JOIN review_records existing ON existing.entity_type='score_rank' AND existing.entity_key=CAST(base.score_rank_id AS CHAR) WHERE existing.review_id IS NULL; INSERT INTO review_records ( entity_type, entity_key, review_status, reviewer_name, review_note, reviewed_at ) SELECT 'control_line', CAST(base.control_line_id AS CHAR), CASE WHEN source.source_type<>'open_dataset_csv' AND base.culture_score>=0 AND base.subject_category<>'' AND base.education_level<>'' THEN 'approved' ELSE 'needs_review' END, @reviewer, CASE WHEN source.source_type<>'open_dataset_csv' AND base.culture_score>=0 AND base.subject_category<>'' AND base.education_level<>'' THEN '自动审核通过:来源可追溯且省级控制线关键字段有效。' WHEN source.source_type='open_dataset_csv' THEN '自动审核未通过:开放数据集来源尚未完成官方复核。' ELSE '自动审核未通过:省级控制线关键字段不完整或分数无效。' END, NOW() FROM control_score_lines base JOIN data_sources source ON source.source_id=base.source_id LEFT JOIN review_records existing ON existing.entity_type='control_line' AND existing.entity_key=CAST(base.control_line_id AS CHAR) WHERE existing.review_id IS NULL; INSERT INTO review_records ( entity_type, entity_key, review_status, reviewer_name, review_note, reviewed_at ) SELECT 'cutoff_line', CAST(base.cutoff_line_id AS CHAR), CASE WHEN source.source_type<>'open_dataset_csv' AND base.school_id IS NOT NULL AND base.school_name_raw<>'' AND (base.cutoff_score IS NOT NULL OR base.cutoff_rank IS NOT NULL) THEN 'approved' ELSE 'needs_review' END, @reviewer, CASE WHEN source.source_type<>'open_dataset_csv' AND base.school_id IS NOT NULL AND base.school_name_raw<>'' AND (base.cutoff_score IS NOT NULL OR base.cutoff_rank IS NOT NULL) THEN '自动审核通过:来源可追溯、院校已匹配且投档线关键字段有效。' WHEN source.source_type='open_dataset_csv' THEN '自动审核未通过:开放数据集来源尚未完成官方复核。' WHEN base.school_id IS NULL THEN '自动审核未通过:未匹配全国院校稳定ID。' ELSE '自动审核未通过:投档线关键字段不完整。' END, NOW() FROM admission_cutoff_lines base JOIN data_sources source ON source.source_id=base.source_id LEFT JOIN review_records existing ON existing.entity_type='cutoff_line' AND existing.entity_key=CAST(base.cutoff_line_id AS CHAR) WHERE existing.review_id IS NULL; INSERT INTO review_records ( entity_type, entity_key, review_status, reviewer_name, review_note, reviewed_at ) SELECT 'dataset_coverage', CAST(base.coverage_id AS CHAR), CASE WHEN base.coverage_status IN ( 'complete_public_snapshot', 'partial_public_snapshot', 'unavailable_publicly' ) AND NOT (base.coverage_status='unavailable_publicly' AND base.record_count<>0) AND NOT (base.coverage_status<>'complete_public_snapshot' AND (base.notes IS NULL OR base.notes='')) THEN 'approved' ELSE 'needs_review' END, @reviewer, CASE WHEN base.coverage_status IN ( 'complete_public_snapshot', 'partial_public_snapshot', 'unavailable_publicly' ) AND NOT (base.coverage_status='unavailable_publicly' AND base.record_count<>0) AND NOT (base.coverage_status<>'complete_public_snapshot' AND (base.notes IS NULL OR base.notes='')) THEN '自动审核通过:覆盖状态、记录数和缺口说明满足规则。' ELSE '自动审核未通过:覆盖状态、记录数或缺口说明不一致。' END, NOW() FROM dataset_coverage base LEFT JOIN review_records existing ON existing.entity_type='dataset_coverage' AND existing.entity_key=CAST(base.coverage_id AS CHAR) WHERE existing.review_id IS NULL; -- 开放数据源以“来源级问题”记录一次,避免为其数百万下游记录重复写相同问题。 INSERT INTO data_quality_issues ( entity_type, entity_key, issue_code, severity, field_name, issue_message, issue_fingerprint, resolution_status ) SELECT 'data_source', CAST(source.source_id AS CHAR), 'SOURCE_REQUIRES_OFFICIAL_VERIFICATION', 'error', 'source_type', CONCAT('开放数据集来源尚未完成省级考试院官方复核:', source.title), SHA2(CONCAT('data_source|', source.source_id, '|SOURCE_REQUIRES_OFFICIAL_VERIFICATION'), 256), 'open' FROM data_sources source WHERE source.source_type='open_dataset_csv' ON DUPLICATE KEY UPDATE issue_message=VALUES(issue_message), resolution_status='open'; INSERT INTO data_quality_issues ( entity_type, entity_key, issue_code, severity, field_name, issue_message, issue_fingerprint, resolution_status ) SELECT 'score_rank', CAST(base.score_rank_id AS CHAR), 'INVALID_RANK_INTERVAL', 'error', 'rank_from,rank_to,cumulative_count', '一分一段位次区间或累计人数不满足单调结构规则', SHA2(CONCAT('score_rank|', base.score_rank_id, '|INVALID_RANK_INTERVAL'), 256), 'open' FROM score_rank_points base WHERE base.score<0 OR base.rank_from<1 OR base.rank_to