TW

// case · thesis

校园二手交易平台

基于 SpringBoot 3 + Vue3 的前后端分离项目,含商品发布、订单流转与信用评价体系。

毕业设计支持2026.03.18·5 tech stack

项目背景

校园内的二手交易长期依赖社交群聊,信息分散、无法检索、缺乏信任机制。本项目将交易流程产品化,覆盖商品发布、检索、下单、评价的完整闭环。

技术架构

  • 后端:SpringBoot 3 + MyBatis-Plus,JWT 无状态鉴权
  • 前端:Vue3 + TypeScript + Element Plus
  • 存储:MySQL 存业务数据,Redis 做缓存与登录态

关键设计一:订单状态机

订单是典型的有限状态机场景。我们用一个枚举 + 状态迁移表来约束流转,任何非法跳跃都会被拦截:

public enum OrderStatus {
    PENDING_PAY(0), PAID(1), SHIPPED(2), FINISHED(3), CANCELLED(4);

    private static final Map<OrderStatus, Set<OrderStatus>> TRANSITIONS = Map.of(
        PENDING_PAY, EnumSet.of(PAID, CANCELLED),
        PAID,        EnumSet.of(SHIPPED, CANCELLED),
        SHIPPED,     EnumSet.of(FINISHED),
        FINISHED,    EnumSet.noneOf(OrderStatus.class),
        CANCELLED,   EnumSet.noneOf(OrderStatus.class)
    );

    public boolean canTransferTo(OrderStatus target) {
        return TRANSITIONS.getOrDefault(this, Set.of()).contains(target);
    }
}

这样设计的好处是:业务规则集中在枚举里,Service 层只负责调用,不需要在每个方法里重复写 if-else 判断。

关键设计二:列表查询的缓存策略

商品列表是典型的读多写少场景。我们对第一页的热门数据做缓存,写操作时精准失效:

@Cacheable(value = "goods:list", key = "#page + ':' + #size", unless = "#page > 0")
public PageResult<GoodsVO> listGoods(int page, int size) {
    return goodsMapper.selectPage(page, size);
}

只缓存首页、翻页不缓存,是权衡命中率与内存占用后的选择,也是答辩时很好的一个讨论点。

交付内容

源码、数据库脚本、结构说明文档、核心逻辑讲解,以及一份针对该项目高频提问的准备清单。

// contact

有需求?先聊聊你的项目

不管是一次技术支持、一个完整项目,还是想补一段工程能力,都可以先沟通。我们会先了解需求并给出判断,再谈方案与报价。

wechat
Trdfyl
qq
2356245930
探微编程 微信二维码

扫码添加微信