一个基于前后端分离架构的社区团购系统,提供完整的电商功能和管理后台。
本项目是一个完整的社区团购系统,包含用户端和管理后台,支持商品浏览、购物车、订单管理、团购活动、以及内置的 AI 智能导购与文案生成系统。
后端
- Spring Boot 2.7.14
- MyBatis-Plus 3.5.3.1
- MySQL 8.0
- Sa-Token 1.37.0 (权限认证)
- SpringDoc OpenAPI (Swagger UI)(接口文档)
- Redis 5.0+ (分布式会话、AI 历史会话持久化与 TTS 音频高速物理缓存)
- LangChain4j 1.15.1 (LLM 开发框架,兼容 OpenAI 协议,支持全新 Tool Call 与自主 Agent)
- BCrypt (密码加密)
- Maven 3.6+
前端
- Vue 3.3.4 (Composition API)
- Vite 4.4.9
- Ant Design Vue 4.0.3
- Axios 1.5.0
- Pinia 2.1.6
- Vue Router 4.2.4
- marked 18.0.4 (Markdown 富文本解析)
community-mall/
├── community-mall-backend/ # 后端项目
│ ├── src/main/java/com/community/mall/
│ │ ├── CommunityMallApplication.java # 启动类
│ │ ├── common/ # 公共类
│ │ │ └── Result.java # 统一响应封装
│ │ ├── config/ # 配置类
│ │ │ ├── CorsConfig.java # 跨域配置
│ │ │ ├── AiConfig.java # AI 服务装配与客户端注入配置
│ │ │ ├── RedisChatMemoryStore.java # 基于 Redis 的分布式 AI 记忆存储
│ │ │ ├── MybatisPlusConfig.java # MyBatis-Plus配置
│ │ │ └── SecurityConfig.java # Spring Security配置
│ │ ├── controller/ # 控制器
│ │ │ ├── AuthController.java # 认证控制器
│ │ │ ├── CartController.java # 购物车控制器
│ │ │ ├── ChatController.java # 智能导购客服控制器
│ │ │ ├── TtsController.java # AI 语音合成服务控制器 (支持 Redis 缓存及配置校验)
│ │ │ ├── OrderController.java # 订单控制器
│ │ │ ├── ProductController.java # 商品控制器
│ │ │ └── admin/ # 管理员控制器
│ │ │ ├── AdminProductController.java
│ │ │ └── AiController.java # 后台 AI 文案自动生成控制器
│ │ ├── dto/ # 数据传输对象
│ │ ├── entity/ # 实体类
│ │ ├── exception/ # 异常处理
│ │ ├── mapper/ # MyBatis Mapper
│ │ ├── service/ # 业务逻辑层
│ │ │ ├── CustomerAiService.java # 智能导购接口
│ │ │ ├── AiAssistant.java # 后台文案生成接口
│ │ │ ├── ProductTool.java # 大模型 Agent 可调用查库工具
│ │ │ └── ProductService.java # 商品服务
│ │ └── vo/ # 视图对象
│ ├── src/main/resources/
│ │ ├── application.yml # 基础配置文件(含端口、AI占位符、数据库映射)
│ │ ├── application-local.yml # 本地敏感配置(已加入 .gitignore,配置本地 API-KEY)
│ │ ├── banner.txt # 启动Banner
│ │ └── success-banner.txt # 成功启动Banner
│ └── pom.xml # Maven配置
├── frontend/ # 前端项目
│ ├── public/ # 静态资源目录
│ ├── src/
│ │ ├── api/ # API接口封装
│ │ │ ├── ai.js # 智能导购及文案生成接口
│ │ │ └── request.js # Axios封装
│ │ ├── components/ # 公共组件
│ │ │ ├── AppIcon.vue # 图标组件
│ │ │ └── AiCustomerService.vue # 智能导购客服悬浮气泡组件(支持 markdown)
│ │ ├── utils/ # 前端公共工具
│ │ │ └── ttsPlayer.js # 高可用语音播放器工具 (并发防重/内存回收/原生降级)
│ │ ├── layouts/ # 布局组件
│ │ ├── router/ # 路由配置
│ │ ├── stores/ # Pinia状态管理
│ │ ├── styles/ # 全局样式
│ │ └── views/ # 页面组件
│ ├── index.html # 前端 HTML 模板
│ ├── package.json # 前端依赖配置
│ └── vite.config.js # Vite 配置文件
└── database/
└── schema.sql # 数据库初始化脚本
本项目已完全支持 Docker 容器化一键部署,免去您手动配置 JDK、Node.js、MySQL 和 Redis 等繁琐环境的痛苦。容器首次启动时会自动导入数据库表结构与测试商品数据。
复制项目根目录下的 .env.example 并重命名为 .env(该文件已加入 .gitignore),在其中填入您的大模型及 AI 语音大模型参数配置:
# 智能导购客服大模型配置
OPENAI_API_KEY="你的真实大模型API-KEY"
OPENAI_BASE_URL="https://api.deepseek.com" # 或者是其它服务商的接口地址
OPENAI_MODEL_NAME="deepseek-chat"
# MiMo 语音大模型配置(可选)
MIMO_API_KEY="你的真实MiMo-API-KEY"
MIMO_BASE_URL="https://token-plan-cn.xiaomimimo.com/v1"
MIMO_MODEL="mimo-v2.5-tts"
MIMO_VOICE="冰糖"确保本地已安装并运行 Docker / Docker Desktop。在项目根目录下打开终端,执行以下命令:
docker-compose up -d --build系统将自动执行:
- 编译并构建 Java 后端容器镜像(基于 JDK 17,自动排除本地 local 配置文件,安全打包);
- 使用
npm自适应下载依赖并编译前端,将其托管于搭载了反向代理配置的 Nginx 容器中; - 自动拉起 MySQL 8.0 和 Redis 6.2 容器,并在首次启动时自动导入建表和测试商品数据。
- 前端商城主页:http://localhost (内置 Nginx,直接访问默认 80 端口)
- 后端 API 接口:http://localhost:8080/api
- Swagger 接口文档:http://localhost:8080/api/swagger-ui/index.html
- 宿主机暴露端口:MySQL 为
3307端口(密码root),Redis 为6380端口(为了防宿主机物理端口冲突已做安全映射,容器内部网络互连依然使用的是3306/6379,开发无需修改任何后端配置)。
在开始之前,请确保本地已安装并成功启动了以下基础设施:
- JDK 17+
- Maven 3.6+
- MySQL 8.0+
- Redis 5.0+
- Node.js 16+(及 pnpm/npm 包管理器)
系统依靠 Redis 来存储 Sa-Token 的用户登录 Session,并用于持久化 AI 智能导购的历史聊天记录(防止服务重启或集群部署时用户历史对话记忆丢失)。
- Windows 环境启动:
在 Redis 解压目录下运行:
运行
redis-server.exe redis.windows.conf
redis-cli ping验证,若返回PONG即表示成功运行。 - Linux/Mac 环境启动:
sudo systemctl start redis-server # Linux brew services start redis # Mac (Homebrew)
- 连接本地 MySQL 服务。
- 创建名为
community_mall的数据库。 - 导入数据库初始脚本文件:
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS community_mall DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" mysql -u root -p community_mall < database/schema.sql
后端 AI 模块默认将接口地址与模型名称抽象为了属性占位符。本地部署时,需要进行大模型接口的授权配置。
在后端的配置资源目录下手动新建一个本地配置文件:
community-mall-backend/src/main/resources/application-local.yml
(注:该文件已被 .gitignore 忽略,安全不会被提交)。
根据你选用的兼容 OpenAI 协议的大模型服务商(例如 OpenAI、DeepSeek、阿里云通义千问等),在文件中填入真实的配置:
# 本地开发私密配置
openai:
api-key: "你的真实大模型API-KEY" # 从云服务平台获取的密钥
base-url: "https://api.deepseek.com" # 接口地址(如: https://api.openai.com/v1 等)
model-name: "deepseek-v4-pro" # 模型名称(如: gpt-4o 等)如果不创建 application-local.yml 文件,也可以直接在运行环境的操作系统中设置以下环境变量:
OPENAI_API_KEY:填入你的 API Key。OPENAI_BASE_URL:填入兼容接口的 Base URL(默认为https://api.openai.com/v1)。OPENAI_MODEL_NAME:填入对应的模型标识符(默认为gpt-4o)。
系统默认在未配置云端语音服务时,会自动且无缝地优雅降级到浏览器原生的中文语音(Web Speech API)进行朗读播报,提供开箱即用的体验。
若想获得表现力更自然、更有感情色彩的云端大模型人声,您可以在环境变量或本地 application-local.yml 中补充配置:
mimo:
api-key: "你的MIMO-API-KEY" # 官方开放平台获取的密钥
base-url: "https://token-plan-cn.xiaomimimo.com/v1" # 接口基地址
model: "mimo-v2.5-tts" # 合成模型(默认)
voice: "冰糖" # 默认音色,可选音色:冰糖(活泼女声)、茉莉(甜美女声)、苏打(朝气男声)、白桦(儒雅男声)后端集成了以音色+文本组合作为 MD5 的 Redis 极速缓存机制。同一段文本在第二次朗读时的时延将直接从云端大模型的数秒降低至 1ms 级,极大地提升了用户体验。
- 进入后端项目目录:
cd community-mall-backend - 使用 Maven 编译并启动 Spring Boot 应用程序:
启动成功后,控制台会打印出成功 Banner,接口服务将在
mvn clean install mvn spring-boot:run
http://localhost:8080/api运行。 - 验证启动状态:
访问 Swagger UI 在线接口文档,如果能打开表示接口连通正常:
http://localhost:8080/api/swagger-ui/index.html
- 进入前端项目目录:
cd frontend - 安装项目依赖(推荐使用 pnpm,也可以使用 npm/yarn):
# 若未安装 pnpm 可执行:npm install -g pnpm pnpm install - 启动 Vite 本地开发服务器:
前端控制台会输出运行端口,默认在
pnpm dev
http://localhost:3000启动,直接点击链接即可在浏览器中进入商城系统。
- ✅ 用户注册与登录(Sa-Token + Redis)
- ✅ 商品浏览、分类、搜索
- ✅ 智能导购客服“团团”(右下角悬浮气泡,支持多轮对话记忆、基于本地库存的智能检索、Markdown 富文本渲染及语音播报)
- ✅ 个人中心(个人信息管理、头像上传及系统功能快捷入口)
- ✅ 购物车与地址管理
- ✅ 团购活动购买、拼团下单、订单列表及模拟支付
- ✅ AI 推广文案自动生成(添加商品时,可基于商品名及关键词一键生成高吸引力推广文案)
- ✅ 商品管理与上下架控制
- ✅ 团购活动增删改查及订单统计
- ✅ 订单管理与发货状态维护
- ✅ 用户管理及权限配置
- 管理员账号:
- 用户名:
admin - 密码:
123456
- 用户名:
- 测试用户:可在用户端自行注册。
- 原因:大模型服务未打通、密钥无效、或者本地网络无法直连大模型 API,导致代理返回了 HTML 拦截网关报错页。
- 解决方法:
- 检查
application-local.yml里的api-key、base-url是否配置正确。 - 确认网络可连通所配置的 Base URL,若是国内环境,推荐使用阿里云通义千问兼容接口(
https://dashscope.aliyuncs.com/compatible-mode/v1搭配qwen-plus)以获得更好的网络连通表现。
- 检查
- 原因:找不到对应的配置参数。
- 解决方法:检查
application.yml末尾配置,确保包含属性占位符。开发环境确保创建了application-local.yml文件且配置没有拼写错误。
本项目代码版权归作者 Monster(ZouXiaojie) 所有,仅供个人学习与学术交流使用。
未经作者明确书面授权,禁止转载、搬运、复制、修改或用于任何形式的商业用途。