文档目录
仓储管理表

简介

本文件面向电商平台开发者,聚焦 DouPHP 电商系统的“仓储管理”数据模型与业务逻辑。当前仓库主表 dou_warehouse 在代码库中未直接实现,但系统已具备库存、订单锁定、商品库存字段等基础能力。本文基于现有数据库结构与代码行为,给出:

  • 仓库主表 dou_warehouse 的推荐表结构设计(字段、索引、约束)
  • 多仓库管理的业务规则(层级、状态、权限)
  • 仓库与商品、供应商、订单的关联设计
  • 仓库选址优化、库存分布策略、调拨管理的技术方案
  • 与现有库存/订单流程的集成建议

项目结构

DouPHP 采用模块化组织,仓储相关能力主要分布在以下位置:

  • 数据库定义:系统表结构文档与各模块 backup SQL
  • 商品模型:产品表 product 含 stock 字段,作为库存主数据
  • 订单流程:下单时根据配置决定是否锁定库存,并写入订单表
  • 购物车:加入购物车前进行库存校验
graph TB
A["商品模块<br/>product 表"] --> B["订单模块<br/>order 表"]
A --> C["购物车服务<br/>CartService"]
B --> D["结账服务<br/>CheckoutService"]
C --> E["库存校验"]
D --> F["库存锁定开关"]

核心组件

  • 商品库存主数据:product.stock 表示商品总库存,用于全局可售量展示与校验
  • 订单库存锁定:order.stock_lock 表示订单是否锁定库存,配合站点配置控制下单锁库行为
  • 购物车库存校验:加入购物车时调用 checkStock 校验可购数量,避免超卖

架构总览

下图展示了从购物车到下单的库存相关流程,以及未来引入多仓库后的扩展点。

sequenceDiagram
participant U as "用户"
participant C as "购物车服务"
participant P as "商品模型"
participant O as "结账服务"
participant DB as "数据库"
U->>C : "加入购物车(商品ID, 数量)"
C->>P : "checkStock(模块, 商品ID, 数量)"
P-->>C : "返回校验结果"
C-->>U : "加入成功/失败"
U->>O : "提交订单"
O->>DB : "读取站点库存配置"
alt "开启库存锁定"
O->>DB : "写入订单并设置 stock_lock=1"
else "关闭库存锁定"
O->>DB : "写入订单并设置 stock_lock=0"
end
O-->>U : "返回订单号"

详细组件分析

仓库主表 dou_warehouse 设计

说明:当前代码库未包含 dou_warehouse 表定义。以下为基于现有库存与订单能力的推荐设计,便于后续扩展多仓库管理。

  • 基本信息

    • id: 主键
    • name: 仓库名称
    • code: 仓库编码(唯一)
    • type: 仓库类型(中心仓/区域仓/门店仓/虚拟仓)
    • status: 状态(启用/停用/冻结)
    • level: 层级(总部/大区/城市/门店)
    • parent_id: 父仓库ID(支持树形结构)
    • owner_type, owner_id: 负责人类型与ID(管理员/工作台/供应商)
    • contact_name, contact_phone, contact_email: 联系人信息
    • address_province, address_city, address_district, address_detail: 地址信息
    • lat, lng: 经纬度(用于就近发货与配送时效估算)
    • area_code: 地区编码(与系统区域表关联)
  • 容量与作业能力

    • capacity_total: 总容量(体积或件数)
    • capacity_used: 已用容量
    • capacity_mode: 容量模式(绝对值/增量/减量)
    • max_order_per_day: 日最大处理单量
    • support_types: 支持的业务类型(现货/预售/代发/自提)
    • is_default: 是否默认仓库(用于自动分配)
  • 运营与审计

    • sort: 排序
    • created_at, updated_at: 时间戳
    • remark: 备注
  • 索引建议

    • 唯一索引:code
    • 普通索引:parent_id、status、type、area_code、is_default
    • 空间索引:lat, lng(可选,按数据库支持)

多仓库管理业务逻辑

  • 仓库层级关系

    • 通过 parent_id 构建仓库树,支持总部-大区-城市-门店的多级管理
    • 子仓库继承父仓库的配置(如默认发货地、默认物流),可通过覆盖字段调整
  • 仓库状态管理

    • 启用:参与自动分配与下单选择
    • 停用:仅可见不可选
    • 冻结:暂停出入库操作,保留历史数据
  • 仓库权限控制

    • 通过 owner_type/owner_id 绑定责任主体(管理员/工作台/供应商)
    • 结合平台权限体系,限制不同角色对仓库的查看、编辑、出库权限
    • 建议增加仓库-角色/工作台的授权表,实现细粒度控制

仓库与商品、供应商、订单的关联

  • 仓库与商品

    • 建议在 product_stock_by_warehouse 表中记录每个仓库的商品可售库存、在途库存、锁定库存
    • 商品主库存 product.stock 可作为全局汇总,或由各仓库库存聚合计算
  • 仓库与供应商

    • 供应商入库单关联 supplier_inbound 表,指定入库仓库、供应商、商品、数量
    • 支持供应商直发(drop shipping)场景,将订单路由至供应商所在仓库
  • 仓库与订单

    • order 表可扩展 warehouse_id 字段,记录实际发货仓库
    • 下单时根据收货地址、仓库能力、库存情况选择最优仓库
    • 库存锁定:当站点开启库存锁定(stock_lock=1),下单即锁定对应仓库库存

库存分布策略与调拨管理

  • 库存分布策略

    • 就近原则:根据收货地址匹配最近仓库
    • 负载均衡:按仓库处理能力(max_order_per_day)与当前负载动态分配
    • 安全库存:为热销商品在各仓库设置最低库存阈值,低于阈值触发补货
    • 预售与现货分离:不同仓库支持不同业务类型,订单路由时过滤不支持的仓库
  • 调拨管理

    • 创建调拨单(transfer_order),包含源仓库、目标仓库、商品、数量、状态
    • 调拨流程:申请→审批→出库→在途→入库→完成
    • 库存变更:出库扣减源仓库存,入库增加目标仓库存;在途阶段占用中间态库存
    • 异常处理:部分到货、拒收、破损等场景记录日志并回滚或调整库存

仓库选址优化

  • 数据维度

    • 订单密度:按区域统计订单量与增长趋势
    • 配送时效:结合经纬度与物流网络,评估各仓库到客户的平均时效
    • 成本因素:仓储成本、干线运输成本、末端配送成本
    • 风险因素:自然灾害、政策限制、供应链中断概率
  • 算法建议

    • 重心法/覆盖模型:以成本最小化或服务半径最大化为目标函数
    • 多目标优化:平衡成本、时效、风险,使用加权评分或帕累托前沿
    • 动态重规划:定期(月度/季度)重新评估仓库布局,随业务变化调整

与现有库存/订单流程的集成

  • 购物车校验

    • 加入购物车时检查商品可用库存,避免超卖
    • 若引入多仓库,需按仓库维度校验可售库存
  • 下单锁库

    • 根据站点配置决定是否锁定库存(stock_lock)
    • 引入多仓库后,锁定应指向具体仓库的库存
  • 商品模型

    • 商品模型提供 stock 字段的读写与格式化
    • 多仓库场景下,商品主库存可由各仓库库存聚合得到

依赖关系分析

  • 商品与库存
    • product.stock 是全局库存主数据,未来可拆分为仓库维度库存
  • 订单与库存锁定
    • order.stock_lock 控制下单是否锁定库存,影响库存占用与释放时机
  • 购物车与库存校验
    • CartService.checkStock 在加入购物车时进行库存可用性检查
classDiagram
class 商品 {
+id
+stock
+price
+status
}
class 订单 {
+id
+order_sn
+stock_lock
+warehouse_id
}
class 仓库 {
+id
+name
+code
+status
+capacity_total
+capacity_used
}
class 购物车服务 {
+checkStock()
}
class 结账服务 {
+createOrder()
}
购物车服务 --> 商品 : "校验库存"
结账服务 --> 订单 : "创建并锁定库存"
订单 --> 仓库 : "发货仓库"
商品 --> 仓库 : "仓库库存明细"

性能考虑

  • 库存查询优化
    • 为 product.stock、order.stock_lock 建立必要索引
    • 多仓库库存查询建议使用分区或分表,按仓库或商品维度拆分
  • 库存锁定与释放
    • 使用事务保证库存扣减与订单创建的原子性
    • 超时释放:对未支付订单的库存锁定设置超时释放机制
  • 高并发场景
    • 使用乐观锁或分布式锁防止超卖
    • 热点商品库存更新采用队列异步处理,降低数据库压力

故障排查指南

  • 库存不一致
    • 检查订单是否错误设置 stock_lock,导致库存未锁定或未释放
    • 核对购物车校验逻辑,确认 checkStock 是否正确拦截超卖
  • 下单失败
    • 检查站点库存配置是否开启,以及插件支付模块是否启用
    • 确认商品是否存在有效库存,或仓库是否支持该商品
  • 调拨异常
    • 检查调拨单状态流转,确认出库与入库是否成对完成
    • 查看异常日志,定位在途库存未入账或重复扣减问题

结论

当前 DouPHP 已具备商品库存与订单锁定的基础能力,为多仓库管理提供了良好起点。通过新增仓库主表 dou_warehouse 及其关联表,可实现仓库层级、状态、权限控制,以及与商品、供应商、订单的精细化关联。结合库存分布策略与调拨管理,可显著提升履约效率与客户体验。建议在实施过程中优先完善库存校验与锁定逻辑,再逐步扩展多仓库能力。

附录

  • 关键表字段参考
    • product.stock:商品总库存
    • order.stock_lock:订单库存锁定标志
    • 推荐新增:dou_warehouse(仓库主表)、product_stock_by_arehouse(仓库库存明细)、supplier_inbound(供应商入库单)、transfer_order(调拨单)
添加日期:2026-10-05