# 包花厂集采业务逻辑

> 采购计划发布 → 按等级报价 → 自动定采 → 签到打印 → 扫码入库 → 盘点 → 超量处理 → T+3 结算的完整业务口径，附现场操作清单与常见问题排查

- 类型：业务口径
- 分类：包花厂集采
- 端：运营后台 / 供应商小程序 / 仓库 PDA
- 后端服务：admin + supplier
- 测试分支：sh/code
- 更新：2026-11-04
- 网页版：https://doc.xfun.fun/bulk-purchase-logic

## 结论

包花厂集采是一条「运营发计划、供应商报价、系统定采、仓库收货、平台结算」的链路：

1. 运营发布**采购计划**，写清品类、规格、各等级收购扎数和最高价、哪些供应商能报。
2. 供应商按**等级**报单价和可供扎数，截止前可以改报。
3. 报价截止后系统**自动定采**：每个等级取价格最低的前 5 家，依次分到需求量为止，给中选的供应商各生成一张**供货单**。
4. 仓库给供货单**签到 → 打印标签 → 开始盘点 → 扫码**。**每扫一张标签 = 入库 1 扎**，库存在扫码那一刻就加上。
5. **提交盘点**后供货单进入待结算，3 天后按**冻结报价**自动结算；送多了（超量）要先人工处理才能结算。

三条贯穿全链路的口径：

- **单位一律是扎**，单价是元／扎。每扎多少枝（`specNum`）只用于展示和标签，**不参与任何乘法**。
- **价格在定采那一刻冻结**到供货单，之后改商品售价、改报价都不影响结算。
- **采购计划和供货单的状态互相独立**。计划「已完成」只表示定采流程结束，货还没收、钱还没结。

开发实现、接口、锁与定时任务见 [包花厂集采开发文档](/bulk-purchase-dev-guide)。

## 角色与业务对象

| 角色 | 在系统里做什么 | 使用的端 |
|----|----|----|
| 运营 | 发布 / 追加 / 撤回 / 提前终止采购计划；查看定采结果；处理超量、改结算数、手动结算、取消供货单；管理包花厂商品上架和售价 | 运营后台 |
| 供应商（供货方） | 看可报计划、报价、改报；查看自己的供货单 | 供应商小程序 |
| 仓库作业人员 | 签到、打印标签、开始盘点、扫码、撤销扫码、提交盘点；也可以处理超量、改结算数、手动结算、取消 | 仓库 PDA |
| 发布主体 | 发布计划的内部自营供应商账号。货入它的库存、钱从它的余额扣 | 后台配置 |

| 对象 | 含义 |
|----|----|
| 采购计划（集采需求） | 一次收购安排：品类、规格、各等级收购量和最高价、供应商范围、两类供应商的报价截止和签到截止 |
| 报价 | 某供应商对某计划各等级的单价与可供扎数。每次改报存一个新版本，定采只看当前版本 |
| 供货单 | 定采中选后生成。**同一计划下一个供应商只有一张供货单**，可包含多个等级 |
| 货架码 | 现场摆货的位置编号（如 `A-001`）。**同场次、同品种、同等级、同供应商一个货架**，不同供应商分开放；跨场次可能重复。一张供货单的不同等级可能在不同货架，不能单靠货架码判断是哪张单 |
| 标签 | 一张标签 = 一扎。标签归属某张供货单的某个等级，有序号，不能跨单使用 |

## 数量与金额口径

| 字段 | 叫法 | 怎么来的 |
|----|----|----|
| 收购扎数 | 计划某等级要收多少 | 发布时的收购量 + 报价中追加的扎数 |
| 可供扎数 | 供应商承诺能供多少 | 报价时填写；**不填或填 0 表示不参与这个等级，无需报价** |
| `confirmLabelNum` 定采扎数 | 系统实际分给供应商多少 | 自动定采算出，可能小于供应商的可供扎数 |
| `actualLabelNum` 实际产出 | 实际扫进来多少 | 每扫成功一张 +1；提交盘点时按各等级扫码数重新汇总校准 |
| `settleLabelNum` 应结算扎数 | 最后按多少扎付钱 | 提交盘点时默认等于扫码数；待结算阶段可按等级人工改 |
| `totalAmount` 应结算金额 | 最后付多少钱 | 各等级应结算扎数 × 该等级冻结单价，再求和 |

```text
应结算金额 = Σ（等级应结算扎数 × 等级冻结单价）
```

例：A 级 3 扎、2.50 元／扎，B 级 2 扎、1.80 元／扎，每扎 20 枝：

```text
3 × 2.50 + 2 × 1.80 = 11.10 元   （按扎计价，不乘枝数）
```

> [!IMPORTANT]
> **冻结单价**是定采时保存在供货单等级明细里的报价快照，不是商品当前售价。页面上的「超量金额 / 冻结金额」只是提示数字，**不代表供应商账户里真的冻结了一笔钱**。

## 主流程

```text
运营配置品类、规格、等级数量、供应商范围、时间
  └─ 发布采购计划（报价中）
       └─ 供应商按等级报价 / 改报
            └─ 两类供应商的报价截止都已过（或运营提前终止）
                 ├─ 没人报价 / 没有可分配的量 ──→ 计划关闭
                 └─ 自动定采 → 生成供货单 → 计划立即「已完成」
                                   └─ 供货单：待签到
                                        └─ 签到 → 打印标签 → 开始盘点 → 扫码（同步入库）
                                             └─ 提交盘点 → 待结算（未扫标签作废）
                                                  ├─ 有超量 → 按等级确认结算数 → 处理超量
                                                  └─ 无超量 / 已处理 → 到期自动结算 或 手动结算 → 已结算
```

### 采购计划状态

| 值 | 状态 | 含义 |
|----|----|----|
| `0` | 草稿 | 还没开放报价，可以改、可以删 |
| `1` | 报价中 | 平台层面仍在报价。两类供应商截止时间可能不同，**不代表每家都还能报** |
| `2` | 待定采 | 正常只是自动定采过程中的一瞬间；长时间停在这里说明定采失败 |
| `3` | 已确认 | 历史状态 / 定采事务中的过渡状态 |
| `4` | 已完成 | 自动定采生成供货单后立即完成；**少采也算完成** |
| `5` | 已关闭 | 无人报价、提前终止且无人报价、定采后没有任何中选结果 |

### 供货单状态

| 值 | 状态 | 可以做什么 |
|----|----|----|
| `10` | 待签到 | 签到；运营 / 仓库可取消 |
| `20` | 待盘点 | 打印、开始盘点、扫码、撤销扫码、提交盘点；无产出时可取消 |
| `30` | 待结算 | 补打 / 重打标签、改应结算扎数、处理超量、手动结算；到期自动结算 |
| `40` | 已结算 | 只能查看；不能重复结算、不能改量 |
| `90` | 已取消 | 未扫标签已作废，不能打印、扫码、重打 |

### 标签状态

| 值 | 状态 | 含义 |
|----|----|----|
| `10` | 已生成 / 未扫码 | 可以在本单盘点时扫 |
| `30` | 已扫码 | 已计入产出和库存；再扫会被拒绝，不会重复入库 |
| `90` | 已作废 | 提交盘点或取消供货单时，未扫的标签自动作废；不能扫、不能重打 |

## 规则：发布采购计划

**发布前必须确定**：发布主体、场次、二级分类、包装规格、毛花 / 成品花、商品规格、开放的等级，以及每个等级的收购扎数、最高价、最小提交量、单家最大提交量。

| 规则 | 说明 |
|----|----|
| 包装规格 | 二级分类必须配置了有效的 `specNum`，否则不能发布 |
| 商品规格 | 分类配置了商品规格时，必须选全（每个规格名选一个值） |
| 毛花 / 成品花 | 只是货物类型标识，不改变扎数和金额口径 |
| 最高价 | 必须大于 0，最多两位小数 |
| 最大提交量 | 不能小于最小提交量，不能大于收购扎数；**不填或填 0 时保存为该等级收购扎数** |
| 时间 | 每类供应商（斗南 / 非斗南）的报价截止必须早于自己的签到截止；发布时报价截止不能已经过去 |
| 发布后锁定 | 主体、品类、规格等不能再改，只能追加供应商或追加扎数 |

### 供应商范围

| 值 | 范围 | 说明 |
|----|----|----|
| `1` | 全部供应商 | 用全员标记，不能再追加供应商 |
| `2` | 指定基地 | 发布时形成资格快照 |
| `3` | 品质优选 | 发布时形成资格快照 |
| `4` | 近 30 天销量阈值 | 发布时形成资格快照 |
| `5` | 指定供应商 | 发布时形成资格快照 |
| `6` | 白名单 | 发布时形成资格快照；之后修改全局白名单**不影响旧计划** |

所有范围的基础条件都是「花材供应商且 `data_status=2`」。范围命中 0 家时不能发布。

### 产出截止（采集截止）

产出截止决定供货单最晚什么时候必须有产出，过了还没扫过一张就会被自动取消。

```text
产出截止 = max（场次次日 12:00，最晚签到截止 + 2 小时）
```

- 场次 11-05，最晚签到截止 11-05 20:00 → max（11-06 12:00，11-05 22:00）= **11-06 12:00**
- 场次 11-05，最晚签到截止 11-06 11:00 → max（11-06 12:00，11-06 13:00）= **11-06 13:00**

> [!WARNING]
> 不要口头承诺「次日中午截止」，以计划上的 `collectEndTime` / 供货单上的 `outputEndTime` 为准。

### 发布后的调整

| 操作 | 允许条件 | 效果 |
|----|----|----|
| 追加供应商 | 报价中，且范围不是「全部供应商」 | 追加的供应商获得报价资格 |
| 追加扎数 | 报价中，且该等级已存在 | 抬高该等级收购扎数；**不会自动抬高单家最大提交量**；已提交的报价不回溯校验 |
| 撤回 | 报价中且**没有任何报价** | 回到草稿 |
| 提前终止 | 报价中 | 有报价 → 立即进入自动定采；无报价 → 关闭 |
| 删除 | 仅草稿 | 删除计划 |

> [!CAUTION]
> 提前终止不是「停掉倒计时」，有报价时会**马上定采并生成供货单**。操作前要和业务负责人确认仍准备收货。

## 规则：供应商报价

| 规则 | 说明 |
|----|----|
| 资格 | 供应商 `data_status=2`；在计划的可报范围内；**发布主体不能给自己的计划报价** |
| 等级 | 只给参与的等级（可供扎数 > 0）报价；不参与的等级不传，或可供扎数填 0，价格不用填、传了也忽略，不保存。不能报计划没开放的等级 |
| 可供量 | 至少参与一个等级；参与的等级必须 ≥ 最小提交量、≤ 单家最大提交量、≤ 该等级收购扎数（含追加） |
| 价格 | 只校验参与的等级：大于 0、最多两位小数、不高于该等级最高价，且不超过 1000 元／扎 |
| 改报 | 报价中用「修改报价」，每次改都存新版本；内容完全没变时不生成新版本 |
| 同价排序 | 看当前版本的提交时间，越早越优先 |

### 报价截止提前 5 秒

**供应商实际能提交的最后时刻 = 配置的报价截止 − 5 秒，到达该时刻即拒绝。**

例：配置截止 10:00:00，供应商必须在 09:59:55 **之前**完成请求；09:59:55 已提示「报价已截止，报价和改价须在截止时间前5秒完成提交」。运营端仍按原截止时间（10:00:00）推进定采。

> [!TIP]
> 现场提醒供应商提前提交，不要等倒计时归零。

### 定采前调价

规则上要求：计划处于待定采、自己的报价未被定性、没有供货单、且仍在报价截止前 5 秒之前。正常流程中计划进入待定采时报价截止已过，所以**自然截止后基本不可能调价**，调价诉求应在报价中用「修改报价」完成。

### 供应商列表

列表只显示**场次日期在服务器当天往前一个月及以后**的计划（包括未来场次）。更早的计划在有权限时仍能打开详情。

| 页签 `filterStatus` | 范围 |
|----|----|
| `0` / 不传 | 全部可见计划 |
| `1` 报价中 | 还没有本人供货单、仍在本人报价窗口内的计划（已报、未报都算） |
| `2` 已采用 | 本人有未取消的供货单（含已结算） |
| `3` 已截止 | 本人供货单已取消；或本人报价窗口已过 / 计划已结束且没有本人供货单 |

## 规则：自动定采

**触发**：两类供应商的报价截止都已过（系统每 5 分钟检查一次），或运营提前终止且有报价。

**算法（每个等级独立计算）**：

1. 候选 = 该等级可供扎数 > 0 的当前报价（不参与的等级没有报价）。
2. 排序：**价格低优先 → 同价提交早优先 → 再按供应商 ID 小优先**。
3. 只取前 **5** 家。
4. 从第 1 名开始，每家最多拿自己的可供量，凑满该等级需求就停。
5. **最后一家分到的扎数必须 ≥ 该等级最小提交量**，否则这一家不予采用，该等级就此停止分配。
6. 前 5 家合计不够、或最后一家被拒时，**如实少采，不找第 6 家补，也不加给前面已中选的家**。

例：某等级需求 1000 扎，前 5 名按价格从低到高为 甲 500、乙 200、丙 500、丁 100、戊 100：

```text
甲 500 + 乙 200 + 丙 300 = 1000 扎，丁、戊一扎不分
```

例：需求 1000 扎，前 5 名可供合计只有 800 扎 → 分 800 扎，缺 200 扎，第 6 名也不补。

例：需求 1000 扎，**最小提交量 100 扎**，甲可供 500、乙 450、丙 300：

```text
甲 500 + 乙 450 = 950 扎；丙只能分到 50 扎 < 100 扎，不予采用 → 缺 50 扎
```

> [!NOTE]
> 只有最后一家会碰到这条：前面每家拿的都是自己的整份可供量，报价时已经校验过不低于最小提交量。最小提交量按等级设置、对每家都一样，所以被拒后排在后面的也分不了。

**结果**：

- 同一供应商在多个等级中选 → 合并成一张供货单；供货单保存各等级冻结单价。供货单只带这家**参与**的等级：参与但未中选的等级也保留冻结单价（可在额度内为这些等级补打标签，见「规则：签到与打印标签」）；**不参与的等级不进供货单**，现场不能补打这个等级的标签，混货时也不能对这个等级登记补款。
- 有中选结果 → 生成供货单，计划立即「已完成」。
- 货架：供货单的每个等级分到一个货架，规则见「货架分配」。
- 没人中选 → 计划「已关闭」。
- 判断结果以供货单为准，不以是否收到「已采用」消息为准。

### 货架分配

| 规则 | 说明 |
|----|----|
| 分配口径 | **同场次 + 同品种（二级分类）+ 同等级 + 同供应商** 一个货架，不同供应商分开放；同一供应商同场次同品种有多个计划时共用；不区分规格 |
| 何时分配 | 定采生成供货单时；该供应商在该场次该品种该等级已有货架就直接用，没有才发新号 |
| 哪些等级有货架 | 进供货单的等级（中选的、参与但未中选的）都有；不参与的等级不进供货单，也就没有货架 |
| 货架码格式 | `A-001`：场次内流水，从 `A-001` 起，满 999 进位到 `B-001`，单场次最多 `Z-999` |
| 整单货架码 | 供货单上的整单货架码 = 第一个中选等级的货架，只用于列表排序和兼容旧页面；摆货看各等级的货架码 |
| 标签 | 标签上印的是该标签等级的货架码 |

例：同场次两份玫瑰计划，第一份甲中选 A、B 级、乙中选 A 级，第二份甲又中选 A 级：

```text
甲 玫瑰 A 级 → A-001（甲两份计划的 A 级都放这里）
甲 玫瑰 B 级 → A-002
乙 玫瑰 A 级 → A-003
```

> [!NOTE]
> 同一供应商多个计划的单会放在同一个货架，PDA 按货架连续扫码时不要先锁定某张单，否则扫到另一张单的标签会被拒为「该标签属于其他供货单」。按单盘点、提交、结算的规则不变。

## 规则：签到与打印标签

**签到**：待签到的供货单签到后转待盘点。超过签到截止**仍可以签到**，系统记迟到标记；集采签到不触发基地迟到处罚。

**正常 / 增量打印**（待盘点、待结算可用）：

| 规则 | 说明 |
|----|----|
| 输入含义 | 每个等级填的是**目标累计张数**，不是本次新增张数 |
| 只增不减 | 目标不能小于已生成张数 |
| 上限 | **每个等级的目标、以及各等级合计，都不能超过整单定采扎数 × 2** |
| 等级范围 | 只能打供货单里已有的等级，不能临时加新等级；报价时不参与的等级不在供货单里，不能打 |

例：整单定采 50 扎（上限 100 张）。A 级已生成 10 张，改成 12 → 只新增 2 张（序号 11、12）。若 A 已 60 张、B 填 50 张 → 合计 110 张，超过 100 张被拒。

**重打**：按「等级 + 序号区间」重新取回原标签，**复用原码，不新增数量**。区间必须在 1 ~ 已生成张数之间，区间内有作废标签则不能重打。已取消的供货单不能重打。

> [!TIP]
> 打印机没出纸但后台已生成标签时，先看已生成张数和序号，用**重打**取回原区间，不要再增量打印。

## 规则：扫码入库

1. **同一张供货单允许多人同时盘点**，不需要先点「开始盘点」，待盘点的单任何仓库人员都可以直接扫码。「开始盘点 / 暂停盘点」只校验单据处于待盘点，不占用单据。
2. 「首码识别」只用于确认标签属于哪张单，**不计数、不入库**。
3. 扫码成功时，以下动作**在同一个事务里**完成：标签置已扫码、该等级扫码数 +1、整单实际产出 +1、发布主体对应商品库存 +1 扎。

> [!IMPORTANT]
> **库存在扫码时就增加了，不是等提交盘点。**

**扫码被拒**（接口外层成功，但内层 `data.success=false`，本次不计数）：

| `rejectReason` | 原因 | 现场处理 |
|----|----|----|
| `2` | 该标签已扫描 | 不要重复计数；返回首次扫码时间和扫码人可核对 |
| `3` | 标签已作废 | 作废码不能再用 |
| `4` | 该标签属于其他供货单 | 换到正确的供货单扫 |
| `5` | 标签不存在 | 核对标签码 |
| `6` | 供货单当前状态不允许盘点 | 单据未签到、已提交盘点或已取消 |

**撤销扫码**：供货单仍待盘点时，**任何仓库人员都可以撤销任何人扫的标签**，同时扣回 1 扎库存。若这批库存已经卖出、剩余库存不够扣，撤销失败。

## 规则：提交盘点

| 条件 | 说明 |
|----|----|
| 状态 | 供货单待盘点；**任何仓库人员都可以提交** |
| 有产出 | 一张都没扫不能提交 |
| 少量备注 | 实际产出 < 定采扎数时必须填盘点备注 |

提交后系统：

1. 按各等级扫码数重算实际产出，默认应结算扎数 = 扫码数，算出金额；
2. 未扫标签全部作废；
3. 供货单转**待结算**；
4. **计划结算时间 = 提交盘点时间 + 3 天**；
5. 实际产出 > 定采扎数时标记**未处理超量** `overFlag=1`。

提交后不能再扫码或撤销。多人同时作业时，提交那一刻还在扫的人会收到「供货单已提交盘点，本次扫码未生效」，这一扎不计入；提交前要在现场确认大家都扫完了。要改付款数量，在待结算阶段**按等级改应结算扎数**，不要改扫码数据或重复提交。

## 规则：超量处理

超量单仍是「待结算」，不单独设异常状态。**有未处理超量的单既不会自动结算，也不能手动结算。**

```text
超量扎数 = max（实际产出 − 定采扎数，0）
```

处理时选两种类型之一，并填写处理说明。

### 类型 1：供应商自身超送

供应商自己多送了。必须**先按等级确认应结算扎数**（哪怕决定全额结算，也要显式提交一次），再登记「自身超送」。

> [!WARNING]
> 只在处理说明里写「按 40 扎结算」不会改变付款依据。没显式确认过结算数时，系统会拒绝处理并提示「应结算数量还没确认过」。

### 类型 2：混货 / 错贴标签

当前单扫到了别家的货。处理步骤：

1. 按等级把当前单的应结算扎数改小，**扣减量 = 扫码数 − 应结算数**。
2. 逐条登记被占用方：同一计划下的**其他供应商**、等级、被占用扎数、补偿方式。被占用方必须**有效且已待结算**（未提交盘点、已结算都不行），且其供货单包含该等级。
3. **对平**：每个等级的扣减量必须等于该等级所有补偿明细的被占用扎数合计（三种补偿方式都算），两边任何一个等级对不上都拒绝。

| 补偿方式 | 台账 | 被占用方应结算扎数和金额 |
|----|----|----|
| `1` 登记补款 | 记录 | **增加**补偿扎数，按被占用方该等级冻结单价重算，随其供货单一起结算 |
| `2` 线下补偿 | 记录 | 不变，只记台账 |
| `3` 无需补偿 | 记录 | 不变，只记台账 |

例：当前单 A 级扫码 20 扎、定采 11 扎，改应结算为 11 扎（扣减 9 扎）。被占用方原应结算 10 扎：

```text
登记补款 2 扎 + 线下补偿 3 扎 + 无需补偿 4 扎 = 9 扎   （与扣减对平 ✔）
被占用方应结算 = 10 + 2 = 12 扎                     （只有登记补款进系统应付）
```

`compensateAmount` 补偿金额可以手填（≥ 0，最多两位小数），不填按被占用方冻结单价 × 扎数计算。它是**台账金额**，不会覆盖任何供货单的应结算金额。

### 处理之后

- 当前单 `overFlag` 清为 0，记录处理人、时间、说明。
- 运营端**列表**：已处理的单显示超量扎数 0、超量金额 0.00；**详情**保留原始超量差额和按冻结价算的超量金额。
- 列表提示消失 ≠ 库存退回 ≠ 应结算金额变 0。各端显示不一致时先看处理标识、处理时间和等级结算明细，**不要重复处理**。
- 处理超量**不等于付款**。若计划结算时间已过，下一轮自动结算会接住；没到期则继续等，或手动结算。

## 规则：结算

| 方式 | 条件 |
|----|----|
| 自动结算 | 待结算 + 计划结算时间已到 + `overFlag=0`，由定时任务执行 |
| 手动结算 | 待结算 + `overFlag=0`，填写原因（≤ 255 字）；运营后台、仓库端都可操作 |

**记账动作**（运营后台、仓库端、自动任务共用同一套）：

| 对象 | 余额 | 账变类型 |
|----|----|----|
| 供货供应商 | 增加应结算金额 | `95` 集采收入 |
| 发布主体 | 扣减应结算金额（**允许扣成负数**） | `96` 集采支出 |
| 供货单 | 置已结算 `status=40`、`settleFlag=1`，记结算时间 / 方式 | — |

- **金额为 0** 时也置已结算并留审计，但不产生余额账变，仍会给供应商发结算通知。
- 结算记入的是供应商**平台余额**，不代表银行转账或提现已经完成。
- 结算通知在数据库提交后发送，**消息没收到 ≠ 没结算**，不能因此再结一次。
- 运营后台手动结算失败、超时或无返回时，**先刷新供货单和账变确认结果**，再决定是否重新操作。

## 规则：取消供货单

| 方式 | 条件 |
|----|----|
| 手动取消（运营 / 仓库） | 待签到或待盘点，且**实际产出为 0** |
| 自动取消 | 待签到或待盘点、产出截止已到、实际产出为 0 |

取消后未扫标签全部作废。

> [!CAUTION]
> **已有扫码产出的供货单不能取消**——扫码已经入了库存，取消不会退库存。仍待盘点且确需取消时，先由原扫码人逐张撤销扫码；库存已被卖掉、已提交盘点或已结算的，转技术和业务负责人处理，**不能直接改数据库状态**。

## 规则：商品与库存

- 商品归**发布主体**。打印时按「发布主体 × 二级分类 × 等级 × 商品规格」找商品映射，没有就自动建品（集采专用建品 `type=3`，不是到场货 `type=1`）。
- 自动建的商品：价格 0、库存 0、**下架**、无图。库存靠扫码增加。
- 入库后需要运营在「包花厂商品」里**确认售价并手动上架**，0 元商品会被上架校验拦截。「已入库但采购端看不到」多半是没上架，不是扫码失败。
- 核对商品要同时看主体、分类、等级、完整规格和映射，不要只按商品名找。
- 改商品售价不影响供货单冻结报价。库存推送异常查推送日志，**不要用再扫一次码来补**。

## 现场操作清单

### 到场先确认

1. 环境、当前场次、运营账号、仓库账号；当班业务负责人和技术升级联系人。
2. 当天的采购计划和关联供货单；两类供应商的报价截止、签到截止；供货单的产出截止。
3. 拿一张正常供货单走一遍签到、打印、开始盘点、扫码入口；确认打印机、标签纸、扫码枪可用。
4. 当天待盘点、超量待处理、已到期未结算的单据，先处理会阻塞作业或付款的。
5. 请开发确认运营端需求推进任务、供应商端自动结算 / 自动取消任务的启用状态和最近执行结果。

### 记录问题时至少写

环境、发生时间、账号角色、场次、采购计划号、供货单号、操作步骤、完整提示。扫码问题补标签码；资金问题补处理前后的应结算扎数和金额。

> [!WARNING]
> 不要把登录 token、结算凭证、密码贴进问题记录。

### 交接时当面核对

现场环境和服务版本、当日场次与截止时间、可用账号和设备、待处理异常单清单、定时任务的频率与负责人、升级联系人、未完成的资金或库存核查。每项遗留都要有单号、当前状态、下一步、负责角色。

## 常见问题排查

| 现象 | 先核对 | 处理 / 升级 |
|----|----|----|
| 供应商找不到计划 | 账号、场次、一个月范围、页签、报价资格、本人是否已有供货单 | 切回「全部」并按准确场次找；仍找不到，记计划号和供应商 ID 交开发查资格 |
| 倒计时还剩几秒却报已截止 | 实际截止 = 配置时间 − 5 秒；服务器时间 | 以服务端为准，不能承诺补报 |
| 报价提示数量超限 | 最小提交量、单家最大提交量、收购量（含追加）；不供的等级是否填 0 或不传 | 按提示改；追加扎数不会抬高最大提交量 |
| 报了价没中选 | 当前有效版本、该等级可供量、价格、该等级前 5 名 | 按**等级**看排序和分配，不能看整单总量 |
| 截止后一直待定采 | 两个原截止时间、定采错误日志、是否已过产出截止 | 交技术查任务；已过产出截止的不会自动重试，**不要盲目重跑** |
| 计划已完成，供货单却待签到 | 是否刚自动定采 | 正常，供货单独立作业 |
| 打印成功没出纸 | 已生成张数、序号、打印机 | 按原序号区间重打，不要增量打印 |
| 扫码返回成功但没加数 | `data.success`、`rejectReason` | 区分重复 / 作废 / 跨单，不按外层 code 手工加数 |
| 有产出无法取消 | 扫码记录、商品库存、供货单状态 | 待盘点时评估逐张撤销；其他状态升级处理 |
| 提交盘点失败 | 是否有产出、少量备注、状态 | 刷新核对在途扫码，不要手工改状态 |
| 混货对不平 | 每个等级「扫码数 − 应结算数」与三种补偿合计 | 补齐漏登的等级或修正扎数；三种方式都参与对平 |
| 线下补偿后对方结算数没加 | 补偿方式是 2 / 3 | 正常，只有登记补款会加 |
| 处理超量后详情仍有差额 | `overFlag`、处理时间、列表与详情口径 | 详情保留原始差额属正常，不要再扣一次 |
| 到期没结算 | 状态、计划结算时间、`overFlag`、任务结果、供应商档案 | 超量先处理；并发冲突查日志后重试；超时先查结果 |
| 已结算没收到消息 | 结算字段、95 / 96 账变、消息日志 | 账已成功就查消息，**不要再结算** |
| 入库了但商品买不到 | 库存、上下架、价格、主体与规格 | 确认售价并上架，不要重复扫码 |

> [!IMPORTANT]
> 现场支持可以指导页面正常操作和只读核对。**生产补数据、改余额、删标签、清 Redis 锁、批量重跑任务**都必须另行确认方案，由开发处理。
