进销存系统批次管理与效期预警实现
为什么需要批次管理
对于食品、药品、化妆品等行业,商品的批次和有效期管理是合规经营的硬性要求。即使是一般商贸企业,批次管理也能帮助实现先进先出(FIFO),降低库存积压和过期损耗。
批次编码规则设计
批次号需要具备唯一性和可读性,推荐格式:
批次号 = 商品编码(6位) + 入库日期(YYYYMMDD) + 流水号(3位)
示例:A01001-20250524-001
数据库表结构设计
采用"库存主表 + 批次明细表"的双层结构:
-- 库存主表(按商品汇总)
CREATE TABLE inventory (
id BIGINT PRIMARY KEY,
product_id VARCHAR(20) NOT NULL,
warehouse_id VARCHAR(20) NOT NULL,
quantity DECIMAL(18,4) DEFAULT 0,
amount DECIMAL(18,4) DEFAULT 0,
UNIQUE KEY uk_product_warehouse (product_id, warehouse_id)
);
-- 批次明细表
CREATE TABLE inventory_batch (
id BIGINT PRIMARY KEY,
product_id VARCHAR(20) NOT NULL,
warehouse_id VARCHAR(20) NOT NULL,
batch_no VARCHAR(30) NOT NULL,
production_date DATE,
expiry_date DATE,
quantity DECIMAL(18,4) DEFAULT 0,
remaining_qty DECIMAL(18,4) DEFAULT 0,
INDEX idx_expiry (expiry_date),
INDEX idx_product (product_id, warehouse_id)
);
先进先出(FIFO)出库算法
出库时按批次入库时间先后顺序扣减库存:
async function fifoOut(productId, warehouseId, outQty) {
const batches = await db.query(
`SELECT * FROM inventory_batch
WHERE product_id = ? AND warehouse_id = ? AND remaining_qty > 0
ORDER BY production_date ASC, id ASC`,
[productId, warehouseId]
);
let remaining = outQty;
const details = [];
for (const batch of batches) {
if (remaining <= 0) break;
const deduct = Math.min(remaining, batch.remaining_qty);
batch.remaining_qty -= deduct;
remaining -= deduct;
await db.update('inventory_batch', { remaining_qty: batch.remaining_qty }, { id: batch.id });
details.push({ batch_no: batch.batch_no, quantity: deduct });
}
if (remaining > 0) {
throw new Error('库存不足,缺少数量:' + remaining);
}
return details;
}
效期预警机制
设置三级预警阈值:
| 预警级别 | 触发条件 | 处理方式 |
|---|---|---|
| 黄色预警 | 距到期 90 天 | 系统消息提醒采购/库管 |
| 橙色预警 | 距到期 30 天 | 邮件 + 站内信,优先出库 |
| 红色预警 | 距到期 7 天或已过期 | 冻结库存,人工处理 |
定时预警任务
-- 每日凌晨执行
SELECT
product_id, batch_no, expiry_date,
DATEDIFF(expiry_date, CURDATE()) as days_left,
remaining_qty
FROM inventory_batch
WHERE remaining_qty > 0
AND DATEDIFF(expiry_date, CURDATE()) <= 90
ORDER BY expiry_date ASC;
总结
批次管理是进销存系统的核心能力之一。通过合理的表结构设计、FIFO 出库算法和多级效期预警,可以有效降低企业的库存损耗风险,满足行业合规要求。