前端对接冷库暂存花材
冷库暂存花材
运营端 / PDA 端 / 小程序端冷库暂存全部 25 个接口:库存与统计、联系记录、关联发货单与直接出库、转代卖、扫码入库、裸花登记与点击出库
Markdown 原文(给 AI 用):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.md
依据提交 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>,结构一致:
{ "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/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 |
{
"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异常 |
{
"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 {})
{}响应 R<ColdStatDto>
| 字段 | 类型 | 说明 |
|---|---|---|
customerCount | Integer | 当前暂存客户数 |
bareCustomerCount | Integer | 其中裸花暂存客户数 |
packageTotal | Integer | 暂存包裹数 |
todayWaitOutCustomerCount | Integer | 今日待出库客户数 |
{
"code": 0,
"message": "success",
"data": {
"customerCount": 12,
"bareCustomerCount": 3,
"packageTotal": 5,
"todayWaitOutCustomerCount": 4
}
}POST/cold/contact/page联系记录列表
按客户和暂存库存聚合,倒序。非分页。
权限:coldStorageView
请求参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
coldStockId | Long | 必填 | 冷库库存id |
{
"coldStockId": 1001
}响应 R<List<ColdContactDto>>
| 字段 | 类型 | 说明 |
|---|---|---|
id | Long | 记录id |
shipConfirm | Integer | 联系结果 |
nextPlanShipDate | LocalDate | 下次计划发货日期 |
content | String | 联系内容 |
imageUrls | String | 图片url(逗号分隔) |
operatorName | String | 登记人 |
createTime | LocalDateTime | 登记时间 |
{
"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(逗号分隔) |
{
"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 |
{
"coldStockId": 1001
}响应 R<List<ColdStockPackageDto>>
| 字段 | 类型 | 说明 |
|---|---|---|
coldStockPackageId | Long | 冷库包裹明细id(出库时回传) |
expressPackageId | Long | 包裹表id |
packageCode | String | 包裹码 |
packageInfo | String | 商品/规格 |
originRoundNo | String | 原场次 |
locationNo | String | 货位 |
{
"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 | 可选 | 客户注册手机号,不传时查暂存客户自己的发货单 |
{
"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 | 不可关联/货架提示 |
{
"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 | 可选 | 本次出库的冷库包裹明细id列表(包裹暂存必填,裸花不填) |
boxRepackFlag | Integer | 可选 | 是否拆箱重打 0否 1是(重打必须勾选全部在库包裹) |
sendNo | String | 必填 | 关联的当天发货单号 |
{
"coldStockId": 1001,
"coldStockPackageIds": [
5001,
5002
],
"boxRepackFlag": 0,
"sendNo": "SND20260709001"
}响应 R<Long>
data = 3001(出库任务id)
POST/cold/out/direct直接出库
不关联当天发货单。生成待出库任务并锁定所选包裹,实际出库由小程序点击出库完成。发货物流由服务端根据原发货单解析,前端不传。
权限:coldStorageOperate
请求参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
coldStockId | Long | 必填 | 冷库库存id |
coldStockPackageIds | List | 可选 | 本次出库的冷库包裹明细id列表(包裹暂存必填,裸花不填) |
outRemark | String | 可选 | 出库备注 |
{
"coldStockId": 1001,
"coldStockPackageIds": [
5001,
5002
],
"outRemark": "走顺丰冷链"
}响应 R<Long>
data = 3001(出库任务id)
POST/cold/out/cancel撤销出库任务
仅可撤销待出库(10)且尚无包裹完成出库的任务。撤销后任务置已撤销(30),释放锁定包裹;无其他待出库任务时,库存回退为待发货(10)。
权限:coldStorageOperate
请求参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
outTaskId | Long | 必填 | 出库任务id |
cancelReason | String | 必填 | 撤销原因 |
{
"outTaskId": 3001,
"cancelReason": "客户临时取消"
}响应 R<Void>
data 为 null。
POST/cold/stock/abnormal库存异常标记
库存数量与现场不一致时标记异常。
权限:coldStorageWarehouse
请求参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
coldStockId | Long | 必填 | 冷库库存id |
abnormalFlag | Integer | 必填 | 异常标记 0正常 1异常 |
abnormalRemark | String | 必填 | 异常说明 |
{
"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 | 可选 | 变更说明 |
{
"coldStockId": 1001,
"planShipDate": "2026-07-10",
"remark": "易碎轻放"
}响应 R<Void>
data 为 null。
POST/cold/convert-sale/info转代卖预填信息
转代卖弹窗预填。裸花返回当前剩余暂存扎数上限;包裹返回发货单总扎数(打包时点快照,取原发货单序号1包裹的 item_num,不受退款影响),可为 null,前端显示「-」且提交时不校验上限。
权限:coldStorageView
请求参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
coldStockId | Long | 必填 | 冷库库存id |
{
"coldStockId": 1001
}响应 R<ColdConvertSaleInfoDto>
| 字段 | 类型 | 说明 |
|---|---|---|
storeType | Integer | 暂存类型 1包裹 2裸花 |
maxBunchNum | Integer | 可转扎数上限(裸花=剩余暂存扎数;包裹=发货单总扎数快照,可为null) |
{
"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字) |
{
"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 |
{
"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 | 撤销原因 |
{
"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(包裹暂存,传则取其原发货单号) |
{
"sendNo": "SND20260709001",
"coldStockId": 1001
}响应 R<ColdPendingPackageDto>
| 字段 | 类型 | 说明 |
|---|---|---|
sendNo | String | 发货单号 |
storedPackageNum | Integer | 已入冷库包裹数 |
pendingPackageNum | Integer | 未入库包裹数 |
pendingList | List | 未入库包裹清单 |
pendingList[].expressPackageId | Long | 包裹表id |
pendingList[].packageCode | String | 包裹码 |
pendingList[].packageInfo | String | 商品/规格 |
pendingList[].originRoundNo | String | 原场次 |
pendingList[].zoneShelf | String | 货架 |
pendingList[].totalWeight | BigDecimal | 包裹重量(g) |
pendingList[].expressStatus | Integer | 包裹状态 10打包完成待入冷库 |
{
"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/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 | 注入 | 后端注入,前端不传 |
{
"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 | 已扫包裹汇总(按型号聚合) |
packageSummary[].packageInfo | String | 包裹型号/规格 |
packageSummary[].num | Integer | 该型号已扫数量 |
packageList | List | 已入库包裹明细 |
packageList[].packageCode | String | 包裹码(包裹id) |
packageList[].packageInfo | String | 名称/规格 |
packageList[].serialNum | Integer | 序号 |
packageList[].originRoundNo | String | 原场次 |
{
"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 |
{
"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 | 已扫包裹汇总(按型号聚合) |
packageSummary[].packageInfo | String | 包裹型号/规格 |
packageSummary[].num | Integer | 该型号已扫数量 |
packageList | List | 已入库包裹明细 |
packageList[].packageCode | String | 包裹码 |
packageList[].packageInfo | String | 名称/规格 |
packageList[].serialNum | Integer | 序号 |
packageList[].originRoundNo | String | 原场次 |
{
"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/cold/mini。
POST/cold/mini/home首页统计
冷库暂存首页统计卡片。
请求参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
date | String | 可选 | 业务日期/场次 yyyy-MM-dd(默认当天) |
{
"date": "2026-07-09"
}响应 Response<ColdMiniHomeVo>
| 字段 | 类型 | 说明 |
|---|---|---|
customerCount | Integer | 当前暂存客户数 |
bareCustomerCount | Integer | 其中裸花暂存客户数 |
packageTotal | Integer | 暂存包裹合计 |
todayOutCustomerCount | Integer | 今日暂存出库客户数 |
{
"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裸花(空=全部) |
{
"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 | 更新时间 |
{
"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 | 可选 | 暂存类型(空=全部) |
{
"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 | 更新时间 |
{
"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已出库(空=全部) |
{
"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 | 出库完成时间(已出库任务) |
{
"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 | 注入 | 后端根据登录人解析,前端不传 |
{
"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 | 必填 | 花材二维码内容 |
{
"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 | 原发货单号 |
{
"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 | 注入 | 后端注入,前端不传 |
{
"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 | 注入 | 后端注入,前端不传 |
{
"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 | 已扫包裹汇总(按型号聚合) |
packageSummary[].packageInfo | String | 包裹型号/规格 |
packageSummary[].num | Integer | 该型号已扫数量 |
packageList | List | 已入库包裹明细 |
packageList[].packageCode | String | 包裹码(包裹id) |
packageList[].packageInfo | String | 名称/规格 |
packageList[].serialNum | Integer | 序号 |
packageList[].originRoundNo | String | 原场次 |
{
"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"
}
]
}
}