ERP/shipments_merge_cells_guide.md

3.5 KiB
Raw Blame History

发货记录合并单元格处理说明

功能特点

系统现在完全支持 Excel 中出货日期列的合并单元格,这是实际业务中常见的格式。

Excel 文件结构

典型格式

| 出货日期    | 箱号   | SN1    | SN2    | ... | SN20   |
|------------|--------|--------|--------|-----|--------|
| 2025-11-20 | BOX001 | SN0001 | SN0002 | ... | SN0020 |
|     ↓      | BOX002 | SN0021 | SN0022 | ... | SN0040 |
|     ↓      | BOX003 | SN0041 | SN0042 | ... | SN0060 |
| 2025-11-21 | BOX004 | SN0061 | SN0062 | ... | SN0080 |
|     ↓      | BOX005 | SN0081 | SN0082 | ... | SN0100 |

说明

  • 出货日期列可以合并单元格
  • 同一天的多个箱号共用一个日期单元格
  • 每行代表一个箱号
  • 横向包含该箱的 20 个 SN

解析逻辑

1. 合并单元格处理

# 记录上一个有效的日期
last_valid_date = None

for row in rows:
    # 如果当前行日期为空(合并单元格的后续行)
    if current_date:
        last_valid_date = current_date
        date = current_date
    else:
        # 使用上一个有效日期
        date = last_valid_date

2. 数据结构

每行解析后的数据:

{
    'date': '2025-11-20',      # 出货日期
    'box': 'BOX001',           # 箱号
    'sns': ['SN0001', 'SN0002', ...],  # SN 列表
    'qty': 20                  # SN 数量
}

3. Redis 存储

每个 SN 单独存储:

HSET shipment_sn_mapping "SN0001" '{"date":"2025-11-20","box":"BOX001","ts":"..."}'
HSET shipment_sn_mapping "SN0002" '{"date":"2025-11-20","box":"BOX001","ts":"..."}'
...

创建测试模板

运行以下命令创建带合并单元格的测试模板:

python create_shipments_template.py

这将生成:

  • shipments_template.xlsx - 带示例数据和合并单元格
  • shipments_template_empty.xlsx - 空白模板

导入流程

  1. 准备 Excel 文件

    • 第一列:出货日期(可合并单元格)
    • 第二列:箱号
    • 第3-22列SN1-SN20
  2. 上传文件

    • 访问"发货记录"页面
    • 选择 Excel 文件
    • 点击"验证文件"
  3. 验证通过后导入

    • 点击"导入数据"
    • 系统自动解析合并单元格
    • 数据存入 SQLite 和 Redis
  4. 查询验证

    • 访问"SN出货查询"页面
    • 输入任意 SN 号
    • 查看出货日期和箱号

支持的格式

Excel (.xlsx, .xls)

  • 支持合并单元格
  • 自动识别空单元格
  • 按 SN 编号排序SN1, SN2, ..., SN20

CSV (.csv)

  • 支持空值(相当于合并单元格)
  • 自动使用上一行的日期
  • ⚠️ CSV 不支持真正的合并单元格,但空值会被正确处理

常见问题

Q: 如果日期列第一行就是空的怎么办?

A: 系统会跳过该行,直到遇到第一个有效日期。

Q: 如果某个箱子的 SN 不足 20 个?

A: 没问题,后面的 SN 列可以留空,系统只记录有值的 SN。

Q: 可以一天有多少个箱子?

A: 没有限制,同一天可以有任意多个箱子,都会使用同一个日期。

Q: 箱号可以重复吗?

A: 技术上可以,但建议保持唯一,便于追溯。

数据验证

导入后可以通过以下方式验证:

1. 查看 Redis 记录数

redis-cli HLEN shipment_sn_mapping

2. 查询特定 SN

redis-cli HGET shipment_sn_mapping "SN0001"

3. 通过 Web 界面

  • 访问"SN出货查询"页面
  • 页面顶部显示总记录数
  • 输入 SN 查询详细信息