-
Data Governance Dev authored
需求链路(按用户描述): 1. 按当前数据库连接抽数据字典(复用 web.core.data_dict) 2. 按「字段名 / 字段注释」关键字过滤命中列 3. 每个命中列 SELECT DISTINCT → Python 校验(GB 11643-1999) 4. 按违规值反查完整行(SELECT * WHERE col IN (...)) 5. 前端按表折叠渲染 架构亮点 —— 三端点异步: POST /api/id-card/scan → 立即 202 {scan_id}(不阻塞) GET /api/id-card/scan/{id}/progress → {done, total, current_column, status} GET /api/id-card/scan/{id}/result → 完整 IdCardScanResponse / 202 / 500 进度共享一个 in-memory ProgressTracker(thread-safe,10min TTL) 性能: ThreadPoolExecutor(max_workers=5) 并发跑每列 每个 worker 自己开 DBConnection(oracledb/pymysql/dmPython 不能跨线程共享) 实测 Oracle 84 列从单线程 221s → 多线程 115s(1.9x 加速) 方言适配(按 web2 库三态): MySQL → LIMIT %s,%s 占位符 达梦 → LIMIT ?,? 占位符 Oracle → 子查询 ROWNUM <= N,:1 :2 :3 numbered bind(11g 无 LIMIT;? 占位符会 ORA-01036) 文件: - web2/backend/idcard_validator.py 新增 GB 11643-1999 §6 加权和 + mod 11 映射 + 15 位老号升级 18 位 违规规则:EMPTY / LENGTH / CHARSET / CHECK_DIGIT / ADDRESS_PREFIX / BIRTH_DATE / ORDER_CODE - web2/backend/routes/idcard_scan.py 新增 异步三端点 + ProgressTracker + ThreadPoolExecutor 5 worker - web2/src/config/idCardKeywords.js 新增 默认关键字常量(前端离线兜底,与 web/configs/standards_match.yaml 的 IND-001-a 保持一致) DEFAULT_NAME_KEYWORDS = [id_card, id_card_no, id_number, identity_card] DEFAULT_COMMENT_KEYWORDS = [身份证号] 踩坑见 work-logs/2026-08-17.md 第三、五、六章。c4ed1b5c