旧物交易平台这个选题其实挺有意思的,我去年指导过几个类似的毕业设计项目。现在年轻人对二手交易的接受度越来越高,但市面上成熟的二手平台要么太重(像某鱼),要么垂直领域太专(像某转)。做一个轻量级的校园旧物交易小程序,既符合毕设的体量要求,又能解决实际问题。
这个项目采用SpringBoot+Android的双端架构很合理。后台用SpringBoot快速搭建RESTful API,前端用Android原生开发保证用户体验。我见过有人试图用纯H5做,结果支付流程和消息推送都成了痛点。下面我就结合自己踩过的坑,把这个项目的完整实现路径拆解清楚。
SpringBoot选2.7.x版本最稳(现在3.x刚出不久,容易遇到兼容性问题)。关键依赖包括:
数据库用MySQL 8.0,交易类系统务必设置事务隔离级别为READ_COMMITTED。有个学生曾经用REPEATABLE_READ导致库存超卖,调试了整整一周。
Android端采用MVVM架构:
特别提醒:商品详情页要用ConstraintLayout实现动态高度,我见过有人用LinearLayout嵌套导致内存溢出。
java复制// 伪代码示例:带事务的商品发布
@Transactional
public Result publishGoods(GoodsDTO dto) {
// 1. 校验价格是否合法
if(dto.getPrice().compareTo(dto.getOriginalPrice()) > 0) {
throw new BizException("折后价不能高于原价");
}
// 2. 敏感词过滤(建议用DFA算法)
if(SensitiveFilter.contains(dto.getDescription())){
return Result.fail("包含违禁词");
}
// 3. 图片处理(缩略图+水印)
List<String> processedImages = imageService.upload(dto.getImages());
// 4. 保存商品
Goods goods = convertToEntity(dto);
goods.setImages(JsonUtils.toJson(processedImages));
goodsMapper.insert(goods);
// 5. 记录用户行为
userActionLogService.log(UserAction.PUBLISH, goods.getId());
return Result.success(goods.getId());
}
踩坑提示:图片一定要做MD5去重!有学生没做这个功能,结果被人用同一张图片刷了上百个商品。
交易状态机要严谨:
code复制待付款 -> 已取消
-> 已付款 -> 已发货 -> 已完成
-> 退款中 -> 已退款
用状态模式实现最优雅:
java复制public interface OrderState {
void pay(Order order);
void cancel(Order order);
void deliver(Order order);
void receive(Order order);
void refund(Order order);
}
// 具体状态类实现业务规则
public class PaidState implements OrderState {
@Override
public void deliver(Order order) {
order.setState(new DeliveredState());
// 触发发货通知
notifyService.sendDeliverMsg(order);
}
// 其他方法抛出IllegalStateException
}
悲观锁和乐观锁的取舍:
sql复制UPDATE goods SET stock = stock - 1
WHERE id = ? AND stock >= 1
Android端用:
有个常见误区:以为WebSocket可以替代全部推送。实际上要保持连接稳定需要配合心跳机制和断线重连,电量消耗会很大。
毕设文档最容易犯的三个错误:
建议按这个结构组织文档:
code复制1. 需求分析(包含真实的用户访谈记录)
2. 系统设计(类图要体现设计模式)
3. 核心代码说明(配关键流程图)
4. 测试报告(压力测试结果要量化)
评委最常问的五个问题:
你的系统和竞品有什么区别?
数据库怎么保证一致性?
遇到最难的技术问题是什么?
如何防止恶意刷单?
如果继续开发会优化什么?
我带的项目去年拿了优秀毕设,关键是在演示环节做了两件事: