食堂采购系统源码数据库表结构与库存算法实现详解

简介: 本文详解食堂采购系统稳定性的核心:规范数据库结构(如goods、inventory、inventory_log三表协同)与强一致库存算法(乐观锁+流水驱动)。强调“库存是结果,流水是依据”,解决对账不准、超卖、负库存等顽疾,助你打造高并发、可商用的可靠系统。(239字)

很多食堂采购系统做不稳定,不是界面问题,而是底层数据结构和库存算法没设计好。
QQ20260119-152356.png

常见翻车现场你一定见过:

  • 库存经常对不上
  • 入库出库顺序混乱
  • 成本算不准
  • 多食堂同时扣库存直接变负数
  • 月底对账全靠人工补Excel

说白了:数据库结构不规范 + 库存算法太粗糙。

真正可商用的食堂采购系统源码,核心就两件事:

第一,表结构要可追溯
第二,库存算法要强一致

下面我用一套可直接落地的设计方案,把关键实现从表结构到代码完整拆开讲清楚。

一、核心业务流程梳理

先统一一个标准流程:

采购申请 → 采购单 → 入库 → 库存累加
领料/消耗 → 出库 → 库存扣减
盘点 → 差异调整
月底 → 成本核算 + 对账

所以数据库至少要支撑:

  • 供应商管理
  • 商品管理
  • 仓库管理
  • 采购入库
  • 出库领料
  • 实时库存
  • 库存流水

记住一句话:

库存 = 汇总结果
流水 = 真正依据

库存表只是“缓存”,库存流水才是“真相”。

二、核心数据库表结构设计

技术栈示例:

SpringBoot + MySQL + MyBatis

1 商品表 goods

CREATE TABLE goods (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(100) NOT NULL,
  category_id BIGINT,
  unit VARCHAR(20),
  spec VARCHAR(100),
  enabled TINYINT DEFAULT 1,
  created_at DATETIME
);

作用:基础物料信息

示例:

  • 大米 50kg/袋
  • 鸡蛋 30枚/箱

2 供应商表 supplier

CREATE TABLE supplier (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(200),
  contact VARCHAR(50),
  phone VARCHAR(20),
  status TINYINT DEFAULT 1
);

3 仓库表 warehouse

CREATE TABLE warehouse (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(100),
  location VARCHAR(200)
);

支持:

  • 主仓
  • 冷藏仓
  • 分校区仓库

4 库存表 inventory(实时库存)

高频查询表

CREATE TABLE inventory (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  goods_id BIGINT,
  warehouse_id BIGINT,
  quantity DECIMAL(10,2) DEFAULT 0,
  amount DECIMAL(12,2) DEFAULT 0,
  version INT DEFAULT 0,
  UNIQUE KEY uk_goods_wh(goods_id, warehouse_id)
);

关键字段:

  • quantity 当前数量
  • amount 总成本
  • version 乐观锁

5 库存流水表 inventory_log(核心)

这是最重要的一张表

CREATE TABLE inventory_log (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  goods_id BIGINT,
  warehouse_id BIGINT,
  type VARCHAR(20),
  quantity DECIMAL(10,2),
  price DECIMAL(10,2),
  amount DECIMAL(12,2),
  ref_no VARCHAR(50),
  created_at DATETIME
);

type:

  • IN 入库
  • OUT 出库
  • ADJUST 盘点调整

所有库存变化必须写这张表。
QQ20250910-114722.png

三、库存算法设计思路

很多人直接:

update inventory set quantity = quantity - 10

这种做法必出事故。

正确思路:

库存变更三步走:

① 写库存流水
② 扣减库存(带锁)
③ 校验结果

四、入库算法实现(加库存)

Service 实现

@Transactional
public void stockIn(Long goodsId, Long warehouseId,
                    BigDecimal qty, BigDecimal price) {
   

    BigDecimal amount = qty.multiply(price);

    // 1 写流水
    inventoryLogMapper.insert(new InventoryLog(
            goodsId, warehouseId, "IN", qty, price, amount
    ));

    // 2 更新库存
    inventoryMapper.addStock(goodsId, warehouseId, qty, amount);
}

Mapper SQL

UPDATE inventory
SET quantity = quantity + #{
   qty},
    amount = amount + #{
   amount},
    version = version + 1
WHERE goods_id = #{
   goodsId}
AND warehouse_id = #{
   warehouseId};

五、出库算法实现(防止超卖)

重点来了。

出库一定要防:

  • 并发扣减
  • 库存负数

推荐方案:

乐观锁 + 条件扣减

核心SQL

UPDATE inventory
SET quantity = quantity - #{
   qty},
    amount = amount - #{
   amount},
    version = version + 1
WHERE goods_id = #{
   goodsId}
AND warehouse_id = #{
   warehouseId}
AND quantity >= #{
   qty}
AND version = #{
   version};

如果影响行数为 0 → 扣减失败。

Java实现

@Transactional
public void stockOut(Long goodsId, Long warehouseId,
                     BigDecimal qty) {
   

    Inventory inv = inventoryMapper.select(goodsId, warehouseId);

    if (inv.getQuantity().compareTo(qty) < 0) {
   
        throw new RuntimeException("库存不足");
    }

    BigDecimal avgPrice =
            inv.getAmount().divide(inv.getQuantity(), 2, RoundingMode.HALF_UP);

    BigDecimal amount = avgPrice.multiply(qty);

    int rows = inventoryMapper.reduceStock(
            goodsId, warehouseId, qty, amount, inv.getVersion());

    if (rows == 0) {
   
        throw new RuntimeException("库存并发冲突,请重试");
    }

    inventoryLogMapper.insert(
            new InventoryLog(goodsId, warehouseId, "OUT", qty, avgPrice, amount)
    );
}

六、成本算法(加权平均法)

食堂场景推荐:

加权平均法

原因:

  • 计算简单
  • 实时成本准确
  • 不用复杂批次管理

公式:

新平均价 = (旧金额 + 入库金额) ÷ (旧数量 + 入库数量)

SQL 示例:

amount / quantity

直接算即可。

七、高并发优化建议

如果是多校区或集团食堂,订单并发高时:

必须加:

1 分库分表(按仓库拆)
2 Redis库存缓存
3 批量入库写入
4 异步流水日志

否则库存表会成为瓶颈。
QQ20260119-152406.png

八、总结一句实战经验

如果你正在做食堂采购系统源码,记住这三条铁律:

库存只查 inventory
对账只查 inventory_log
任何库存变化必须走事务

这样系统跑几年都不会乱。

真正商用级系统,拼的不是功能多,而是:

数据稳定 + 算法可靠 + 并发安全

底层打牢,上层再怎么扩展都不怕。

相关文章
|
9天前
|
人工智能 运维 JavaScript
云上及本地部署OpenClaw/Clawdbot指南:附免费 API 和阿里云百炼 API 配置集成保姆级教程
2026年,OpenClaw(曾用名Clawdbot、Moltbot)凭借强大的任务自动化能力与灵活的多模型兼容特性,成为AI助手领域的热门选择。它支持系统控制、浏览器自动化、多平台渠道交互等核心功能,可通过API集成各类大模型,实现“自然语言指令驱动全流程自动化”。本文将完整拆解OpenClaw的**本地部署**、**2026年阿里云极简部署**、**Discord Bot配置**,并重点详解**阿里云百炼API集成**(含免费额度申请),所有代码命令可直接复制执行,覆盖从环境准备到功能验证的全流程,零基础也能快速落地。
256 12
|
6天前
|
人工智能 自然语言处理 Ubuntu
阿里云+本地从部署OpenClaw到变现!+ 赚钱工具skill封装技巧(5大高盈利Wrapper开发实操)
OpenClaw(原Clawdbot)作为2026年开源AI领域的核心工具,凭借“自然语言指令+自动化任务执行”的核心能力,成为打破技术壁垒的关键。它本身免费开源,却因配置门槛卡住了95%的潜在用户——普通用户需要花费数十小时学习Skill开发、API对接、模型适配等复杂操作,才能实现个性化需求。这一“能力与可及性的鸿沟”,催生了全新的商业化机会:封装预配置的OpenClaw套装(即Wrapper),向特定行业用户出售“现成可用的数字员工”。
265 7
|
11天前
|
人工智能 Linux 网络安全
2026年阿里云新手用户极速部署OpenClaw(Clawdbot)喂饭级教程
2026年,AI智能体全面普及,OpenClaw(曾用名Clawdbot、Moltbot)凭借轻量化、可扩展、私有化部署的优势,成为个人与小团队首选的AI自动化工具。很多新手想搭建专属智能助手,却卡在环境配置、命令执行、端口放行、权限设置等环节,要么部署失败,要么服务无法访问。
248 12
|
24天前
|
人工智能 缓存 自然语言处理
告别Demo|手把手教你构建可用的LangChain测试智能体
市面上从不缺少能跑通 Demo 的 AI 测试脚本,缺的是能在企业级复杂场景下真正“抗住事”的测试智能体。今天我们不谈概念,直接动手:基于 LangChain 从零构建一个具备测试设计、自主执行、结果分析能力的生产级 Agent。它将证明,AI 自动化测试的价值,不在于“看起来智能”,而在于能为你省下多少真实工时。
|
21天前
|
机器学习/深度学习 数据采集 人工智能
OpAgent:登顶WebArena的多模态Web GUI Agent
蚂蚁集团自研多模态Web智能体OpAgent,以71.6%的成功率登顶WebArena榜单。该方案通过层次化多任务微调构建基座,利用在线强化学习与混合奖励机制应对环境动态性,并结合模块化架构实现复杂任务的稳健执行与自我修正,刷新了Web智能体领域的SOTA纪录。
118 11
|
3天前
|
人工智能 弹性计算 自然语言处理
零门槛上手OpenClaw!阿里云极简部署,三步解锁专属超级AI助理!
OpenClaw是可私有部署的AI数字员工框架,支持通义千问、GPT等多模型,能写代码、查资料、管邮件、自动化办公。阿里云提供一键部署方案:买服务器→开通百炼API→图形化配置,三步搞定,安全高效!
132 12
|
9天前
|
数据采集 人工智能 数据挖掘
不会带团队不用干到死:阿里云部署OpenClaw Skills,自建AI Agent,1人就是100人团队
10年前,我们曾羡慕Jarvis的全能智能;如今,借助OpenClaw的Skills生态,每个人都能打造专属的AI助手军团。OpenClaw的Skills功能将复杂工作流程封装为"一句话指令",让AI自动完成热点搜索、数据分析、内容创作等系列操作,彻底释放重复劳动时间。本文将从Skills核心概念出发,详解从基础技能创建到进阶开发的全流程,融入2026年阿里云OpenClaw极简部署步骤,附带完整代码命令与实战案例,帮助用户从零构建属于自己的AI技能生态。
444 15
|
1月前
|
弹性计算 人工智能 数据安全/隐私保护
2026年OpenClaw(原Clawdbot)阿里云快速部署+接入iMessage保姆级教程
2026年OpenClaw(前身为Clawdbot)凭借轻量化容器化架构、灵活的生态集成能力,成为跨平台智能助手的首选框架;阿里云提供的弹性计算资源与稳定的云端环境,为OpenClaw的7×24小时运行提供了坚实保障;而iMessage作为苹果生态核心的即时通讯工具,与OpenClaw的深度联动,可实现“iMessage发指令、AI自动化执行”的跨终端智能办公体验。本文基于2026年最新实测经验,从阿里云环境搭建、OpenClaw部署、iMessage接入配置到运维优化,提供包含完整代码命令的保姆级教程,零基础用户也能零失误完成部署与集成。
367 12
|
24天前
|
人工智能 自然语言处理 安全
2026年新手必看:阿里云OpenClaw(Clawdbot)零基础部署全流程,10分钟上手全能AI助理
2026年,OpenClaw(原Clawdbot、Moltbot)凭借“自然语言指令+主动执行任务”的核心优势,成为AI工具圈的爆款,其开源特性与丰富的Skills生态,让普通人也能拥有专属智能助理。但对新手而言,部署过程中的环境配置、依赖安装、端口放行等步骤,往往成为入门阻碍。
320 13
|
1月前
|
编解码 资源调度 算法
深度图与点云去噪实战:双边滤波+统计/半径滤波原理与Open3D全实现
本文系统讲解3D视觉中深度图与点云的工业级去噪方案:详解统计滤波(剔孤立点)、半径滤波(除稀疏噪点簇)及双边滤波(边缘保留平滑),提供Open3D+OpenCV全流程代码,支持深度图预处理→点云生成→联合去噪,兼顾精度、效率与鲁棒性。(239字)
111 6

热门文章

最新文章