仓库运营与WMS
High Contrast
Dark Mode
Light Mode
Sepia
Forest
2 min read482 words

仓库运营与 WMS

仓库是供应链的物理枢纽——货物在这里收、存、拣、发。WMS 系统的核心价值不是管理软件,而是让每一件货物的位置和状态实时可知。

仓库功能区布局

graph LR RECEIVE[收货区] --> QC[质检区] QC --> STORAGE[存储区] STORAGE --> PICK[拣货区] PICK --> PACK[打包区] PACK --> DISPATCH[发货区] STORAGE --> BULK[散货区\n托盘整板] STORAGE --> SHELF[货架区\n零散拣货] STORAGE --> COLD[冷链区\n温控货物] STORAGE --> DANGER[危险品区\n隔离存放] RETURN[退货区] --> QC style STORAGE fill:#e3f2fd,stroke:#1565c0,stroke-width:2px style PICK fill:#c8e6c9,stroke:#388e3c,stroke-width:2px

WMS 核心功能

"""
WMS 仓库管理系统核心模块
"""
from dataclasses import dataclass, field
from datetime import datetime
@dataclass
class Location:
"""仓位"""
code: str       # 如 A-03-05-2(区-排-列-层)
zone: str       # A=快速拣货区, B=普通区, C=大件区
capacity: int   # 最大托盘数
occupied: int = 0
sku: str = ""
@property
def utilization(self) -> float:
return self.occupied / self.capacity if self.capacity else 0
@property
def is_full(self) -> bool:
return self.occupied >= self.capacity
@dataclass
class StockMovement:
"""库存移动记录"""
timestamp: str
sku: str
qty: int
from_loc: str
to_loc: str
movement_type: str   # inbound / outbound / transfer / adjust
class WMS:
"""简化 WMS 系统"""
def __init__(self):
self.locations: dict[str, Location] = {}
self.inventory: dict[str, dict] = {}   # sku -> {loc: qty}
self.movements: list[StockMovement] = []
def add_location(self, location: Location):
self.locations[location.code] = location
def receive(self, sku: str, qty: int, loc_code: str) -> dict:
"""入库"""
loc = self.locations.get(loc_code)
if not loc:
return {"success": False, "error": "仓位不存在"}
if loc.is_full:
return {"success": False, "error": "仓位已满"}
# 更新库存
if sku not in self.inventory:
self.inventory[sku] = {}
self.inventory[sku][loc_code] = (
self.inventory[sku].get(loc_code, 0) + qty
)
loc.occupied += 1
loc.sku = sku
self.movements.append(StockMovement(
timestamp=datetime.now().strftime("%Y-%m-%d %H:%M"),
sku=sku, qty=qty,
from_loc="RECEIVE", to_loc=loc_code,
movement_type="inbound",
))
return {"success": True, "sku": sku, "qty": qty, "location": loc_code}
def pick(self, sku: str, qty: int) -> dict:
"""拣货(FEFO 优先)"""
stock = self.inventory.get(sku, {})
if not stock:
return {"success": False, "error": f"{sku} 无库存"}
total_available = sum(stock.values())
if total_available < qty:
return {
"success": False,
"error": f"库存不足,需要 {qty},现有 {total_available}",
}
# 逐位置扣减
pick_plan = []
remaining = qty
for loc, available in sorted(stock.items()):
if remaining <= 0:
break
pick_qty = min(available, remaining)
pick_plan.append({"位置": loc, "拣货量": pick_qty})
remaining -= pick_qty
self.movements.append(StockMovement(
timestamp=datetime.now().strftime("%Y-%m-%d %H:%M"),
sku=sku, qty=qty,
from_loc=str(list(stock.keys())[0]), to_loc="DISPATCH",
movement_type="outbound",
))
return {
"success": True, "sku": sku, "qty": qty,
"拣货路径": pick_plan,
}
def stock_query(self, sku: str = "") -> dict:
"""库存查询"""
if sku:
stock = self.inventory.get(sku, {})
total = sum(stock.values())
return {"SKU": sku, "总库存": total, "分布": stock}
return {
s: sum(locs.values())
for s, locs in self.inventory.items()
}
def location_utilization(self) -> list[dict]:
"""仓位利用率"""
return [
{
"仓位": loc.code,
"区域": loc.zone,
"利用率": f"{loc.utilization*100:.0f}%",
"状态": "满" if loc.is_full else "空" if loc.occupied == 0 else "在用",
}
for loc in self.locations.values()
]
# 演示
wms = WMS()
# 初始化仓位
for i in range(1, 6):
wms.add_location(Location(f"A-01-0{i}-1", "A", 2))
for i in range(1, 4):
wms.add_location(Location(f"B-01-0{i}-1", "B", 5))
# 入库
wms.receive("SKU-A001", 100, "A-01-01-1")
wms.receive("SKU-A001", 200, "A-01-02-1")
wms.receive("SKU-B001", 500, "B-01-01-1")
print("=== 库存查询 ===")
for sku, qty in wms.stock_query().items():
print(f"  {sku}: {qty} 件")
print("\n=== 拣货指令 SKU-A001 x 150 ===")
result = wms.pick("SKU-A001", 150)
for k, v in result.items():
print(f"  {k}: {v}")

拣货策略对比

策略 原理 适用 效率
单单拣货 每单独立拣货 大件/特殊需求
批量拣货 多单合并路线 标准品
波次拣货 按时间窗口批量触发 电商仓高峰
区域拣货 拣货员负责固定区域 大型仓库
播种式拣货 先拣后分 多品种小批量 极高

仓库 KPI 体系

KPI 定义 优秀基准
拣货准确率 正确拣货次数 / 总拣货次数 ≥ 99.9%
入库到上架时间 收货至系统可用时长 ≤ 4 小时
订单处理周期 接单至发货完成时长 ≤ 24 小时
仓位利用率 已用仓位 / 总仓位 75–85%
发货准时率 准时发货次数 / 总发货次数 ≥ 98%
损耗率 库存损耗金额 / 总库存价值 ≤ 0.1%

行动清单

下一节03-库存盘点与损耗控制 — 如何保持库存数据准确,控制损耗在合理范围内。