一个简单WMS系统 的设计方案,包含核心功能、数据库设计及实现思路,适用于中小型仓库的基础管理需求。
一、系统核心功能模块
1. 基础数据管理
货物管理 :商品信息(名称、编码、分类、规格、单位、有效期等)。库位管理 :仓库/库区/货架/库位层级划分(如 A区-01货架-01层-01库位
)。供应商/客户管理 :关联采购订单和出库订单。用户权限管理 :角色(管理员、操作员)和权限分配。
2. 入库管理
采购入库 :根据采购单生成入库任务,支持扫码/手动录入。入库质检 :抽检或全检,记录质检结果。库位分配 :自动推荐或手动指定货物存放库位。库存更新 :入库后自动增加库存数量。
3. 出库管理
订单出库 :根据销售订单生成出库任务。拣货策略 :按库位优先级、先进先出(FIFO)分配拣货路径。库存扣减 :出库后自动减少库存数量。出库复核 :防止拣货错误。
4. 库存管理
实时库存查询 :按货物、库位、批次查看当前库存。库存调整 :手动修正库存差异(盘盈/盘亏)。库存预警 :设置最低/最高库存阈值,触发提醒。
5. 查询与报表
操作日志 :记录入库、出库、调整等操作。库存流水 :跟踪库存变动明细(时间、操作人、数量变化)。基础报表 :出入库汇总、库存周转率。
二、数据库设计(MySQL示例)
1. 数据库表结构
(1) 货物表(goods
)
字段名 类型 说明 id INT 主键,自增 sku_code VARCHAR(20) 商品唯一编码(如SKU001) sku_name VARCHAR(50) 商品名称 category_id INT 分类ID(关联分类表) unit VARCHAR(10) 单位(件、箱、千克) weight DECIMAL 单件重量(kg) volume DECIMAL 单件体积(m³) is_batch TINYINT(1) 是否启用批次管理(0否/1是) is_expiry TINYINT(1) 是否需有效期管理(0否/1是) status TINYINT(1) 状态(0停用/1启用)
(2) 库位表(location
)
字段名 类型 说明 id INT 主键,自增 loc_code VARCHAR(20) 库位编码(如A-01-01-01) parent_id INT 父级库位ID(支持层级结构) type VARCHAR(10) 库位类型(存储区、拣货区等) capacity DECIMAL 最大容量(体积或数量) status TINYINT(1) 状态(0禁用/1启用)
(3) 入库单表(inbound_order
)
字段名 类型 说明 id INT 主键,自增 order_no VARCHAR(20) 入库单号(如IN20231001) supplier_id INT 供应商ID goods_id INT 商品ID batch_no VARCHAR(20) 批次号(如2023-10-01-001) quantity INT 入库数量 loc_id INT 存放库位ID operator VARCHAR(20) 操作人 create_time DATETIME 创建时间
(4) 出库单表(outbound_order
)
字段名 类型 说明 id INT 主键,自增 order_no VARCHAR(20) 出库单号(如OUT20231001) customer_id INT 客户ID goods_id INT 商品ID quantity INT 出库数量 loc_id INT 拣货库位ID operator VARCHAR(20) 操作人 create_time DATETIME 创建时间
(5) 库存表(inventory
)
字段名 类型 说明 id INT 主键,自增 goods_id INT 商品ID loc_id INT 库位ID batch_no VARCHAR(20) 批次号 quantity INT 当前库存数量 expiry_date DATE 有效期(可选)
(6) 库存流水表(inventory_log
)
字段名 类型 说明 id INT 主键,自增 goods_id INT 商品ID loc_id INT 库位ID batch_no VARCHAR(20) 批次号 change_type VARCHAR(10) 变动类型(入库/出库/调整) change_quantity INT 变动数量 operator VARCHAR(20) 操作人 create_time DATETIME 操作时间
(7) 用户表(user
)
字段名 类型 说明 id INT 主键,自增 username VARCHAR(20) 用户名 password VARCHAR(50) 密码(MD5加密) role VARCHAR(10) 角色(admin/operator) status TINYINT(1) 状态(0禁用/1启用)
2. 关键表关系图
goods
│
├── inbound_order(goods_id)
├── outbound_order(goods_id)
└── inventory(goods_id)
location
│
├── inbound_order(loc_id)
├── outbound_order(loc_id)
└── inventory(loc_id)
inventory_log
├── goods(goods_id)
└── location(loc_id)
三、实现方案
1. 技术选型
后端 :Java/Spring Boot 或 Python/Django(快速开发)。前端 :Vue.js/Element UI 或 React/Ant Design。数据库 :MySQL 或 PostgreSQL。部署 :单机部署(Docker容器化)。
2. 核心业务流程
(1) 入库流程
创建采购单 → 生成入库任务。 扫描商品条码 → 校验商品信息。 分配库位 → 更新库存表(inventory
)和流水表(inventory_log
)。
(2) 出库流程
创建销售订单 → 生成出库任务。 按FIFO规则查询库存 → 分配拣货库位。 扣减库存 → 记录流水并生成出库单。
3. 关键SQL示例
(1) 查询当前库存
SELECT
g. sku_code, g. sku_name, l. loc_code, i. quantity
FROM
inventory i
JOIN goods g ON i. goods_id = g. id
JOIN location l ON i. loc_id = l. id
WHERE g. sku_code = 'SKU001' ;
(2) 入库后更新库存
INSERT INTO inventory ( goods_id, loc_id, batch_no, quantity)
VALUES ( 1 , 1 , 'BATCH001' , 100 )
ON DUPLICATE KEY UPDATE quantity = quantity + 100 ;
四、扩展与优化建议
批次管理 :在inventory
表中增加batch_no
字段,支持按批次追踪库存。库位推荐算法 :根据货物体积、库位剩余容量自动分配最优库位。库存预警 :通过定时任务扫描inventory
表,触发低库存报警。索引优化 :对高频查询字段(如sku_code
, loc_code
)添加索引。
五、简化版ER图
+----------+ +------------+ +---------------+
| goods |1 n| inbound |1 n| inventory |
|----------|-------| order |-------|---------------|
| id |◄------| goods_id |◄------| goods_id |
| sku_code | | loc_id | | loc_id |
+----------+ +------------+ +---------------+
▲ ▲
| |
+------------+ +---------------+
| outbound | | location |
| order | |---------------|
| goods_id | | id |
| loc_id |◄------| loc_code |
+------------+ +---------------+
通过以上设计,系统可支持中小型仓库的日常操作,后续可根据业务需求逐步扩展(如RFID集成、AGV调度等)。