# 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 ``` ## 原子任务列表 ### 任务 1:metadata_extractor.py | 项 | 内容 | |---|---| | 输入契约 | 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`:待办清单