• Data Governance Dev's avatar
    feat(web2): 身份证合规扫描 — 多线程 + 实时进度接口 · c4ed1b5c
    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
idCardKeywords.js 923 Bytes