进销存管理系统
创建于 2026 年 6 月 8 日
项目介绍
这是一套面向商贸流通与商超零售场景的进销存管理系统,基于若依(RuoYi-Vue v3.9.2)深度定制。系统以”库存流水”为轴心,把采购、销售、库存三条业务主线完整串起来:门店/部门先提交采购申请,采购员转单或直接下单生成采购订单,供应商按配送单发货,仓库验收入库并记录批次,库存随之增加;销售端从订单录入开始,系统自动核算含税金额、成本与毛利,下单即校验可用库存并扣减,随后通过销售配送完成签收;发生质量问题则走采购退货或销售退货,反向冲减库存。加上部门间的内部调拨与面向税务的开票导出,构成一套覆盖”进、销、存、退、调、票”的完整业务闭环。
项目的行业味道很浓:商品分类预置为食品饮料、日化百货、生鲜冻品三大类,每类再分中类、小类共三级;商品主数据(“商品天书”)以条形码唯一索引,记录品牌、箱装规格、税率、保质期、零售含税价与毛利率、税收分类编码等字段;供应商带 MDG 编码与合同商品目录(含税/未税供货价、最小起订量、阶梯价说明),并维护价格变更历史日志;客户支持机构/个人主体、三级客户类型、信用额度与标签体系;销售业务类型预置零售、批发、团购。
项目架构
项目为标准的若依多模块结构:ruoyi-admin(Web 入口与业务 Controller)、ruoyi-system(业务 domain / mapper / service)、ruoyi-framework、ruoyi-common、ruoyi-quartz、ruoyi-generator。后端为 Spring Boot 3.1(JDK 17、jakarta 命名空间),持久层用 MyBatis + Druid 连接池,MySQL 数据库(utf8mb4),认证鉴权沿用若依的 Redis + JWT 方案,Apache POI 支撑 Excel 导入导出。
业务代码集中在 com.ruoyi.web.controller.inventory(17 个 Controller)与 com.ruoyi.system.service.impl 下的 Inv*ServiceImpl(17 个业务 Service)。数据库方面,sql/inv_20260608_init.sql 为进销存业务初始化脚本:创建 29 张 inv_ 前缀业务表(基础主数据、采购、库存、销售、开票五大分组),一次性初始化三级商品分类、6 个演示商品、3 个演示供应商、3 个演示客户、采购申请/订单/配送/入库/退货、库存现存量与流水、销售订单与配送等整套演示数据,并同步写好”进销存管理”总菜单与全部业务子菜单及按钮权限标识(inv:*:list / add / edit / remove / export / import)。脚本特意不建外键约束,关系通过索引与业务代码保证,降低后续扩展成本。
前端为 Vue 2.6 + Element UI 2.15 + Vuex + Vue Router + Axios + Sass,业务页面集中在 ruoyi-ui/src/views/inventory 下,按模块拆分为采购申请、采购订单、采购配送、验收入库、采购退货、销售订单、销售配送、销售退货、商品、供应商、客户、库存台账、调拨、开票导出与五类报表等页面,接口统一挂在 src/api/inventory;shared/ModulePage.vue 与 moduleConfigs.js 提供了模块化的页面骨架与开发规划配置,每个模块标注建议落地批次、涉及表与后续步骤,类似一份”活”的开发说明书。
核心功能
- 采购全流程:采购申请区分”天书内/天书外”商品,记录申请部门、申请人、建议供应商与期望送货时间,明细可部分下单;采购订单支持申请转单(来源类型=1)与直接下单(来源类型=2)两种来源,含含税/未税单价、税率、金额核算、送货地址与联系人、打印次数,以及状态(待确认→待发货→部分发货→待收货→部分收货→已完成→已取消)、结算状态与开票状态三套状态;采购配送单记录发货时间、预计/实际到货时间、送货人、附件与配送跟踪说明;验收入库单按订单明细收货,记录批次号、生产日期与到期日期,确认后生成
PURCHASE_IN库存流水;采购退货单支持部分退款与跨月退货标记,冲减库存并回写订单累计退货数量。 - 销售与毛利核算:销售订单记录客户、业务类型(零售/批发/团购)并保存名称快照,下单时自动回填客户与业务类型快照、默认结算方式,逐行核算含税/未税金额、成本金额、毛利额与毛利率,汇总到单头;下单与修改均校验对应部门可用库存(不足则抛”商品库存不足”异常),确认后生成
SALE_OUT出库流水;支持销售订单与销售明细两张 Excel 导入模板,按条形码匹配商品主数据、按客户编码/名称匹配客户,同一单号多行自动合并,并拒绝纯数字单号等脏数据。 - 库存流水驱动机制:库存现存量表维护可用/锁定/总库存、移动平均成本、安全库存、最近出入库含税单价与时间;每次单据新增、修改、删除时,先按业务类型(
PURCHASE_IN/SALE_OUT/PURCHASE_RETURN/SALE_RETURN/TRANSFER_OUT/TRANSFER_IN)重写对应流水,再对受影响的”部门+商品”按流水全量重算现存量:入库累加、出库扣减,移动平均成本 = 累计入库成本 ÷ 累计入库数量。这种”流水为源、现存量可随时重算”的设计让数据可回溯、可对账。 - 内部调拨:调拨单在调出、调入部门之间流转,状态为草稿 → 待出库 → 待入库 → 已完成,调拨明细携带成本单价与成本金额,出库前校验调出方可用库存,完成时在调出方生成
TRANSFER_OUT、调入方生成TRANSFER_IN两条流水。 - 开票导出与报表:开票导出支持销项/进项两种票据方向,来源可为销售订单、销售退货、采购订单、采购退货,携带开票抬头、税号、税收分类编码、对账状态与开票状态;统计报表包含供应商名录、商品目录、采购成本、销售统计,以及核心的进销存(PSI)报表——按”库存部门 + 商品”维度汇总期初库存、采购入库、销售出库、采购退货、销售退货、调拨入库、调拨出库与期末库存,统计区间任意可选。
功能截图
暂无运行截图。
快速上手
- 环境准备:JDK 17、Maven 3.6+、MySQL 5.7/8.0、Redis,前端需 Node.js 与 npm/yarn。
- 初始化数据库:先执行若依基础脚本
sql/ry_20260417.sql(框架表),再执行sql/quartz.sql(定时任务表),最后执行sql/inv_20260608_init.sql创建 29 张业务表、进销存菜单与整套演示数据。 - 启动后端:修改
ruoyi-admin/src/main/resources/application-druid.yml中的数据库连接与application.yml中的 Redis 配置,运行ry.sh(Linux/Mac)或ry.bat(Windows)启动,默认端口 8080。 - 启动前端:进入
ruoyi-ui目录执行npm install,然后npm run dev启动开发服务(默认 80 端口,代理转发到后端),浏览器访问即可。 - 体验流程:用 admin 账号登录后,在”进销存管理”菜单下按 商品管理 → 供应商/客户管理 → 采购申请 → 采购订单 → 采购配送 → 验收入库 → 销售订单 → 销售配送 → 库存台账/进销存报表 的顺序走一遍完整业务闭环,系统预置的演示数据可对照查看。
总结
这个项目是把若依框架用在一个非常”实在”的行业场景里的完整范例:29 张业务表、17 个业务 Controller 与 Service、20 余个前端页面,覆盖了商贸企业采购、销售、库存、退货、调拨、开票与统计报表的全部核心诉求。技术上最值得学习的是它的库存设计——不直接改现存量,而是以流水台账为唯一事实来源,单据增删改后按流水重算现存量与移动平均成本,配合事务注解保证了数据一致性;销售订单的毛利自动核算、按条形码的 Excel 导入、申请转单等细节也体现了贴近真实业务的产品思考。对于想用若依快速搭建一套可落地的进销存系统,或想研究”流水驱动库存”这类通用库存模型的人来说,这个项目提供了很好的参考。