TASK — 订单批量识别(OCR 元信息提取 + 批量一键处理)
任务依赖图
原子任务列表
| 项 |
内容 |
| 输入契约 |
ocr_text (str)、ocr_rows (list[list[str]]) |
| 输出契约 |
OrderMetadata(supplier, bill_date, total_amount, raw_supplier_text) |
| 实现约束 |
供应商关键词清单 + 启发式;日期正则;金额关键词 |
| 验收标准 |
单元测试覆盖:完整三字段、部分缺失、OCR 噪声、日期格式 4 种 |
| 依赖 |
无 |
任务 2:order_metadata 表 + CRUD
| 项 |
内容 |
| 输入契约 |
ProductDatabase 实例 |
| 输出契约 |
save_order_metadata / get_order_metadata / list_all_metadata |
| 实现约束 |
建表 IF NOT EXISTS;幂等 save(PK = file_hash) |
| 验收标准 |
测试创建/查询/更新/列出 |
| 依赖 |
无 |
任务 3:OCR meta.json 落盘
| 项 |
内容 |
| 输入契约 |
OCRService.process_image 返回的 (excel_path, raw_text) |
| 输出契约 |
data/output/{hash}.meta.json 含 ocr_text |
| 实现约束 |
修改 table_ocr.py 返回原始 text;OCRService 调用方写 meta.json |
| 验收标准 |
OCR 一次后 meta.json 存在且含完整 text |
| 依赖 |
无 |
任务 4:order_service.process_excel 集成元信息
| 项 |
内容 |
| 输入契约 |
excel_path |
| 输出契约 |
(new_result_path, metadata) |
| 实现约束 |
读 meta.json → extract → save → 应用新 result 文件名 |
| 验收标准 |
跑真实 OCR 文件后 result 文件名符合新规则 |
| 依赖 |
T1、T2、T3 |
任务 5:原图重命名
| 项 |
内容 |
| 输入契约 |
(原图路径, metadata, file_hash) |
| 输出契约 |
新图路径(已重命名) |
| 实现约束 |
保留扩展名;清理非法字符;冲突加 _N |
| 验收标准 |
处理后 input 中文件名带日期/供应商/hash |
| 依赖 |
T4 |
任务 6:processor_service.process_all_inputs
| 项 |
内容 |
| 输入契约 |
无 |
| 输出契约 |
dict(total, success, failed, results) |
| 实现约束 |
扫描 data/input/ 全部图片;串行;现有 processed_files.json 不重做 |
| 验收标准 |
input 放 3 张图 → 处理后 results 长度=3;status 准确 |
| 依赖 |
T4、T5 |
任务 7:UI 一键处理按钮 + 进度
| 项 |
内容 |
| 输入契约 |
UI 按钮点击事件 |
| 输出契约 |
进度对话框 + 主窗口日志更新 + 完成 MessageBox |
| 实现约束 |
后台线程 + UI 通信用 queue;进度不可关闭 |
| 验收标准 |
点击按钮 → 进度可见 → 完成有汇总 |
| 依赖 |
T6 |
任务 8:单元测试
| 项 |
内容 |
| 输入契约 |
测试用例集 |
| 输出契约 |
191 + 新测试 全部 pass |
| 实现约束 |
tests/test_metadata_extractor.py;tests/test_order_metadata.py |
| 验收标准 |
pytest tests/ 全绿 |
| 依赖 |
T1、T2 |
工作量评估
- T1:30 分钟(算法 + 10 个测试用例)
- T2:15 分钟
- T3:20 分钟
- T4:30 分钟
- T5:20 分钟
- T6:30 分钟
- T7:40 分钟(UI 线程)
- T8:30 分钟
- 测试与集成:30 分钟
交付物
- 8 个原子任务全部通过
docs/订单批量识别/FINAL_订单批量识别.md:项目总结
docs/订单批量识别/TODO_订单批量识别.md:待办清单