feat: 益选 OCR 订单处理系统初始提交

- 智能供应商识别(蓉城易购/烟草/杨碧月/通用)
- 百度 OCR 表格识别集成
- 规则引擎(列映射/数据清洗/单位转换/规格推断)
- 条码映射管理与云端同步(Gitea REST API)
- 云端同步支持:条码映射、供应商配置、商品资料、采购模板
- 拖拽一键处理(图片→OCR→Excel→合并)
- 191 个单元测试
- 移除无用的模板管理功能
- 清理 IDE 产物目录

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-04 19:51:13 +08:00
commit e4d62df7e3
78 changed files with 15257 additions and 0 deletions
+110
View File
@@ -0,0 +1,110 @@
# 益选 OCR 订单处理系统
面向零售与分销场景的采购单处理工具,支持图片 OCR → Excel 规范化 → 模板填充 → 合并导出全流程,输出适配银豹 (PosPal) POS 系统。
## 核心功能
- **智能供应商识别**:自动扫描 Excel 前 50 行内容特征,路由到对应的预处理逻辑(蓉城易购、烟草公司、杨碧月等)
- **图片 OCR**:调用百度 OCR 表格识别 API,将采购单图片转为结构化 Excel
- **规则引擎**:支持列映射、数据清洗、单位转换、规格推断、赠品标记等自动化规则
- **条码映射**:可配置的条码转换规则,支持运行时编辑和云端同步
- **单价校验**:自动比对 `商品资料.xlsx`,价差超过 1.0 元触发预警
- **云端同步**:通过 Gitea REST API 在多台设备间同步配置文件(条码映射、供应商配置、商品资料、采购模板)
- **拖拽一键处理**:拖入图片或 Excel 自动走完 OCR → 规范化 → 合并全流程
- **CLI 接口**`headless_api.py` 支持无界面自动化调用
## 快速开始
```bash
# 安装依赖
pip install -r requirements.txt
# GUI 模式
python 启动器.py
# CLI 模式
python headless_api.py data/input/xxx.xlsx
python headless_api.py data/input/xxx.jpg --barcode 6920584471055 --target 6920584471017
# 打包 EXE
python build_exe.py
```
## 项目结构
```
├── 启动器.py # GUI 入口
├── headless_api.py # CLI 自动化接口
├── config.ini # 全局配置(API密钥、路径、Gitea)
├── config/
│ ├── config.ini # 配置副本
│ ├── barcode_mappings.json # 条码映射规则
│ └── suppliers_config.json # 供应商配置(列映射/规则引擎)
├── app/
│ ├── config/ # 配置管理(ConfigManager 单例)
│ ├── core/
│ │ ├── excel/ # Excel 处理(标准化、转换、合并、校验)
│ │ ├── handlers/ # 规则引擎、列映射、数据清洗、计算器
│ │ ├── ocr/ # 百度 OCR 客户端
│ │ ├── processors/ # 处理器(通用/烟草/OCR)
│ │ └── utils/ # 工具(日志、文件、字符串、云端同步、对话框)
│ ├── services/ # 业务服务(订单、OCR、处理器调度)
│ └── ui/ # GUI 模块(主题、日志、快捷键、主窗口)
├── templates/
│ ├── 银豹-采购单模板.xls # 输出模板(条码/采购量/赠送量/单价)
│ └── 商品资料.xlsx # 单价校验参考数据
├── data/
│ ├── input/ # 输入文件
│ ├── output/ # OCR 输出
│ └── result/ # 最终采购单
└── tests/ # 单元测试(191 个)
```
## 供应商智能路由
| 供应商 | 识别特征 | 处理逻辑 |
|--------|----------|----------|
| 烟草公司 | "专卖证号" 或 "510109104938" | B/E/G/H 列映射,数量×10,单价÷10 |
| 蓉城易购 | "RCDH" | E/N/Q/S 列映射,多条码分裂均分数量 |
| 杨碧月 | "经手人" + "杨碧月" | 列对齐,单位转换(件→瓶) |
| 通用供应商 | `suppliers_config.json` 配置 | 列映射 + 规则引擎 |
## 云端同步
通过 Gitea REST API 在多台设备间同步配置,无需 git 客户端。
**支持同步的文件:**
- 条码映射 (`barcode_mappings.json`)
- 供应商配置 (`suppliers_config.json`)
- 商品资料 (`templates/商品资料.xlsx`)
- 采购单模板 (`templates/银豹-采购单模板.xls`)
**配置方式:**
1. 系统设置 → 填入 Gitea 地址、仓库信息、Access Token
2. 主窗口 → "云端同步" 按钮 → 选择文件推拉
**Gitea 仓库:** `https://gitea.94kan.cn/houhuan/yixuan-sync-data`
## 配置说明
| 配置项 | 文件 | 说明 |
|--------|------|------|
| API 密钥 | `.env``config.ini` | 百度 OCR API,优先从环境变量读取 |
| Gitea Token | `.env``config.ini` | 云端同步 Token,优先从环境变量读取 |
| 供应商规则 | `config/suppliers_config.json` | 列映射、清洗规则、计算规则 |
| 条码映射 | `config/barcode_mappings.json` | 条码转换规则,运行时可更新 |
## 构建打包
```bash
pip install pyinstaller
python build_exe.py
# 输出: dist/OCR订单处理系统.exe
# 便携包: release/OCR订单处理系统.exe(含模板和商品资料)
```
## 测试
```bash
python -m pytest tests/ -v
```