Files
LabelChange-server/.trae/documents/pdf_barcode_extraction_plan.md
2026-06-01 16:30:29 +08:00

3.8 KiB
Raw Blame History

PDF面单条码提取功能规划

一、需求分析

背景

物流面单PDF中通常包含一维码或二维码存储了运单号、跟踪号等核心信息在定时任务预解析PDF缓存时同步提取条码信息可以避免后续业务流程重复解析PDF提升处理效率。

目标

  1. 在定时任务解析PDF面单时自动识别并提取其中的一维码和二维码内容
  2. 存储提取到的条码信息,供后续业务场景直接使用
  3. 不影响现有PDF缓存主流程识别失败时自动降级

二、现有资源评估

  1. 已有依赖:项目已集成ZXing.Net条码识别库、PdfSharpPDF处理库无需新增第三方依赖
  2. 现有流程定时任务已有完整的PDF下载、解析、页数校验流程可直接嵌入条码识别步骤
  3. 存储基础:已有label_pdf_cache表,可扩展字段存储条码信息

三、方案设计

1. 数据库扩展

1.1 新增基础关联字段参考LabelReplaceEntity命名规范

字段名 类型 说明
FinalMileTrackingNumber varchar(100) 尾程跟踪单号(与订单表字段一致)
CustomerId int 客户ID与订单表字段一致关联customers表

1.2 新增条码识别字段

字段名 类型 说明
BarcodeNumber varchar(100) 提取到的条码单号
BarcodeType tinyint 条码类型0=未识别到1=一维码2=二维码
BarcodeConfidence int 识别置信度0-100数值越高识别结果越可靠
BarcodeExtractTime datetime 条码提取完成时间

字段注释规范

  • 所有实体类字段都添加XML注释明确字段含义
  • 数据库表字段添加COMMENT注释便于维护和理解
  • 命名完全参考订单表LabelReplaceEntity的命名风格,保持项目一致性

2. 条码识别逻辑设计

识别流程:

graph LR
A[获取PDF字节流] --> B[渲染PDF第一页为图片]
B --> C[优先识别二维码]
C --> D{识别成功?}
D -->|是| E[存储二维码内容]
D -->|否| F[识别一维码]
F --> G{识别成功?}
G -->|是| H[存储一维码内容]
G -->|否| I[标记为未识别]
E & H & I --> J[继续后续缓存流程]

识别策略:

  • 优先识别二维码,其次识别一维码,符合物流面单常用设计
  • 仅识别PDF第一页面单通常只有一页
  • 支持常见条码格式CODE128、CODE39、QR Code、PDF417等物流行业常用格式
  • 识别失败不影响主缓存流程,仅记录日志

3. 性能保障

  • 条码识别作为异步流程的一部分,不影响接口响应速度
  • 单次识别时间控制在500ms以内避免影响定时任务处理效率
  • 识别异常时添加熔断机制避免重复识别无效PDF

四、实施步骤

步骤1数据结构扩展

  1. 扩展LabelPdfCache实体类,新增条码相关字段
  2. 生成数据库ALTER TABLE更新脚本添加新字段

步骤2条码识别功能实现

  1. 实现条码识别工具方法输入PDF字节流输出识别到的条码信息
  2. 集成ZXing.Net库配置物流常用条码格式
  3. 实现PDF页面转图片功能用于条码识别

步骤3定时任务集成

  1. LabelPdfCacheService.ProcessSingleCacheTask方法中PDF页数校验通过后加入条码识别步骤
  2. 将识别结果保存到缓存表对应字段
  3. 添加识别日志和异常处理

步骤4测试验证

  1. 用实际物流面单测试条码识别准确率
  2. 测试识别失败场景的降级处理逻辑
  3. 验证定时任务整体性能不受影响

五、后续扩展

  1. 可根据业务需求,支持多条码识别和存储
  2. 可针对不同客户的面单格式优化识别参数
  3. 可将条码识别结果用于面单校验,提高数据准确性