# 冷库暂存花材

> 运营端 / PDA 端 / 小程序端冷库暂存全部 25 个接口：库存与统计、联系记录、关联发货单与直接出库、转代卖、扫码入库、裸花登记与点击出库

- 类型：前端对接
- 分类：冷库暂存花材
- 端：运营后台 / PDA / 梦花仓管小程序
- 后端服务：admin / supplier-api
- 更新：2026-07-30
- 网页版：https://doc.xfun.fun/%E5%86%B7%E5%BA%93%E6%9A%82%E5%AD%98%E8%8A%B1%E6%9D%90%E6%8E%A5%E5%8F%A3%E6%96%87%E6%A1%A3

依据提交 b5f20cfd24 整理，字段以线上 Swagger 为准。运营端、PDA 端和小程序端共 25 个接口，均为 **POST + JSON body**，无 query / path 参数。冷库出库统一由小程序「点击出库」完成，PDA 不再提供扫码出库。新增**转代卖**：客服标记转入代卖（outType=3），仓库点击出库时确认最终扎数。

## 通用约定

| 端 | 路径前缀 | 服务 |
|----|----|----|
| 运营端 · 客服后台 | `/cold` | admin |
| PDA端 · 物流专员扫码枪 | `/cold/pda` | supplier-api |
| 小程序端 · 梦花仓管(质检/区域负责人/仓库管理员) | `/cold/mini` | supplier-api |

### 统一返回结构

运营端包裹 `R<T>`，供应商端包裹 `Response<T>`，结构一致：

```json
{ "code": 0, "message": "success", "data": { "…": "业务数据" } }
```

### 分页（两套规则，注意区分）

| 端 | 入参 | 返回 |
|----|----|----|
| 运营端 | `index` 页码=1、`size` 页大小=10、`searchCount`=true，全部选填 | `PageVO{current,size,total,records[]}` |
| 小程序端 | `current` 当前页、`size` 每页条数，必填且 ≥1 | `PageVo{current,size,total,records[]}` |

### 鉴权与请求头

- 运营端接口带 `@AuthToken(权限点)`：除登录态外还校验权限点（`coldStorageView` 查看 / `coldStorageOperate` 客服操作 / `coldStorageWarehouse` 仓库操作），每个接口所需权限见接口下方「权限」。
- PDA / 小程序端 `userId`、`userName` 由后端根据登录态填充，**前端无需传**（参数表「必填」列标为「注入」）。后端强制走可校验的 `Authorization`，不再接受历史裸 `token` 头。
- PDA 端限 **物流专员 / 外部物流专员**；小程序端限 **质检员 / 区域负责人 / 仓库管理员**。

| 请求头 | 端 | 必填 | 说明 |
|----|----|----|----|
| `usertokenxm` | 运营端 | 是 | 登录 JWT |
| `channel` | 运营端 | 是 | 固定 `admin` |

## 枚举

| 字段 | 取值 |
|----|----|
| `storeType` 暂存类型 | 1 包裹 · 2 裸花 |
| `stockStatus` 库存状态 | 10 待发货 · 40 待出库 · 50 已出库 |
| `shipConfirm` 发货确认/联系结果 | 1 今日出库 · 2 继续暂存 · 3 联系不上 |
| `taskStatus` 出库任务状态 | 10 待出库(可撤销) · 20 已出库(不可撤销) · 30 已撤销 |
| `outType` 出库方式 | 1 关联发货单 · 2 直接出库 · 3 转代卖 |
| `boxRepackFlag` 是否拆箱重打 | 0 否 · 1 是 |
| `abnormalFlag` 异常标记 | 0 正常 · 1 异常 |
| `sendStatus` 发货单状态 | 0 待发货 · 1 配送中 · 2 已完成 · 3 已取消 |
| `logisticsStatus` 是否已发物流单 | 0 否 · 1 是 |

## 运营端 · 客服后台

全部带 @AuthToken,仅需登录态。返回包裹 R<T>。 路径前缀 `/cold`。

### POST /cold/stock/page · 冷库暂存库存列表

客服查看仓库扫码入库后的库存。分页。

权限：`coldStorageView`

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `index` | Integer | 否 | 页码,不传默认1（分页） |
| `size` | Integer | 否 | 页大小,不传默认10（分页） |
| `searchCount` | Boolean | 否 | 是否查总数,默认true（分页） |
| `keyword` | String | 否 | 关键词(手机号/昵称/发货单号/包裹码/货位) |
| `storeType` | Integer | 否 | 暂存类型 1包裹 2裸花 |
| `stockStatus` | Integer | 否 | 库存状态,见枚举 |
| `storeRoundNo` | String | 否 | 暂存场次 yyyy-MM-dd |
| `planShipDate` | String | 否 | 计划发货日期 yyyy-MM-dd |

```json
{
  "index": 1,
  "size": 10,
  "searchCount": true,
  "keyword": "138",
  "storeType": 1,
  "stockStatus": 10,
  "storeRoundNo": "2026-07-09",
  "planShipDate": "2026-07-10"
}
```

#### 响应 `R<PageVO<ColdStockDto>>`

| 字段 | 类型 | 说明 |
|----|----|----|
| `coldStockId` | Long | 冷库库存id |
| `purchaserId` | Long | 客户id |
| `purchaserNick` | String | 客户昵称 |
| `purchaserMobile` | String | 客户注册手机号 |
| `storeType` | Integer | 暂存类型 |
| `locationNo` | String | 货位号 |
| `storeRoundNo` | String | 暂存场次 |
| `originSendNo` | String | 原发货单号 |
| `expressName` | String | 发货物流名称(原发货单物流,直接出库沿用展示) |
| `imageUrls` | String | 入库照片(逗号分隔) |
| `planShipDate` | LocalDate | 计划发货日期 |
| `packageTotal` | Integer | 总包裹数 |
| `packageOut` | Integer | 已出库包裹数 |
| `packageRemain` | Integer | 剩余库存包裹数 |
| `bunchNum` | Integer | 裸花扎数 |
| `stockStatus` | Integer | 库存状态 |
| `shipConfirm` | Integer | 最新发货确认 |
| `remark` | String | 客户备注 |
| `serviceUserName` | String | 关联客服 |
| `inUserName` | String | 入库人 |
| `inTime` | LocalDateTime | 入库时间 |
| `updateTime` | LocalDateTime | 更新时间 |
| `linkSendNo` | String | 关联发货单号(最新出库任务) |
| `linkPurchaserNick` | String | 关联发货单客户昵称 |
| `linkPurchaserMobile` | String | 关联发货单客户注册手机号 |
| `linkReceiveName` | String | 关联发货单收货人 |
| `linkReceiveTel` | String | 关联发货单收货电话 |
| `linkReceiveAddress` | String | 关联发货单收货地址 |
| `linkShelfSn` | Integer | 关联发货单主货位号 |
| `linkSubShelfSn` | String | 关联发货单子货位号 |
| `linkZoneShelf` | String | 关联发货单区-货位号 |
| `outTaskStatus` | Integer | 出库任务状态(最新非撤销任务),见枚举 |
| `outTaskId` | Long | 最新出库任务id(outTaskStatus=10 时用于撤销) |
| `outTaskType` | Integer | 最新任务出库方式 1关联发货单 2直接出库 3转代卖(前端据此显示转代卖标签) |
| `abnormalFlag` | Integer | 异常标记 0正常 1异常 |

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "current": 1,
    "size": 10,
    "total": 1,
    "records": [
      {
        "coldStockId": 1001,
        "purchaserId": 88001,
        "purchaserNick": "花小九",
        "purchaserMobile": "138****8888",
        "storeType": 1,
        "locationNo": "A-03-12",
        "storeRoundNo": "2026-07-09",
        "originSendNo": "SND20260708001",
        "expressName": "顺丰冷链",
        "imageUrls": "https://img/1.jpg,https://img/2.jpg",
        "planShipDate": "2026-07-10",
        "packageTotal": 5,
        "packageOut": 2,
        "packageRemain": 3,
        "bunchNum": 20,
        "stockStatus": 10,
        "shipConfirm": 1,
        "remark": "易碎轻放",
        "serviceUserName": "客服小美",
        "inUserName": "仓管阿强、仓管小李",
        "inTime": "2026-07-09 09:00:00",
        "updateTime": "2026-07-09 10:20:00",
        "linkSendNo": "SND20260709001",
        "linkPurchaserNick": "花小九",
        "linkPurchaserMobile": "138****8888",
        "linkReceiveName": "string",
        "linkReceiveTel": "string",
        "linkReceiveAddress": "string",
        "linkShelfSn": 0,
        "linkSubShelfSn": "string",
        "linkZoneShelf": "string",
        "outTaskStatus": 10,
        "outTaskId": 3001,
        "outTaskType": 3,
        "abnormalFlag": 0
      }
    ]
  }
}
```

### POST /cold/stock/stat · 冷库暂存库存统计

顶部统计卡片。**全局口径**,不随列表筛选条件联动(在库客户数/在库包裹数为当前全量,今日出库客户数与小程序首页同口径)。

权限：`coldStorageView`

#### 请求参数

无（空 body `{}`）

```json
{}
```

#### 响应 `R<ColdStatDto>`

| 字段 | 类型 | 说明 |
|----|----|----|
| `customerCount` | Integer | 当前暂存客户数 |
| `bareCustomerCount` | Integer | 其中裸花暂存客户数 |
| `packageTotal` | Integer | 暂存包裹数 |
| `todayWaitOutCustomerCount` | Integer | 今日待出库客户数 |

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "customerCount": 12,
    "bareCustomerCount": 3,
    "packageTotal": 5,
    "todayWaitOutCustomerCount": 4
  }
}
```

### POST /cold/contact/page · 联系记录列表

按客户和暂存库存聚合,倒序。非分页。

权限：`coldStorageView`

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `coldStockId` | Long | 是 | 冷库库存id |

```json
{
  "coldStockId": 1001
}
```

#### 响应 `R<List<ColdContactDto>>`

| 字段 | 类型 | 说明 |
|----|----|----|
| `id` | Long | 记录id |
| `shipConfirm` | Integer | 联系结果 |
| `nextPlanShipDate` | LocalDate | 下次计划发货日期 |
| `content` | String | 联系内容 |
| `imageUrls` | String | 图片url(逗号分隔) |
| `operatorName` | String | 登记人 |
| `createTime` | LocalDateTime | 登记时间 |

```json
{
  "code": 0,
  "message": "success",
  "data": [
    {
      "id": 1,
      "shipConfirm": 1,
      "nextPlanShipDate": "2026-07-11",
      "content": "已电话确认今日出库",
      "imageUrls": "https://img/1.jpg,https://img/2.jpg",
      "operatorName": "客服小美",
      "createTime": "2026-07-09 10:20:00"
    }
  ]
}
```

### POST /cold/contact/save · 新增联系记录

客服登记沟通记录。

权限：`coldStorageOperate`

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `coldStockId` | Long | 是 | 冷库库存id |
| `shipConfirm` | Integer | 否 | 联系结果 1今日出库 2继续暂存 3联系不上 |
| `nextPlanShipDate` | String | 否 | 下次计划发货日期 yyyy-MM-dd |
| `content` | String | 是 | 联系内容 |
| `imageUrls` | String | 否 | 图片url(逗号分隔) |

```json
{
  "coldStockId": 1001,
  "shipConfirm": 1,
  "nextPlanShipDate": "2026-07-11",
  "content": "已电话确认今日出库",
  "imageUrls": "https://img/1.jpg,https://img/2.jpg"
}
```

#### 响应 `R<Long>`

`data` = 1（记录id）

### POST /cold/out/stock-packages · 可选出库包裹明细

包裹暂存选择出库包裹。

权限：`coldStorageView`

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `coldStockId` | Long | 是 | 冷库库存id |

```json
{
  "coldStockId": 1001
}
```

#### 响应 `R<List<ColdStockPackageDto>>`

| 字段 | 类型 | 说明 |
|----|----|----|
| `coldStockPackageId` | Long | 冷库包裹明细id(出库时回传) |
| `expressPackageId` | Long | 包裹表id |
| `packageCode` | String | 包裹码 |
| `packageInfo` | String | 商品/规格 |
| `originRoundNo` | String | 原场次 |
| `locationNo` | String | 货位 |

```json
{
  "code": 0,
  "message": "success",
  "data": [
    {
      "coldStockPackageId": 5001,
      "expressPackageId": 9001,
      "packageCode": "9001",
      "packageInfo": "红玫瑰 20扎/件",
      "originRoundNo": "2026-07-08",
      "locationNo": "A-03-12"
    }
  ]
}
```

### POST /cold/out/today-send-order · 查询当天发货单

默认按冷库库存客户 + 当前场次查询发货单；可按客户注册手机号搜索其他客户的当天发货单。

权限：`coldStorageView`

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `coldStockId` | Long | 是 | 冷库库存id |
| `mobile` | String | 否 | 客户注册手机号，不传时查暂存客户自己的发货单 |

```json
{
  "coldStockId": 1001,
  "mobile": "138****8888"
}
```

#### 响应 `R<List<ColdSendOrderDto>>`

| 字段 | 类型 | 说明 |
|----|----|----|
| `sendNo` | String | 发货单号 |
| `purchaserId` | Long | 客户id |
| `purchaserNick` | String | 客户昵称 |
| `purchaserMobile` | String | 客户注册手机号 |
| `receiveName` | String | 收货人 |
| `receiveTel` | String | 收货电话 |
| `receiveAddress` | String | 收货地址 |
| `shelfSn` | Integer | 主货位号 |
| `subShelfSn` | String | 子货位号 |
| `zoneShelf` | String | 区-货位号 |
| `actualTotalWeight` | Integer | 发货单实际重量(g) |
| `sendStatus` | Integer | 发货单状态 0待发货 1配送中 2已完成 3已取消 |
| `logisticsStatus` | Integer | 是否已发物流单 0否 1是 |
| `canLink` | Boolean | 是否允许关联出库 |
| `linkTip` | String | 不可关联/货架提示 |

```json
{
  "code": 0,
  "message": "success",
  "data": [
    {
      "sendNo": "SND20260709001",
      "purchaserId": 88001,
      "purchaserNick": "花小九",
      "purchaserMobile": "138****8888",
      "receiveName": "张三",
      "receiveTel": "138****8888",
      "receiveAddress": "浙江省杭州市西湖区…",
      "shelfSn": 0,
      "subShelfSn": "string",
      "zoneShelf": "#15-112",
      "actualTotalWeight": 3200,
      "sendStatus": 0,
      "logisticsStatus": 0,
      "canLink": true,
      "linkTip": ""
    }
  ]
}
```

### POST /cold/out/link · 关联当天发货单出库

含拆箱重打。生成待出库任务并锁定所选包裹（撤销窗口），实际出库由小程序点击出库完成。**拆箱重打同样走两段式**：任务待出库期间可撤销，仓库点击出库时才完结原包裹（明细置30、包裹表置40）；且**必须全部包裹一起出库**——勾选数不等于该库存全部在库包裹数时报错，不允许部分重打。

权限：`coldStorageOperate`

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `coldStockId` | Long | 是 | 冷库库存id |
| `coldStockPackageIds` | List<Long> | 否 | 本次出库的冷库包裹明细id列表(包裹暂存必填,裸花不填) |
| `boxRepackFlag` | Integer | 否 | 是否拆箱重打 0否 1是(重打必须勾选全部在库包裹) |
| `sendNo` | String | 是 | 关联的当天发货单号 |

```json
{
  "coldStockId": 1001,
  "coldStockPackageIds": [
    5001,
    5002
  ],
  "boxRepackFlag": 0,
  "sendNo": "SND20260709001"
}
```

#### 响应 `R<Long>`

`data` = 3001（出库任务id）

### POST /cold/out/direct · 直接出库

不关联当天发货单。生成待出库任务并锁定所选包裹，实际出库由小程序点击出库完成。发货物流由服务端根据原发货单解析，前端不传。

权限：`coldStorageOperate`

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `coldStockId` | Long | 是 | 冷库库存id |
| `coldStockPackageIds` | List<Long> | 否 | 本次出库的冷库包裹明细id列表(包裹暂存必填,裸花不填) |
| `outRemark` | String | 否 | 出库备注 |

```json
{
  "coldStockId": 1001,
  "coldStockPackageIds": [
    5001,
    5002
  ],
  "outRemark": "走顺丰冷链"
}
```

#### 响应 `R<Long>`

`data` = 3001（出库任务id）

### POST /cold/out/cancel · 撤销出库任务

仅可撤销待出库(10)且尚无包裹完成出库的任务。撤销后任务置已撤销(30)，释放锁定包裹；无其他待出库任务时，库存回退为待发货(10)。

权限：`coldStorageOperate`

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `outTaskId` | Long | 是 | 出库任务id |
| `cancelReason` | String | 是 | 撤销原因 |

```json
{
  "outTaskId": 3001,
  "cancelReason": "客户临时取消"
}
```

#### 响应 `R<Void>`

`data` 为 `null`。

### POST /cold/stock/abnormal · 库存异常标记

库存数量与现场不一致时标记异常。

权限：`coldStorageWarehouse`

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `coldStockId` | Long | 是 | 冷库库存id |
| `abnormalFlag` | Integer | 是 | 异常标记 0正常 1异常 |
| `abnormalRemark` | String | 是 | 异常说明 |

```json
{
  "coldStockId": 1001,
  "abnormalFlag": 0,
  "abnormalRemark": "实际少2件"
}
```

#### 响应 `R<Void>`

`data` 为 `null`。

### POST /cold/stock/plan-ship · 变更计划发货日期

客户要求变更发货日期,记录变更日志。

权限：`coldStorageOperate`

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `coldStockId` | Long | 是 | 冷库库存id |
| `planShipDate` | String | 是 | 计划发货日期 yyyy-MM-dd |
| `remark` | String | 否 | 变更说明 |

```json
{
  "coldStockId": 1001,
  "planShipDate": "2026-07-10",
  "remark": "易碎轻放"
}
```

#### 响应 `R<Void>`

`data` 为 `null`。

### POST /cold/convert-sale/info · 转代卖预填信息

转代卖弹窗预填。裸花返回当前剩余暂存扎数上限;包裹返回发货单总扎数(打包时点快照,取原发货单序号1包裹的 item_num,**不受退款影响**),可为 null,前端显示「-」且提交时不校验上限。

权限：`coldStorageView`

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `coldStockId` | Long | 是 | 冷库库存id |

```json
{
  "coldStockId": 1001
}
```

#### 响应 `R<ColdConvertSaleInfoDto>`

| 字段 | 类型 | 说明 |
|----|----|----|
| `storeType` | Integer | 暂存类型 1包裹 2裸花 |
| `maxBunchNum` | Integer | 可转扎数上限(裸花=剩余暂存扎数;包裹=发货单总扎数快照,可为null) |

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "storeType": 1,
    "maxBunchNum": 20
  }
}
```

### POST /cold/convert-sale · 确认转代卖

客服联系客户确认后标记转代卖(相关退款由客服手动操作订单处理)。生成**待出库转代卖任务(outType=3)**,沿用两段式:待出库期间可用「撤销出库任务」撤销,实际出库由小程序点击出库完成。**裸花**:扎数≤当前剩余暂存扎数,支持部分转出(剩余扎数继续暂存);**包裹**:整条库存全部在库包裹一起锁定转出,扎数≤发货单总扎数快照(查不到不校验),实际扎数由仓库出库时确认;存在其他待出库任务或城市仓货架暂存(wareId>0)时拦截。转代卖不走物流发货,任务物流字段为空。

权限：`coldStorageOperate`

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `coldStockId` | Long | 是 | 冷库库存id |
| `bunchNum` | Integer | 是 | 转代卖扎数 ≥1 |
| `remark` | String | 否 | 备注(转代卖原因或操作说明,≤255字) |

```json
{
  "coldStockId": 1001,
  "bunchNum": 20,
  "remark": "易碎轻放"
}
```

#### 响应 `R<Long>`

`data` = 3001（出库任务id）

### POST /cold/out/records · 历史出库记录

查看已关联、已直接出库、已撤销的出库操作记录。分页,按出库任务生成时间倒序。

权限：`coldStorageView`

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `index` | Integer | 否 | 页码,不传默认1（分页） |
| `size` | Integer | 否 | 页大小,不传默认10（分页） |
| `searchCount` | Boolean | 否 | 是否查总数,默认true（分页） |
| `keyword` | String | 否 | 关键词(手机号/昵称/发货单号/货位) |
| `storeType` | Integer | 否 | 暂存类型 1包裹 2裸花 |
| `outType` | Integer | 否 | 出库方式 1关联发货单 2直接出库 3转代卖 |
| `taskStatus` | Integer | 否 | 任务状态 10待出库 20已出库 30已撤销(空=全部) |
| `startDate` | String | 否 | 生成起始日期 yyyy-MM-dd |
| `endDate` | String | 否 | 生成截止日期 yyyy-MM-dd |

```json
{
  "index": 1,
  "size": 10,
  "searchCount": true,
  "keyword": "138",
  "storeType": 1,
  "outType": 1,
  "taskStatus": 10,
  "startDate": "string",
  "endDate": "string"
}
```

#### 响应 `R<PageVO<ColdOutRecordDto>>`

| 字段 | 类型 | 说明 |
|----|----|----|
| `outTaskId` | Long | 出库任务id |
| `coldStockId` | Long | 冷库库存id |
| `purchaserNick` | String | 暂存客户昵称 |
| `purchaserMobile` | String | 暂存客户注册手机号 |
| `storeType` | Integer | 暂存类型 |
| `locationNo` | String | 货位号 |
| `storeRoundNo` | String | 暂存场次 |
| `outType` | Integer | 出库方式 1关联发货单 2直接出库 3转代卖 |
| `linkSendNo` | String | 关联发货单号 |
| `linkPurchaserNick` | String | 关联发货单客户昵称 |
| `linkPurchaserMobile` | String | 关联发货单客户注册手机号 |
| `linkReceiveName` | String | 关联发货单收货人 |
| `linkReceiveTel` | String | 关联发货单收货电话 |
| `linkReceiveAddress` | String | 关联发货单收货地址 |
| `linkShelfSn` | Integer | 关联发货单主货位号 |
| `linkSubShelfSn` | String | 关联发货单子货位号 |
| `linkZoneShelf` | String | 关联发货单区-货位号 |
| `outPackageNum` | Integer | 出库包裹数 |
| `outBunchNum` | Integer | 出库裸花扎数(转代卖任务=客服填写扎数,包裹暂存也有值) |
| `finishBunchNum` | Integer | 仓库确认最终出库扎数(转代卖任务) |
| `boxRepackFlag` | Integer | 是否拆箱重打 0否 1是 |
| `expressName` | String | 发货物流(转代卖为空) |
| `outRemark` | String | 出库备注 |
| `taskStatus` | Integer | 任务状态,见枚举 |
| `operatorName` | String | 客服操作人 |
| `operatorMobile` | String | 客服操作人手机号 |
| `operateTime` | LocalDateTime | 出库任务生成时间 |
| `finishUserName` | String | 实际出库人 |
| `finishTime` | LocalDateTime | 实际出库时间 |
| `finishImageUrls` | String | 出库照片(逗号分隔url) |
| `finishRemark` | String | 出库备注(仓库出库时填写) |
| `cancelUserName` | String | 撤销人 |
| `cancelTime` | LocalDateTime | 撤销时间 |
| `cancelReason` | String | 撤销原因 |

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "current": 1,
    "size": 10,
    "total": 1,
    "records": [
      {
        "outTaskId": 3001,
        "coldStockId": 1001,
        "purchaserNick": "花小九",
        "purchaserMobile": "138****8888",
        "storeType": 1,
        "locationNo": "A-03-12",
        "storeRoundNo": "2026-07-09",
        "outType": 1,
        "linkSendNo": "SND20260709001",
        "linkPurchaserNick": "花小九",
        "linkPurchaserMobile": "138****8888",
        "linkReceiveName": "string",
        "linkReceiveTel": "string",
        "linkReceiveAddress": "string",
        "linkShelfSn": 0,
        "linkSubShelfSn": "string",
        "linkZoneShelf": "string",
        "outPackageNum": 2,
        "outBunchNum": 20,
        "finishBunchNum": 3,
        "boxRepackFlag": 0,
        "expressName": "顺丰冷链",
        "outRemark": "走顺丰冷链",
        "taskStatus": 10,
        "operatorName": "客服小美",
        "operatorMobile": "139****6666",
        "operateTime": "2026-07-09 11:00:00",
        "finishUserName": "仓管阿强",
        "finishTime": "2026-07-09 15:30:00",
        "finishImageUrls": "https://img/out1.jpg,https://img/out2.jpg",
        "finishRemark": "已装车",
        "cancelUserName": "string",
        "cancelTime": "string",
        "cancelReason": "客户临时取消"
      }
    ]
  }
}
```

### POST /cold/stock/pending-packages · 未入库包裹清单

发货单下已打包(状态10)但尚未扫入冷库的包裹清单,供客服核对已入/未入件数并催办物流入库。`sendNo` 与 `coldStockId` 二选一(传 coldStockId 时取其原发货单号)。

权限：`coldStorageView`

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `sendNo` | String | 否 | 发货单号(与冷库库存id二选一) |
| `coldStockId` | Long | 否 | 冷库库存id(包裹暂存,传则取其原发货单号) |

```json
{
  "sendNo": "SND20260709001",
  "coldStockId": 1001
}
```

#### 响应 `R<ColdPendingPackageDto>`

| 字段 | 类型 | 说明 |
|----|----|----|
| `sendNo` | String | 发货单号 |
| `storedPackageNum` | Integer | 已入冷库包裹数 |
| `pendingPackageNum` | Integer | 未入库包裹数 |
| `pendingList` | List<Obj> | 未入库包裹清单 |
| `pendingList[].expressPackageId` | Long | 包裹表id |
| `pendingList[].packageCode` | String | 包裹码 |
| `pendingList[].packageInfo` | String | 商品/规格 |
| `pendingList[].originRoundNo` | String | 原场次 |
| `pendingList[].zoneShelf` | String | 货架 |
| `pendingList[].totalWeight` | BigDecimal | 包裹重量(g) |
| `pendingList[].expressStatus` | Integer | 包裹状态 10打包完成待入冷库 |

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "sendNo": "SND20260709001",
    "storedPackageNum": 1,
    "pendingPackageNum": 1,
    "pendingList": [
      {
        "expressPackageId": 9001,
        "packageCode": "9001",
        "packageInfo": "红玫瑰 20扎/件",
        "originRoundNo": "2026-07-08",
        "zoneShelf": "#15-112",
        "totalWeight": 5200,
        "expressStatus": 10
      }
    ]
  }
}
```

## PDA端 · 物流专员扫码枪

限**物流专员 / 外部物流专员**角色(外部物流专员仅能操作已配置物流商的包裹)。userId 由后端从登录态注入,前端无需传。返回包裹 Response<T>。**PDA 只负责入库**,出库统一走小程序「点击出库」。 路径前缀 `/cold/pda`。

### POST /cold/pda/scan · 扫码入库

扫描包裹码执行冷库暂存入库。连续扫同一客户时回传上次的 coldStockId。**type=2 取消暂存**：扫错时对同一包裹码再扫一次即撤销当前暂存(已锁定待出库的包裹需先在运营端撤销出库任务;全部取消后整条库存作废)。

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `codeContent` | String | 是 | 扫码内容(包裹id) |
| `type` | Integer | 否 | 扫码类型 1暂存(默认) 2取消暂存(扫错撤销) |
| `coldStockId` | Long | 否 | 累计入库的冷库库存id(连续扫码同一客户时传) |
| `locationNo` | String | 否 | 暂存货位号(新建库存时使用) |
| `userName` | String | 注入 | 后端根据登录人解析,前端不传 |
| `userId` | Long | 注入 | 后端注入,前端不传 |

```json
{
  "codeContent": "9001",
  "type": 0,
  "coldStockId": 1001,
  "locationNo": "A-03-12"
}
```

#### 响应 `Response<ColdScanResultVo>`

| 字段 | 类型 | 说明 |
|----|----|----|
| `coldStockId` | Long | 冷库库存id(继续扫码回传) |
| `purchaserId` | Long | 客户id |
| `purchaserNick` | String | 客户昵称 |
| `purchaserMobile` | String | 客户手机号 |
| `storeType` | Integer | 暂存类型 |
| `locationNo` | String | 货位 |
| `storeRoundNo` | String | 场次 |
| `remark` | String | 客户备注 |
| `expressName` | String | 发货物流名称 |
| `inUserName` | String | 入库人姓名(多人扫码顿号分隔) |
| `packageTotal` | Integer | 已暂存包裹总数 |
| `scanPackageCode` | String | 本次扫码的包裹码 |
| `packageSummary` | List<Obj> | 已扫包裹汇总(按型号聚合) |
| `packageSummary[].packageInfo` | String | 包裹型号/规格 |
| `packageSummary[].num` | Integer | 该型号已扫数量 |
| `packageList` | List<Obj> | 已入库包裹明细 |
| `packageList[].packageCode` | String | 包裹码(包裹id) |
| `packageList[].packageInfo` | String | 名称/规格 |
| `packageList[].serialNum` | Integer | 序号 |
| `packageList[].originRoundNo` | String | 原场次 |

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "coldStockId": 1001,
    "purchaserId": 88001,
    "purchaserNick": "花小九",
    "purchaserMobile": "138****8888",
    "storeType": 1,
    "locationNo": "A-03-12",
    "storeRoundNo": "2026-07-09",
    "remark": "易碎轻放",
    "expressName": "顺丰冷链",
    "inUserName": "仓管阿强、仓管小李",
    "packageTotal": 5,
    "scanPackageCode": "9001",
    "packageSummary": [
      {
        "packageInfo": "红玫瑰 20扎/件",
        "num": 2
      }
    ],
    "packageList": [
      {
        "packageCode": "9001",
        "packageInfo": "红玫瑰 20扎/件",
        "serialNum": 1,
        "originRoundNo": "2026-07-08"
      }
    ]
  }
}
```

### POST /cold/pda/stock/detail · 库存详情

查看当前累计已扫码包裹。返回结构同「扫码入库」(ColdScanResultVo)。

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `coldStockId` | Long | 是 | 冷库库存id |

```json
{
  "coldStockId": 1001
}
```

#### 响应 `Response<ColdScanResultVo>`

| 字段 | 类型 | 说明 |
|----|----|----|
| `coldStockId` | Long | 冷库库存id |
| `purchaserId` | Long | 客户id |
| `purchaserNick` | String | 客户昵称 |
| `purchaserMobile` | String | 客户手机号 |
| `storeType` | Integer | 暂存类型 |
| `locationNo` | String | 货位 |
| `storeRoundNo` | String | 场次 |
| `remark` | String | 客户备注 |
| `expressName` | String | 发货物流名称 |
| `inUserName` | String | 入库人姓名(多人扫码顿号分隔) |
| `packageTotal` | Integer | 已暂存包裹总数 |
| `scanPackageCode` | String | 本次扫码的包裹码 |
| `packageSummary` | List<Obj> | 已扫包裹汇总(按型号聚合) |
| `packageSummary[].packageInfo` | String | 包裹型号/规格 |
| `packageSummary[].num` | Integer | 该型号已扫数量 |
| `packageList` | List<Obj> | 已入库包裹明细 |
| `packageList[].packageCode` | String | 包裹码 |
| `packageList[].packageInfo` | String | 名称/规格 |
| `packageList[].serialNum` | Integer | 序号 |
| `packageList[].originRoundNo` | String | 原场次 |

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "coldStockId": 1001,
    "purchaserId": 88001,
    "purchaserNick": "花小九",
    "purchaserMobile": "138****8888",
    "storeType": 1,
    "locationNo": "A-03-12",
    "storeRoundNo": "2026-07-09",
    "remark": "易碎轻放",
    "expressName": "顺丰冷链",
    "inUserName": "仓管阿强、仓管小李",
    "packageTotal": 5,
    "scanPackageCode": "9001",
    "packageSummary": [
      {
        "packageInfo": "红玫瑰 20扎/件",
        "num": 2
      }
    ],
    "packageList": [
      {
        "packageCode": "9001",
        "packageInfo": "红玫瑰 20扎/件",
        "serialNum": 1,
        "originRoundNo": "2026-07-08"
      }
    ]
  }
}
```

## 小程序端 · 梦花仓管(质检/区域负责人/仓库管理员)

限**质检员 / 区域负责人 / 仓库管理员**角色。userId 由后端从登录态注入,前端无需传。分页入参 current/size 必填。返回包裹 Response<T>。 路径前缀 `/cold/mini`。

### POST /cold/mini/home · 首页统计

冷库暂存首页统计卡片。

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `date` | String | 否 | 业务日期/场次 yyyy-MM-dd(默认当天) |

```json
{
  "date": "2026-07-09"
}
```

#### 响应 `Response<ColdMiniHomeVo>`

| 字段 | 类型 | 说明 |
|----|----|----|
| `customerCount` | Integer | 当前暂存客户数 |
| `bareCustomerCount` | Integer | 其中裸花暂存客户数 |
| `packageTotal` | Integer | 暂存包裹合计 |
| `todayOutCustomerCount` | Integer | 今日暂存出库客户数 |

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "customerCount": 12,
    "bareCustomerCount": 3,
    "packageTotal": 5,
    "todayOutCustomerCount": 4
  }
}
```

### POST /cold/mini/in/page · 暂存入库列表

今日新增入库(暂存中)。分页。

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `current` | Long | 是 | 当前页 ≥1（分页） |
| `size` | Long | 是 | 每页条数（分页） |
| `date` | String | 否 | 暂存场次 yyyy-MM-dd |
| `keyword` | String | 否 | 关键词(手机号/昵称/货位) |
| `storeType` | Integer | 否 | 暂存类型 1包裹 2裸花(空=全部) |

```json
{
  "current": 1,
  "size": 10,
  "date": "2026-07-09",
  "keyword": "138",
  "storeType": 1
}
```

#### 响应 `Response<PageVo<ColdStockListVo>>`

| 字段 | 类型 | 说明 |
|----|----|----|
| `coldStockId` | Long | 冷库库存id |
| `purchaserNick` | String | 客户昵称 |
| `purchaserMobile` | String | 客户手机号 |
| `storeType` | Integer | 暂存类型 |
| `locationNo` | String | 货位 |
| `storeRoundNo` | String | 场次 |
| `originSendNo` | String | 原发货单号 |
| `imageUrls` | String | 入库照片(逗号分隔) |
| `packageTotal` | Integer | 总包裹数 |
| `packageOut` | Integer | 已出库 |
| `bunchNum` | Integer | 裸花扎数 |
| `stockStatus` | Integer | 库存状态 |
| `remark` | String | 客户备注 |
| `inUserName` | String | 入库人(多人扫码顿号分隔) |
| `updateTime` | LocalDateTime | 更新时间 |

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "current": 1,
    "size": 10,
    "total": 1,
    "records": [
      {
        "coldStockId": 1001,
        "purchaserNick": "花小九",
        "purchaserMobile": "138****8888",
        "storeType": 1,
        "locationNo": "A-03-12",
        "storeRoundNo": "2026-07-09",
        "originSendNo": "SND20260708001",
        "imageUrls": "https://img/1.jpg,https://img/2.jpg",
        "packageTotal": 5,
        "packageOut": 2,
        "bunchNum": 20,
        "stockStatus": 10,
        "remark": "易碎轻放",
        "inUserName": "仓管阿强、仓管小李",
        "updateTime": "2026-07-09 10:20:00"
      }
    ]
  }
}
```

### POST /cold/mini/current/page · 当前暂存列表

仍在冷库、未完全出库。入参 / 返回同「暂存入库列表」(ColdStockListVo)。

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `current` | Long | 是 | 当前页 ≥1（分页） |
| `size` | Long | 是 | 每页条数（分页） |
| `date` | String | 否 | 暂存场次 yyyy-MM-dd |
| `keyword` | String | 否 | 关键词(手机号/昵称/货位) |
| `storeType` | Integer | 否 | 暂存类型(空=全部) |

```json
{
  "current": 1,
  "size": 10,
  "date": "2026-07-09",
  "keyword": "138",
  "storeType": 1
}
```

#### 响应 `Response<PageVo<ColdStockListVo>>`

| 字段 | 类型 | 说明 |
|----|----|----|
| `coldStockId` | Long | 冷库库存id |
| `purchaserNick` | String | 客户昵称 |
| `purchaserMobile` | String | 客户手机号 |
| `storeType` | Integer | 暂存类型 |
| `locationNo` | String | 货位 |
| `storeRoundNo` | String | 场次 |
| `originSendNo` | String | 原发货单号 |
| `imageUrls` | String | 入库照片(逗号分隔) |
| `packageTotal` | Integer | 总包裹数 |
| `packageOut` | Integer | 已出库 |
| `bunchNum` | Integer | 裸花扎数 |
| `stockStatus` | Integer | 库存状态 |
| `remark` | String | 客户备注 |
| `inUserName` | String | 入库人(多人扫码顿号分隔) |
| `updateTime` | LocalDateTime | 更新时间 |

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "current": 1,
    "size": 10,
    "total": 1,
    "records": [
      {
        "coldStockId": 1001,
        "purchaserNick": "花小九",
        "purchaserMobile": "138****8888",
        "storeType": 1,
        "locationNo": "A-03-12",
        "storeRoundNo": "2026-07-09",
        "originSendNo": "SND20260708001",
        "imageUrls": "https://img/1.jpg,https://img/2.jpg",
        "packageTotal": 5,
        "packageOut": 2,
        "bunchNum": 20,
        "stockStatus": 10,
        "remark": "易碎轻放",
        "inUserName": "仓管阿强、仓管小李",
        "updateTime": "2026-07-09 10:20:00"
      }
    ]
  }
}
```

### POST /cold/mini/out/page · 暂存出库列表

待出库/已出库任务列表(默认不含已撤销)，含包裹扫码进度。分页。**outType=3 转代卖任务**：outBunchNum 为客服填写的转代卖扎数(包裹暂存也有值)，点击出库时需确认最终扎数。

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `current` | Long | 是 | 当前页 ≥1（分页） |
| `size` | Long | 是 | 每页条数（分页） |
| `date` | String | 否 | 业务日期 yyyy-MM-dd |
| `keyword` | String | 否 | 关键词(手机号/昵称/货位) |
| `storeType` | Integer | 否 | 暂存类型 1包裹 2裸花(空=全部) |
| `taskStatus` | Integer | 否 | 任务状态 10待出库 20已出库(空=全部) |

```json
{
  "current": 1,
  "size": 10,
  "date": "2026-07-09",
  "keyword": "138",
  "storeType": 1,
  "taskStatus": 10
}
```

#### 响应 `Response<PageVo<ColdOutTaskVo>>`

| 字段 | 类型 | 说明 |
|----|----|----|
| `outTaskId` | Long | 出库任务id |
| `coldStockId` | Long | 冷库库存id |
| `purchaserNick` | String | 客户昵称 |
| `purchaserMobile` | String | 客户手机号 |
| `storeType` | Integer | 暂存类型 |
| `outType` | Integer | 出库方式 1关联发货单 2直接出库 3转代卖 |
| `linkSendNo` | String | 关联发货单号 |
| `todayShelfNo` | String | 当天货架 |
| `expressName` | String | 发货物流(转代卖为空) |
| `locationNo` | String | 货位 |
| `storeRoundNo` | String | 场次 |
| `outPackageNum` | Integer | 出库包裹数 |
| `packageTotal` | Integer | 总包裹数(展示 出库数/总数) |
| `outBunchNum` | Integer | 出库裸花扎数(转代卖任务=客服填写扎数) |
| `finishBunchNum` | Integer | 仓库确认最终出库扎数(转代卖任务,已出库后有值) |
| `boxRepackFlag` | Integer | 是否拆箱重打 0否 1是 |
| `taskStatus` | Integer | 任务状态,见枚举 |
| `operatorName` | String | 客服操作人 |
| `operatorMobile` | String | 客服操作人手机号 |
| `operateTime` | LocalDateTime | 操作时间 |
| `finishImageUrls` | String | 出库照片(逗号分隔url,已出库任务) |
| `finishRemark` | String | 出库备注(已出库任务) |
| `finishTime` | LocalDateTime | 出库完成时间(已出库任务) |

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "current": 1,
    "size": 10,
    "total": 1,
    "records": [
      {
        "outTaskId": 3001,
        "coldStockId": 1001,
        "purchaserNick": "花小九",
        "purchaserMobile": "138****8888",
        "storeType": 1,
        "outType": 1,
        "linkSendNo": "SND20260709001",
        "todayShelfNo": "A-03",
        "expressName": "顺丰冷链",
        "locationNo": "A-03-12",
        "storeRoundNo": "2026-07-09",
        "outPackageNum": 2,
        "packageTotal": 5,
        "outBunchNum": 20,
        "finishBunchNum": 3,
        "boxRepackFlag": 0,
        "taskStatus": 10,
        "operatorName": "客服小美",
        "operatorMobile": "139****6666",
        "operateTime": "2026-07-09 11:00:00",
        "finishImageUrls": "https://img/out1.jpg,https://img/out2.jpg",
        "finishRemark": "已装车",
        "finishTime": "2026-07-09 15:30:00"
      }
    ]
  }
}
```

### POST /cold/mini/out/finish · 点击出库

冷库出库唯一执行入口。裸花任务整单完成；包裹任务将任务内待出库包裹批量完成；**拆箱重打任务**在此完结原包裹(明细置30、包裹表置40)。**转代卖任务(outType=3)必须填 bunchNum 确认最终出库扎数**(预填客服填写值)：裸花按最终扎数扣减库存,扣完置已出库,有剩余回待发货继续暂存;裸花最终扎数不能大于当前剩余暂存扎数。**出库照片必传(至少一张)**,备注可选。

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `outTaskId` | Long | 是 | 出库任务id |
| `imageUrls` | String | 是 | 出库照片(逗号分隔url,至少一张) |
| `remark` | String | 否 | 出库备注 |
| `bunchNum` | Integer | 否 | 最终出库扎数(转代卖任务必填,正整数;其他任务忽略) |
| `userId` | Long | 注入 | 后端注入,前端不传 |
| `userName` | String | 注入 | 后端根据登录人解析,前端不传 |

```json
{
  "outTaskId": 3001,
  "imageUrls": "https://img/1.jpg,https://img/2.jpg",
  "remark": "易碎轻放",
  "bunchNum": 20
}
```

#### 响应 `Response<String>`

`data` = "success"（固定 success）

### POST /cold/mini/bare/scan · 裸花二维码识别

扫描花材二维码,带出客户、场次、货架和收货地址,供「裸花暂存登记」预填与二次确认。**暂存扎数改为登记时手填**,返回的 bunchNum 为订单总扎数,仅供参考。

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `codeContent` | String | 是 | 花材二维码内容 |

```json
{
  "codeContent": "60001-1-20-1"
}
```

#### 响应 `Response<ColdBareScanVo>`

| 字段 | 类型 | 说明 |
|----|----|----|
| `enterItemId` | Long | 入场花材id |
| `purchaserId` | Long | 客户id |
| `purchaserNick` | String | 客户昵称 |
| `purchaserMobile` | String | 客户手机号 |
| `roundNo` | String | 场次 |
| `locationNo` | String | 货架号 |
| `bunchNum` | Integer | 订单花材总扎数(仅参考,暂存扎数由登记时手填) |
| `receiveAddress` | String | 收货地址 |
| `originSendNo` | String | 原发货单号 |

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "enterItemId": 60001,
    "purchaserId": 88001,
    "purchaserNick": "花小九",
    "purchaserMobile": "138****8888",
    "roundNo": "2026-07-09",
    "locationNo": "A-03-12",
    "bunchNum": 20,
    "receiveAddress": "浙江省杭州市西湖区…",
    "originSendNo": "SND20260708001"
  }
}
```

### POST /cold/mini/bare/register · 裸花暂存登记

扫花材二维码登记裸花入冷库。**客户 / 场次 / 货位由二维码识别**(见「裸花二维码识别」),**暂存扎数必填、由仓库人员手填**(客户可能只暂存部分花材,不取识别结果的订单总扎数),**填写扎数大于货架现有扎数(识别结果 bunchNum)时直接报错**,同客户同场次同货架重复登记会拦截。暂存登记时入库照片必填;特殊备注选填(如需记录暂存花材的品种、等级、数量)。**type=2 取消暂存**：扫错时对同一花材码再扫一次即作废当前登记(无需扎数和照片;已生成出库任务的需先在运营端撤销)。

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `codeContent` | String | 是 | 花材二维码内容(同「裸花二维码识别」) |
| `type` | Integer | 否 | 扫码类型 1暂存(默认) 2取消暂存(扫错撤销,无需扎数和照片) |
| `bunchNum` | Integer | 否 | 暂存扎数(暂存登记必传,正整数,不能大于货架现有扎数) |
| `imageUrls` | String | 否 | 入库照片(逗号分隔url,暂存登记必传) |
| `remark` | String | 否 | 特殊备注(选填,如品种、等级、数量) |
| `userName` | String | 注入 | 后端根据登录人解析,前端不传 |
| `userId` | Long | 注入 | 后端注入,前端不传 |

```json
{
  "codeContent": "60001-1-20-1",
  "type": 0,
  "bunchNum": 20,
  "imageUrls": "https://img/1.jpg,https://img/2.jpg",
  "remark": "易碎轻放"
}
```

#### 响应 `Response<Long>`

`data` = 1001（冷库库存id）

### POST /cold/mini/package/scan · 包裹扫码入库

扫描包裹码执行冷库暂存入库。连续扫同一客户时回传上次的 coldStockId。质检员、区域负责人和仓库管理员不按物流商限制。**type=2 取消暂存**：扫错时对同一包裹码再扫一次即撤销当前暂存(已锁定待出库的包裹需先在运营端撤销出库任务;全部取消后整条库存作废)。

#### 请求参数

| 字段 | 类型 | 必填 | 说明 |
|----|----|----|----|
| `codeContent` | String | 是 | 扫码内容(包裹id) |
| `type` | Integer | 否 | 扫码类型 1暂存(默认) 2取消暂存(扫错撤销) |
| `coldStockId` | Long | 否 | 累计入库的冷库库存id(连续扫同一客户时传) |
| `locationNo` | String | 否 | 暂存货位号(新建库存时使用) |
| `userName` | String | 注入 | 后端根据登录人解析,前端不传 |
| `userId` | Long | 注入 | 后端注入,前端不传 |

```json
{
  "codeContent": "9001",
  "type": 0,
  "coldStockId": 1001,
  "locationNo": "A-03-12"
}
```

#### 响应 `Response<ColdScanResultVo>`

| 字段 | 类型 | 说明 |
|----|----|----|
| `coldStockId` | Long | 冷库库存id(继续扫码回传) |
| `purchaserId` | Long | 客户id |
| `purchaserNick` | String | 客户昵称 |
| `purchaserMobile` | String | 客户手机号 |
| `storeType` | Integer | 暂存类型 |
| `locationNo` | String | 货位 |
| `storeRoundNo` | String | 场次 |
| `remark` | String | 客户备注 |
| `expressName` | String | 发货物流名称 |
| `inUserName` | String | 入库人姓名(多人扫码顿号分隔) |
| `packageTotal` | Integer | 已暂存包裹总数 |
| `scanPackageCode` | String | 本次扫码的包裹码 |
| `packageSummary` | List<Obj> | 已扫包裹汇总(按型号聚合) |
| `packageSummary[].packageInfo` | String | 包裹型号/规格 |
| `packageSummary[].num` | Integer | 该型号已扫数量 |
| `packageList` | List<Obj> | 已入库包裹明细 |
| `packageList[].packageCode` | String | 包裹码(包裹id) |
| `packageList[].packageInfo` | String | 名称/规格 |
| `packageList[].serialNum` | Integer | 序号 |
| `packageList[].originRoundNo` | String | 原场次 |

```json
{
  "code": 0,
  "message": "success",
  "data": {
    "coldStockId": 1001,
    "purchaserId": 88001,
    "purchaserNick": "花小九",
    "purchaserMobile": "138****8888",
    "storeType": 1,
    "locationNo": "A-03-12",
    "storeRoundNo": "2026-07-09",
    "remark": "易碎轻放",
    "expressName": "顺丰冷链",
    "inUserName": "仓管阿强、仓管小李",
    "packageTotal": 5,
    "scanPackageCode": "9001",
    "packageSummary": [
      {
        "packageInfo": "红玫瑰 20扎/件",
        "num": 2
      }
    ],
    "packageList": [
      {
        "packageCode": "9001",
        "packageInfo": "红玫瑰 20扎/件",
        "serialNum": 1,
        "originRoundNo": "2026-07-08"
      }
    ]
  }
}
```
