Files

106 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TASK — 订单批量识别(OCR 元信息提取 + 批量一键处理)
## 任务依赖图
```mermaid
graph TD
T1[任务1: metadata_extractor] --> T4[任务4: order_service 集成]
T2[任务2: order_metadata 表] --> T4
T3[任务3: OCR meta.json 落盘] --> T4
T4 --> T5[任务5: 文件命名 + 重命名原图]
T5 --> T6[任务6: processor_service 批量入口]
T6 --> T7[任务7: UI 一键处理按钮 + 进度]
T1 --> T8[任务8: 单元测试]
T2 --> T8
```
## 原子任务列表
### 任务 1metadata_extractor.py
| 项 | 内容 |
|---|---|
| 输入契约 | ocr_text (str)、ocr_rows (list[list[str]]) |
| 输出契约 | OrderMetadata(supplier, bill_date, total_amount, raw_supplier_text) |
| 实现约束 | 供应商关键词清单 + 启发式;日期正则;金额关键词 |
| 验收标准 | 单元测试覆盖:完整三字段、部分缺失、OCR 噪声、日期格式 4 种 |
| 依赖 | 无 |
### 任务 2order_metadata 表 + CRUD
| 项 | 内容 |
|---|---|
| 输入契约 | ProductDatabase 实例 |
| 输出契约 | save_order_metadata / get_order_metadata / list_all_metadata |
| 实现约束 | 建表 IF NOT EXISTS;幂等 savePK = file_hash |
| 验收标准 | 测试创建/查询/更新/列出 |
| 依赖 | 无 |
### 任务 3OCR meta.json 落盘
| 项 | 内容 |
|---|---|
| 输入契约 | OCRService.process_image 返回的 (excel_path, raw_text) |
| 输出契约 | data/output/{hash}.meta.json 含 ocr_text |
| 实现约束 | 修改 table_ocr.py 返回原始 textOCRService 调用方写 meta.json |
| 验收标准 | OCR 一次后 meta.json 存在且含完整 text |
| 依赖 | 无 |
### 任务 4order_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 |
### 任务 6processor_service.process_all_inputs
| 项 | 内容 |
|---|---|
| 输入契约 | 无 |
| 输出契约 | dict(total, success, failed, results) |
| 实现约束 | 扫描 data/input/ 全部图片;串行;现有 processed_files.json 不重做 |
| 验收标准 | input 放 3 张图 → 处理后 results 长度=3status 准确 |
| 依赖 | T4、T5 |
### 任务 7:UI 一键处理按钮 + 进度
| 项 | 内容 |
|---|---|
| 输入契约 | UI 按钮点击事件 |
| 输出契约 | 进度对话框 + 主窗口日志更新 + 完成 MessageBox |
| 实现约束 | 后台线程 + UI 通信用 queue;进度不可关闭 |
| 验收标准 | 点击按钮 → 进度可见 → 完成有汇总 |
| 依赖 | T6 |
### 任务 8:单元测试
| 项 | 内容 |
|---|---|
| 输入契约 | 测试用例集 |
| 输出契约 | 191 + 新测试 全部 pass |
| 实现约束 | tests/test_metadata_extractor.pytests/test_order_metadata.py |
| 验收标准 | `pytest tests/` 全绿 |
| 依赖 | T1、T2 |
## 工作量评估
- T1:30 分钟(算法 + 10 个测试用例)
- T215 分钟
- T320 分钟
- T430 分钟
- T520 分钟
- T630 分钟
- T740 分钟(UI 线程)
- T830 分钟
- 测试与集成:30 分钟
## 交付物
- 8 个原子任务全部通过
- `docs/订单批量识别/FINAL_订单批量识别.md`:项目总结
- `docs/订单批量识别/TODO_订单批量识别.md`:待办清单