基于 SpringBoot + Vue 的零食商城系统 — 功能设计文档
文档版本:v1.2
创建日期:2026-06-01
更新日期:2026-06-01(新增系统公告、优惠券、限时抢购活动模块)
适用项目:零食商城毕业设计
目录
- 系统概述
- 系统架构
- 功能模块设计
- 数据库设计
- 技术亮点
- 项目目录结构
- 接口设计规范
- 毕设论文结构建议
一、系统概述
本项目是一个基于 SpringBoot + Vue3 前后端分离架构的零食电商平台,旨在为用户提供便捷的在线零食购物体验,同时为管理员提供高效的商品与订单管理后台。
核心目标
- 用户端:商品浏览、搜索、购物车、下单支付、订单追踪、个人中心、在线客服聊天、系统公告、优惠券、限时抢购
- 管理端:数据统计可视化、商品管理、订单管理、用户管理、客服消息处理、公告管理、优惠券管理、活动管理、系统配置
二、系统架构
┌─────────────────────────────────────────────────────────┐
│ 前端层 (Vue3) │
├─────────────────────────┬───────────────────────────────┤
│ 用户端 (前台) │ 管理端 (后台) │
│ - 首页/商品浏览/购物车 │ - 数据可视化仪表盘 │
│ - 订单/个人中心 │ - 商品/订单/用户管理 │
│ - 登录注册 │ - 系统设置 │
│ - 在线客服聊天 │ - 客服消息处理 │
└─────────────────────────┴───────────────────────────────┘
│
┌─────────────────────────┴───────────────────────────────┐
│ 后端层 (SpringBoot + MyBatis-Plus) │
│ - RESTful API 接口 │
│ - WebSocket 实时消息推送 │
│ - JWT 认证 / 权限控制 │
│ - Redis 缓存 / 消息队列 │
│ - MySQL 数据持久化 │
└─────────────────────────────────────────────────────────┘
技术栈
| 层级 |
技术选型 |
版本建议 |
| 前端用户端 |
Vue3 + Vant |
Vue 3.3+ |
| 前端管理端 |
Vue3 + Element Plus |
Vue 3.3+ |
| 后端框架 |
SpringBoot |
2.7.x / 3.x |
| ORM 框架 |
MyBatis-Plus |
3.5.x |
| 数据库 |
MySQL |
8.0 |
| 缓存 |
Redis |
6.x / 7.x |
| 实时通信 |
WebSocket (Spring WebSocket) |
— |
| 构建工具 |
Maven |
3.8+ |
| 接口文档 |
Knife4j (Swagger) |
4.x |
三、功能模块设计
3.1 用户端功能(前台)
3.1.1 首页模块
| 功能点 |
描述 |
优先级 |
| 轮播图展示 |
顶部广告位,支持点击跳转商品详情,后台可配置 |
高 |
| 分类导航 |
零食分类快速入口(坚果、糖果、膨化、肉脯、蜜饯等) |
高 |
| 热销推荐 |
基于销量排序的 Top N 商品推荐 |
高 |
| 新品上架 |
最新上架商品展示(按上架时间倒序) |
中 |
| 限时特惠 |
折扣商品专区展示 |
中 |
3.1.2 商品模块
| 功能点 |
描述 |
优先级 |
| 分类浏览 |
多级分类筛选(一级:休闲零食 / 二级:坚果炒货 / 三级:夏威夷果) |
高 |
| 商品搜索 |
关键词搜索 + 搜索历史记录 + 热门搜索标签 |
高 |
| 商品列表 |
综合排序 / 销量排序 / 价格升序降序,分页加载 |
高 |
| 商品详情 |
商品轮播图、价格展示、规格选择(口味/重量)、库存显示、商品详情图、用户评价列表 |
高 |
3.1.3 购物车模块
| 功能点 |
描述 |
优先级 |
| 添加商品 |
选择规格、数量加入购物车,未登录跳转登录 |
高 |
| 购物车管理 |
商品全选 / 单选、修改数量、删除单个 / 批量删除、清空购物车 |
高 |
| 价格计算 |
实时计算选中商品总价,展示优惠后价格 |
高 |
3.1.4 订单模块
| 功能点 |
描述 |
优先级 |
| 确认订单 |
选择收货地址、展示商品清单、填写备注信息、计算实付金额 |
高 |
| 下单支付 |
模拟支付流程(适合毕设演示),支付成功后扣减库存 |
高 |
| 订单列表 |
全部 / 待付款 / 待发货 / 待收货 / 已完成 / 已取消,分页展示 |
高 |
| 订单详情 |
订单信息、商品明细、物流信息(模拟)、订单状态时间轴 |
高 |
| 确认收货 |
用户点击确认收货,订单状态变更为已完成 |
高 |
| 取消订单 |
待付款状态下用户可主动取消订单 |
高 |
3.1.5 用户中心模块
| 功能点 |
描述 |
优先级 |
| 个人信息 |
查看和修改昵称、头像上传、手机号绑定 |
高 |
| 收货地址 |
新增 / 编辑 / 删除收货地址,设置默认地址 |
高 |
| 我的收藏 |
收藏商品列表,支持取消收藏,跳转商品详情 |
中 |
| 修改密码 |
原密码验证后修改登录密码 |
中 |
3.1.6 客服聊天模块(用户端)
| 功能点 |
描述 |
优先级 |
| 发起会话 |
用户点击"联系客服"按钮,创建或恢复与客服的聊天会话 |
高 |
| 实时发送消息 |
基于 WebSocket 实时发送文字消息 |
高 |
| 发送图片 |
用户可上传并发送图片(商品截图、问题截图等) |
中 |
| 历史消息记录 |
进入聊天页自动加载历史消息(分页上拉加载更多) |
高 |
| 消息状态显示 |
显示消息发送时间、已读 / 未读状态 |
中 |
| 客服状态显示 |
显示客服在线 / 离线状态,离线时提示留言 |
中 |
| 常见问题快捷回复 |
提供常见问题入口(如:订单查询 / 退换货 / 物流查询),点击自动发送预设问题 |
中 |
| 会话结束 |
用户可主动结束会话 |
低 |
3.1.7 系统公告模块(用户端)
| 功能点 |
描述 |
优先级 |
| 首页公告横幅 |
首页顶部滚动展示最新公告,点击查看详情 |
高 |
| 公告列表 |
公告中心页面,按时间倒序展示所有有效公告 |
高 |
| 公告详情 |
查看公告完整内容(富文本),展示发布时间 |
高 |
| 未读公告提示 |
用户登录后,若有未读新公告则弹出提示弹窗 |
中 |
3.1.8 优惠券模块(用户端)
| 功能点 |
描述 |
优先级 |
| 领券中心 |
展示当前可领取的优惠券列表(满减券/折扣券/无门槛券) |
高 |
| 领取优惠券 |
登录用户点击领取,每人每张限领一次,库存不足则禁止领取 |
高 |
| 我的优惠券 |
查看已领取的优惠券(未使用 / 已使用 / 已过期),分 Tab 展示 |
高 |
| 下单使用优惠券 |
确认订单页选择可用优惠券,自动计算优惠后价格 |
高 |
| 优惠券有效期提示 |
优惠券临近到期(剩余 3 天内)展示"即将过期"红色标签 |
中 |
3.1.9 限时抢购模块(用户端)
| 功能点 |
描述 |
优先级 |
| 抢购活动列表 |
首页展示当前进行中及即将开始的抢购活动场次 |
高 |
| 活动倒计时 |
未开始活动显示开始倒计时,进行中活动显示结束倒计时 |
高 |
| 抢购商品列表 |
展示活动内所有商品,标注原价、抢购价、库存进度条 |
高 |
| 立即抢购 |
点击"立即抢购"跳转订单确认页,使用抢购价下单,库存为 0 时按钮置灰 |
高 |
| 防超卖保障 |
基于 Redis 原子操作扣减库存,防止超卖 |
高 |
| 购买限制 |
每人每场活动每个商品限购数量可配置(如限购 2 件) |
中 |
| 活动历史 |
用户可查看已结束的历史抢购活动 |
低 |
3.2 管理端功能(后台)
3.2.1 登录模块
| 功能点 |
描述 |
优先级 |
| 管理员登录 |
账号 + 密码 + 图形验证码登录 |
高 |
3.2.2 仪表盘模块
| 功能点 |
描述 |
优先级 |
| 核心数据卡片 |
今日订单数、今日销售额、总用户数、总商品数 |
高 |
| 销售趋势图 |
近 7 天 / 近 30 天销售额折线图(ECharts) |
高 |
| 订单状态分布 |
订单状态饼图(待付款 / 待发货 / 待收货 / 已完成 / 已取消) |
中 |
| 热销商品 Top10 |
销量前 10 商品柱状图 |
中 |
3.2.3 用户管理模块
| 功能点 |
描述 |
优先级 |
| 用户列表 |
分页查询,支持按用户名 / 手机号模糊搜索 |
高 |
| 状态管理 |
启用 / 禁用用户账号(禁用后无法登录) |
高 |
| 查看详情 |
查看用户基本信息、历史订单记录 |
中 |
3.2.4 商品分类模块
| 功能点 |
描述 |
优先级 |
| 分类列表 |
树形结构展示一级 / 二级分类 |
高 |
| 分类管理 |
新增 / 编辑 / 删除分类 |
高 |
| 分类排序 |
手动设置排序号,控制前台展示顺序 |
中 |
3.2.5 商品管理模块
| 功能点 |
描述 |
优先级 |
| 商品列表 |
分页查询,支持按名称 / 分类 / 上下架状态筛选 |
高 |
| 商品发布 |
填写商品信息(名称/简介/详情)、上传主图和详情图、设置 SKU 规格(口味/重量/价格/库存) |
高 |
| 商品编辑 |
修改商品所有信息 |
高 |
| 上下架控制 |
单独或批量上架 / 下架商品,控制前台展示 |
高 |
| 库存管理 |
查看和修改各规格商品库存数量 |
高 |
3.2.6 订单管理模块
| 功能点 |
描述 |
优先级 |
| 订单列表 |
分页查询,支持按订单号 / 用户名 / 订单状态筛选 |
高 |
| 订单详情 |
查看订单完整信息、收货地址、商品明细、金额明细 |
高 |
| 订单发货 |
填写物流公司和物流单号,变更订单状态为"待收货" |
高 |
| 取消订单 |
管理员主动取消订单(模拟退款流程) |
中 |
3.2.7 轮播图管理模块
| 功能点 |
描述 |
优先级 |
| 轮播图列表 |
增删改查轮播图 |
高 |
| 跳转配置 |
设置点击图片后跳转的商品 ID 或外部链接 |
高 |
| 排序控制 |
拖拽或手动设置轮播图展示顺序 |
中 |
3.2.8 系统管理模块(可选)
| 功能点 |
描述 |
优先级 |
| 管理员管理 |
超级管理员可添加 / 编辑 / 删除普通管理员账号 |
低 |
| 角色权限 |
基于角色的权限控制(RBAC) |
低 |
3.2.9 客服消息管理模块(后台)
| 功能点 |
描述 |
优先级 |
| 会话列表 |
展示所有用户发起的聊天会话,显示用户信息、最新消息、未读消息数 |
高 |
| 实时接收消息 |
基于 WebSocket 实时接收用户消息,浏览器标题栏闪烁提示未读 |
高 |
| 回复消息 |
客服输入文字或发送图片回复用户 |
高 |
| 会话状态管理 |
标记会话为处理中 / 已解决 / 待处理 |
高 |
| 历史会话查询 |
查询已结束的历史会话记录,支持按用户名 / 时间筛选 |
中 |
| 快捷回复模板 |
管理预设快捷回复话术(如:您好,感谢咨询...),一键插入消息框 |
中 |
| 转接会话 |
将当前会话转接给其他在线客服 |
低 |
3.2.10 系统公告管理模块(后台)
| 功能点 |
描述 |
优先级 |
| 公告列表 |
分页查询所有公告,支持按标题 / 状态 / 时间筛选 |
高 |
| 发布公告 |
填写公告标题、正文内容(富文本),设置生效时间和失效时间 |
高 |
| 编辑公告 |
修改已发布公告的内容和有效期 |
高 |
| 公告状态控制 |
手动上线 / 下线公告,下线后前台不再显示 |
高 |
| 公告置顶 |
设置重要公告为置顶,优先在前台展示 |
中 |
3.2.11 优惠券管理模块(后台)
| 功能点 |
描述 |
优先级 |
| 优惠券列表 |
分页查询所有优惠券,支持按名称 / 类型 / 状态筛选 |
高 |
| 创建优惠券 |
配置优惠券类型(满减/折扣/无门槛)、面额/折扣率、使用门槛、发放总量、每人限领数、有效期 |
高 |
| 编辑优惠券 |
修改未开始发放的优惠券信息 |
高 |
| 上下架控制 |
控制优惠券是否在领券中心展示 |
高 |
| 领取记录查询 |
查询指定优惠券的领取明细(用户名、领取时间、使用状态) |
中 |
| 数据统计 |
展示每张优惠券的已领数量 / 总量、已使用数量 |
中 |
3.2.12 限时抢购活动管理模块(后台)
| 功能点 |
描述 |
优先级 |
| 活动列表 |
分页查询所有活动,按状态(未开始 / 进行中 / 已结束)筛选 |
高 |
| 创建活动 |
填写活动名称、活动场次时间段(开始时间 / 结束时间) |
高 |
| 添加活动商品 |
从商品库中选择商品加入活动,配置抢购价格、抢购库存、每人限购数量 |
高 |
| 移除活动商品 |
活动未开始时可移除商品,进行中活动不可删除 |
高 |
| 活动状态管理 |
手动提前结束活动(结束后恢复商品正常价格) |
中 |
| 抢购数据统计 |
查看每场活动的总参与人数、总销售量、总销售额 |
中 |
3.3 客服聊天模块
3.3.1 整体交互流程
用户点击"联系客服"
│
▼
检查是否已有进行中的会话
│
有 ──┤── 无
│ │
▼ ▼
恢复历史会话 创建新会话(生成 session_id)
│ │
└───┬────┘
▼
建立 WebSocket 连接
│
┌──────┴──────┐
│ │
用户发消息 客服回复消息
│ │
└──────┬──────┘
▼
消息实时推送 + 持久化到 MySQL
3.3.2 消息类型
| 消息类型 |
type 值 |
说明 |
| 文本消息 |
text |
普通文字内容 |
| 图片消息 |
image |
图片 URL |
| 系统消息 |
system |
会话创建 / 结束 / 转接提示 |
| 快捷问题 |
quick |
用户点击快捷问题入口发送的预设文本 |
3.3.3 技术实现方案
| 技术点 |
方案 |
说明 |
| 实时通信 |
Spring WebSocket + STOMP |
后端实现 WebSocket 服务,前端通过 stomp.js 连接 |
| 连接认证 |
WebSocket 握手时携带 JWT Token |
握手拦截器中验证 Token,防止未登录用户建立连接 |
| 消息持久化 |
每条消息写入 chat_message 表 |
保障历史消息可查 |
| 在线状态 |
Redis 存储在线用户集合 |
key: chat:online:users,客服登录 / 断开时更新 |
| 未读消息数 |
Redis 计数器 |
key: chat:unread:{sessionId},客服回复后清零 |
| 离线消息 |
消息先持久化,用户重连后推送 |
保障消息不丢失 |
3.4 系统公告模块
3.4.1 功能流程
管理员后台发布公告(设置有效期)
│
▼
公告写入数据库,状态为"已上线"
│
┌────┴────┐
▼ ▼
首页横幅 公告列表页
滚动展示 按时间倒序展示
│
▼
用户登录时检查是否有未读新公告
│
▼
弹出公告提示弹窗(标记已读后不再弹出)
3.4.2 公告类型
| 类型 |
说明 |
前台展示位置 |
| 普通公告 |
常规运营通知 |
公告列表 |
| 重要公告 |
系统升级、重大活动通知 |
首页横幅 + 弹窗 |
| 活动公告 |
促销、节日活动预告 |
首页横幅 + 公告列表 |
3.5 优惠券模块
3.5.1 优惠券类型设计
| 类型 |
字段标识 |
说明 |
举例 |
| 满减券 |
full_reduce |
满指定金额减固定金额 |
满 100 减 20 |
| 折扣券 |
discount |
按折扣率打折,可设置最高抵扣上限 |
9 折,最高抵扣 50 元 |
| 无门槛券 |
no_threshold |
无需满额,直接抵扣固定金额 |
直减 5 元 |
3.5.2 优惠券使用规则
- 每人每张优惠券限领 N 张(后台可配置)
- 优惠券有固定有效期(如:领取后 7 天内有效,或指定日期范围)
- 下单时同一笔订单只能使用一张优惠券
- 取消订单后优惠券自动退回(模拟实现)
- 过期未使用的优惠券不可继续使用
3.5.3 优惠金额计算逻辑
用户选择优惠券
│
▼
校验:订单金额 >= 使用门槛?
│
是 │ 否(不可用,置灰)
▼
计算优惠金额:
满减券:优惠金额 = 券面值
折扣券:优惠金额 = min(订单金额 × (1 - 折扣率), 最高抵扣)
无门槛券:优惠金额 = 券面值
│
▼
实付金额 = 订单金额 - 优惠金额(最低 0.01 元)
3.6 限时抢购活动模块
3.6.1 活动状态流转
创建活动(未开始)
│
到达开始时间
│
▼
活动进行中 ──── 库存耗尽 ──── 活动结束(售罄)
│
到达结束时间 / 管理员手动结束
│
▼
活动已结束
3.6.2 防超卖设计(核心技术点)
用户发起抢购请求
│
▼
① Redis DECR 原子操作扣减库存(key: seckill:stock:{activityId}:{productId})
│
库存 >= 0 ?
是 │ 否(返回"已抢完")
│
▼
② 将下单任务写入异步队列(Redis List / MQ)
│
▼
③ 后台消费队列,创建订单写入 MySQL
│
▼
④ 返回用户"抢购成功,请尽快付款"
3.6.3 限购校验逻辑
| 校验项 |
说明 |
| 活动状态校验 |
活动必须处于"进行中"状态 |
| 库存校验 |
Redis 中库存必须 > 0 |
| 重复购买校验 |
同一用户同一活动同一商品购买数量不超过限购数 |
| 登录校验 |
未登录用户跳转登录页 |
4.1 核心数据表清单
| 表名 |
中文名 |
说明 |
user |
用户表 |
存储普通注册用户 |
admin |
管理员表 |
存储后台管理员 |
category |
商品分类表 |
支持多级分类(parent_id) |
product |
商品表 |
商品基础信息 |
product_sku |
商品 SKU 表 |
商品规格(口味/重量/价格/库存) |
cart |
购物车表 |
用户购物车商品 |
orders |
订单主表 |
订单基本信息、收货地址、金额 |
order_item |
订单商品明细表 |
订单中的商品列表 |
address |
收货地址表 |
用户收货地址 |
favorite |
收藏表 |
用户收藏的商品 |
banner |
轮播图表 |
首页轮播图配置 |
chat_session |
客服会话表 |
用户与客服的聊天会话 |
chat_message |
聊天消息表 |
每条聊天消息记录 |
quick_reply |
快捷回复模板表 |
客服预设快捷话术 |
notice |
系统公告表 |
公告标题、内容、有效期 |
coupon |
优惠券表 |
优惠券配置信息 |
user_coupon |
用户优惠券表 |
用户领取记录及使用状态 |
seckill_activity |
限时抢购活动表 |
活动时间、名称、状态 |
seckill_product |
抢购商品表 |
活动商品、抢购价、库存、限购数 |
seckill_order |
抢购订单表 |
记录用户抢购记录(防重复购买) |
4.2 核心表结构(简化版)
user(用户表)
| 字段 |
类型 |
说明 |
| id |
BIGINT |
主键,自增 |
| username |
VARCHAR(50) |
用户名 |
| password |
VARCHAR(100) |
加密密码 |
| phone |
VARCHAR(20) |
手机号 |
| avatar |
VARCHAR(255) |
头像 URL |
| status |
TINYINT |
状态:0-禁用 1-启用 |
| create_time |
DATETIME |
创建时间 |
| update_time |
DATETIME |
更新时间 |
category(商品分类表)
| 字段 |
类型 |
说明 |
| id |
BIGINT |
主键,自增 |
| name |
VARCHAR(50) |
分类名称 |
| parent_id |
BIGINT |
父分类 ID,0 表示一级分类 |
| level |
TINYINT |
层级:1-一级 2-二级 3-三级 |
| sort |
INT |
排序号 |
| icon |
VARCHAR(255) |
分类图标 |
product(商品表)
| 字段 |
类型 |
说明 |
| id |
BIGINT |
主键,自增 |
| name |
VARCHAR(200) |
商品名称 |
| category_id |
BIGINT |
分类 ID |
| main_image |
VARCHAR(255) |
商品主图 |
| detail |
TEXT |
商品详情(富文本/HTML) |
| status |
TINYINT |
状态:0-下架 1-上架 |
| create_time |
DATETIME |
创建时间 |
product_sku(商品 SKU 表)
| 字段 |
类型 |
说明 |
| id |
BIGINT |
主键,自增 |
| product_id |
BIGINT |
商品 ID |
| sku_name |
VARCHAR(100) |
规格名称(如:香辣味/500g) |
| price |
DECIMAL(10,2) |
售价 |
| stock |
INT |
库存数量 |
orders(订单主表)
| 字段 |
类型 |
说明 |
| id |
BIGINT |
主键,自增 |
| order_no |
VARCHAR(32) |
订单编号(唯一) |
| user_id |
BIGINT |
用户 ID |
| total_amount |
DECIMAL(10,2) |
订单总金额 |
| pay_amount |
DECIMAL(10,2) |
实付金额 |
| status |
TINYINT |
状态:0-待付款 1-待发货 2-待收货 3-已完成 4-已取消 |
| receiver_name |
VARCHAR(50) |
收货人姓名 |
| receiver_phone |
VARCHAR(20) |
收货人电话 |
| receiver_address |
VARCHAR(255) |
收货地址 |
| remark |
VARCHAR(500) |
订单备注 |
| pay_time |
DATETIME |
支付时间 |
| deliver_time |
DATETIME |
发货时间 |
| receive_time |
DATETIME |
收货时间 |
| create_time |
DATETIME |
创建时间 |
chat_session(客服会话表)
| 字段 |
类型 |
说明 |
| id |
BIGINT |
主键,自增 |
| session_no |
VARCHAR(32) |
会话编号(唯一) |
| user_id |
BIGINT |
发起用户 ID |
| admin_id |
BIGINT |
接待客服 ID(NULL 表示待分配) |
| status |
TINYINT |
状态:0-待处理 1-处理中 2-已解决 |
| create_time |
DATETIME |
会话创建时间 |
| update_time |
DATETIME |
最后活跃时间 |
chat_message(聊天消息表)
| 字段 |
类型 |
说明 |
| id |
BIGINT |
主键,自增 |
| session_id |
BIGINT |
所属会话 ID |
| sender_id |
BIGINT |
发送者 ID |
| sender_type |
TINYINT |
发送者类型:0-用户 1-客服 |
| type |
VARCHAR(10) |
消息类型:text / image / system |
| content |
TEXT |
消息内容(文字或图片URL) |
| is_read |
TINYINT |
是否已读:0-未读 1-已读 |
| create_time |
DATETIME |
发送时间 |
notice(系统公告表)
| 字段 |
类型 |
说明 |
| id |
BIGINT |
主键,自增 |
| title |
VARCHAR(200) |
公告标题 |
| content |
TEXT |
公告正文(富文本) |
| type |
TINYINT |
类型:0-普通 1-重要 2-活动 |
| is_top |
TINYINT |
是否置顶:0-否 1-是 |
| status |
TINYINT |
状态:0-下线 1-上线 |
| start_time |
DATETIME |
生效时间 |
| end_time |
DATETIME |
失效时间 |
| create_time |
DATETIME |
创建时间 |
coupon(优惠券表)
| 字段 |
类型 |
说明 |
| id |
BIGINT |
主键,自增 |
| name |
VARCHAR(100) |
优惠券名称 |
| type |
TINYINT |
类型:0-满减 1-折扣 2-无门槛 |
| amount |
DECIMAL(10,2) |
满减面值 / 折扣率(如 0.9 表示九折) |
| min_amount |
DECIMAL(10,2) |
最低使用金额(0 表示无门槛) |
| max_discount |
DECIMAL(10,2) |
折扣券最高抵扣金额(满减/无门槛填0) |
| total |
INT |
发放总量(-1 表示不限量) |
| remain |
INT |
剩余可领数量 |
| per_limit |
INT |
每人限领数量 |
| status |
TINYINT |
状态:0-未上线 1-已上线 2-已结束 |
| start_time |
DATETIME |
领取开始时间 |
| end_time |
DATETIME |
领取截止时间 |
| valid_days |
INT |
领取后有效天数(与 valid_end_time 二选一) |
user_coupon(用户优惠券表)
| 字段 |
类型 |
说明 |
| id |
BIGINT |
主键,自增 |
| user_id |
BIGINT |
用户 ID |
| coupon_id |
BIGINT |
优惠券 ID |
| status |
TINYINT |
状态:0-未使用 1-已使用 2-已过期 |
| order_id |
BIGINT |
使用时关联的订单 ID(NULL 表示未使用) |
| receive_time |
DATETIME |
领取时间 |
| use_time |
DATETIME |
使用时间 |
| expire_time |
DATETIME |
过期时间 |
seckill_activity(限时抢购活动表)
| 字段 |
类型 |
说明 |
| id |
BIGINT |
主键,自增 |
| name |
VARCHAR(100) |
活动名称 |
| start_time |
DATETIME |
活动开始时间 |
| end_time |
DATETIME |
活动结束时间 |
| status |
TINYINT |
状态:0-未开始 1-进行中 2-已结束 |
| create_time |
DATETIME |
创建时间 |
seckill_product(抢购商品表)
| 字段 |
类型 |
说明 |
| id |
BIGINT |
主键,自增 |
| activity_id |
BIGINT |
活动 ID |
| product_id |
BIGINT |
商品 ID |
| sku_id |
BIGINT |
SKU ID |
| seckill_price |
DECIMAL(10,2) |
抢购价格 |
| seckill_stock |
INT |
抢购总库存 |
| remain_stock |
INT |
剩余库存 |
| per_limit |
INT |
每人限购数量 |
| 技术点 |
应用场景 |
说明 |
| JWT + 拦截器 |
用户认证 |
Token 无状态登录,用户端和管理端分别签发不同 Token,区分权限 |
| Redis 缓存 |
热点数据加速 |
缓存轮播图、商品分类、热销商品,减少数据库压力,设置合理过期时间 |
| 全局异常处理 |
系统健壮性 |
@ControllerAdvice + @ExceptionHandler 统一处理异常和返回格式 |
| 统一返回结果 |
接口规范 |
封装统一的 JSON 响应结构(code / message / data) |
| 文件上传 |
图片管理 |
商品图、轮播图、头像上传,本地文件系统存储 |
| MyBatis-Plus |
ORM 增强 |
简化 CRUD,使用分页插件、条件构造器、代码生成器 |
| 跨域处理 |
前后端分离 |
SpringBoot 配置 CORS,支持本地开发联调 |
| 参数校验 |
数据合法性 |
@Valid + @NotNull / @Size 等注解进行入参校验 |
| 数据可视化 |
后台仪表盘 |
ECharts 绘制销售趋势图、订单状态饼图、热销商品柱状图 |
| 订单状态机 |
订单流转 |
严格定义订单状态流转规则,防止非法状态变更 |
| WebSocket 实时通信 |
客服聊天 |
使用 Spring WebSocket + STOMP 协议实现双向实时消息推送 |
| Redis 在线状态 |
客服聊天 |
Redis Set 维护在线用户集合,计数器管理未读消息数 |
| 消息持久化 |
客服聊天 |
所有聊天消息写入 MySQL,保障离线消息不丢失,支持历史查询 |
| Redis 原子操作防超卖 |
限时抢购 |
DECR 原子递减库存,防止高并发下超卖,结合异步队列削峰 |
| 优惠券状态机 |
优惠券 |
严格管控优惠券 未使用→已使用/已过期 的状态流转,防止重复核销 |
| 定时任务 |
公告/活动/优惠券 |
使用 @Scheduled 定时扫描,自动更新过期公告下线、活动状态、优惠券状态 |
六、项目目录结构
snack-mall/
├── snack-mall-api/ # SpringBoot 后端项目
│ ├── src/main/java/com/snack/
│ │ ├── SnackMallApplication.java
│ │ ├── controller/ # 控制器层(按模块分包)
│ │ │ ├── UserController.java
│ │ │ ├── ProductController.java
│ │ │ ├── OrderController.java
│ │ │ └── AdminController.java
│ │ │ └── ChatController.java # 客服聊天控制器
│ │ ├── websocket/ # WebSocket 相关
│ │ │ ├── ChatWebSocketHandler.java
│ │ │ ├── WebSocketConfig.java
│ │ │ └── StompMessageHandler.java
│ │ ├── service/ # 业务逻辑层
│ │ │ ├── UserService.java
│ │ │ └── impl/
│ │ ├── mapper/ # 数据访问层(MyBatis-Plus)
│ │ ├── entity/ # 实体类(对应数据库表)
│ │ ├── dto/ # 数据传输对象(请求/响应)
│ │ ├── vo/ # 视图对象(返回前端的特定结构)
│ │ ├── config/ # 配置类(CORS、MyBatisPlus、Redis)
│ │ ├── interceptor/ # 拦截器(JWT 认证)
│ │ ├── utils/ # 工具类(JWT、文件上传、MD5)
│ │ ├── handler/ # 全局异常处理器
│ │ └── enums/ # 枚举类(订单状态、用户状态等)
│ └── src/main/resources/
│ ├── mapper/ # XML 映射文件
│ ├── static/uploads/ # 上传文件存储目录
│ └── application.yml # 配置文件
│
├── snack-mall-admin/ # Vue3 管理端项目
│ ├── src/
│ │ ├── views/ # 页面视图
│ │ │ ├── login/ # 登录页
│ │ │ ├── dashboard/ # 仪表盘
│ │ │ ├── user/ # 用户管理
│ │ │ ├── product/ # 商品管理
│ │ │ ├── order/ # 订单管理
│ │ │ ├── chat/ # 客服聊天管理
│ │ │ └── system/ # 系统设置
│ │ ├── components/ # 公共组件
│ │ ├── api/ # API 接口请求(按模块)
│ │ ├── router/ # Vue Router 路由配置
│ │ ├── store/ # Pinia 状态管理
│ │ ├── utils/ # 工具函数(request、token、format)
│ │ └── App.vue
│ ├── package.json
│ └── vite.config.js
│
└── snack-mall-web/ # Vue3 用户端项目
├── src/
│ ├── views/
│ │ ├── home/ # 首页
│ │ ├── category/ # 分类页
│ │ ├── product/ # 商品详情
│ │ ├── cart/ # 购物车
│ │ ├── order/ # 订单相关
│ │ ├── chat/ # 在线客服聊天
│ │ └── user/ # 用户中心
│ ├── components/ # 公共组件
│ ├── api/
│ ├── router/
│ ├── store/
│ └── utils/
├── package.json
└── vite.config.js
七、接口设计规范
7.1 RESTful API 设计
| 资源 |
GET |
POST |
PUT |
DELETE |
/api/products |
获取商品列表 |
— |
— |
— |
/api/products/{id} |
获取商品详情 |
— |
— |
— |
/api/cart |
获取购物车 |
添加商品 |
修改数量 |
清空购物车 |
/api/cart/{id} |
— |
— |
— |
删除购物车商品 |
/api/orders |
获取订单列表 |
创建订单 |
— |
— |
/api/orders/{id} |
获取订单详情 |
— |
取消订单 |
— |
/api/orders/{id}/pay |
— |
支付订单 |
— |
— |
/api/orders/{id}/receive |
— |
确认收货 |
— |
— |
/api/chat/sessions |
获取会话列表 |
创建/恢复会话 |
— |
— |
/api/chat/sessions/{id}/messages |
获取历史消息 |
— |
— |
— |
/api/chat/quick-replies |
获取快捷回复列表 |
— |
— |
— |
/api/notices |
获取公告列表 |
— |
— |
— |
/api/notices/{id} |
获取公告详情 |
— |
— |
— |
/api/coupons |
获取可领取优惠券列表 |
— |
— |
— |
/api/coupons/{id}/receive |
— |
领取优惠券 |
— |
— |
/api/user/coupons |
查看我的优惠券 |
— |
— |
— |
/api/seckill/activities |
获取抢购活动列表 |
— |
— |
— |
/api/seckill/activities/{id}/products |
获取活动商品 |
— |
— |
— |
/api/seckill/buy |
— |
发起抢购下单 |
— |
— |
7.2 WebSocket 消息格式
WebSocket 连接地址:ws://服务器地址/ws/chat?token={JWT_TOKEN}
客户端发送消息:
{
"sessionId": 1,
"type": "text",
"content": "我的订单什么时候发货?"
}
服务端推送消息:
{
"id": 100,
"sessionId": 1,
"senderType": 1,
"senderName": "客服小美",
"type": "text",
"content": "您好,您的订单预计明天发货",
"createTime": "2026-06-01 14:30:00"
}
7.3 统一响应格式
{
"code": 200,
"message": "操作成功",
"data": {}
}
7.4 状态码定义
| 状态码 |
含义 |
| 200 |
成功 |
| 400 |
请求参数错误 |
| 401 |
未登录或 Token 过期 |
| 403 |
无权限 |
| 404 |
资源不存在 |
| 500 |
服务器内部错误 |
| 1001 |
业务错误(自定义) |
八、毕设论文结构建议
| 章节 |
内容 |
| 第 1 章 绪论 |
研究背景与意义、国内外研究现状、论文主要研究内容 |
| 第 2 章 相关技术介绍 |
SpringBoot、Vue3、MySQL、Redis、MyBatis-Plus 等核心技术介绍 |
| 第 3 章 系统分析 |
可行性分析(技术/经济/操作)、需求分析(功能需求/非功能需求)、用例图 |
| 第 4 章 系统设计 |
系统架构设计、功能模块设计、数据库设计(E-R 图、表结构)、接口设计 |
| 第 5 章 系统实现 |
核心功能实现(含关键代码)、界面展示截图 |
| 第 6 章 系统测试 |
测试环境、功能测试用例、测试结果 |
| 第 7 章 总结与展望 |
工作总结、不足之处、未来展望 |
| 参考文献 |
|
| 致谢 |
|
附录
A. 开发环境建议
| 工具 |
版本/说明 |
| JDK |
1.8 / 11 / 17 |
| IDEA |
IntelliJ IDEA 2022+ |
| VS Code / WebStorm |
前端开发 |
| MySQL |
8.0 |
| Redis |
6.x / 7.x |
| Navicat / DBeaver |
数据库可视化工具 |
| Postman |
接口测试 |
B. 功能优先级说明
- 高:核心功能,必须实现
- 中:重要功能,建议实现
- 低:扩展功能,时间充裕时实现
本文档随项目迭代持续更新。