升鲜宝供应链管理系统box_周转物功能设计模块详细开发文档(一)---升鲜宝生鲜配送供应链管理系统源代码服务
升鲜宝供应链管理系统
box_周转物功能设计模块详细开发文档
|
文档版本 |
V1.0 |
|
适用系统 |
升鲜宝供应链管理系统 / 订单式物流配送模块 / 周转物管理 |
|
技术栈建议 |
Spring Boot + MyBatis-Plus + MySQL + Redis |
|
数据来源 |
义乌供应链管理系统数据库SQL.txt 中 tms_box_* 周转物相关表 |
|
输出日期 |
2020-01-18 |
|
文档定位 |
研发设计、数据库建模、接口开发、业务联调、测试验收依据 |
说明:本文档在现有 tms_box_* 表结构基础上,整理周转物模块的完整业务闭环,并给出建议升级为独立 box_ 模块的数据库结构、作业流程、接口与落地方案。
修订记录
|
版本 |
日期 |
说明 |
作者 |
|
V1.0 |
2020-01-18 |
首次整理:基于 tms_box_* 表分析并补齐 box_ 周转物模块设计。 |
升鲜宝 |
1. 文档目标与范围
本文档用于指导升鲜宝供应链管理系统中 box_ 周转物模块的功能设计、数据库建模、接口开发、库存与押金联动、配送签收回收联调及测试验收。
• 覆盖周转物基础资料、库存、购入、发出、归还、报损、押金、客户余额、司机暂存、库存流水。
• 兼容现有义乌供应链 SQL 中的 tms_box_* 表,并给出后续统一为 box_ 模块的重构表结构。
• 重点适配订单式物流配送:按客户配送点聚合订单、装箱、司机配送、客户签收、旧箱回收。
• 不把周转物作为普通商品库存处理,周转物是物流资产库存,不能混入 wms_goods_inventory 商品库存。
2. 现状表识别与模块边界
当前 SQL 中周转物相关表使用 tms_box_* 前缀,说明该能力原先放在配送 TMS 模块下。实际业务上,周转物需要同时服务订单、仓库、配送、司机、客户、财务押金,因此建议升级为独立 box_ 业务域。
|
当前表 |
当前含义 |
建议新表 |
优化说明 |
|
tms_box_type |
周转物类型表 |
box_type |
保留分类能力,补充类型编码。 |
|
tms_box |
周转物定义表 |
box_item |
将长宽高重量改为 decimal,支持体积和装载计算。 |
|
tms_box_inventory |
周转物库存表 |
box_inventory |
补充 workhouse_id、可用、锁定、客户占用、司机暂存。 |
|
tms_box_operation |
购入/报损操作表 |
box_operation_bill + detail |
从单表升级为主从单据,支持一单多箱型。 |
|
tms_box_out_record |
发出表 |
box_out_bill + detail |
关联订单、配送任务、司机、车辆、客户配送点。 |
|
tms_box_return_record |
归还表 |
box_return_bill + detail |
支持原发出明细回收、损坏、丢失、赔偿。 |
|
tms_box_record_log |
周转物日志表 |
box_inventory_flow |
升级为统一库存流水,支持幂等与审计。 |
模块边界定义如下:
|
业务域 |
是否属于 box_ 模块 |
说明 |
|
周转物资料 |
是 |
类型、编码、名称、押金、规格、审核。 |
|
周转物库存 |
是 |
公司仓库周转物库存、客户占用、司机暂存。 |
|
商品库存 |
否 |
商品库存属于 wms_/hwms_,周转物不能作为商品库存核算。 |
|
配送任务 |
联动 |
配送任务生成周转物发出/归还,但任务本身属于物流配送模块。 |
|
客户押金/赔偿 |
联动 |
押金占用、释放、扣罚需要与财务/客户余额联动。 |
|
订单商品体积重量 |
联动 |
用于推荐周转箱数量和类型,来源订单明细/商品资料。 |
3. 业务角色与核心对象
|
角色/对象 |
职责 |
关联数据 |
|
仓库管理员 |
维护周转物资料、购入、装箱、发出审核、归还入库、盘点报损。 |
box_item、box_inventory、box_out_bill、box_return_bill |
|
物流调度员 |
根据订单和线路安排车辆、司机、客户配送点,生成周转物发出计划。 |
配送任务、线路、客户点、box_out_bill |
|
司机 |
配送时携带周转物,到客户处交付、回收、拍照登记,回仓交接。 |
box_driver_balance、box_return_bill |
|
客户 |
接收周转物、归还旧箱、承担押金或赔偿责任。 |
box_customer_balance、押金/赔偿记录 |
|
财务/客服 |
处理押金释放、赔偿扣款、客户对账。 |
客户余额、应收、赔偿金额 |
|
系统任务 |
自动根据配送任务生成发出单、更新库存流水、生成预警。 |
box_inventory_flow、box_customer_balance |
4. 核心业务口径
|
口径 |
定义 |
实现要点 |
|
周转模式 |
长期客户/固定线路客户只记录借出与归还,不立即收取押金。 |
opt_type=1,客户余额记录未还数量。 |
|
押金模式 |
对新客户、临时客户或高价值周转物收取押金。 |
opt_type=2,发出占用押金,归还释放押金,损坏/丢失扣押金。 |
|
公司库存 |
仓库可用周转物数量。 |
box_inventory.stock_qty / available_qty。 |
|
客户占用 |
客户已收到但未归还的周转物数量。 |
box_customer_balance.unreturn_qty。 |
|
司机暂存 |
司机装车带出、回收后尚未交回仓库的周转物。 |
box_driver_balance.hold_qty。 |
|
库存流水 |
每一次审核、反审核、冲销都必须落库记录。 |
box_inventory_flow,使用 idempotent_key 防重复。 |
5. 总体作业流程图

图 5-1 周转物模块总体作业流程图
5.1 订单配送发出流程

图 5-2 订单配送发出流程图
5.2 司机回收归还流程

图 5-3 司机回收归还流程图
6. 详细作业流程说明
6.1 周转物资料建档流程
|
步骤 |
说明 |
|
1 |
新增周转物类型,如周转箱、保温箱、托盘、冰袋、筐盖。 |
|
2 |
新增周转物资料,录入编码、名称、押金单价、资产价值、长宽高、重量、单位。 |
|
3 |
审核周转物资料。只有已审核且启用的周转物允许购入、发出、归还。 |
|
4 |
资料修改时如果已经被库存或历史单据引用,限制修改关键字段,例如编码、类型、押金单价。 |
6.2 期初/购入流程
|
步骤 |
说明 |
|
1 |
仓库管理员录入购入或期初单,选择仓库和周转物明细。 |
|
2 |
保存时不影响库存,单据状态为待审核。 |
|
3 |
审核时增加 box_inventory.stock_qty 与 available_qty。 |
|
4 |
写入 box_inventory_flow,biz_type=3购入或6盘盈。 |
|
5 |
反审核时必须按原流水冲销,不能直接删除历史记录。 |
6.3 配送装箱与发出流程
|
步骤 |
说明 |
|
1 |
OMS订单审核后进入配送池。 |
|
2 |
系统按客户固定线路自动归线,未配置固定线路的订单进入未排线池。 |
|
3 |
配送排线按客户配送点聚合订单,计算该客户点下订单商品总体积、总重量、温控要求。 |
|
4 |
系统根据周转物体积、重量、类型推荐周转箱数量,仓库可人工调整。 |
|
5 |
生成 box_out_bill 与 box_out_bill_detail。 |
|
6 |
审核发出单后扣减库存、增加客户未还数量、增加司机暂存或配送任务携带数量。 |
|
7 |
押金模式下生成押金占用金额,后续归还或赔偿时释放/扣减。 |
6.4 客户签收与旧箱回收流程
|
步骤 |
说明 |
|
1 |
司机到达客户配送点,客户签收订单。 |
|
2 |
司机端显示本客户点:本次发出箱数、历史未还箱数、建议回收箱数。 |
|
3 |
司机录入归还周转物类型、数量,支持扫码、拍照、备注。 |
|
4 |
完好归还进入正常归还单;损坏或丢失进入异常归还/报损待处理。 |
|
5 |
客户确认后,后台或司机回仓交接时审核归还单。 |
|
6 |
审核后增加公司库存,减少客户未还,释放押金。 |
6.5 损坏、丢失、赔偿流程
|
步骤 |
说明 |
|
1 |
司机或仓库发现周转物损坏、丢失时登记异常。 |
|
2 |
客服/仓库确认责任方:客户原因、司机原因、公司自然损耗。 |
|
3 |
客户原因时,可按押金单价或资产价值生成赔偿金额。 |
|
4 |
押金模式下优先用押金抵扣;周转模式下生成客户赔偿/应收。 |
|
5 |
公司原因或自然损耗时,生成报损单,审核后减少公司资产库存或记录损耗。 |
6.6 盘点与调整流程
|
步骤 |
说明 |
|
1 |
仓库定期对周转物进行盘点,系统带出账面库存。 |
|
2 |
录入实盘数量,自动计算盘盈/盘亏。 |
|
3 |
确认差异原因后生成调整单。 |
|
4 |
审核调整单后更新 box_inventory 并写 box_inventory_flow。 |
|
5 |
盘亏涉及客户/司机责任时,可转赔偿流程。 |
7. 单据状态机与审核规则

图 7-1 周转物单据通用状态机
|
状态 |
含义 |
可执行动作 |
是否影响库存 |
|
0 待审核 |
单据已保存但未生效。 |
修改、删除、审核、作废 |
否 |
|
1 已审核 |
单据生效,已经更新库存/客户余额/流水。 |
查看、打印、反审核/冲销 |
是 |
|
-1 已作废 |
单据无效,不再参与业务。 |
查看 |
否 |
|
2 已反审核/已冲销 |
原审核影响已通过反向流水冲销。 |
修改后重新审核或关闭 |
反向影响 |
审核与反审核必须遵循幂等原则:同一单据同一动作只能影响库存一次。建议每次写入 box_inventory_flow 时生成 idempotent_key,例如:BOX_OUT_AUDIT:{outCode}:{detailId}。
8. 数据模型 E-R 关系

图 8-1 box_ 周转物模块建议 E-R 关系图
E-R 设计重点:box_item 是基础资料,box_inventory 是公司仓库库存汇总;box_out_bill/detail 和 box_return_bill/detail 是作业单据;box_customer_balance 与 box_driver_balance 是高频查询余额表;box_inventory_flow 是所有库存变化的事实流水。
9. 当前 tms_box_* 表结构数据字典
|
表名 |
表说明 |
用途说明 |
|
tms_box_type |
周转物类型表 |
维护周转物分类,如周转箱、保温箱、托盘、冰袋等。 |
|
tms_box |
周转物定义表 |
维护周转物编码、名称、价值、长宽高重量、审核状态。 |
|
tms_box_inventory |
周转物库存表 |
维护周转物库存、借出总数、归还总数、购入数量、销毁数量。 |
|
tms_box_operation |
周转物操作表 |
记录购入、报损等操作,当前为单表设计。 |
|
tms_box_out_record |
周转物发出表 |
记录订单/客户维度的周转物借出、押金发出。 |
|
tms_box_return_record |
周转物归还表 |
记录客户或司机归还周转物。 |
|
tms_box_record_log |
周转物日志表 |
记录借出、归还、购入、销毁、报损等异动流水。 |
9.x tms_box_type
|
字段名 |
字段类型 |
字段说明 |
|
id |
bigint |
主键ID |
|
type_name |
varchar(100) |
类型名称 |
|
enabled |
int |
状态:1启用,0禁用 |
|
del_flag |
int |
删除标记:0正常,1删除 |
|
sort_code |
int |
排序码 |
|
creator |
bigint |
创建人ID |
|
create_date |
bigint |
创建时间 |
|
updater |
bigint |
修改人ID |
|
update_date |
bigint |
修改时间 |
|
remark |
varchar(250) |
备注 |
|
use_count |
int |
引用次数 |
|
dept_id |
bigint |
机构ID |
9.x tms_box
|
字段名 |
字段类型 |
字段说明 |
|
id |
bigint |
主键ID |
|
box_type_id |
bigint |
周转物类型ID |
|
box_code |
varchar(100) |
周转物编码 |
|
box_name |
varchar(100) |
周转物名称 |
|
box_amount |
decimal(10,3) |
周转物价值 |
|
box_long |
varchar(100) |
长,建议改 decimal |
|
box_wide |
varchar(100) |
宽,建议改 decimal |
|
box_high |
varchar(100) |
高,建议改 decimal |
|
box_weight |
varchar(100) |
重量,建议改 decimal |
|
audit_state |
int |
审核状态:0待审核,1已审核 |
|
audit_id |
bigint |
审核人 |
|
audit_date |
bigint |
审核时间 |
|
use_count |
int |
引用次数 |
|
enabled |
int |
状态 |
|
del_flag |
int |
删除标记 |
|
sort_code |
int |
排序码 |
|
creator |
bigint |
创建人 |
|
create_date |
bigint |
创建时间 |
|
updater |
bigint |
修改人 |
|
update_date |
bigint |
修改时间 |
|
remark |
varchar(250) |
备注 |
|
dept_id |
bigint |
机构ID |
9.x tms_box_inventory
|
字段名 |
字段类型 |
字段说明 |
|
id |
bigint |
主键ID |
|
box_id |
bigint |
周转物ID |
|
inventory |
int |
当前库存数 |
|
return_total |
int |
累计归还数量 |
|
out_total |
int |
累计借出数量 |
|
buy_count |
int |
购入数量 |
|
destroy_count |
int |
销毁数量 |
|
version |
int |
版本号 |
|
enabled |
int |
状态 |
|
del_flag |
int |
删除标记 |
|
sort_code |
int |
排序码 |
|
creator |
bigint |
创建人 |
|
create_date |
bigint |
创建时间 |
|
updater |
bigint |
修改人 |
|
update_date |
bigint |
修改时间 |
|
remark |
varchar(250) |
备注 |
|
dept_id |
bigint |
机构ID |
9.x tms_box_operation
|
字段名 |
字段类型 |
字段说明 |
|
id |
bigint |
主键ID |
|
box_id |
bigint |
周转物ID |
|
move_count |
int |
变动数量 |
|
box_amount |
decimal(12,3) |
周转物价值 |
|
turnover_type |
int |
类型:1购入,2报损 |
|
audit_state |
int |
审核状态:0待审核,1已审核 |
|
audit_id |
bigint |
审核人 |
|
audit_date |
bigint |
审核时间 |
|
enabled |
int |
状态 |
|
del_flag |
int |
删除标记 |
|
sort_code |
int |
排序码 |
|
creator |
bigint |
创建人 |
|
create_date |
bigint |
创建时间 |
|
updater |
bigint |
修改人 |
|
update_date |
bigint |
修改时间 |
|
remark |
varchar(250) |
备注 |
9.x tms_box_out_record
|
字段名 |
字段类型 |
字段说明 |
|
id |
bigint |
主键ID |
|
box_id |
bigint |
周转物ID |
|
order_code |
varchar(100) |
订单编码 |
|
shop_id |
bigint |
客户ID |
|
shop_account_id |
bigint |
客户子账号ID,现注释为不用 |
|
opt_type |
int |
操作类型:1周转司机,2押金客户 |
|
box_order_type |
int |
单据类型:1手动,2自动 |
|
order_type |
int |
订单类型 |
|
out_count |
int |
发出数量 |
|
out_time |
bigint |
发出时间 |
|
out_amount |
decimal(12,3) |
借出金额/押金金额 |
|
out_status |
int |
借出状态:0未发出,1已发出 |
|
audit_state |
int |
审核状态:0待审核,1已审核 |
|
audit_id |
bigint |
审核人 |
|
audit_date |
bigint |
审核时间 |
|
enabled |
int |
状态 |
|
del_flag |
int |
删除标记 |
|
sort_code |
int |
排序码 |
|
creator |
bigint |
创建人 |
|
create_date |
bigint |
创建时间 |
|
updater |
bigint |
修改人 |
|
update_date |
bigint |
修改时间 |
|
remark |
varchar(250) |
备注 |
9.x tms_box_return_record
|
字段名 |
字段类型 |
字段说明 |
|
id |
bigint |
主键ID |
|
box_id |
bigint |
周转物ID |
|
order_code |
varchar(100) |
订单编码 |
|
shop_id |
bigint |
客户ID |
|
shop_account_id |
bigint |
客户账号ID |
|
opt_type |
int |
操作类型:1周转司机,2押金客户 |
|
box_order_type |
int |
单据类型:1手动,2自动 |
|
order_type |
int |
订单类型 |
|
return_count |
int |
归还数量 |
|
return_time |
bigint |
归还时间 |
|
return_amount |
decimal(12,3) |
归还金额/押金释放金额 |
|
return_status |
int |
归还状态:0未归还,1已归还 |
|
audit_state |
int |
审核状态:0待审核,1已审核 |
|
audit_id |
bigint |
审核人 |
|
audit_date |
bigint |
审核时间 |
|
enabled |
int |
状态 |
|
del_flag |
int |
删除标记 |
|
sort_code |
int |
排序码 |
|
creator |
bigint |
创建人 |
|
create_date |
bigint |
创建时间 |
|
updater |
bigint |
修改人 |
|
update_date |
bigint |
修改时间 |
|
remark |
varchar(250) |
备注 |
9.x tms_box_record_log
|
字段名 |
字段类型 |
字段说明 |
|
id |
bigint |
主键ID |
|
box_id |
bigint |
周转物ID |
|
order_code |
varchar(100) |
订单编码,现注释建议去掉 |
|
order_type |
int |
单号类型,现注释建议去掉 |
|
move_count |
int |
异动数量 |
|
move_time |
bigint |
异动时间 |
|
box_amount |
decimal(12,3) |
周转物价值 |
|
turnover_type |
int |
类型:1借出,2归还,3购入,4销毁,5报损 |
|
enabled |
int |
状态 |
|
del_flag |
int |
删除标记 |
|
sort_code |
int |
排序码 |
|
creator |
bigint |
创建人 |
|
create_date |
bigint |
创建时间 |
|
updater |
bigint |
修改人 |
|
update_date |
bigint |
修改时间 |
|
remark |
varchar(250) |
备注 |
10. 建议正式落地的 box_ 表结构设计
建议把周转物能力从 tms_box_* 下沉为独立 box_ 模块。以下表结构可分阶段落地:第一阶段补余额表和流水表;第二阶段重构发出/归还为主从表;第三阶段补盘点、押金、赔偿与财务联动。
|
建议表 |
表说明 |
核心用途 |
|
box_type |
周转物类型表 |
类型编码、类型名称、启停状态。 |
|
box_item |
周转物资料表 |
编码、名称、押金单价、资产价值、长宽高、体积、重量、审核状态。 |
|
box_inventory |
周转物库存汇总表 |
按机构、仓库、周转物汇总库存、可用、锁定、客户占用、司机暂存。 |
|
box_operation_bill |
周转物操作主表 |
购入、报损、销毁、盘盈、盘亏、调整等操作单据主表。 |
|
box_operation_bill_detail |
周转物操作明细表 |
一张操作单可包含多种周转物。 |
|
box_out_bill |
周转物发出主表 |
关联配送任务、线路、司机、车辆、客户、仓库。 |
|
box_out_bill_detail |
周转物发出明细表 |
记录各周转物发出数量、押金金额、已还/未还数量。 |
|
box_return_bill |
周转物归还主表 |
司机回收、客户主动归还、手工归还。 |
|
box_return_bill_detail |
周转物归还明细表 |
正常、损坏、丢失、赔偿、原发出明细关联。 |
|
box_customer_balance |
客户周转物余额表 |
客户维度未还数量、押金占用、赔偿累计。 |
|
box_driver_balance |
司机周转物暂存表 |
司机配送任务维度的装车、回收、回仓交接。 |
|
box_inventory_flow |
周转物库存流水表 |
所有审核动作写流水,支持审计、幂等和追溯。 |
10.x box_type(周转物类型表)
|
字段名 |
字段类型 |
字段说明 |
|
id |
bigint |
主键 |
|
type_code |
varchar(64) |
类型编码 |
|
type_name |
varchar(100) |
类型名称 |
|
sort_code |
int |
排序 |
|
enabled |
tinyint |
启用状态 |
|
del_flag |
tinyint |
删除标记 |
|
dept_id |
bigint |
机构ID |
|
creator/create_date/updater/update_date |
bigint |
审计字段 |
|
remark |
varchar(255) |
备注 |
10.x box_item(周转物资料表)
|
字段名 |
字段类型 |
字段说明 |
|
id |
bigint |
主键 |
|
box_type_id |
bigint |
周转物类型ID |
|
box_code |
varchar(64) |
周转物编码 |
|
box_name |
varchar(100) |
周转物名称 |
|
deposit_price |
decimal(12,3) |
押金单价 |
|
asset_price |
decimal(12,3) |
资产价值 |
|
length/width/height |
decimal(12,3) |
长宽高 |
|
volume |
decimal(18,6) |
体积 |
|
weight |
decimal(12,3) |
重量 |
|
unit_name |
varchar(20) |
单位 |
|
audit_state |
tinyint |
审核状态 |
|
audit_id/audit_date |
bigint |
审核信息 |
|
enabled/del_flag/dept_id |
tinyint/bigint |
公共字段 |
10.x box_inventory(周转物库存汇总表)
|
字段名 |
字段类型 |
字段说明 |
|
id |
bigint |
主键 |
|
dept_id |
bigint |
机构ID |
|
workhouse_id |
bigint |
仓库ID |
|
box_id |
bigint |
周转物ID |
|
stock_qty |
int |
当前库存 |
|
available_qty |
int |
可用数量 |
|
locked_qty |
int |
锁定数量 |
|
out_total_qty |
int |
累计发出 |
|
return_total_qty |
int |
累计归还 |
|
buy_total_qty |
int |
累计购入 |
|
damage_total_qty |
int |
累计报损 |
|
destroy_total_qty |
int |
累计销毁 |
|
customer_occupy_qty |
int |
客户占用 |
|
driver_hold_qty |
int |
司机暂存 |
|
version |
int |
乐观锁 |
10.x box_out_bill(周转物发出主表)
|
字段名 |
字段类型 |
字段说明 |
|
id |
bigint |
主键 |
|
out_code |
varchar(64) |
发出单号 |
|
out_date |
bigint |
发出日期 |
|
source_type |
tinyint |
来源类型 |
|
source_code |
varchar(64) |
来源单号 |
|
delivery_task_id |
bigint |
配送任务ID |
|
route_id |
bigint |
线路ID |
|
driver_id |
bigint |
司机ID |
|
vehicle_id |
bigint |
车辆ID |
|
shop_id |
bigint |
客户ID |
|
workhouse_id |
bigint |
发出仓库 |
|
opt_type |
tinyint |
周转/押金 |
|
total_qty |
int |
总数量 |
|
total_amount |
decimal(12,3) |
总金额 |
|
bill_state |
tinyint |
单据状态 |
|
audit_id/audit_date |
bigint |
审核信息 |
10.x box_out_bill_detail(周转物发出明细表)
|
字段名 |
字段类型 |
字段说明 |
|
id |
bigint |
主键 |
|
out_code |
varchar(64) |
发出单号 |
|
box_id |
bigint |
周转物ID |
|
out_qty |
int |
发出数量 |
|
deposit_price |
decimal(12,3) |
押金单价 |
|
out_amount |
decimal(12,3) |
发出金额 |
|
source_order_id |
bigint |
来源订单ID |
|
source_order_code |
varchar(64) |
来源订单号 |
|
source_order_info_id |
bigint |
来源订单明细ID |
|
customer_point_id |
bigint |
客户配送点ID |
|
return_qty |
int |
已归还 |
|
unreturn_qty |
int |
未归还 |
|
damage_qty/lost_qty |
int |
损坏/丢失 |
10.x box_return_bill(周转物归还主表)
|
字段名 |
字段类型 |
字段说明 |
|
id |
bigint |
主键 |
|
return_code |
varchar(64) |
归还单号 |
|
return_date |
bigint |
归还日期 |
|
source_type |
tinyint |
来源类型 |
|
source_code |
varchar(64) |
来源单号 |
|
delivery_task_id |
bigint |
配送任务ID |
|
route_id |
bigint |
线路ID |
|
driver_id |
bigint |
司机ID |
|
vehicle_id |
bigint |
车辆ID |
|
shop_id |
bigint |
客户ID |
|
workhouse_id |
bigint |
归还仓库 |
|
opt_type |
tinyint |
周转/押金 |
|
total_qty |
int |
总数量 |
|
total_amount |
decimal(12,3) |
释放/退还金额 |
|
bill_state |
tinyint |
单据状态 |
10.x box_return_bill_detail(周转物归还明细表)
|
字段名 |
字段类型 |
字段说明 |
|
id |
bigint |
主键 |
|
return_code |
varchar(64) |
归还单号 |
|
out_code |
varchar(64) |
原发出单号 |
|
out_detail_id |
bigint |
原发出明细ID |
|
box_id |
bigint |
周转物ID |
|
return_qty |
int |
归还数量 |
|
normal_qty |
int |
完好数量 |
|
damage_qty |
int |
损坏数量 |
|
lost_qty |
int |
丢失数量 |
|
deposit_price |
decimal(12,3) |
押金单价 |
|
return_amount |
decimal(12,3) |
释放押金金额 |
|
damage_amount |
decimal(12,3) |
赔偿金额 |
|
image_url |
varchar(500) |
图片附件 |
10.x box_customer_balance(客户周转物余额表)
|
字段名 |
字段类型 |
字段说明 |
|
id |
bigint |
主键 |
|
dept_id |
bigint |
机构ID |
|
shop_id |
bigint |
客户ID |
|
box_id |
bigint |
周转物ID |
|
out_qty |
int |
累计借出 |
|
return_qty |
int |
累计归还 |
|
unreturn_qty |
int |
当前未还 |
|
damage_qty |
int |
损坏 |
|
lost_qty |
int |
丢失 |
|
deposit_amount |
decimal(12,3) |
押金占用 |
|
compensate_amount |
decimal(12,3) |
赔偿累计 |
|
last_out_date/last_return_date |
bigint |
最近借出/归还 |
|
version |
int |
乐观锁 |
10.x box_driver_balance(司机周转物暂存表)
|
字段名 |
字段类型 |
字段说明 |
|
id |
bigint |
主键 |
|
dept_id |
bigint |
机构ID |
|
driver_id |
bigint |
司机ID |
|
vehicle_id |
bigint |
车辆ID |
|
delivery_task_id |
bigint |
配送任务ID |
|
box_id |
bigint |
周转物ID |
|
load_qty |
int |
装车数量 |
|
delivered_qty |
int |
已交付客户 |
|
recovered_qty |
int |
回收数量 |
|
returned_warehouse_qty |
int |
回仓交回 |
|
hold_qty |
int |
司机暂存 |
10.x box_inventory_flow(周转物库存流水表)
|
字段名 |
字段类型 |
字段说明 |
|
id |
bigint |
主键 |
|
flow_code |
varchar(64) |
流水号 |
|
dept_id/workhouse_id/box_id |
bigint |
机构/仓库/周转物 |
|
biz_type |
tinyint |
业务类型 |
|
source_code |
varchar(64) |
来源单号 |
|
source_detail_id |
bigint |
来源明细ID |
|
shop_id |
bigint |
客户ID |
|
driver_id |
bigint |
司机ID |
|
before_qty |
int |
变动前数量 |
|
change_qty |
int |
变动数量 |
|
after_qty |
int |
变动后数量 |
|
unit_amount |
decimal(12,3) |
单价/押金 |
|
change_amount |
decimal(12,3) |
变动金额 |
|
biz_date |
bigint |
业务时间 |
|
idempotent_key |
varchar(128) |
幂等键 |
11. 库存与押金核心规则
|
规则 |
公式/处理 |
说明 |
|
当前可用库存 |
available_qty = stock_qty - locked_qty |
发出审核前必须校验可用库存。 |
|
发出审核 |
stock_qty -= out_qty;out_total_qty += out_qty;customer.unreturn_qty += out_qty |
押金模式下同时增加 deposit_amount。 |
|
归还审核 |
stock_qty += normal_qty;return_total_qty += return_qty;customer.unreturn_qty -= return_qty |
损坏/丢失数量不直接进入正常库存。 |
|
押金占用 |
deposit_amount += out_qty × deposit_price |
仅 opt_type=2 时执行。 |
|
押金释放 |
deposit_amount -= normal_return_qty × deposit_price |
归还完好数量释放。 |
|
损坏赔偿 |
damage_amount = damage_qty × compensation_price |
赔偿价格可取押金单价或资产价值。 |
|
流水幂等 |
同一来源单据+明细+动作只能写一条 flow |
唯一索引 idempotent_key 保证。 |
注意:周转物库存不参与商品成本核算,不走 product_sku_id + unit_id 商品库存主口径;它是物流资产数量管理。
12. 后端接口设计
接口命名遵循升鲜宝后端对象命名规范:请求对象使用 Req 前缀,返回对象使用 Resp 前缀;Service 接口不返回 Result,Controller 层再统一包装 Result。
|
方法 |
接口地址 |
请求对象 |
返回对象 |
说明 |
|
POST |
/admin/box/type/page |
ReqBoxTypePage |
RespBoxTypePage |
周转物类型分页查询 |
|
POST |
/admin/box/type/save |
ReqBoxTypeSave |
RespId |
新增/修改周转物类型 |
|
POST |
/admin/box/item/page |
ReqBoxItemPage |
RespBoxItemPage |
周转物资料分页查询 |
|
POST |
/admin/box/item/save |
ReqBoxItemSave |
RespId |
保存周转物资料 |
|
POST |
/admin/box/item/audit |
ReqBoxItemAudit |
RespBoolean |
审核/反审核周转物资料 |
|
POST |
/admin/box/inventory/page |
ReqBoxInventoryPage |
RespBoxInventoryPage |
周转物库存查询 |
|
POST |
/admin/box/out/createByDelivery |
ReqBoxOutCreateByDelivery |
RespBoxOutBill |
按配送任务生成发出单 |
|
POST |
/admin/box/out/save |
ReqBoxOutSave |
RespId |
手工保存发出单 |
|
POST |
/admin/box/out/audit |
ReqBoxOutAudit |
RespBoolean |
审核发出单,扣库存、增客户占用 |
|
POST |
/admin/box/return/save |
ReqBoxReturnSave |
RespId |
保存归还单 |
|
POST |
/admin/box/return/audit |
ReqBoxReturnAudit |
RespBoolean |
审核归还单,增库存、减客户占用 |
|
POST |
/admin/box/customerBalance/page |
ReqBoxCustomerBalancePage |
RespBoxCustomerBalancePage |
客户周转物余额查询 |
|
POST |
/admin/box/flow/page |
ReqBoxFlowPage |
RespBoxFlowPage |
周转物流水查询 |
|
POST |
/b2bmall/box/customer/balance |
ReqBoxCustomerBalanceQuery |
RespBoxCustomerBalance |
客户订货端查看未还/押金 |
|
POST |
/driver/box/recycle/save |
ReqDriverBoxRecycleSave |
RespId |
司机端配送签收时登记回收 |
12.1 关键请求对象字段建议
|
请求对象 |
核心字段 |
|
ReqBoxOutCreateByDelivery |
deliveryTaskId, routeId, driverId, vehicleId, workhouseId, shopIdList, autoRecommendFlag |
|
ReqBoxOutSave |
outCode, sourceType, sourceCode, deliveryTaskId, routeId, driverId, vehicleId, shopId, workhouseId, optType, detailList |
|
ReqBoxOutAudit |
outCode, auditFlag, auditRemark, idempotentToken |
|
ReqBoxReturnSave |
returnCode, sourceType, deliveryTaskId, driverId, vehicleId, shopId, workhouseId, optType, detailList |
|
ReqDriverBoxRecycleSave |
deliveryTaskId, customerPointId, shopId, driverId, boxList, imageList, signRemark |
|
ReqBoxCustomerBalancePage |
shopId, boxId, unreturnOnlyFlag, optType, beginDate, endDate, page, limit |
13. Service 与领域服务设计
|
服务类 |
职责 |
关键方法 |
|
BoxItemService |
周转物资料管理。 |
saveBoxItem, auditBoxItem, disableBoxItem, pageBoxItem |
|
BoxInventoryService |
库存汇总查询与安全更新。 |
getOrCreateInventory, increaseStock, decreaseStock, lockStock, unlockStock |
|
BoxOutBillService |
发出单主流程。 |
createByDeliveryTask, saveOutBill, auditOutBill, reverseAuditOutBill |
|
BoxReturnBillService |
归还单主流程。 |
saveReturnBill, auditReturnBill, reverseAuditReturnBill |
|
BoxBalanceService |
客户余额与司机暂存。 |
increaseCustomerOccupy, decreaseCustomerOccupy, updateDriverHold |
|
BoxFlowService |
统一流水落库与幂等校验。 |
writeFlowOnce, buildIdempotentKey, listFlow |
|
BoxRecommendService |
按订单体积重量推荐周转物。 |
recommendByOrder, recommendByCustomerPoint, recommendByDeliveryTask |
审核流程建议通过一个领域编排服务完成,例如 BoxPostingService,避免库存、客户余额、司机暂存、押金、流水散落在多个 Controller 或 ServiceImpl 中。
public interface BoxPostingService {
void auditOutBill(String outCode, Long auditUserId);
void reverseAuditOutBill(String outCode, Long auditUserId);
void auditReturnBill(String returnCode, Long auditUserId);
void reverseAuditReturnBill(String returnCode, Long auditUserId);
void postOperationBill(String operationCode, Long auditUserId);
}
14. 幂等、并发与数据一致性
• 发出审核、归还审核、购入审核、报损审核都必须使用事务。
• 库存更新使用 where version = oldVersion 或 MyBatis-Plus 乐观锁,避免并发扣成负数。
• 审核前校验 bill_state,只有待审核单据允许审核。
• 审核动作写入 box_inventory_flow,幂等键唯一,重复请求直接返回成功或提示已处理。
• 所有余额表都是汇总表,最终以 box_inventory_flow 作为审计依据。
• 反审核不删除原流水,而是写反向流水,保证审计链完整。
• 发出审核时,如果 available_qty 小于 out_qty,应阻止审核或进入人工确认流程。
15. 与配送、订单、财务模块联动
|
模块 |
联动点 |
实现建议 |
|
OMS订单 |
订单进入配送池后,按客户配送点聚合商品体积、重量、温控要求。 |
订单明细提供 sku_unit_id、数量、体积、重量,供 BoxRecommendService 推荐周转物。 |
|
物流配送 |
配送任务生成周转物发出单,司机端签收时登记归还。 |
box_out_bill 关联 delivery_task_id、route_id、driver_id、vehicle_id。 |
|
客户资料 |
客户可配置默认周转模式/押金模式、是否必须回收、押金规则。 |
可在客户扩展配置或新增 box_customer_policy 表。 |
|
财务/客户余额 |
押金占用、释放、赔偿扣款。 |
押金流水可单独落财务表,box 表保存业务依据。 |
|
打印/小票 |
配送单打印显示本次发出箱数、历史未还箱数、应回收箱数。 |
配送打印模板增加 boxList。 |
|
消息提醒 |
客户长期未归还、司机未交回、库存不足触发提醒。 |
接入统一消息组件。 |
16. 后台页面与司机端功能
|
端 |
页面/功能 |
主要字段/操作 |
|
后台 |
周转物类型 |
类型编码、类型名称、排序、启用/禁用。 |
|
后台 |
周转物资料 |
编码、名称、类型、押金单价、资产价值、长宽高、体积、重量、审核。 |
|
后台 |
周转物库存 |
仓库、周转物、当前库存、可用、客户占用、司机暂存、累计发出/归还。 |
|
后台 |
周转物发出 |
来源单号、配送任务、客户、司机、车辆、周转物明细、审核、打印。 |
|
后台 |
周转物归还 |
客户、司机、归还明细、完好/损坏/丢失、照片、审核。 |
|
后台 |
客户周转物账本 |
客户、周转物、累计发出、累计归还、当前未还、押金占用、赔偿。 |
|
后台 |
周转物流水 |
业务类型、来源单号、变动前、变动数、变动后、操作人。 |
|
司机端 |
配送签收回收 |
展示应送/应回,录入回收数量,拍照,客户确认。 |
|
客户端 |
我的周转物 |
查看未归还数量、押金占用、历史发出/归还。 |
17. 分阶段落地计划
|
阶段 |
目标 |
开发内容 |
风险控制 |
|
第一阶段 |
在现有 tms_box_* 基础上补齐闭环 |
补客户余额、司机暂存、流水;发出归还继续兼容老表。 |
不大改原业务,先解决对账和追溯。 |
|
第二阶段 |
发出/归还单据主从化 |
新增 box_out_bill/detail、box_return_bill/detail,兼容迁移历史数据。 |
通过适配层读取新旧表,逐步切换。 |
|
第三阶段 |
配送深度集成 |
配送任务生成发出单,司机端签收回收,配送单打印箱数。 |
先在部分线路试点,校验客户未还准确性。 |
|
第四阶段 |
押金与财务闭环 |
押金占用、释放、扣罚、客户对账。 |
明确财务入账口径,避免重复应收。 |
|
第五阶段 |
盘点和预警 |
周转物盘点、盘盈盘亏、超期未还提醒、库存不足预警。 |
以流水为准,余额表可重算。 |
18. 测试用例清单
|
测试场景 |
前置条件 |
操作 |
期望结果 |
|
购入审核 |
周转物资料已审核 |
新增购入单并审核 |
库存增加,流水 biz_type=3。 |
|
发出审核 |
库存充足,客户存在 |
按配送任务生成发出单并审核 |
库存减少,客户未还增加,押金占用增加。 |
|
库存不足发出 |
available_qty 小于发出数量 |
审核发出单 |
系统阻止审核并提示库存不足。 |
|
正常归还 |
客户存在未还数量 |
录入归还并审核 |
库存增加,客户未还减少,押金释放。 |
|
损坏归还 |
客户归还损坏箱 |
录入 damage_qty 并审核 |
正常库存不增加损坏数量,生成赔偿/报损。 |
|
重复审核 |
同一单据重复点击审核 |
连续提交审核请求 |
只影响库存一次,幂等键拦截重复流水。 |
|
反审核 |
已审核发出单 |
执行反审核 |
写反向流水,恢复库存和客户余额。 |
|
司机回仓交接 |
司机回收多个客户周转物 |
回仓确认 |
司机暂存减少,仓库库存增加。 |
附录 A:建议 box_ 核心表 MySQL 8.0 DDL
以下 DDL 为建议核心表,实际落地时可结合现有统一字段、租户字段、审计字段、数据权限字段进行微调。
CREATE TABLE `box_type` (
`id` bigint NOT NULL COMMENT '主键ID',
`type_code` varchar(64) NOT NULL COMMENT '类型编码',
`type_name` varchar(100) NOT NULL COMMENT '类型名称',
`sort_code` int NOT NULL DEFAULT 1 COMMENT '排序码',
`enabled` tinyint NOT NULL DEFAULT 1 COMMENT '1启用 0禁用',
`del_flag` tinyint NOT NULL DEFAULT 0 COMMENT '0正常 1删除',
`dept_id` bigint DEFAULT 0 COMMENT '机构ID',
`creator` bigint DEFAULT 0 COMMENT '创建人ID',
`create_date` bigint DEFAULT NULL COMMENT '创建时间',
`updater` bigint DEFAULT 0 COMMENT '修改人ID',
`update_date` bigint DEFAULT NULL COMMENT '修改时间',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_dept_type_code` (`dept_id`,`type_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='周转物类型表';
CREATE TABLE `box_item` (
`id` bigint NOT NULL COMMENT '主键ID',
`box_type_id` bigint NOT NULL COMMENT '周转物类型ID',
`box_code` varchar(64) NOT NULL COMMENT '周转物编码',
`box_name` varchar(100) NOT NULL COMMENT '周转物名称',
`deposit_price` decimal(12,3) NOT NULL DEFAULT 0.000 COMMENT '押金单价',
`asset_price` decimal(12,3) NOT NULL DEFAULT 0.000 COMMENT '资产价值',
`length` decimal(12,3) DEFAULT 0.000 COMMENT '长',
`width` decimal(12,3) DEFAULT 0.000 COMMENT '宽',
`height` decimal(12,3) DEFAULT 0.000 COMMENT '高',
`volume` decimal(18,6) DEFAULT 0.000000 COMMENT '体积',
`weight` decimal(12,3) DEFAULT 0.000 COMMENT '重量',
`unit_name` varchar(20) DEFAULT '个' COMMENT '单位名称',
`audit_state` tinyint NOT NULL DEFAULT 0 COMMENT '0待审核 1已审核 -1作废',
`audit_id` bigint DEFAULT 0 COMMENT '审核人ID',
`audit_date` bigint DEFAULT NULL COMMENT '审核时间',
`enabled` tinyint NOT NULL DEFAULT 1 COMMENT '1启用 0禁用',
`del_flag` tinyint NOT NULL DEFAULT 0 COMMENT '0正常 1删除',
`dept_id` bigint DEFAULT 0 COMMENT '机构ID',
`creator` bigint DEFAULT 0 COMMENT '创建人ID',
`create_date` bigint DEFAULT NULL COMMENT '创建时间',
`updater` bigint DEFAULT 0 COMMENT '修改人ID',
`update_date` bigint DEFAULT NULL COMMENT '修改时间',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_dept_box_code` (`dept_id`,`box_code`),
KEY `idx_box_type_id` (`box_type_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='周转物资料表';
CREATE TABLE `box_inventory` (
`id` bigint NOT NULL COMMENT '主键ID',
`dept_id` bigint NOT NULL DEFAULT 0 COMMENT '机构ID',
`workhouse_id` bigint NOT NULL DEFAULT 0 COMMENT '仓库ID',
`box_id` bigint NOT NULL COMMENT '周转物ID',
`stock_qty` int NOT NULL DEFAULT 0 COMMENT '当前库存',
`available_qty` int NOT NULL DEFAULT 0 COMMENT '可用数量',
`locked_qty` int NOT NULL DEFAULT 0 COMMENT '锁定数量',
`out_total_qty` int NOT NULL DEFAULT 0 COMMENT '累计发出数量',
`return_total_qty` int NOT NULL DEFAULT 0 COMMENT '累计归还数量',
`buy_total_qty` int NOT NULL DEFAULT 0 COMMENT '累计购入数量',
`damage_total_qty` int NOT NULL DEFAULT 0 COMMENT '累计报损数量',
`destroy_total_qty` int NOT NULL DEFAULT 0 COMMENT '累计销毁数量',
`customer_occupy_qty` int NOT NULL DEFAULT 0 COMMENT '客户占用数量',
`driver_hold_qty` int NOT NULL DEFAULT 0 COMMENT '司机暂存数量',
`version` int NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
`enabled` tinyint NOT NULL DEFAULT 1 COMMENT '1启用 0禁用',
`del_flag` tinyint NOT NULL DEFAULT 0 COMMENT '0正常 1删除',
`creator` bigint DEFAULT 0 COMMENT '创建人ID',
`create_date` bigint DEFAULT NULL COMMENT '创建时间',
`updater` bigint DEFAULT 0 COMMENT '修改人ID',
`update_date` bigint DEFAULT NULL COMMENT '修改时间',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_dept_wh_box` (`dept_id`,`workhouse_id`,`box_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='周转物库存汇总表';
CREATE TABLE `box_out_bill` (
`id` bigint NOT NULL COMMENT '主键ID',
`out_code` varchar(64) NOT NULL COMMENT '发出单号',
`out_date` bigint DEFAULT NULL COMMENT '发出日期',
`source_type` tinyint NOT NULL DEFAULT 3 COMMENT '来源类型 1订单 2配送任务 3手工',
`source_code` varchar(64) DEFAULT NULL COMMENT '来源单号',
`delivery_task_id` bigint DEFAULT NULL COMMENT '配送任务ID',
`route_id` bigint DEFAULT NULL COMMENT '线路ID',
`driver_id` bigint DEFAULT NULL COMMENT '司机ID',
`vehicle_id` bigint DEFAULT NULL COMMENT '车辆ID',
`shop_id` bigint DEFAULT NULL COMMENT '客户ID',
`workhouse_id` bigint NOT NULL DEFAULT 0 COMMENT '发出仓库ID',
`opt_type` tinyint NOT NULL DEFAULT 1 COMMENT '1周转 2押金',
`total_qty` int NOT NULL DEFAULT 0 COMMENT '发出总数量',
`total_amount` decimal(12,3) NOT NULL DEFAULT 0.000 COMMENT '押金/借出金额',
`bill_state` tinyint NOT NULL DEFAULT 0 COMMENT '0待审核 1已审核 -1作废',
`audit_id` bigint DEFAULT 0 COMMENT '审核人ID',
`audit_date` bigint DEFAULT NULL COMMENT '审核时间',
`enabled` tinyint NOT NULL DEFAULT 1 COMMENT '1启用 0禁用',
`del_flag` tinyint NOT NULL DEFAULT 0 COMMENT '0正常 1删除',
`dept_id` bigint DEFAULT 0 COMMENT '机构ID',
`creator` bigint DEFAULT 0 COMMENT '创建人ID',
`create_date` bigint DEFAULT NULL COMMENT '创建时间',
`updater` bigint DEFAULT 0 COMMENT '修改人ID',
`update_date` bigint DEFAULT NULL COMMENT '修改时间',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_out_code` (`out_code`),
KEY `idx_shop_date` (`shop_id`,`out_date`),
KEY `idx_delivery_task` (`delivery_task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='周转物发出主表';
CREATE TABLE `box_out_bill_detail` (
`id` bigint NOT NULL COMMENT '主键ID',
`out_code` varchar(64) NOT NULL COMMENT '发出单号',
`box_id` bigint NOT NULL COMMENT '周转物ID',
`out_qty` int NOT NULL DEFAULT 0 COMMENT '发出数量',
`deposit_price` decimal(12,3) NOT NULL DEFAULT 0.000 COMMENT '押金单价',
`out_amount` decimal(12,3) NOT NULL DEFAULT 0.000 COMMENT '发出金额',
`source_order_id` bigint DEFAULT NULL COMMENT '来源订单ID',
`source_order_code` varchar(64) DEFAULT NULL COMMENT '来源订单号',
`source_order_info_id` bigint DEFAULT NULL COMMENT '来源订单明细ID',
`customer_point_id` bigint DEFAULT NULL COMMENT '客户配送点ID',
`return_qty` int NOT NULL DEFAULT 0 COMMENT '已归还数量',
`unreturn_qty` int NOT NULL DEFAULT 0 COMMENT '未归还数量',
`damage_qty` int NOT NULL DEFAULT 0 COMMENT '损坏数量',
`lost_qty` int NOT NULL DEFAULT 0 COMMENT '丢失数量',
`enabled` tinyint NOT NULL DEFAULT 1 COMMENT '1启用 0禁用',
`del_flag` tinyint NOT NULL DEFAULT 0 COMMENT '0正常 1删除',
`creator` bigint DEFAULT 0 COMMENT '创建人ID',
`create_date` bigint DEFAULT NULL COMMENT '创建时间',
`updater` bigint DEFAULT 0 COMMENT '修改人ID',
`update_date` bigint DEFAULT NULL COMMENT '修改时间',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_out_code` (`out_code`),
KEY `idx_box_id` (`box_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='周转物发出明细表';
CREATE TABLE `box_return_bill` (
`id` bigint NOT NULL COMMENT '主键ID',
`return_code` varchar(64) NOT NULL COMMENT '归还单号',
`return_date` bigint DEFAULT NULL COMMENT '归还日期',
`source_type` tinyint NOT NULL DEFAULT 1 COMMENT '来源类型 1司机回收 2客户主动归还 3手工',
`source_code` varchar(64) DEFAULT NULL COMMENT '来源单号',
`delivery_task_id` bigint DEFAULT NULL COMMENT '配送任务ID',
`route_id` bigint DEFAULT NULL COMMENT '线路ID',
`driver_id` bigint DEFAULT NULL COMMENT '司机ID',
`vehicle_id` bigint DEFAULT NULL COMMENT '车辆ID',
`shop_id` bigint DEFAULT NULL COMMENT '客户ID',
`workhouse_id` bigint NOT NULL DEFAULT 0 COMMENT '归还仓库ID',
`opt_type` tinyint NOT NULL DEFAULT 1 COMMENT '1周转 2押金',
`total_qty` int NOT NULL DEFAULT 0 COMMENT '归还总数量',
`total_amount` decimal(12,3) NOT NULL DEFAULT 0.000 COMMENT '释放/退还押金金额',
`bill_state` tinyint NOT NULL DEFAULT 0 COMMENT '0待审核 1已审核 -1作废',
`audit_id` bigint DEFAULT 0 COMMENT '审核人ID',
`audit_date` bigint DEFAULT NULL COMMENT '审核时间',
`enabled` tinyint NOT NULL DEFAULT 1 COMMENT '1启用 0禁用',
`del_flag` tinyint NOT NULL DEFAULT 0 COMMENT '0正常 1删除',
`dept_id` bigint DEFAULT 0 COMMENT '机构ID',
`creator` bigint DEFAULT 0 COMMENT '创建人ID',
`create_date` bigint DEFAULT NULL COMMENT '创建时间',
`updater` bigint DEFAULT 0 COMMENT '修改人ID',
`update_date` bigint DEFAULT NULL COMMENT '修改时间',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_return_code` (`return_code`),
KEY `idx_shop_date` (`shop_id`,`return_date`),
KEY `idx_delivery_task` (`delivery_task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='周转物归还主表';
CREATE TABLE `box_return_bill_detail` (
`id` bigint NOT NULL COMMENT '主键ID',
`return_code` varchar(64) NOT NULL COMMENT '归还单号',
`out_code` varchar(64) DEFAULT NULL COMMENT '原发出单号',
`out_detail_id` bigint DEFAULT NULL COMMENT '原发出明细ID',
`box_id` bigint NOT NULL COMMENT '周转物ID',
`return_qty` int NOT NULL DEFAULT 0 COMMENT '归还数量',
`normal_qty` int NOT NULL DEFAULT 0 COMMENT '完好数量',
`damage_qty` int NOT NULL DEFAULT 0 COMMENT '损坏数量',
`lost_qty` int NOT NULL DEFAULT 0 COMMENT '丢失数量',
`deposit_price` decimal(12,3) NOT NULL DEFAULT 0.000 COMMENT '押金单价',
`return_amount` decimal(12,3) NOT NULL DEFAULT 0.000 COMMENT '释放押金金额',
`damage_amount` decimal(12,3) NOT NULL DEFAULT 0.000 COMMENT '损坏赔偿金额',
`image_url` varchar(500) DEFAULT NULL COMMENT '图片附件',
`enabled` tinyint NOT NULL DEFAULT 1 COMMENT '1启用 0禁用',
`del_flag` tinyint NOT NULL DEFAULT 0 COMMENT '0正常 1删除',
`creator` bigint DEFAULT 0 COMMENT '创建人ID',
`create_date` bigint DEFAULT NULL COMMENT '创建时间',
`updater` bigint DEFAULT 0 COMMENT '修改人ID',
`update_date` bigint DEFAULT NULL COMMENT '修改时间',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_return_code` (`return_code`),
KEY `idx_out_detail` (`out_detail_id`),
KEY `idx_box_id` (`box_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='周转物归还明细表';
CREATE TABLE `box_customer_balance` (
`id` bigint NOT NULL COMMENT '主键ID',
`dept_id` bigint NOT NULL DEFAULT 0 COMMENT '机构ID',
`shop_id` bigint NOT NULL COMMENT '客户ID',
`box_id` bigint NOT NULL COMMENT '周转物ID',
`out_qty` int NOT NULL DEFAULT 0 COMMENT '累计借出数量',
`return_qty` int NOT NULL DEFAULT 0 COMMENT '累计归还数量',
`unreturn_qty` int NOT NULL DEFAULT 0 COMMENT '当前未还数量',
`damage_qty` int NOT NULL DEFAULT 0 COMMENT '损坏数量',
`lost_qty` int NOT NULL DEFAULT 0 COMMENT '丢失数量',
`deposit_amount` decimal(12,3) NOT NULL DEFAULT 0.000 COMMENT '当前押金占用金额',
`compensate_amount` decimal(12,3) NOT NULL DEFAULT 0.000 COMMENT '累计赔偿金额',
`last_out_date` bigint DEFAULT NULL COMMENT '最近借出时间',
`last_return_date` bigint DEFAULT NULL COMMENT '最近归还时间',
`version` int NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
`enabled` tinyint NOT NULL DEFAULT 1 COMMENT '1启用 0禁用',
`del_flag` tinyint NOT NULL DEFAULT 0 COMMENT '0正常 1删除',
`creator` bigint DEFAULT 0 COMMENT '创建人ID',
`create_date` bigint DEFAULT NULL COMMENT '创建时间',
`updater` bigint DEFAULT 0 COMMENT '修改人ID',
`update_date` bigint DEFAULT NULL COMMENT '修改时间',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_shop_box` (`dept_id`,`shop_id`,`box_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户周转物余额表';
CREATE TABLE `box_inventory_flow` (
`id` bigint NOT NULL COMMENT '主键ID',
`flow_code` varchar(64) NOT NULL COMMENT '流水号',
`dept_id` bigint NOT NULL DEFAULT 0 COMMENT '机构ID',
`workhouse_id` bigint NOT NULL DEFAULT 0 COMMENT '仓库ID',
`box_id` bigint NOT NULL COMMENT '周转物ID',
`biz_type` tinyint NOT NULL COMMENT '1借出 2归还 3购入 4销毁 5报损 6盘盈 7盘亏 8调整',
`source_code` varchar(64) DEFAULT NULL COMMENT '来源单号',
`source_detail_id` bigint DEFAULT NULL COMMENT '来源明细ID',
`shop_id` bigint DEFAULT NULL COMMENT '客户ID',
`driver_id` bigint DEFAULT NULL COMMENT '司机ID',
`before_qty` int NOT NULL DEFAULT 0 COMMENT '变动前数量',
`change_qty` int NOT NULL DEFAULT 0 COMMENT '变动数量,出库为负,入库为正',
`after_qty` int NOT NULL DEFAULT 0 COMMENT '变动后数量',
`unit_amount` decimal(12,3) NOT NULL DEFAULT 0.000 COMMENT '单个价值或押金',
`change_amount` decimal(12,3) NOT NULL DEFAULT 0.000 COMMENT '变动金额',
`biz_date` bigint DEFAULT NULL COMMENT '业务时间',
`idempotent_key` varchar(128) NOT NULL COMMENT '幂等键',
`creator` bigint DEFAULT 0 COMMENT '创建人ID',
`create_date` bigint DEFAULT NULL COMMENT '创建时间',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_idempotent_key` (`idempotent_key`),
KEY `idx_box_biz_date` (`box_id`,`biz_date`),
KEY `idx_source_code` (`source_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='周转物库存流水表';
附录 B:术语表
|
术语 |
说明 |
|
周转物 |
可重复使用的物流包装/容器资产,如周转箱、保温箱、托盘等。 |
|
客户占用 |
客户已收到但未归还的周转物数量。 |
|
司机暂存 |
司机配送或回收后尚未交回仓库的周转物数量。 |
|
押金占用 |
押金模式下客户未归还周转物对应的押金金额。 |
|
发出单 |
从公司仓库或配送任务发出周转物的业务单据。 |
|
归还单 |
客户或司机归还周转物的业务单据。 |
|
库存流水 |
记录周转物库存每一次变动的审计流水。 |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)