feat(web2): 身份证合规扫描 — 多线程 + 实时进度接口
需求链路(按用户描述):
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 第三、五、六章。
Showing
This diff is collapsed.
Please register or sign in to comment