springboot vue 开源 会员收银系统 (9) 库存管理 结算时扣库存

前言

完整版演示 http://120.26.95.195/
开发版演示 http://120.26.95.195:8889/

在之前的开发进程中,我们基本搭建了收银台、开卡结算及订单的优化升级 ,今天的文章里我们完成商品的出入库及收银台库存优化。

1.出入库管理

我们采用"总单细目的形式" 即一个出入库单对应多个商品

2.数据库表

java 复制代码
CREATE TABLE `business_stock` (
  `STOCK_ID` varchar(32) NOT NULL COMMENT '库存单id',
  `STOCK_TITLE` varchar(255) DEFAULT NULL COMMENT '库存单表头',
  `STOCK_NO` varchar(32) DEFAULT NULL COMMENT '库存单编号',
  `STOCK_STATUS` tinyint(2) DEFAULT '0' COMMENT '0正常 1审核完毕 2取消',
  `SHOP_ID` varchar(32) DEFAULT NULL COMMENT '门店id',
  `SHOP_NAME` varchar(255) DEFAULT NULL COMMENT '门店名',
  `CREATE_NAME` varchar(255) DEFAULT NULL COMMENT '创建人',
  `CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间',
  `CREATE_ID` varchar(32) DEFAULT NULL COMMENT '创建人id',
  `UPDATE_TIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `UPDATE_NAME` varchar(255) DEFAULT NULL COMMENT '修改人',
  `UPDATE_ID` varchar(32) DEFAULT NULL COMMENT '修改人id',
  `CHECK_ID` varchar(32) DEFAULT NULL COMMENT '审核人ID',
  `CHECK_NAME` varchar(255) DEFAULT NULL COMMENT '审核人姓名',
  `CHECK_TIME` datetime DEFAULT NULL COMMENT '审核时间',
  `STOCK_TYPE` tinyint(2) DEFAULT NULL COMMENT '类型 1入库 2出库',
  `STOCK_MONEY` decimal(10,2) DEFAULT NULL COMMENT '金额',
  `STOCK_IN_TYPE` tinyint(2) DEFAULT NULL COMMENT '入库类型',
  `STOCK_OUT_TYPE` tinyint(2) DEFAULT NULL COMMENT '出库类型',
  `VERSION` bigint(10) DEFAULT '0' COMMENT '乐观锁字段',
  `DELETED` tinyint(2) DEFAULT '0' COMMENT '0正常 1删除',
  `REMARK` varchar(1000) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`STOCK_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='库存单';

这是出入库单表的字段 这里我们省略了审核的步骤 后续可以进行完善

java 复制代码
CREATE TABLE `business_stock_detail` (
  `STOCK_DETAIL_ID` varchar(32) NOT NULL COMMENT '库存详情id',
  `STOCK_ID` varchar(32) DEFAULT NULL COMMENT '库存单id',
  `PRODUCT_ID` varchar(32) DEFAULT NULL COMMENT '商品',
  `PRODUCT_NAME` varchar(255) DEFAULT NULL COMMENT '商品名 ',
  `COUNT` bigint(20) DEFAULT NULL COMMENT '库存数量',
  `STOCK_STATUS` tinyint(2) DEFAULT NULL COMMENT '0正常 1审核完毕 2取消',
  `STOCK_TYPE` tinyint(2) DEFAULT NULL COMMENT '类型 1入库 2出库',
  `AMOUNT` decimal(10,2) DEFAULT NULL COMMENT '金额',
  `CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`STOCK_DETAIL_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

这里出入库详情 简单的保存商品id和数量即可

3.下面进行展示

商品选择页面我们复用了 商品列表 并在商品表中增加是否进行库存管理这一字段 我们在结算时 只扣除进行库存管理的商品
并且做好异常处理 当库存为0 给出错误提示

结算后自动生成出库单

后续进行销单是 自动生成 入库单 重新将出库的商品进行库存回退

代码地址
https://gitee.com/ddeatrr/memberShop

相关推荐
牛奔5 小时前
Go 如何打印调试深层或嵌套的结构体
开发语言·后端·golang
红烧大青虫5 小时前
HarmonyOS应用开发实战:小事记 - 数据迁移策略:RDB 表结构变更的版本号管理与 onUpgrade 回调
后端·华为·harmonyos·鸿蒙系统
geovindu5 小时前
go: Iterative Algorithms
开发语言·后端·算法·golang·迭代算法
阳光是sunny7 小时前
LangGraph实战教程:defer延迟节点——让收尾工作自动排到最后
前端·人工智能·后端
前端工作日常7 小时前
我学习到的Java中domain和dto区别
java·后端
kite01217 小时前
Go语言Map深度解析与最佳实践
开发语言·后端·golang
阳光是sunny7 小时前
LangGraph实战教程:控制流详解
前端·人工智能·后端
码农学院7 小时前
基于Spring Boot的跨境电商多语言订单管理系统架构设计
java·大数据·spring boot
hold?fish:palm8 小时前
kv存储主从复制的设计与实现
c++·redis·后端
swipe9 小时前
07|(前端转后全栈)为什么后端也要缓存?从前端缓存思维理解 Redis
前端·后端·全栈