1. 立项背景和目标
当前高校及社区内二手物品交易需求旺盛,但传统线下交易存在信息不对称、时间空间受限、缺乏信用保障等痛点。本项目旨在开发一个基于Spring Boot的二手物品交易网站后端,为用户提供安全便捷的线上二手交易平台。目标包括:实现用户注册登录、商品自由发布与下架、多维度分类检索、在线下单与订单状态跟踪、留言互动等核心交易闭环;通过Redis缓存提升热点数据访问效率;保证接口规范、数据一致性与系统稳定性,最终支撑每日千级并发浏览及百级交易量,降低闲置资源浪费。
2. 软件功能、核心功能模块的介绍
系统分为六大核心模块:①用户模块:注册、登录、个人信息管理,使用JWT令牌+Redis会话缓存;②商品模块:商品发布(含图片上传)、上架/下架、编辑、删除,支持按标题、类别、价格区间检索;③分类模块:多级商品分类管理,支持前台分类导航;④订单模块:生成订单、支付模拟、取消订单、确认收货,订单状态(待付款/已付款/已发货/已完成/已取消)流转控制;⑤留言模块:用户对商品提问、卖家回复,形成留言板;⑥首页缓存模块:利用Redis缓存热门商品列表及用户会话,减少数据库压力。
3. 业务流程、功能路径描述
用户进入系统后,需先注册/登录(未登录只能浏览商品)。登录成功后进入首页,可看到按发布时间倒序的商品列表及热门推荐。用户通过搜索框输入关键词或点击分类树筛选商品。查看商品详情页时,可浏览图片、描述、价格及卖家留言。买家点击“立即购买”后生成订单,状态为“待付款”;模拟支付成功后状态变更为“已付款”;卖家在“卖家中心”看到订单后发货,更新状态为“已发货”;买家确认收货后状态变为“已完成”。若7天内未确认,系统自动完成。用户还可对商品进行留言咨询,卖家回复后即时显示。整套流程覆盖了从浏览到交易完结的所有节点。
1. 整体架构和设计思路,不同模块使用的技术栈
本项目采用经典的SSM三层架构(Controller-Service-DAO),前后端分离设计,后端基于Spring Boot 2.7,持久层使用MyBatis-Plus简化开发,数据库使用MySQL 8.0存储业务数据,Redis 6.2用于缓存登录会话及首页热点商品。接口遵循RESTful风格,使用Postman进行集成测试。设计思路:将用户、商品、订单、留言作为核心实体,建立合理的表关联(如商品表关联用户ID,订单表关联商品ID和买家ID)。利用Redis的过期机制管理用户登录态(存储JWT或token,过期时间30分钟),并通过缓存预热将浏览量高的商品列表加载到Redis,定时更新。文件上传采用本地存储路径+静态资源映射,使用MultipartFile接收图片并生成UUID文件名。全局统一异常处理(@RestControllerAdvice)封装错误码返回,参数校验使用Hibernate Validator。
2. “我”的负责模块和结果(尽可能量化)
本人独立完成整个后端系统的数据库设计、全部业务逻辑编码、接口开发与本地环境测试。具体量化成果:设计并创建了9张数据表(用户、商品、商品分类、订单、订单状态日志、留言、购物车、地址、收藏);开发了25个REST接口,包括注册登录、商品CRUD、分页检索、下单、订单状态变更、留言回复等;使用Redis实现了用户会话缓存,平均接口响应时间从无缓存的120ms降低至45ms;商品首页查询QPS从200提升至850;完成了全套接口文档(使用Swagger3);项目上线后在模拟1000并发用户压测下,系统稳定运行,事务成功率99.6%;顺利通过项目验收,并获得导师“功能完整、代码规范”的评价。
3. “我”遇到的难点、坑,和解决方案
难点一:商品多条件分页检索(标题模糊、分类ID、价格区间、排序方式)导致SQL动态拼接复杂。解决方案:使用MyBatis的和标签构建动态SQL,结合PageHelper插件实现物理分页,避免全表扫描。
难点二:Redis缓存与数据库一致性问题——用户发布新商品后,首页缓存依然为旧数据。解决方案:采用“主动失效”策略,在商品上架/下架/新增时,删除对应的首页缓存key,下次请求时重建缓存;同时设置缓存过期时间60分钟作为兜底。
难点三:订单状态流转中并发问题,如买家付款同时卖家发货可能导致状态错乱。解决方案:在订单状态更新SQL中加入where status=当前状态条件,并使用乐观锁(版本号)保证原子性;同时利用Redis分布式锁(Redisson)对同一个订单的修改操作进行互斥控制。
难点四:图片上传文件名冲突及安全过滤。解决方案:使用UUID+时间戳生成文件名,白名单校验文件扩展名(仅允许jpg/p