# OCR订单处理系统 v1.0

基于百度OCR API的订单处理系统，用于识别采购订单图片并生成Excel采购单。

## 版本信息

- **当前版本**: v1.0
- **发布日期**: 2025-05-02
- **作者**: OCR订单处理团队

## 功能特点

- **图像OCR识别**：支持对采购单图片进行OCR识别并生成Excel文件
- **Excel数据处理**：读取OCR识别的Excel文件并提取商品信息
- **采购单生成**：按照模板格式生成标准采购单Excel文件
- **采购单合并**：支持多个采购单合并为一个总单
- **批量处理**：支持批量处理多张图片
- **图形界面**：提供简洁直观的图形界面，方便操作
- **命令行支持**：支持命令行方式调用，便于自动化处理

## 系统架构

### 目录结构

```
orc-order-v2/
│
├── app/                  # 应用主目录
│   ├── config/           # 配置目录
│   │   ├── settings.py   # 配置管理
│   │   └── defaults.py   # 默认配置值
│   │
│   ├── core/             # 核心功能
│   │   ├── ocr/          # OCR相关功能
│   │   │   ├── baidu_ocr.py      # 百度OCR接口
│   │   │   └── table_ocr.py      # 表格OCR处理
│   │   │
│   │   ├── excel/        # Excel处理
│   │   │   ├── processor.py      # Excel处理核心
│   │   │   ├── merger.py         # 订单合并功能
│   │   │   └── converter.py      # 单位转换与规格处理
│   │   │
│   │   └── utils/        # 工具函数
│   │       ├── file_utils.py     # 文件处理工具
│   │       └── log_utils.py      # 日志工具
│   │
│   └── services/         # 服务层
│       ├── ocr_service.py        # OCR服务
│       └── excel_service.py      # Excel处理服务
│
├── data/                 # 数据目录
│   ├── input/            # 输入图片目录
│   ├── output/           # 处理结果输出目录
│   ├── temp/             # 临时文件目录
│   └── backup/           # 备份目录
│
├── logs/                 # 日志目录
│
├── templates/            # 模板目录
│   └── 银豹-采购单模板.xls    # Excel模板文件
│
├── config.ini            # 配置文件
├── run.py                # 命令行入口脚本
├── 启动器.py               # 图形界面启动器
└── README.md             # 项目说明文档
```

## 安装与配置

### 环境要求

- Python 3.8+
- 百度OCR API账号及密钥

### 安装依赖

```bash
pip install -r requirements.txt
```

### 配置文件

在`config.ini`中配置以下信息：

```ini
[OCR]
api_key = 你的百度OCR API Key
secret_key = 你的百度OCR Secret Key

[Paths]
input_folder = data/input
output_folder = data/output
template_file = templates/银豹-采购单模板.xls
```

## 使用方法

### 图形界面

运行`启动器.py`启动图形界面：

```bash
python 启动器.py
```

图形界面包括以下功能：
- **处理单个文件**：选择并处理单个图片文件
- **批量处理**：处理data/input目录中的所有图片文件
- **合并处理**：合并多个采购单
- **清理文件**：清理input和output目录中的文件
- **查看日志**：实时显示处理日志

### 命令行模式

```bash
# 处理单个文件
python run.py --file=image.jpg

# 批量处理目录中的所有文件
python run.py --batch

# 合并采购单
python run.py --merge
```

## 单位处理规则

系统支持多种单位的智能处理，自动识别和转换不同的计量单位。单位处理逻辑如下：

### 标准单位处理

| 单位 | 处理规则 | 示例 |
|------|----------|------|
| 件 | 数量×包装数量<br>单价÷包装数量<br>单位转换为"瓶" | 1件(规格1*12) → 12瓶<br>单价108元/件 → 9元/瓶 |
| 箱 | 数量×包装数量<br>单价÷包装数量<br>单位转换为"瓶" | 2箱(规格1*24) → 48瓶<br>单价120元/箱 → 5元/瓶 |
| 包 | 保持原数量和单位不变 | 3包 → 3包 |
| 其他单位 | 保持原数量和单位不变 | 5瓶 → 5瓶 |

### 提和盒单位特殊处理

系统对"提"和"盒"单位有特殊的处理逻辑：

1. 当规格是三级格式（如1*5*12）时：
   - 按照件的计算方式处理
   - 数量 = 原始数量 × 包装数量
   - 单位转换为"瓶"
   - 单价 = 原始单价 ÷ 包装数量
   
   示例：3提(规格1*5*12) → 36瓶

2. 当规格是二级格式（如1*16）时：
   - **保持原数量不变**
   - **保持原单位不变**
   
   示例：3提(规格1*16) → 仍然是3提

### 特殊条码处理

系统支持对特定条码进行特殊处理，这些条码的处理规则会覆盖上述的标准单位处理规则：

1. 特殊条码配置：
   ```python
   special_barcodes = {
       '6925019900087': {
           'multiplier': 10,  # 数量乘以10
           'target_unit': '瓶',  # 目标单位
           'description': '特殊处理：数量*10，单位转换为瓶'
       }
       # 可以添加更多特殊条码的配置
   }
   ```

2. 处理规则：
   - 当遇到特殊条码时，无论规格是二级还是三级
   - 无论单位是提还是盒还是件
   - 都按照特殊条码配置进行处理
   - 数量乘以配置的倍数
   - 单位转换为配置的目标单位
   - 如果有单价，单价除以配置的倍数

## 智能规格推断

当规格信息为空时，系统能从商品名称自动推断规格：

1. 匹配"xx入"格式：
   - 如"445水溶C血橙15入纸箱" → 规格推断为 1*15

2. 匹配直接包含规格的格式：
   - 如"500-东方树叶-绿茶1*15-纸箱装" → 规格推断为 1*15

3. 匹配容量格式：
   - 如"12.9L桶装水" → 规格推断为 12.9L*1

4. 其他商品命名模式：
   - 如"900树叶茉莉花茶12入纸箱" → 规格推断为 1*12
   - 如"500茶π蜜桃乌龙15纸箱" → 规格推断为 1*15

## 注意事项

1. 确保输入文件格式正确，支持jpg、png等图片格式
2. 处理结果将输出到data/output目录下
3. 定期清理临时文件和日志文件
4. 及时更新百度OCR API密钥
5. 为避免数据丢失，可使用清理功能前的备份选项

## 错误排查

- **OCR识别失败**：检查API密钥是否正确，图片是否符合要求
- **Excel处理失败**：检查OCR识别结果是否包含必要的列（条码、数量、单价等）
- **模板填充错误**：确保模板文件存在且格式正确

## 开发说明

如需进行二次开发或扩展功能，请参考以下说明：

1. 核心逻辑位于`app/core`目录
2. 添加新功能建议遵循已有的模块化结构
3. 使用`app/services`目录中的服务类调用核心功能
4. 日志记录已集成到各模块，便于调试

## 许可证

MIT License

## 更新日志

### v1.0 (2025-05-02)

#### 主要功能
- 图像OCR识别：支持对采购单图片进行OCR识别并生成Excel文件
- Excel数据处理：智能处理Excel文件，提取和转换商品信息
- 采购单生成：按照模板格式生成标准采购单Excel文件
- 采购单合并：支持多个采购单合并为一个总单
- 图形界面：提供简洁直观的操作界面
- 命令行支持：支持命令行调用，方便自动化处理

#### 技术改进
- 模块化架构：重构代码为配置、核心功能、服务和CLI等模块
- 单位智能处理：完善的单位转换规则，支持多种计量单位
- 规格智能推断：从商品名称自动推断规格信息
- 日志管理：完善的日志记录系统，支持终端和GUI同步显示
- 表头智能识别：自动识别Excel中的表头位置，兼容多种格式
- 改进用户体验：界面优化，批量处理支持，实时状态反馈

## 联系方式

如有问题，请提交Issue或联系开发者。 