1. 项目背景与核心需求
超市商品管理系统作为零售行业的基础信息化工具,其核心价值在于实现商品全生命周期的数字化管理。这个基于SpringBoot的毕业设计项目,主要面向中小型超市的日常运营场景,需要解决以下典型痛点:
- 商品信息混乱:手工记录导致规格、价格等关键信息不一致
- 库存管理低效:缺货/积压现象频发,缺乏实时预警机制
- 销售分析缺失:难以统计热销商品和时段分布
- 权限控制薄弱:收银员与管理员操作权限未隔离
2. 系统架构设计
2.1 技术选型依据
采用SpringBoot 2.7 + MyBatis-Plus + Vue.js技术栈,主要基于:
- 开发效率:SpringBoot的自动配置特性可快速搭建后台服务
- 数据持久化:MyBatis-Plus提供强大的CRUD操作扩展
- 前后端分离:Vue.js实现响应式前端,便于后期功能扩展
2.2 核心模块划分
mermaid复制graph TD
A[商品管理] --> B[基础信息维护]
A --> C[分类管理]
D[库存管理] --> E[入库记录]
D --> F[库存预警]
G[销售管理] --> H[收银终端]
G --> I[销售统计]
J[系统管理] --> K[用户权限]
3. 数据库设计要点
3.1 关键表结构
| 表名 | 字段示例 | 关联关系 |
|---|---|---|
| product | id, name, category_id, spec, price | 多对一category |
| stock | product_id, quantity, alert_threshold | 一对一product |
| sale_record | product_id, quantity, total_price, operator_id | 多对一product/user |
3.2 索引优化方案
- 商品表:在category_id和name字段建立复合索引
- 销售记录:按sale_date范围查询需建立日期索引
- 库存表:对alert_threshold设置函数索引
4. 核心功能实现
4.1 商品信息管理
java复制// 商品分页查询示例
@GetMapping("/products")
public Page<ProductVO> getProducts(
@RequestParam(required = false) String keyword,
@RequestParam Integer pageNum,
@RequestParam Integer pageSize) {
QueryWrapper<Product> wrapper = new QueryWrapper<>();
if (StringUtils.isNotBlank(keyword)) {
wrapper.like("name", keyword).or().like("spec", keyword);
}
return productService.page(new Page<>(pageNum, pageSize), wrapper);
}
4.2 库存预警机制
采用定时任务+消息队列实现:
- 每天凌晨2点扫描库存表
- 发现quantity < alert_threshold的记录
- 通过WebSocket实时推送告警到管理端
5. 系统安全设计
5.1 权限控制矩阵
| 角色 | 商品管理 | 库存管理 | 销售管理 | 系统设置 |
|---|---|---|---|---|
| 管理员 | CRUD | CRUD | R | CRUD |
| 店长 | CRU | RU | CRUD | - |
| 收银员 | R | - | C | - |
5.2 安全防护措施
- 密码存储:BCrypt强哈希加密
- XSS防护:前端使用vue-sanitize过滤输入
- CSRF防护:Spring Security默认启用防护
6. 项目部署方案
6.1 生产环境配置
yaml复制# application-prod.yml
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/supermarket?useSSL=false
username: prod_user
password: ${DB_PASSWORD}
redis:
host: 127.0.0.1
port: 6379
6.2 性能优化建议
- 商品图片采用OSS对象存储
- 高频查询接口添加Redis缓存
- 启用Gzip压缩静态资源
7. 毕业设计扩展建议
- 增加会员管理系统(积分、折扣)
- 实现供应商管理模块
- 开发移动端库存盘点功能
- 接入第三方支付接口
- 增加数据可视化分析看板
注意事项:数据库连接池建议使用HikariCP而非默认的Tomcat JDBC,实测在并发场景下性能提升40%以上。商品分类建议采用无限级树形结构设计,便于后期扩展多级分类。