# 推荐箱型 / 设箱校验

> 白场拆箱、中通 45kg 逐箱匹配、晚场加单重算（含昆明→店/仓→店按货架重算）、特殊花材专用箱、设箱校验完整口径

- 类型：业务口径
- 分类：仓库配货 / 打包
- 更新：2026-08-11
- 网页版：https://doc.xfun.fun/box-suggest-logic

## 一句话总览

运营端生成面单时，系统按发货单重量 **自动推荐每张面单用什么箱**；仓库打包时实际设箱与推荐不一致会 **校验提示**。晚场加单后，未出库的面单按新重量 **整体重算**推荐。

## 前提配置

| 配置 | 说明 |
|----|----|
| 箱型配置（打包配置） | 每种箱录入「可装花材重量」（kg）。**没录容量的箱不参与推荐**。 |
| 特殊花材专用箱 | 需新增两条配置：**蝴蝶兰箱**（蝴蝶兰 / 红掌 / 大花蕙兰 共用）、**蓝妖箱**（蓝色妖姬）。按 **箱名**匹配（先找同名，找不到再找名称包含的），不要求录容量。 |
| 特殊花材定义 | 商品名包含：蝴蝶兰、红掌、大花蕙兰、蓝色妖姬。**业务前提：到仓时已装箱，仓库只需贴面单**，所以不存在装不下的问题。 |

## 白场面单生成（运营端）

1. **算可装重量**：可装重量 = 发货单总重 − 特殊花材重量（特殊花材单独装箱，不占普通箱额度）
2. **按物流拆箱**：普通物流与中通算法不同，见下表；每拆出一箱 = 一张面单，并写上推荐箱型
3. **特殊花材追加专用面单**：按 **专用箱**追加面单，不是按种类：**蓝色妖姬**单独 1 张（蓝妖箱），**蝴蝶兰 / 红掌 / 大花蕙兰**合并 1 张（蝴蝶兰箱）。即最多 2 张，映射到同一箱的多种花材只算 1 张

### 两种拆箱算法

| 物流 | 算法 |
|----|----|
| 普通物流 （顺丰等） | **最大箱优先**：先用容量最大的箱整箱装，剩余零头选 **能装下的最小箱**。 |
| 中通 （快运/落地/小件） | **45kg 逐箱匹配**：件数固定为 ceil(总重÷45)，与兜底口径一致。每轮取 min(45kg, 剩余重量) 作为一件的重量，选 **能装下这件的最小箱**作推荐，再按 **min(45kg, 剩余重量)** 扣减剩余重量（**箱容量只决定推荐哪个箱，不参与扣减**）。所有箱都装不下 45kg 时用最大箱。 |

- **普通物流例**：180kg，箱型 6 / 70 / 80 / 87 → 87箱 ×2（装 174）+ 零头 6kg → 6箱 ×1，共 3 箱。
- **中通例**：100kg，有容量 60 的 100\*60 箱 → 45 + 45 + 10 三件，每件都匹配到 100\*60 箱 → 共 **3 个 100\*60 箱**（件数 = ceil(100÷45) = 3，与兜底口径一致）。

> [!NOTE]
> **兜底**：一个可用箱型都没配置时，不推荐箱型，只按固定重量计件数：中通每件 45kg、其他物流每件 60kg（向上取整）。

> [!NOTE]
> **航邦物流**：与普通物流走同一套拆箱算法，无固定重量特判。

## 打单 / 电子面单（运单数）

运单数与「白场面单生成」口径 **完全一致**：运单数 = 拆箱得到的箱数 + 特殊花材 **专用箱数**（蓝妖箱、蝴蝶兰箱各至多 1）。中通同样走 45kg 逐箱匹配算法（上例 100kg 中通即 3 单）。**补打**面单不重新拆箱、不算特殊花材。

## 晚场加单重算

**触发条件**：晚场（18:05 后）加单导致某个打包分组重量变化时，对该分组重算。三种面单的重算单元不同：

| 面单类型 | 重算单元 | 说明 |
|----|----|----|
| 昆明→店 / 仓→店 | **按货架（发货单）** | 同一货架当天所有订单（含晚场）合并装箱，收货人相同。晚场该货架增重 → 按新合计重量把整货架的面单重排。 |
| 城市仓 | **按整仓聚合** | 整个城市仓的普通订单混在一起算箱，维持原粒度，不拆到货架级。 |

三者的重算步骤一致，如下：

1. **已出库的面单不动**：已出库面单及其箱子维持原样
2. **估算已出库带走的重量**：按已出库面单的箱容量合计（优先实际设的箱，没设箱按推荐箱，默认装满）
3. **剩余重量重新拆箱**：剩余 = 新总重 − 特殊花材重量 − 已出库容量；拆箱算法同白场（中通 45kg 逐箱匹配、普通最大箱优先）
4. **未出库面单整体承接新推荐**：未出库面单（含已设箱的）按顺序套用新箱型序列，**不保留**原推荐；不够就补新面单，多出来的面单不处理
5. **特殊花材追加**：白场每个 **专用箱** 1 张不变；**晚场又新增了某专用箱的花材，再追加 1 张**（无论白天是否已有同箱——晚场是新装的箱子）。按明细下单时间分白/晚场，同一阶段同一专用箱只算 1 张，重算幂等不重复追加

> [!NOTE]
> 推荐变化只打日志，不做留痕/通知；专用箱未配置时晚场跳过追加。

**中通晚场例**：晚场加单后总重 190kg、其中特殊花材 10kg，已出库 2 个 80 箱（按容量估算带走 160kg）→ 剩余 190−10−160 = 20kg → 未出库部分重拆为 1 个能装下 20kg 的最小箱。

## 供应商端设箱校验（仓库打包）

| 入口 | 行为 |
|----|----|
| 小程序拍照打包 / 修改箱型 | 实际箱型 ≠ 推荐箱型 → **拦截弹窗**（错误码 6001），确认后可继续。 |
| PDA 扫码枪打包 | **不拦截**，仅留痕备注「扫码枪打包，实际箱型与推荐箱型不一致」。 |
| 货架列表 | 「设箱有变化」的货架可筛选、有角标提示（小程序端）。 |

> [!NOTE]
> 中通面单同样有箱型推荐，设箱校验对中通 **同样生效**。

## 已知边界

- 中通面单件数固定 = ceil(总重÷45)，单件平均重量 = 总重 ÷ 件数 **≤ 45kg**（如 100kg → 3 件、约 33kg/件），与中通计费口径一致。
- 部分出库按「箱默认装满」估算带走重量，是启发式：若实际没装满，会少算剩余重量、少推荐箱。
- 件数变少时多余面单不回收，仓库按实际情况使用。
- 运营后台暂无「设箱有变化」查阅入口（目前仅小程序端）；推荐依据重量/推荐箱容量未落库。

