毕业设计实战:基于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可信捐赠系统”获取;开发中遇问题(如事务一致性、积分并发扣减、审核状态设计),也可留言咨询~ 祝毕设顺利!🎉