orc-order-v2/backup/v1_backup_20250502190248/README.md
2025-05-02 19:05:42 +08:00

332 lines
11 KiB
Markdown
Raw 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.

# OCR订单处理系统
这是一个基于OCR技术的订单处理系统用于自动识别和处理Excel格式的订单文件。系统支持多种格式的订单处理包括普通订单和赠品订单的处理。
## 主要功能
1. **OCR识别**
- 支持图片和PDF文件的文字识别
- 支持表格结构识别
- 支持多种格式的订单识别
2. **Excel处理**
- 自动处理订单数据
- 支持赠品订单处理
- 自动提取商品规格和数量信息
- 从商品名称智能推断规格信息
- 从数量字段提取单位信息
- 支持多种格式的订单合并
3. **日志管理**
- 自动记录处理过程
- 支持日志文件压缩
- 自动清理过期日志
- 日志文件自动重建
- 支持日志大小限制
- 活跃日志文件保护机制
4. **文件管理**
- 自动备份清理的文件
- 支持按时间和模式清理文件
- 文件统计和状态查看
- 支持输入输出目录的独立管理
## 系统要求
- Python 3.8+
- Windows 10/11
## 安装说明
1. 克隆项目到本地:
```bash
git clone [项目地址]
cd orc-order
```
2. 安装依赖:
```bash
pip install -r requirements.txt
```
3. 配置百度OCR API
- 在[百度AI开放平台](https://ai.baidu.com/)注册账号
- 创建OCR应用并获取API Key和Secret Key
- 将密钥信息填入`config.ini`文件
## 使用说明
### 1. OCR处理流程
1. 运行OCR识别
```bash
python run_ocr.py [输入文件路径]
```
2. 使用百度OCR API
```bash
python baidu_ocr.py [输入文件路径]
```
3. 处理表格OCR
```bash
python baidu_table_ocr.py [输入文件路径]
```
### 2. Excel处理
```bash
python excel_processor_step2.py [输入Excel文件路径]
```
或者不指定输入文件自动处理output目录中最新的Excel文件
```bash
python excel_processor_step2.py
```
#### 2.1 Excel处理逻辑说明
1. **列名识别与映射**
- 系统首先检查是否存在直接匹配的列(如"商品条码"列)
- 如果没有,系统会尝试将多种可能的列名映射到标准列名
- 支持特殊表头格式处理(如基本条码、仓库全名等)
2. **条码识别与处理**
- 验证条码格式确保长度在8-13位之间
- 对特定的错误条码进行修正如5开头改为6开头
- 识别特殊条码(如"5321545613"
- 跳过条码为"仓库"或"仓库全名"的行
3. **智能规格推断**
- 当规格信息为空时,从商品名称自动推断规格
- 支持多种商品命名模式:
- 445水溶C血橙15入纸箱 → 规格推断为 1*15
- 500-东方树叶-绿茶1*15-纸箱装 → 规格推断为 1*15
- 12.9L桶装水 → 规格推断为 12.9L*1
- 900树叶茉莉花茶12入纸箱 → 规格推断为 1*12
- 500茶π蜜桃乌龙15纸箱 → 规格推断为 1*15
4. **单位自动提取**
- 当单位信息为空时,从数量字段中自动提取单位
- 支持格式2箱、5桶、3件、10瓶等
- 自动分离数字和单位部分
5. **赠品识别**
- 通过以下条件识别赠品:
- 商品单价为0或为空
- 商品金额为0或为空
- 单价非有效数字
6. **数据合并与处理**
- 对同一条码的多个正常商品记录,累加数量
- 对同一条码的多个赠品记录,累加赠品数量
- 如果同一条码有不同单价,取平均值
### 3. 订单合并
`merge_purchase_orders.py`是专门用来合并多个采购单Excel文件的工具可以高效处理多份采购单并去重。
#### 3.1 基本用法
自动合并output目录下的所有采购单文件以"采购单_"开头的Excel文件
```bash
python merge_purchase_orders.py
```
指定要合并的特定文件:
```bash
python merge_purchase_orders.py --input "output/采购单_1.xls,output/采购单_2.xls"
```
#### 3.2 合并逻辑说明
1. **数据识别与映射**
- 自动识别Excel文件中的列名支持多种表头格式
- 将不同格式的列名映射到标准列名(如"条码"、"条码(必填)"等)
- 支持特殊表头结构的处理如表头在第3行的情况
2. **相同商品的处理**
- 自动检测相同条码和单价的商品
- 对相同商品进行数量累加处理
- 保持商品名称、条码和单价不变
3. **赠送量的处理**
- 自动检测和处理赠送量
- 对相同商品的赠送量进行累加
- 当原始文件中赠送量为空时合并后保持为空不显示为0
4. **数据格式保持**
- 保持条码的原始格式(不转换为小数)
- 单价保持四位小数格式
- 避免"nan"值的显示,空值保持为空
### 4. 单位处理规则(核心规则)
系统支持多种单位的智能处理,能够自动识别和转换不同的计量单位。所有开发必须严格遵循以下规则处理单位转换。
#### 4.1 标准单位处理
| 单位 | 处理规则 | 示例 |
|------|----------|------|
| 件 | 数量×包装数量<br>单价÷包装数量<br>单位转换为"瓶" | 1件(规格1*12) → 12瓶<br>单价108元/件 → 9元/瓶 |
| 箱 | 数量×包装数量<br>单价÷包装数量<br>单位转换为"瓶" | 2箱(规格1*24) → 48瓶<br>单价120元/箱 → 5元/瓶 |
| 包 | 保持原数量和单位不变 | 3包 → 3包 |
| 其他单位 | 保持原数量和单位不变 | 5瓶 → 5瓶 |
#### 4.2 提和盒单位特殊处理
系统对"提"和"盒"单位有特殊的处理逻辑:
1. 当规格是三级格式如1*5*12
- 按照件的计算方式处理
- 数量 = 原始数量 × 包装数量
- 单位转换为"瓶"
- 单价 = 原始单价 ÷ 包装数量
示例3提(规格1*5*12) → 36瓶
2. 当规格是二级格式如1*16
- **保持原数量不变**
- **保持原单位不变**
示例3提(规格1*16) → 仍然是3提
#### 4.3 特殊条码处理
系统支持对特定条码进行特殊处理,这些条码的处理规则会覆盖上述的标准单位处理规则:
1. 特殊条码配置:
```python
special_barcodes = {
'6925019900087': {
'multiplier': 10, # 数量乘以10
'target_unit': '瓶', # 目标单位
'description': '特殊处理:数量*10单位转换为瓶'
}
# 可以添加更多特殊条码的配置
}
```
2. 处理规则:
- 当遇到特殊条码时,无论规格是二级还是三级
- 无论单位是提还是盒还是件
- 都按照特殊条码配置进行处理
- 数量乘以配置的倍数
- 单位转换为配置的目标单位
- 如果有单价,单价除以配置的倍数
3. 添加新的特殊条码的正确方法:
- 在`ExcelProcessorStep2`类的`__init__`方法中的`special_barcodes`字典中添加新的配置
- 每个特殊条码需要配置:
- `multiplier`: 数量乘以的倍数
- `target_unit`: 转换后的目标单位
- `description`: 处理规则的描述
4. 注意事项:
- 特殊条码处理优先级高于标准单位处理
- 添加新的特殊条码前,需要确认该条码是否真的需要特殊处理,或者可以使用现有的标准规则
- 如果商品单位是"件"且有规格信息,应首先考虑使用标准的"件"单位处理规则
5. 示例:
- 条码6925019900087单位为"副"原始数量为2
- 无论规格如何
- 最终数量 = 2 * 10 = 20单位为"瓶"
- 如原单价为50元/副则转换后为5元/瓶
### 5. 开发注意事项
1. **遵循原有处理逻辑**
- 在进行任何修改前,必须理解并遵循现有的单位处理逻辑
- 对于"件"单位,必须按照"数量×包装数量"进行处理
- 对于"提"和"盒"单位,必须检查规格是二级还是三级格式,按相应规则处理
2. **添加特殊条码处理**
- 只有在明确确认某条码无法使用现有规则处理的情况下,才添加特殊处理规则
- 添加特殊条码处理前,先咨询相关负责人确认处理逻辑
3. **代码更改原则**
- 任何代码修改都不应破坏现有的处理逻辑
- 添加新功能时,先确保理解并保留现有功能
- 如需修改核心处理逻辑,必须详细记录变更并更新本文档
4. **文档同步更新**
- 当修改代码逻辑时必须同步更新README文档
- 确保文档准确反映当前系统的处理逻辑
- 记录所有特殊处理规则和条码
## 注意事项
1. 确保输入文件格式正确
2. 定期检查日志文件大小
3. 及时更新百度OCR API密钥
4. 建议定期备份重要数据
5. 清理文件前先查看统计信息
6. 重要文件建议手动备份后再清理
7. 日志文件会自动重建,可以放心清理
8. 规格推断功能适用于特定命名格式的商品
9. 单位提取功能依赖于数量字段的格式
## 常见问题
1. **OCR识别失败**
- 检查图片质量
- 确认API密钥配置正确
- 查看日志文件了解详细错误信息
2. **Excel处理错误**
- 确认Excel文件格式正确
- 检查商品信息是否完整
- 查看处理日志了解具体错误
3. **规格推断失败**
- 检查商品名称是否符合支持的格式
- 尝试手动在Excel中填写规格信息
- 查看日志中的推断过程信息
4. **单位提取失败**
- 检查数量字段格式是否为"数字+单位"格式
- 确认数量字段没有额外的空格或特殊字符
- 尝试手动在Excel中填写单位信息
5. **文件清理问题**
- 清理前使用`--test`参数预览要删除的文件
- 清理前检查文件统计信息`--stats`
- 对于重要文件,先使用`--test`确认后再实际删除
- 对于被占用的文件,尝试关闭占用的程序后再清理
- Windows下某些文件无法删除时可以使用`--force`参数
- 日志文件清理时可以使用`--clean-all-logs`参数
## 更新日志
### v1.2.1 (2024-05-04)
- 新增日志文件活跃标记保护机制
- 修复OCR处理器日志文件被意外删除的问题
- 改进日志清理工具,避免删除活跃日志
- 优化文件清理逻辑
- 更新README文档
### v1.2.0 (2024-05-03)
- 新增对"提"单位的支持1提=10袋
- 新增对三级规格格式1*5*10的解析支持
- 优化单位转换逻辑
- 改进规格解析能力
### v1.1.0 (2024-05-02)
- 新增从商品名称智能推断规格功能
- 新增从数量字段提取单位功能
- 优化赠品处理逻辑
- 修复缩进错误和代码问题
- 改进日志记录内容
### v1.0.0 (2024-05-01)
- 初始版本发布
- 支持基本的OCR识别功能
- 支持Excel订单处理
- 支持日志管理功能
- 添加文件清理工具
- 优化文件命名和目录结构
- 完善日志自动重建功能
## 许可证
MIT License