毕业设计实战:基于Spring Boot的可信捐赠系统设计与实现全攻略

0 阅读10分钟

毕业设计实战:基于Spring Boot的可信捐赠系统设计与实现全攻略

在开发“基于Spring Boot的可信捐赠系统”毕业设计时,曾因“捐赠物资流转与审核流程脱节”踩过关键坑——初期未设计清晰的捐赠状态机和物资入库流程,导致用户提交捐赠后管理员审核通过但物资库存未同步更新、捐赠物资去向无法追溯,耗费3天重构捐赠管理模块、引入审核状态机和物资关联机制才解决问题📝。基于此次实战经验,本文精简拆解核心开发流程,附避坑要点与实操细节,为同类毕设提供可落地的实施参考。

一、需求分析:聚焦捐赠+积分兑换双核心,避免功能冗余

部分同学易陷入“功能堆砌”误区,比如我曾耗时2天开发“捐赠地图可视化”模块,最终因偏离“捐赠管理、商品兑换、积分系统、新闻公告”核心需求被导师要求删减。明确“用户捐赠→管理员审核→积分奖励→商品兑换”的业务闭环,是降低返工率的关键。

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

角色核心功能
管理员用户管理、捐赠审核(通过/拒绝)、商品管理(上架/下架积分商品)、订单处理、新闻发布、论坛管理
用户在线捐赠(提交物资信息)、积分查看、商品兑换(使用积分)、订单查询、新闻浏览、论坛交流

2. 需求避坑要点

  • 拒绝空想调研:邀请10名同学模拟“用户提交捐赠→管理员审核→获得积分→兑换商品→查看订单”完整流程,基于“用户需要知道积分变动明细”需求,增设“积分流水”模块(记录每次积分增减原因),实用性远大于冗余的“捐赠地图”;
  • 明确约束条件:提前规定“捐赠编号自动生成(格式:JZ+年月日+序号)”“捐赠需审核才能获得积分”“商品兑换后扣减积分”“积分不能为负数”“论坛帖子需审核”,为系统实现提供明确依据。

二、技术选型:稳定框架+积分事务控制,新手可上手

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

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

三、数据库设计:业务关联清晰,支撑捐赠-积分-兑换闭环

数据库设计直接影响后续开发效率。前期因未设计“积分流水表”和“捐赠状态字段”,导致用户积分变动无法追溯。

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

  • 管理员表(users):id、username、password(MD5加密)、role、addtime;
  • 用户表(yonghu):id、yonghu_name、yonghu_phone、yonghu_id_number、yonghu_photo、yonghu_email、new_money(积分余额)、create_time;
  • 捐赠表(juanzeng):id、juanzeng_yuyue_uuid_number(捐赠编号)、yonghu_id、juanzeng_yuyue_text(捐赠理由)、juanzeng_yuyue_name(物资名称)、juanzeng_yuyue_shuliang(数量)、juanzeng_yuyue_photo(照片)、juanzeng_yuyue_yesno_types(捐赠状态:0待审核/1通过/2拒绝)、insert_time;
  • 积分流水表(jifen_log):id、yonghu_id、change_amount(变动积分)、balance_after(变动后余额)、reason(变动原因:捐赠奖励/兑换扣除)、related_id(关联ID)、create_time;
  • 商品表(shangpin):id、shangpin_name、shangpin_uuid_number(商品编号)、shangpin_photo、shangpin_types、shangpin_kucun_number(库存)、shangpin_new_money(所需积分)、shangpin_content、create_time;
  • 商品订单表(shangpin_order):id、shangpin_order_uuid_number(订单编号)、address_id、shangpin_id、yonghu_id、buy_number、shangpin_order_true_price(消耗积分)、shangpin_order_types(订单状态)、insert_time;
  • 收货地址表(address):id、yonghu_id、address_name、address_phone、address_dizhi、isdefault_types;
  • 新闻信息表(news):id、news_name、news_photo、news_types、news_content、insert_time;
  • 论坛表(forum):id、forum_name、yonghu_id、forum_content、forum_state_types、insert_time。

2. 关键业务SQL示例

示例SQL(查询用户积分明细及当前余额):

-- 查询用户积分流水,包含每次变动的原因和余额
SELECT 
    l.*,
    u.yonghu_name,
    u.new_money as current_balance
FROM jifen_log l
LEFT JOIN yonghu u ON l.yonghu_id = u.id
WHERE l.yonghu_id = #{userId}
ORDER BY l.create_time DESC

关键避坑:捐赠状态用整数表示(0待审核/1通过/2拒绝);积分流水表记录每次变动的前后余额,便于对账;捐赠审核通过时必须在事务中同时更新用户积分和记录流水。

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

无需复杂功能,优先完成以下6个核心模块,其中捐赠审核与积分发放是答辩重点。

1. 捐赠管理(核心业务模块)

  • 核心逻辑:用户提交捐赠(填写物资名称、数量、上传照片)→管理员审核→审核通过则增加用户积分;
  • 页面设计:捐赠列表显示捐赠编号、物资、数量、状态标签;审核弹窗带备注;
  • 代码要点(审核核心):
@Transactional
public void auditDonation(Long donationId, Integer status, String reply) {
    // 1. 更新捐赠审核状态
    Juanzeng donation = juanzengMapper.selectById(donationId);
    donation.setJuanzengYuyueYesnoTypes(status);
    donation.setJuanzengYuyueYesnoText(reply);
    donation.setJuanzengYuyueShenheTime(new Date());
    juanzengMapper.updateById(donation);
    
    // 2. 如果审核通过,发放积分(假设每件物资奖励10积分)
    if (status == 1) { // 通过
        Integer rewardPoints = donation.getJuanzengYuyueShuliang() * 10;
        
        // 更新用户积分
        yonghuMapper.addPoints(donation.getYonghuId(), rewardPoints);
        
        // 记录积分流水
        JifenLog log = new JifenLog();
        log.setYonghuId(donation.getYonghuId());
        log.setChangeAmount(rewardPoints);
        log.setReason("捐赠奖励");
        log.setRelatedId(donationId);
        log.setCreateTime(new Date());
        jifenLogMapper.insert(log);
    }
}

2. 商品管理(积分兑换模块)

  • 核心逻辑:管理员维护积分商品(设置名称、所需积分、库存);
  • 页面设计:商品列表卡片式展示,显示商品图片、所需积分、库存;
  • 代码要点:商品编号自动生成;库存实时扣减;下架商品不可兑换。

3. 商品兑换与订单管理(积分消费)

  • 核心逻辑:用户使用积分兑换商品→扣减积分→生成订单→管理员发货;
  • 页面设计:商品详情页显示兑换按钮;订单列表显示状态标签;
  • 代码要点(兑换核心):
@Transactional
public boolean exchangeProduct(Long userId, Long productId, Integer quantity, Long addressId) {
    // 1. 查询商品信息
    Shangpin product = shangpinMapper.selectById(productId);
    
    // 2. 校验库存
    if (product.getShangpinKucunNumber() < quantity) {
        throw new RuntimeException("库存不足");
    }
    
    // 3. 校验用户积分
    Yonghu user = yonghuMapper.selectById(userId);
    int totalPoints = product.getShangpinNewMoney().intValue() * quantity;
    if (user.getNewMoney().intValue() < totalPoints) {
        throw new RuntimeException("积分不足");
    }
    
    // 4. 扣减库存
    shangpinMapper.reduceStock(productId, quantity);
    
    // 5. 扣减用户积分
    yonghuMapper.deductPoints(userId, totalPoints);
    
    // 6. 记录积分流水
    JifenLog log = new JifenLog();
    log.setYonghuId(userId);
    log.setChangeAmount(-totalPoints);
    log.setReason("商品兑换");
    log.setRelatedId(productId);
    jifenLogMapper.insert(log);
    
    // 7. 创建订单
    ShangpinOrder order = new ShangpinOrder();
    order.setShangpinOrderUuidNumber(generateOrderNo());
    order.setAddressId(addressId);
    order.setShangpinId(productId);
    order.setYonghuId(userId);
    order.setBuyNumber(quantity);
    order.setShangpinOrderTruePrice(new BigDecimal(totalPoints));
    order.setShangpinOrderTypes(0); // 待发货
    order.setInsertTime(new Date());
    orderMapper.insert(order);
    
    return true;
}

4. 积分流水查看(用户视角)

  • 核心逻辑:用户查看积分变动历史,了解积分来源和去向;
  • 页面设计:列表显示时间、变动原因、变动积分、余额;
  • 代码要点:积分流水只增不删;支持按时间筛选。

5. 新闻信息管理(资讯模块)

  • 核心逻辑:管理员发布捐赠活动新闻、积分规则公告等;
  • 页面设计:后台富文本编辑器;前台列表展示;
  • 代码要点:新闻排序按发布时间倒序;首页轮播显示最新3条。

6. 论坛管理(社区互动)

  • 核心逻辑:用户发布捐赠心得、求助信息;管理员审核帖子;
  • 页面设计:论坛列表显示帖子标题、作者、状态;详情页可评论;
  • 代码要点:帖子状态控制(0待审核/1已通过/2驳回);支持楼中楼回复。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五、可信捐赠特色功能设计(关键加分项)

可信捐赠系统的核心在于“可信”二字,即捐赠流程透明、积分发放可追溯,以下是实测有效的设计方案:

1. 捐赠-积分-兑换全流程追溯

环节记录内容可追溯信息
捐赠捐赠编号、物资、数量、时间谁在什么时间捐了什么
审核审核人、审核时间、审核意见谁审核的、为什么通过/拒绝
积分奖励流水号、变动积分、余额捐赠获得了多少积分
兑换订单号、商品、消耗积分积分去了哪里

2. 积分防刷与安全控制

// 积分操作统一加事务
@Transactional
public void addPointsWithLog(Long userId, Integer points, String reason, Long relatedId) {
    // 1. 更新用户积分
    yonghuMapper.addPoints(userId, points);
    
    // 2. 记录流水
    JifenLog log = new JifenLog();
    log.setYonghuId(userId);
    log.setChangeAmount(points);
    log.setReason(reason);
    log.setRelatedId(relatedId);
    log.setCreateTime(new Date());
    
    // 3. 获取最新余额(用于流水记录)
    Yonghu user = yonghuMapper.selectById(userId);
    log.setBalanceAfter(user.getNewMoney());
    jifenLogMapper.insert(log);
}

3. 可信度评分机制

-- 根据捐赠次数和金额计算用户可信度
UPDATE yonghu SET trust_score = (
    SELECT COUNT(*) * 10 + SUM(juanzeng_yuyue_shuliang) 
    FROM juanzeng 
    WHERE yonghu_id = #{id} AND juanzeng_yuyue_yesno_types = 1
) WHERE id = #{id};

六、测试与答辩:流程演示为主,突出捐赠闭环

1. 核心测试用例

测试场景操作步骤预期结果
用户捐赠全流程用户提交捐赠→管理员审核通过用户积分增加;积分流水记录
用户兑换商品用户使用积分兑换商品→积分扣减订单生成;积分流水记录扣减
积分不足校验用户积分不足时尝试兑换提示“积分不足”
库存不足校验商品库存不足时兑换提示“库存不足”
论坛发帖审核用户发帖→管理员审核通过帖子前台可见

2. 答辩准备技巧

  • 演示流程:分角色演示(管理员端 + 用户端)→ 用户提交捐赠 → 管理员审核 → 用户获得积分 → 用户兑换商品 → 管理员发货 → 用户查看订单 → 展示完整的捐赠-积分-兑换闭环;
  • 业务讲解:准备一页PPT展示系统功能结构图(图4.1),说明每个模块的作用和角色定位;
  • 技术亮点:重点讲解捐赠审核与积分发放的事务一致性、积分流水追溯机制、商品兑换流程控制;
  • 突出问题解决:讲清“如何保证积分不丢失”(事务+流水记录)、“捐赠物资去向如何追溯”(捐赠记录+审核记录)、“积分和订单一致性如何保证”(事务管理);提前预判“为什么要设计积分流水表”,回答“保证每一分积分都可追溯,增强系统可信度”。

结语

本文核心是“聚焦捐赠-积分-兑换核心业务、实现积分安全流转、设计完整的捐赠闭环”。毕设无需复杂系统,把捐赠管理+积分系统+商品兑换的业务逻辑讲透、实现一个可运行的可信捐赠系统、展示完整的捐赠闭环,即可成为答辩亮点。

若需完整项目源码(带详细注释)、测试数据SQL脚本、积分流水表完整设计,可在评论区留言“SpringBoot可信捐赠系统”获取;开发中遇问题(如事务一致性、积分并发扣减、审核状态设计),也可留言咨询~ 祝毕设顺利!🎉