二手交易论坛
创建于 2026 年 3 月 24 日
项目介绍
这是一个面向课程设计与答辩演示场景的 C2C 二手交易论坛系统。二手交易与普通电商最大的差异在于”价格要谈”:买家希望砍价、卖家想守住底价,双方需要在一个私密的会话里来回沟通,谈拢之后再进入订单履约。这个项目正是围绕这条主线设计:商品发布 → 议价沟通 → 按议定价下单 → 支付、发货/自提、收货 → 评价或投诉,全程由管理员在独立后台完成审核与治理。
系统采用”2 个前端 + 1 个后端”的拆分方式:frontend-user 是买卖双方共用的用户端,frontend-admin 是管理员独立后台,backend 是统一的 Spring Boot 服务。项目里不单独拆”卖家端”,因为买家和卖家本质上是同一类业务用户,经常是同一个人切换身份,共用一套前端可以复用商品详情、消息、订单中心等大量页面,也更适合课程周期内落地。仓库同时配套 MySQL 8 初始化脚本(17 张业务表)、系统架构文档和毕业论文文档,开箱即可用于功能演示、论文截图与答辩展示。
项目架构
后端是标准的 Spring Boot 3 单体服务(Java 17,端口 8080),按 com.secondhand.market 包组织:common 层收敛统一返回(ApiResponse/PageResponse)、全局异常处理、JWT 工具与密码哈希工具;config 层通过 WebConfig 注册鉴权拦截器和全局 CORS;modules 下按业务域划分 auth、user、category、product、home、bargain、order、complaint、notice、dashboard 共十个模块,每个模块内部统一为 controller.app / controller.admin / domain / mapper / service 五层结构,接口按用户端和管理端物理分开,职责一目了然。
鉴权采用轻量方案:登录签发 JWT(jjwt 0.12.6,有效期一天),AuthInterceptor 拦截 /app/** 与 /admin/** 路径,白名单放行登录、注册、首页概览、分类列表与商品浏览等公开接口;/admin/** 额外校验 ADMIN 角色,校验结果放入 AuthContext 线程上下文供业务层取用。数据库采用”逻辑外键”设计:表间保留关联字段与索引,但不建物理外键约束,配合 MyBatis-Plus 3.5.7 开发与迁移都更轻。用户端 Vue 3 侧通过路由守卫 + 角色元信息控制访问(如卖家中心 meta.roles: ['SELLER']),与后端拦截器形成双重校验。
核心功能
- 角色与登录:
BUYER/SELLER/ADMIN三种角色,账号可同时拥有买卖双角色(演示账号demo01),登录注册、个人资料、密码哈希存储、/app/auth/me获取当前用户。 - 商品域:两级商品分类、卖家发布(标题、摘要、详情、多图、原价/售价/底价、成色等级、是否允许议价、配送/自提/两者皆可、自提地址、所在城市)、发布预览与上下架管理;商品带
publish_status(草稿/待审核/上架中/已售出/已下架)与audit_status(待审核/通过/驳回)双状态机,审核过程写入biz_product_audit_log;交易大厅支持分类筛选、价格区间、成色筛选、关键字搜索与收藏。 - 议价消息:以
biz_bargain_session(会话)与biz_bargain_message(消息)两级模型落地,消息区分文本 / 报价 / 系统三类,会话状态机为进行中 → 已接受 / 已拒绝 / 已关闭;买家发起议价、卖家回复与报价、任意一方接受最新报价后,系统提示”请买家尽快创建订单”,下单时按latest_offer_price成交价计价。 - 订单履约:单商品下单(校验商品在售、已有进行中订单互斥),支持配送与自提两种方式,自提生成随机提货码;订单号程序生成,支付为模拟支付,随后卖家发货或通知自提、买家确认收货、评价(星级 + 内容)、发起投诉;每一步都写入
biz_order_log,买家与卖家端订单页可全程追溯状态。 - 管理后台:工作台展示商品数、订单数、成交额、投诉数等概览;商品审核(通过/驳回并填写备注)、用户管理(封禁/解禁)、投诉处理(处理结果与进度)、公告发布与上下线,以及基于 ECharts 的交易额趋势、分类销量与热门商品排行统计。
功能截图
暂无运行截图。
快速上手
环境要求:JDK 17+、Maven、Node.js、MySQL 8。先在数据库工具中创建目标数据库并手动选中,导入 sql/01_init_used_trade_forum.sql(脚本内含 DROP TABLE 与建表语句,可重复执行);然后修改 backend/src/main/resources/application.yml 中的数据源连接,依次启动三端:
cd backend && mvn -Dmaven.repo.local=../.mvn-repo spring-boot:run # 后端 :8080
cd frontend-user && npm install && npm run dev # 用户端
cd frontend-admin && npm install && npm run dev # 管理端
默认演示账号:买家 buyer01 / 123456、卖家 seller01 / 123456、买卖双角色 demo01 / 123456、管理员 admin / 123456。项目后端(mvn package)与两个前端(npm run build)均已实际构建通过;构建时 Element Plus 与 ECharts 存在大 chunk 警告,不影响运行。
总结
这个项目的价值在于把二手交易里最真实的”谈价”环节做成了完整闭环:议价会话里接受的报价会直接变成订单的成交价,订单再进入支付、履约、评价、投诉的完整链路,而不是把议价做成孤立的聊天功能。技术上,三端分离、接口按 app/admin 分包、逻辑外键 + 双状态机的商品管理、JWT 拦截器鉴权,都体现出清晰的工程组织方式,对想学习”Spring Boot 3 + Vue 3 全栈单体如何模块化落地”的读者是一份结构整齐、可直接运行的参考实现。当前版本消息通过会话接口拉取呈现,文档中规划的 WebSocket 实时推送与 Redis 等能力可作为后续迭代方向继续演进。