orc-order-v2/v1/README.md

11 KiB
Raw Blame History

OCR订单处理系统

这是一个基于OCR技术的订单处理系统用于自动识别和处理Excel格式的订单文件。系统支持多种格式的订单处理包括普通订单和赠品订单的处理。

主要功能

  1. OCR识别

    • 支持图片和PDF文件的文字识别
    • 支持表格结构识别
    • 支持多种格式的订单识别
  2. Excel处理

    • 自动处理订单数据
    • 支持赠品订单处理
    • 自动提取商品规格和数量信息
    • 从商品名称智能推断规格信息
    • 从数量字段提取单位信息
    • 支持多种格式的订单合并
  3. 日志管理

    • 自动记录处理过程
    • 支持日志文件压缩
    • 自动清理过期日志
    • 日志文件自动重建
    • 支持日志大小限制
    • 活跃日志文件保护机制
  4. 文件管理

    • 自动备份清理的文件
    • 支持按时间和模式清理文件
    • 文件统计和状态查看
    • 支持输入输出目录的独立管理

系统要求

  • Python 3.8+
  • Windows 10/11

安装说明

  1. 克隆项目到本地:
git clone [项目地址]
cd orc-order
  1. 安装依赖:
pip install -r requirements.txt
  1. 配置百度OCR API
    • 百度AI开放平台注册账号
    • 创建OCR应用并获取API Key和Secret Key
    • 将密钥信息填入config.ini文件

使用说明

1. OCR处理流程

  1. 运行OCR识别
python run_ocr.py [输入文件路径]
  1. 使用百度OCR API
python baidu_ocr.py [输入文件路径]
  1. 处理表格OCR
python baidu_table_ocr.py [输入文件路径]

2. Excel处理

python excel_processor_step2.py [输入Excel文件路径]

或者不指定输入文件自动处理output目录中最新的Excel文件

python excel_processor_step2.py

2.1 Excel处理逻辑说明

  1. 列名识别与映射

    • 系统首先检查是否存在直接匹配的列(如"商品条码"列)
    • 如果没有,系统会尝试将多种可能的列名映射到标准列名
    • 支持特殊表头格式处理(如基本条码、仓库全名等)
  2. 条码识别与处理

    • 验证条码格式确保长度在8-13位之间
    • 对特定的错误条码进行修正如5开头改为6开头
    • 识别特殊条码(如"5321545613"
    • 跳过条码为"仓库"或"仓库全名"的行
  3. 智能规格推断

    • 当规格信息为空时,从商品名称自动推断规格
    • 支持多种商品命名模式:
      • 445水溶C血橙15入纸箱 → 规格推断为 1*15
      • 500-东方树叶-绿茶115-纸箱装 → 规格推断为 115
      • 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文件

python merge_purchase_orders.py

指定要合并的特定文件:

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 标准单位处理

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

4.2 提和盒单位特殊处理

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

  1. 当规格是三级格式如1512

    • 按照件的计算方式处理
    • 数量 = 原始数量 × 包装数量
    • 单位转换为"瓶"
    • 单价 = 原始单价 ÷ 包装数量

    示例3提(规格1512) → 36瓶

  2. 当规格是二级格式如1*16

    • 保持原数量不变
    • 保持原单位不变

    示例3提(规格1*16) → 仍然是3提

4.3 特殊条码处理

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

  1. 特殊条码配置:

    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袋
  • 新增对三级规格格式1510的解析支持
  • 优化单位转换逻辑
  • 改进规格解析能力

v1.1.0 (2024-05-02)

  • 新增从商品名称智能推断规格功能
  • 新增从数量字段提取单位功能
  • 优化赠品处理逻辑
  • 修复缩进错误和代码问题
  • 改进日志记录内容

v1.0.0 (2024-05-01)

  • 初始版本发布
  • 支持基本的OCR识别功能
  • 支持Excel订单处理
  • 支持日志管理功能
  • 添加文件清理工具
  • 优化文件命名和目录结构
  • 完善日志自动重建功能

许可证

MIT License