毕业设计实战:基于SpringBoot的校园便利平台设计与实现全攻略

0 阅读13分钟

毕业设计实战:基于SpringBoot的校园便利平台设计与实现全攻略

在开发“基于SpringBoot的校园便利平台”毕业设计时,曾因“二手商品交易与跑腿订单状态脱节”踩过关键坑——初期未设计清晰的订单状态机和跑腿领单联动机制,导致用户购买二手商品后订单状态未同步更新、跑腿接单后完成状态无法自动关联支付、评价信息与订单完成情况脱钩,耗费4天重构订单管理模块、引入订单状态流转和跑腿-支付联动机制才解决问题📝。基于此次实战经验,本文精简拆解核心开发流程,附避坑要点与实操细节,为同类毕设提供可落地的实施参考。

一、需求分析:聚焦二手+跑腿双核心,避免功能冗余

部分同学易陷入“功能堆砌”误区,比如我曾耗时3天开发“校园地图导航”模块,最终因偏离“二手商品交易、校园跑腿、购物车、订单管理”核心需求被导师要求删减。明确“二手商品发布→用户购买→订单生成→跑腿发布→接单配送→完成评价”的业务闭环,是降低返工率的关键。

1. 核心角色与功能(精简版)

角色核心功能
管理员用户管理、商品类型管理、二手商品管理、校园跑腿管理、跑腿领单管理、完成订单管理、评价信息管理、订单管理、系统管理
用户二手商品浏览/购买/收藏/评论、购物车管理、校园跑腿发布/领单、订单查看、地址管理、个人中心

2. 需求避坑要点

  • 拒绝空想调研:邀请20名在校学生模拟“用户发布二手商品→其他用户购买→订单生成→发布跑腿需求→跑腿接单→完成配送→评价反馈”完整流程,基于“用户需要知道订单状态和跑腿进度”需求,增设“订单状态跟踪”和“跑腿进度提醒”模块,实用性远大于冗余的“校园地图”;
  • 明确约束条件:提前规定“商品编号自动生成(格式:SP+年月日+序号)”“订单编号自动生成”“跑腿费用需用户确认后支付”“完成订单后才能评价”,为系统实现提供明确依据。

二、技术选型:稳定框架+订单联动,新手可上手

前期曾尝试引入Redis缓存商品库存,因数据一致性难保证且学习成本高,调试耗时3天。最终确定“成熟框架+数据库事务”组合:

技术工具选型理由避坑提醒
Spring Boot 2.x + MyBatis-Plus快速开发,简化配置,高效实现CRUD和业务逻辑,声明式事务管理方便事务注解@Transactional记得在Service层添加;订单创建和库存扣减必须加事务
Vue 2.x + ElementUI组件丰富,快速构建前后台界面,表格和表单组件好用订单状态用标签展示;跑腿进度用步骤条显示
MySQL 5.7存储用户、商品、订单、跑腿等核心业务数据金额字段用Decimal类型;事务要保证订单和支付数据一致性
Thymeleaf(可选)服务端模板引擎,适合快速开发后台管理界面毕设时间充裕可统一用Vue

三、数据库设计:业务关联清晰,支撑商品-订单-跑腿闭环

数据库设计直接影响后续开发效率。前期因未设计“订单状态字段”和“跑腿领单联动机制”,导致用户购买后订单状态未同步、跑腿接单后完成状态与支付脱钩。

1. 核心表结构(精选12张表)

  • 管理员表(users):id、username、password(MD5加密)、role、addtime;
  • 用户表(yonghu):id、zhanghao(账号)、mima(密码)、xingming(姓名)、xingbie(性别)、shouji(手机)、touxiang(头像)、money(余额)、addtime;
  • 商品类型表(shangpinleixing):id、shangpinleixing(商品类型)、addtime;
  • 二手商品表(ershoushangpin):id、shangpinbianhao(商品编号)、shangpinmingcheng(商品名称)、shangpinleixing(商品类型)、pinpai(品牌)、guige(规格)、yuanjia(原价)、price(售价)、tupian(图片)、shangpinjieshao(商品介绍)、onelimittimes(单限)、alllimittimes(库存)、thumbsupnum(赞)、crazilynum(踩)、clicktime(最近点击时间)、clicknum(点击次数)、addtime;
  • 购物车表(cart):id、tablename(商品表名)、userid(用户id)、goodid(商品id)、goodname(商品名称)、picture(图片)、buynumber(购买数量)、price(单价)、discountprice(会员价)、addtime;
  • 订单表(orders):id、orderid(订单编号)、tablename(商品表名)、userid(用户id)、goodid(商品id)、goodname(商品名称)、picture(图片)、buynumber(购买数量)、price(价格)、total(总价格)、type(支付类型)、status(订单状态)、address(地址)、tel(电话)、consignee(收货人)、remark(备注)、logistics(物流)、addtime;
  • 地址表(address):id、userid(用户id)、address(地址)、name(收货人)、phone(电话)、isdefault(是否默认地址)、addtime;
  • 校园跑腿表(xiaoyuanpaotui):id、biaoti(标题)、tupian(图片)、quhuodidian(取货地点)、shoujiandidian(收件地点)、paotuifeiyong(跑腿费用)、dingdanzhuangkuang(订单状况)、zhanghao(发布账号)、shouji(手机)、paotuirenwu(跑腿任务)、feiyongshuoming(费用说明)、addtime;
  • 跑腿领单表(paotuilingdan):id、biaoti(标题)、paotuifeiyong(费用)、dingdanzhuangtai(订单状态)、shouji(发布人手机)、zhanghao(发布账号)、lingquzhanghao(领取账号)、lingquren(领取人)、lianxidianhua(联系电话)、lingqushijian(领取时间)、yusongdashijian(预送达时间)、addtime;
  • 完成订单表(wanchengdingdan):id、biaoti(标题)、paotuifeiyong(跑腿费用)、zhanghao(发布账号)、lingquzhanghao(领取账号)、lingquren(领取人)、lianxidianhua(联系电话)、wanchengshijian(完成时间)、ispay(是否支付)、addtime;
  • 评价信息表(pingjiaxinxi):id、biaoti(标题)、pingfen(评分)、pingjia(评价)、zhanghao(发布账号)、lingquzhanghao(领取账号)、lingquren(领取人)、lianxidianhua(联系电话)、pingjiashijian(评价时间)、crossuserid、crossrefid、addtime;
  • 收藏表(shoucang):id、userid(用户id)、refid(商品id)、tablename(表名)、name(名称)、picture(图片)、type(收藏类型)、addtime。

2. 关键业务SQL示例

示例SQL(查询用户订单及跑腿状态):

-- 查询用户的二手商品订单和跑腿完成情况
SELECT 
    o.*,
    c.lingquren,
    c.lingquzhanghao,
    c.dingdanzhuangtai as paotui_status
FROM orders o
LEFT JOIN paotuilingdan c ON o.orderid = c.biaoti
WHERE o.userid = #{userId}
ORDER BY o.addtime DESC

关键避坑:订单状态需与跑腿领单状态联动;完成订单后自动更新跑腿领单状态;评价需关联完成订单。

四、核心功能实现:8大模块满足答辩需求

无需复杂功能,优先完成以下8个核心模块,其中订单与跑腿联动是答辩重点。

1. 用户管理(基础模块)

  • 核心逻辑:用户注册登录、个人信息维护、余额管理;
  • 页面设计:注册登录界面;个人中心显示头像、姓名、余额、订单列表;
  • 代码要点(用户注册):
public void addYonghu(Yonghu user) {
    // 校验账号是否重复
    LambdaQueryWrapper<Yonghu> wrapper = new LambdaQueryWrapper<>();
    wrapper.eq(Yonghu::getZhanghao, user.getZhanghao());
    if (yonghuMapper.selectCount(wrapper) > 0) {
        throw new RuntimeException("账号已存在");
    }
    user.setMoney(0f);
    user.setAddtime(new Date());
    yonghuMapper.insert(user);
}

2. 二手商品管理(核心交易模块)

  • 核心逻辑:用户发布二手商品(名称、类型、品牌、规格、售价、库存、介绍)→管理员审核→其他用户浏览、购买;
  • 页面设计:商品列表卡片式展示,显示名称、售价、图片、库存;详情页展示完整介绍;
  • 代码要点(商品发布与库存管理):
@Transactional
public void addErshoushangpin(Ershoushangpin product) {
    // 生成商品编号
    String bianhao = "SP" + new SimpleDateFormat("yyyyMMdd").format(new Date()) 
                     + String.format("%04d", new Random().nextInt(10000));
    product.setShangpinbianhao(bianhao);
    product.setThumbsupnum(0);
    product.setCrazilynum(0);
    product.setClicknum(0);
    product.setAddtime(new Date());
    ershoushangpinMapper.insert(product);
    
    log.info("用户发布了二手商品:{}", product.getShangpinmingcheng());
}

// 购买时扣减库存
public void reduceStock(Long productId, int quantity) {
    Ershoushangpin product = ershoushangpinMapper.selectById(productId);
    if (product.getAlllimittimes() < quantity) {
        throw new RuntimeException("库存不足");
    }
    product.setAlllimittimes(product.getAlllimittimes() - quantity);
    ershoushangpinMapper.updateById(product);
}

3. 购物车管理(交易准备模块)

  • 核心逻辑:用户将商品加入购物车→修改数量→确认购买→生成订单;
  • 页面设计:购物车列表显示商品名称、图片、单价、数量、总价;支持删除和修改数量;
  • 代码要点(购物车添加):
public void addCart(Cart cart) {
    // 校验是否已存在
    LambdaQueryWrapper<Cart> wrapper = new LambdaQueryWrapper<>();
    wrapper.eq(Cart::getGoodid, cart.getGoodid())
           .eq(Cart::getUserid, cart.getUserid());
    Cart existCart = cartMapper.selectOne(wrapper);
    
    if (existCart != null) {
        existCart.setBuynumber(existCart.getBuynumber() + cart.getBuynumber());
        cartMapper.updateById(existCart);
    } else {
        cart.setAddtime(new Date());
        cartMapper.insert(cart);
    }
}

4. 订单管理(核心交易流程)

  • 核心逻辑:用户确认购买→生成订单→支付→发货→确认收货;
  • 页面设计:订单列表显示订单编号、商品名称、数量、总价、状态;支持支付、取消、确认收货;
  • 代码要点(订单创建与状态流转):
@Transactional
public Orders createOrder(Long userId, List<Cart> cartItems, Address address) {
    // 1. 生成订单编号
    String orderId = "DD" + System.currentTimeMillis();
    Orders mainOrder = null;
    
    for (Cart cart : cartItems) {
        // 2. 创建订单项
        Orders order = new Orders();
        order.setOrderid(orderId);
        order.setUserid(userId);
        order.setGoodid(cart.getGoodid());
        order.setGoodname(cart.getGoodname());
        order.setPicture(cart.getPicture());
        order.setBuynumber(cart.getBuynumber());
        order.setPrice(cart.getPrice());
        order.setTotal(cart.getPrice() * cart.getBuynumber());
        order.setStatus("未支付");
        order.setAddress(address.getAddress());
        order.setTel(address.getPhone());
        order.setConsignee(address.getName());
        order.setAddtime(new Date());
        ordersMapper.insert(order);
        
        // 3. 扣减库存
        reduceStock(cart.getGoodid(), cart.getBuynumber());
        
        // 4. 删除购物车记录
        cartMapper.deleteById(cart.getId());
        
        if (mainOrder == null) mainOrder = order;
    }
    
    log.info("用户 {} 创建订单 {}", userId, orderId);
    return mainOrder;
}

// 订单支付
@Transactional
public void payOrder(String orderId, Long userId) {
    // 更新订单状态
    LambdaUpdateWrapper<Orders> wrapper = new LambdaUpdateWrapper<>();
    wrapper.eq(Orders::getOrderid, orderId)
           .set(Orders::getStatus, "已支付");
    ordersMapper.update(null, wrapper);
    
    // 更新用户余额(如有需要)
    log.info("订单 {} 支付成功", orderId);
}

5. 校园跑腿管理(特色服务模块)

  • 核心逻辑:用户发布跑腿需求(取货地点、收件地点、跑腿费用、任务描述)→其他用户领单→配送→完成→支付;
  • 页面设计:跑腿列表显示标题、取货点、收件点、费用、状态;详情页显示任务描述;
  • 代码要点(跑腿发布与领单):
// 发布跑腿
public void addPaotui(Xiaoyuanpaotui paotui) {
    paotui.setDingdanzhuangkuang("待接单");
    paotui.setAddtime(new Date());
    xiaoyuanpaotuiMapper.insert(paotui);
}

// 领单
@Transactional
public void lingdan(Long paotuiId, Long userId, String lingquren) {
    Xiaoyuanpaotui paotui = xiaoyuanpaotuiMapper.selectById(paotuiId);
    if (!"待接单".equals(paotui.getDingdanzhuangkuang())) {
        throw new RuntimeException("订单已被接取");
    }
    
    // 更新跑腿状态
    paotui.setDingdanzhuangkuang("已接单");
    xiaoyuanpaotuiMapper.updateById(paotui);
    
    // 创建领单记录
    Paotuilingdan lingdan = new Paotuilingdan();
    lingdan.setBiaoti(paotui.getBiaoti());
    lingdan.setPaotuifeiyong(paotui.getPaotuifeiyong());
    lingdan.setDingdanzhuangtai("配送中");
    lingdan.setZhanghao(paotui.getZhanghao());
    lingdan.setShouji(paotui.getShouji());
    lingdan.setLingquzhanghao(String.valueOf(userId));
    lingdan.setLingquren(lingquren);
    lingdan.setLingqushijian(new Date());
    lingdan.setAddtime(new Date());
    paotuilingdanMapper.insert(lingdan);
    
    log.info("用户 {} 接取了跑腿订单 {}", lingquren, paotui.getBiaoti());
}

6. 跑腿完成与支付(服务闭环)

  • 核心逻辑:跑腿员完成配送→更新完成订单→用户确认支付;
  • 页面设计:完成订单列表显示标题、费用、配送员、完成时间、支付状态;
  • 代码要点(跑腿完成与支付联动):
@Transactional
public void completePaotui(Long lingdanId) {
    Paotuilingdan lingdan = paotuilingdanMapper.selectById(lingdanId);
    lingdan.setDingdanzhuangtai("已完成");
    paotuilingdanMapper.updateById(lingdan);
    
    // 创建完成订单
    Wanchengdingdan wancheng = new Wanchengdingdan();
    wancheng.setBiaoti(lingdan.getBiaoti());
    wancheng.setPaotuifeiyong(lingdan.getPaotuifeiyong());
    wancheng.setZhanghao(lingdan.getZhanghao());
    wancheng.setLingquzhanghao(lingdan.getLingquzhanghao());
    wancheng.setLingquren(lingdan.getLingquren());
    wancheng.setLianxidianhua(lingdan.getLianxidianhua());
    wancheng.setWanchengshijian(new Date());
    wancheng.setIspay("未支付");
    wancheng.setAddtime(new Date());
    wanchengdingdanMapper.insert(wancheng);
    
    log.info("跑腿订单 {} 已完成,等待支付", lingdan.getBiaoti());
}

// 跑腿支付
@Transactional
public void payPaotui(Long wanchengId) {
    Wanchengdingdan wancheng = wanchengdingdanMapper.selectById(wanchengId);
    wancheng.setIspay("已支付");
    wanchengdingdanMapper.updateById(wancheng);
    
    log.info("跑腿订单 {} 已支付", wancheng.getBiaoti());
}

7. 评价信息管理(反馈模块)

  • 核心逻辑:用户对完成的跑腿进行评分和评价→管理员查看管理;
  • 页面设计:评价列表显示标题、评分、评价内容、评价人、被评价人;
  • 代码要点:评价需关联完成订单,防止重复评价。

8. 地址管理(收货模块)

  • 核心逻辑:用户维护收货地址(收货人、电话、地址),支持设置默认地址;
  • 页面设计:地址列表显示收货人、电话、地址、默认标识;支持增删改查。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五、校园便利特色功能设计(关键加分项)

校园便利平台的核心在于“校园服务闭环”,即二手交易+跑腿配送+订单支付+评价反馈全流程联动,以下是实测有效的设计方案:

1. 商品-订单-跑腿全流程追溯

环节记录内容可追溯信息
商品发布商品编号、名称、类型、售价、库存什么商品、多少钱、还有多少
购物车商品名称、数量、总价买了什么、买多少
订单生成订单编号、商品信息、收货地址、订单状态什么时候买的、发到哪、什么状态
跑腿发布标题、取货点、收件点、费用、任务要送什么、从哪到哪、多少钱
跑腿领单领取人、领取时间、预送达时间谁接单了、什么时候送
跑腿完成完成时间、支付状态送到了吗、付钱了吗
评价反馈评分、评价内容服务怎么样

2. 订单状态自动流转

// 订单状态枚举
public enum OrderStatus {
    UNPAID("未支付"),
    PAID("已支付"),
    SHIPPED("已发货"),
    RECEIVED("已完成"),
    CANCELLED("已取消"),
    REFUNDED("已退款");
    
    private String desc;
    // getter/setter...
}

// 确认收货
@Transactional
public void confirmReceive(String orderId) {
    LambdaUpdateWrapper<Orders> wrapper = new LambdaUpdateWrapper<>();
    wrapper.eq(Orders::getOrderid, orderId)
           .eq(Orders::getStatus, "已发货")
           .set(Orders::getStatus, "已完成");
    ordersMapper.update(null, wrapper);
    
    log.info("订单 {} 已确认收货", orderId);
}

3. 跑腿费用自动计算

// 根据距离和时间计算跑腿费用(扩展功能)
public int calculatePaotuiFee(String quhuo, String shoujian) {
    // 基础费用5元
    int baseFee = 5;
    // 可扩展根据距离计算额外费用
    // int distance = getDistance(quhuo, shoujian);
    // int extraFee = distance * 2;
    return baseFee;
}

4. 用户信用/活跃度统计

-- 统计用户发布的商品数量和完成订单数量
SELECT 
    u.zhanghao,
    u.xingming,
    COUNT(DISTINCT p.id) as product_count,
    COUNT(DISTINCT o.orderid) as order_count,
    COUNT(DISTINCT w.id) as paotui_count
FROM yonghu u
LEFT JOIN ershoushangpin p ON u.id = p.userid
LEFT JOIN orders o ON u.id = o.userid
LEFT JOIN wanchengdingdan w ON u.zhanghao = w.zhanghao
GROUP BY u.id

六、测试与答辩:流程演示为主,突出校园服务闭环

1. 核心测试用例

测试场景操作步骤预期结果
商品发布全流程用户发布二手商品→管理员审核商品信息正确显示;库存正确
购买支付流程用户添加购物车→下单→支付订单生成;库存扣减;订单状态更新
跑腿发布领单用户发布跑腿→其他用户领单跑腿状态更新为已接单;领单记录生成
跑腿完成支付跑腿员完成配送→用户支付完成订单生成;支付状态更新
评价功能用户对跑腿进行评价评价记录保存

2. 答辩准备技巧

  • 演示流程:分角色演示(管理员端 + 用户端)→ 用户A发布二手商品 → 用户B浏览购买 → 用户B下单支付 → 订单生成 → 用户A发布跑腿需求 → 用户C接单 → 用户C完成配送 → 用户B确认支付 → 用户B评价 → 展示完整的商品-订单-跑腿-支付-评价闭环;
  • 业务讲解:准备一页PPT展示系统功能结构图(图4-2),说明每个模块的作用和角色定位;
  • 技术亮点:重点讲解订单与跑腿的联动机制、购物车与订单的事务一致性、跑腿领单状态流转;
  • 突出问题解决:讲清“如何保证库存不超卖”(下单时扣减库存+事务)、“跑腿领单如何防止重复接单”(状态校验+事务)、“订单状态如何自动流转”(状态字段+状态机);提前预判“为什么要设计完成订单表”,回答“便于追溯跑腿服务的完成情况和支付状态”。

结语

本文核心是“聚焦商品-订单-跑腿核心业务、实现校园服务闭环、设计完整的校园便利平台”。毕设无需复杂系统,把二手商品交易+购物车+订单管理+校园跑腿+评价反馈的业务逻辑讲透、实现一个可运行的校园便利平台、展示完整的校园服务闭环,即可成为答辩亮点。

若需完整项目源码(带详细注释)、测试数据SQL脚本、订单状态流转完整代码,可在评论区留言“SpringBoot校园便利平台”获取;开发中遇问题(如事务一致性、订单状态流转、跑腿领单并发控制),也可留言咨询~ 祝毕设顺利!🎉