仓库管理系统
采用前后端分离架构,覆盖从仓库、库区、库位的基础设施管理,到商品、供应商、客户等基础资料维护,再到入库、出库、库存、盘点等核心仓储业务的完整流程。系统同时内置数据看板、库存预警与公告管理能力,帮助仓储管理人员实时掌握库存动态、规范出入库流程、及时完成盘点对账。
仓库管理系统 — 项目介绍文档
一、项目概述
本项目是一套企业级仓库管理系统(Warehouse Management System,WMS),采用前后端分离架构,覆盖从仓库、库区、库位的基础设施管理,到商品、供应商、客户等基础资料维护,再到入库、出库、库存、盘点等核心仓储业务的完整流程。系统同时内置数据看板、库存预警与公告管理能力,帮助仓储管理人员实时掌握库存动态、规范出入库流程、及时完成盘点对账。
| 属性 | 说明 |
|---|---|
| 项目名称 | 仓库管理系统(Warehouse Management System) |
| 架构模式 | B/S 前后端分离 |
| 后端技术 | Spring Boot 3.2 / MyBatis-Plus 3.5 / MySQL 8.0 / JWT |
| 前端技术 | Vue 3 / Element Plus / Pinia / Axios / ECharts / Vite |
| 开发语言 | Java 21 / JavaScript(ES6+) |
| 适用场景 | 计算机毕设、课程设计、源码学习与二次开发 |
本系统为纯后台管理系统,不提供前台用户界面,所有功能均通过管理员后台访问,按"管理员 / 员工"两种角色进行权限控制。
二、技术架构
2.1 后端技术栈
| 类别 | 技术选型 | 版本 | 说明 |
|---|---|---|---|
| 核心框架 | Spring Boot | 3.2.3 | Java 企业级开发框架 |
| ORM 框架 | MyBatis-Plus | 3.5.5 | 增强版 MyBatis,简化 CRUD,内置分页/逻辑删除 |
| 数据库 | MySQL | 8.0+ | 关系型数据库 |
| 安全认证 | jjwt(JWT) | 0.12.3 | 无状态 Token 认证 |
| 密码加密 | BCrypt(Hutool) | 5.8.26 | 慢哈希 + 随机盐值 |
| API 文档 | Knife4j(OpenAPI 3) | 4.4.0 | Swagger 增强 UI |
| 工具库 | Hutool | 5.8.26 | Java 通用工具集 |
| 构建工具 | Maven | 3.8+ | 依赖管理与项目构建 |
2.2 前端技术栈
| 类别 | 技术选型 | 版本 | 说明 |
|---|---|---|---|
| 核心框架 | Vue 3(Composition API) | 3.4.21 | 渐进式前端框架 |
| UI 组件库 | Element Plus | 2.6.3 | 企业级桌面端组件库 |
| 路由 | Vue Router | 4.3.0 | 单页应用路由管理 |
| 状态管理 | Pinia | 2.1.7 | Vue 官方状态管理库 |
| HTTP 客户端 | Axios | 1.15.2 | 基于 Promise 的 HTTP 库 |
| 图表 | ECharts | 5.5.0 | 数据可视化图表库 |
| 构建工具 | Vite | 5.2.0 | 下一代前端构建工具 |
| 自动导入 | unplugin-auto-import | 0.17.5 | API 自动按需导入 |
2.3 架构图
┌─────────────────────────────────────────────────────────┐
│ 浏览器(Browser) │
├─────────────────────────────────────────────────────────┤
│ 后台管理(Admin) localhost:3000/admin │
│ · 数据看板 / 库存预警 / 出入库趋势图表 │
│ · 仓库 / 库区库位 / 商品 / 供应商 / 客户 基础数据管理 │
│ · 入库单 / 出库单 / 库存 / 库存流水 / 盘点管理 │
│ · 用户管理 / 公告管理 / 个人中心 │
└─────────────────────────────────────────────────────────┘
│ HTTP /api/*
▼
┌─────────────────────────────────────────────────────────┐
│ Spring Boot 后端(localhost:8080) │
├─────────────┬──────────────┬──────────────┬──────────────┤
│ Interceptor │ Controller │ Service │ Mapper │
│ JWT认证 │ admin/ 后台 │ 业务逻辑 │ MyBatis-Plus│
│ 角色鉴权 │ auth/ 登录 │ 事务管理 │ XML 自定义SQL│
└─────────────┴──────────────┴──────────────┴──────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ MySQL 8.0(warehouse_management) │
│ 17 张数据表:user, warehouse, storage_area, │
│ storage_location, product_category, product, supplier, │
│ customer, inbound_order(+item), outbound_order(+item), │
│ stock, stock_record, stock_check(+item), announcement │
└─────────────────────────────────────────────────────────┘
2.4 安全设计
- JWT 双拦截器:
JwtAuthInterceptor(认证)+RoleAuthInterceptor(角色鉴权),按路径分层控制 @RequireRole注解:标注在 Controller 方法上,声明接口允许访问的角色(默认仅管理员),权限校验集中统一@Anonymous注解:标注公开接口(如登录、用户信息、文件上传),无需额外维护白名单- 密码 BCrypt 加密:使用慢哈希算法加随机盐值,有效抵御彩虹表攻击
- 逻辑删除:基于 MyBatis-Plus 全局逻辑删除配置,业务数据(用户/商品/供应商/客户/单据/盘点单)删除均为软删除,保障数据可追溯
- CORS 精准控制:仅允许特定来源跨域,携带认证信息
三、角色与权限
系统采用"管理员 / 员工"双角色模型,前端菜单与操作按钮按角色动态控制,后端接口通过 @RequireRole 二次校验:
| 权限点 | 管理员(role=1) | 员工(role=0) |
|---|---|---|
| 数据看板、公告查看 | ✅ | ✅ |
| 仓库/库区/商品/供应商/客户 查看 | ✅ | ✅ |
| 仓库/库区/商品/供应商/客户 新增、编辑、删除 | ✅ | ❌ |
| 创建入库单/出库单/盘点单(提交后待审核) | ✅ | ✅ |
| 出入库单审核(通过/驳回)、盘点完成 | ✅ | ❌ |
| 用户管理、公告管理 | ✅ | ❌ |
| 个人中心(资料/头像/密码) | ✅ | ✅ |
默认账号:管理员
admin,员工wm001/wm002/wm003,初始密码均为123456(BCrypt 加密存储)。
四、功能模块
4.1 数据看板
| 功能点 | 说明 |
|---|---|
| 统计卡片 | 仓库总数、在库商品种类、库存总量、预警商品数、今日入库单、今日出库单、待审核入库单、待审核出库单 |
| 趋势图表 | 近 7 天出入库单趋势(双折线)、仓库库存分布(柱状图)、库存 TOP 商品(横向柱状图),基于 ECharts 可视化 |
| 最新公告 | 展示已发布公告,管理员可直接跳转公告管理 |
4.2 基础数据管理
| 模块 | 功能点 | 说明 |
|---|---|---|
| 仓库管理 | 仓库增删改查、启用/停用 | 仓库名称、编码、地址、负责人、联系电话 |
| 库区库位 | 库区、库位增删改查 | 库区类型(常温/冷藏/冷冻/危险品/贵重品);库位编号(如 A-01-01)、货架号、层号、最大/已用容量 |
| 商品管理 | 商品分类、商品增删改查 | 商品编码、规格、单位、品牌、参考单价、库存预警值;分类支持启用/停用,含商品数量统计 |
| 供应商管理 | 供应商增删改查 | 联系人、电话、邮箱、地址、备注 |
| 客户管理 | 客户增删改查 | 联系人、电话、邮箱、地址、备注 |
4.3 仓储业务
| 模块 | 功能点 | 说明 |
|---|---|---|
| 入库单管理 | 创建入库单、审核/驳回、作废 | 选择仓库、供应商,明细含商品、库位、数量、单价;审核通过自动增加库存、更新库位容量并生成库存流水 |
| 出库单管理 | 创建出库单、审核/驳回、作废 | 选择仓库、客户,明细含商品、库位、数量、单价;审核通过自动扣减库存、更新库位容量并生成库存流水 |
| 库存管理 | 库存查询、预警筛选 | 按商品/仓库筛选,支持"仅看预警";库存低于预警值显示红色预警标签 |
| 库存流水 | 流水查询 | 记录每次入库、出库、盘点调整、初始化的变动数量、变动前后库存、关联单据号 |
| 盘点管理 | 创建盘点单、录入实盘、完成盘点 | 账面数量 vs 实盘数量自动计算差异;盘点完成自动调整库存并生成"盘点调整"流水 |
4.4 系统管理
| 模块 | 功能点 | 说明 |
|---|---|---|
| 用户管理 | 用户列表、启用/禁用 | 支持关键词搜索,展示用户名、昵称、角色(管理员/员工)、状态 |
| 公告管理 | 公告增删改查 | 类型(系统公告/活动通知)、置顶、草稿/发布状态、发布时间 |
| 个人中心 | 修改资料、头像上传、修改密码 | 昵称/邮箱/手机号可编辑,头像上传支持 JPG/PNG/WebP/GIF |
五、项目亮点
5.1 出入库审核闭环
入库单/出库单提交后进入"待审核"状态,管理员审核通过后,系统在同一事务内完成:更新库存数量、增减库位已用容量、生成库存流水,并记录审核人与审核时间;驳回、作废状态全程可追溯。
5.2 库存预警机制
每个商品可设置独立预警值,库存管理页对低于预警值的商品以红色高亮展示,数据看板同步统计预警商品数,便于仓管人员及时补货。
5.3 盘点差异处理
盘点单按"库位 + 商品"录入实盘数量,系统自动计算与账面数量的差异(差异 = 实盘 - 账面);完成盘点时自动将库存修正为实盘数量,并生成"盘点调整"库存流水,保证账实相符。
5.4 库容联动
库位维护最大容量与已用容量,出入库审核通过时自动增减已用容量,为库位规划与容量预警提供数据基础。
5.5 单号自动生成
OrderNoUtils 统一生成入库单号(RK+日期+序列)、出库单号(CK+日期+序列)、盘点单号(PD+日期+序列),规则统一、全局唯一。
5.6 角色权限双层控制
前端按角色动态渲染菜单与操作按钮,后端通过 @RequireRole 注解对写操作/敏感操作二次鉴权,权限模型清晰,安全可靠。
5.7 代码规范性
- 全局统一异常处理(
GlobalExceptionHandler),错误码枚举化管理(ErrorCode) - 分页统一返回结构(
PageResult),前端无需适配不同接口 - 统一响应体(
Result<T>),所有接口返回格式一致 - 所有数据库操作使用 Lambda 表达式构建条件,避免字段名硬编码
六、项目结构
warehouse-management-system/
├── db/ # 数据库初始化脚本目录
│ └── init.sql # 建表 + 初始数据脚本(17 张表)
├── springboot/ # 后端 Spring Boot 项目
│ ├── pom.xml # Maven 配置(Spring Boot 3.2.3)
│ └── src/main/java/com/example/
│ ├── common/ # 公共模块
│ │ ├── annotation/ # @Anonymous、@RequireRole 注解
│ │ ├── constant/ # 安全常量
│ │ ├── enums/ # UserRoleEnum、UserStatusEnum
│ │ ├── exception/ # 全局异常处理 + 错误码枚举
│ │ ├── BaseEntity.java # 基础实体(id + 时间戳)
│ │ ├── LogicDeleteEntity.java # 逻辑删除实体
│ │ ├── PageResult.java # 统一分页结果
│ │ ├── Result.java # 统一响应体
│ │ └── UserContext.java # 用户上下文工具
│ ├── config/ # 配置类
│ │ ├── CorsConfig.java # 跨域配置
│ │ ├── JacksonConfig.java # JSON 序列化配置
│ │ ├── MetaObjectHandlerConfig.java # 字段自动填充
│ │ ├── MybatisPlusConfig.java # MP 分页 + 逻辑删除
│ │ └── WebMvcConfig.java # 拦截器注册 + 静态资源映射
│ ├── controller/
│ │ ├── admin/ # 12 个后台控制器(仓库/库区/商品/供应商/客户/
│ │ │ # 入库/出库/库存/盘点/统计/用户/公告)
│ │ ├── front/ # AuthController(登录)、UploadController(上传)
│ │ └── FileController.java # 文件访问
│ ├── dto/ # 数据传输对象(10 个业务模块,19 个 DTO)
│ ├── entity/ # 17 个实体类
│ ├── mapper/ # 17 个 Mapper 接口
│ ├── security/ # JWT 认证 + 角色鉴权
│ │ ├── JwtUtils.java # Token 生成/解析
│ │ ├── JwtAuthInterceptor.java # 认证拦截器
│ │ └── RoleAuthInterceptor.java# 角色鉴权拦截器
│ ├── service/ # 13 个业务服务类
│ ├── utils/ # OrderNoUtils(单号生成)、PasswordUtils
│ ├── vo/ # 视图对象(11 个业务模块,19 个 VO)
│ └── MainApplication.java # 启动类
│ └── src/main/resources/
│ ├── application.yml # 主配置文件
│ └── mapper/ # MyBatis XML 自定义 SQL(如有)
├── vue/ # 前端 Vue 3 项目
│ └── src/
│ ├── api/ # API 封装(admin 后台 12 个模块 + 统一出口 + auth/common)
│ ├── assets/styles/main.css # 全局样式(工业仓储主题:深青绿 + 琥珀)
│ ├── layouts/AdminLayout.vue # 后台布局(侧边栏 + 顶栏)
│ ├── router/index.js # 路由配置(后台 14 个页面 + 登录页)
│ ├── stores/user.js # Pinia 用户状态
│ ├── utils/ # request.js(Axios 拦截器)、file.js
│ ├── views/ # 后台页面(14 个)+ Login.vue
│ └── main.js # 入口文件
└── uploads/ # 文件上传目录(头像等)
