毕业设计实战:基于Spring Boot的疫情物资捐赠和分配系统设计与实现全攻略
在开发“基于Spring Boot的疫情物资捐赠和分配系统”毕业设计时,曾因“物资库存与捐赠分配逻辑混乱”踩过关键坑——初期未设计清晰的物资状态机和捐赠审核流程,导致物资入库后无法准确追踪去向、捐赠申请与物资发放对应不上,耗费3天重构物资流转模块、引入状态模式和审批流程才解决问题📝。基于此次实战经验,本文精简拆解核心开发流程,附避坑要点与实操细节,为同类毕设提供可落地的实施参考。
一、需求分析:聚焦物资捐赠核心业务,避免功能冗余
部分同学易陷入“功能堆砌”误区,比如我曾耗时2天开发“物资地图分布”模块,最终因偏离“捐赠管理、物资申请、发放追踪、公告发布”核心需求被导师要求删减。明确“捐赠-入库-申请-审批-发放”的业务主线,是降低返工率的关键。
1. 核心角色与功能(精简版)
| 角色 | 核心功能 |
|---|---|
| 管理员 | 用户管理、机构管理、物资管理(物资类别维护)、捐赠审核(用户/机构捐赠审批)、申请审核(物资申请审批)、发放管理(物资出库)、公告发布、论坛管理 |
| 机构 | 物资捐赠(提交捐赠信息)、查看捐赠记录、论坛交流、接收物资发放 |
| 用户 | 物资捐赠(个人捐赠)、物资申请(提交物资需求)、查看申请状态、论坛交流、公告查看 |
2. 需求避坑要点
- 拒绝空想调研:邀请10名同学模拟“用户捐赠物资→管理员审核入库→机构申请物资→管理员审批发放→机构确认接收”完整流程,基于“物资去向需要可追溯”需求,增设“物资流转日志”模块(记录每件物资的捐赠人、入库时间、申请人、发放时间),实用性远大于冗余的“地图分布”;
- 明确约束条件:提前规定“物资编号自动生成(格式:WZ+年月日+序号)”“捐赠需审核才能入库”“申请需审核才能发放”“物资数量必须精确到个位”“发放数量不得超过可用库存”,为系统实现提供明确依据。
二、技术选型:稳定框架+状态机设计,新手可上手
前期曾尝试引入工作流引擎Activiti处理审批流程,因配置复杂且学习成本高,调试耗时4天。最终确定“成熟框架+自定义状态机”组合:
| 技术工具 | 选型理由 | 避坑提醒 |
|---|---|---|
| Spring Boot 2.x + MyBatis-Plus | 快速开发,简化配置,高效实现CRUD和业务逻辑,声明式事务管理方便 | 事务注解@Transactional记得在Service层添加;状态字段用整数枚举 |
| Vue 2.x + ElementUI | 组件丰富,快速构建前后台界面,表格和表单组件好用 | 捐赠/申请状态用标签展示(待审核/通过/拒绝);审批表单加备注字段 |
| MySQL 5.7 | 存储用户、物资、捐赠记录、申请记录、发放记录等核心业务数据 | 物资库存用单独字段维护;所有审批记录留日志表 |
| Thymeleaf(可选) | 服务端模板引擎,适合快速开发后台管理界面 | 毕设时间充裕可统一用Vue |
三、数据库设计:业务关联清晰,支撑物资全流程追踪
数据库设计直接影响后续开发效率。前期因未设计“物资类型字典”和“审批状态字段”,导致业务逻辑混乱。
1. 核心表结构(精选10张表)
- 管理员表(users):id、username、password(MD5加密)、role、addtime;
- 用户表(yonghu):id、yonghu_name、yonghu_phone、yonghu_id_number、yonghu_photo、yonghu_email、create_time;
- 机构表(jigou):id、jigou_name、jigou_phone、jigou_photo、jigou_email、create_time;
- 物资表(wuzi):id、wuzi_name、wuzi_uuid_number(物资编号)、wuzi_photo、wuzi_types(物资类型)、wuzi_content(介绍)、wuzi_kucun(当前库存)、wuzi_delete、insert_time;
- 物资捐赠表(wuzi_juanzeng):id、juanzeng_uuid_number(捐赠单号)、wuzi_id、jigou_id(可为空)、yonghu_id(可为空)、juanzeng_shuliang(捐赠数量)、juanzeng_yesno_types(审核状态:0待审核/1通过/2拒绝)、juanzeng_yesno_text(审核回复)、insert_time;
- 物资申请表(wuzi_shenqing):id、shenqing_uuid_number(申请单号)、wuzi_id、yonghu_id、shenqing_shuliang(申请数量)、shenqing_yesno_types(审核状态:0待审核/1通过/2拒绝)、shenqing_yesno_text(审核回复)、insert_time;
- 发放表(wuzi_fafang):id、wuzi_id、jigou_id(接收机构)、fafang_shuliang(发放数量)、fafang_content(发放说明)、insert_time;
- 物资论坛表(forum):id、forum_name(帖子标题)、yonghu_id、jigou_id、forum_content、forum_state_types(帖子状态)、insert_time;
- 公告信息表(gonggao):id、gonggao_name、gonggao_photo、gonggao_types(公告类型)、gonggao_content、insert_time;
- 字典表(dictionary):id、dic_code、dic_name、code_index、index_name,统一管理物资类型、公告类型、状态值。
2. 关键业务SQL示例
示例SQL(查询物资可用库存及捐赠/申请统计):
-- 查询物资基本信息,同时计算已审核通过的总捐赠量、总发放量、当前库存
SELECT
w.*,
IFNULL(SUM(j.juanzeng_shuliang), 0) as total_donated,
IFNULL(SUM(f.fafang_shuliang), 0) as total_distributed,
(IFNULL(SUM(j.juanzeng_shuliang), 0) - IFNULL(SUM(f.fafang_shuliang), 0)) as current_stock
FROM wuzi w
LEFT JOIN (
SELECT wuzi_id, juanzeng_shuliang
FROM wuzi_juanzeng
WHERE juanzeng_yesno_types = 1 -- 只统计审核通过的捐赠
) j ON w.id = j.wuzi_id
LEFT JOIN wuzi_fafang f ON w.id = f.wuzi_id
WHERE w.wuzi_delete = 0
GROUP BY w.id
关键避坑:捐赠表和申请表都包含审核状态字段,用整数表示(0待审核/1通过/2拒绝);物资库存不直接存储,通过捐赠总量减去发放总量动态计算(或定时任务同步);所有审批记录都需要保留审核备注,便于追溯。
四、核心功能实现:7大模块满足答辩需求
无需复杂功能,优先完成以下7个核心模块,其中捐赠-审核-发放全流程追踪是答辩重点。
1. 用户/机构管理(基础模块)
- 核心逻辑:管理员对用户和机构进行增删改查,支持按名称、手机号搜索;
- 页面设计:表格展示列表,顶部搜索框,每行操作按钮;
- 代码要点:删除前检查是否有未完成的捐赠/申请记录;密码加密存储。
2. 物资管理(基础数据模块)
- 核心逻辑:管理员维护物资类别(通过字典表),添加/编辑物资基本信息;
- 页面设计:物资列表卡片式展示,带图片预览;新增物资表单;
- 代码要点:物资编号自动生成(WZ+年月日+三位随机数);逻辑删除而非物理删除。
3. 物资捐赠管理(核心业务模块-入库)
- 核心逻辑:用户/机构提交捐赠申请(选择物资、填写数量)→ 管理员审核 → 审核通过则增加可用库存;
- 页面设计:捐赠列表显示申请单号、物资、捐赠人、数量、状态标签;审核弹窗带备注输入框;
- 代码要点:
@Transactional
public boolean auditDonation(Long donationId, Integer status, String reply) {
// 1. 更新捐赠审核状态
WuziJuanzeng donation = donationMapper.selectById(donationId);
donation.setJuanzengYesnoTypes(status);
donation.setJuanzengYesnoText(reply);
donationMapper.updateById(donation);
// 2. 如果审核通过,增加物资库存(通过捐赠总量记录)
if (status == 1) { // 通过
// 记录捐赠入库日志(可选)
insertDonationLog(donation);
}
return true;
}
4. 物资申请管理(核心业务模块-出库)
- 核心逻辑:用户提交物资申请 → 管理员审核(检查库存是否充足)→ 审核通过则进入发放流程;
- 页面设计:申请列表显示物资、申请人、数量、状态;审核时自动校验库存;
- 代码要点:审核通过时检查库存(捐赠总量-已发放总量≥申请数量);通过后生成发放记录待执行。
5. 发放管理(物资出库执行)
- 核心逻辑:管理员对审核通过的申请执行发放操作,确认出库;
- 页面设计:待发放列表;发放确认弹窗;
- 代码要点:发放时扣减库存(通过插入发放记录实现);同一申请可分批发放(需拆分数量)。
6. 物资论坛管理(社区互动)
- 核心逻辑:用户/机构发布物资需求、捐赠信息帖子,管理员审核帖子;
- 页面设计:论坛列表显示帖子标题、作者、发布时间;详情页可评论;
- 代码要点:帖子发布需审核状态控制(0待审核/1已通过/2驳回);支持楼中楼回复。
7. 公告信息管理(资讯模块)
- 核心逻辑:管理员发布捐赠公告、物资分配通知等;
- 页面设计:后台富文本编辑器;前台列表展示;
- 代码要点:公告排序按发布时间倒序;首页轮播显示最新3条。
五、物资流转追踪设计(关键加分项)
疫情物资捐赠系统的核心价值在于物资流向透明可追溯,以下是实测有效的追踪方案:
1. 物资全生命周期日志表
CREATE TABLE wuzi_log (
id INT PRIMARY KEY AUTO_INCREMENT,
wuzi_id INT COMMENT '物资ID',
operation_type INT COMMENT '操作类型:1捐赠入库/2申请出库/3发放',
quantity INT COMMENT '操作数量',
operator_id INT COMMENT '操作人ID',
operator_type VARCHAR(20) COMMENT '操作人类型:admin/user/jigou',
related_order_no VARCHAR(50) COMMENT '关联单号',
create_time DATETIME COMMENT '操作时间'
);
2. 物资库存实时计算
// 获取物资当前可用库存
public Integer getCurrentStock(Long wuziId) {
// 捐赠总量(审核通过)
Integer donated = donationMapper.sumDonatedByWuziId(wuziId, 1); // 1=通过
// 发放总量
Integer distributed = fafangMapper.sumFafangByWuziId(wuziId);
return donated - distributed;
}
3. 审批流程状态机
| 业务类型 | 状态枚举 | 可操作角色 | 下一状态 |
|---|---|---|---|
| 物资捐赠 | 0待审核 | 管理员 | 1通过/2拒绝 |
| 物资捐赠 | 1通过 | 系统自动 | 增加库存 |
| 物资申请 | 0待审核 | 管理员 | 1通过/2拒绝 |
| 物资申请 | 1通过 | 管理员 | 生成发放记录 |
| 物资发放 | 待执行 | 管理员 | 确认发放 |
六、测试与答辩:流程演示为主,突出物资可追溯
1. 核心测试用例
| 测试场景 | 操作步骤 | 预期结果 |
|---|---|---|
| 用户捐赠全流程 | 用户提交捐赠申请→管理员审核通过→查看物资库存 | 捐赠量加入总库存;物资日志新增入库记录 |
| 机构申请物资 | 机构提交物资申请→管理员审核(库存充足)→确认发放 | 申请状态变为通过;库存扣减;发放记录生成 |
| 库存不足审核 | 申请数量大于当前库存→管理员审核 | 审核拒绝,提示库存不足 |
| 物资追溯查询 | 查看某物资的捐赠和发放明细 | 显示所有入库/出库记录,时间、数量、操作人清晰 |
2. 答辩准备技巧
- 演示流程:分角色演示(管理员端 + 用户端 + 机构端)→ 用户捐赠物资 → 管理员审核入库 → 机构申请物资 → 管理员审批发放 → 机构确认接收 → 物资日志查看 → 展示完整的捐赠-分配-发放闭环;
- 业务讲解:准备一页PPT展示系统功能结构图(图4.1),说明每个模块的作用和角色定位;
- 技术亮点:重点讲解物资流转追踪方案(日志表设计+库存实时计算)、审批状态机设计、捐赠与申请的业务分离;
- 突出问题解决:讲清“如何保证物资去向可追溯”(全流程日志记录)、“库存如何计算”(捐赠总量-发放总量,实时计算)、“审核并发如何处理”(事务+乐观锁);提前预判“捐赠和申请分开的意义”,回答“明确入库和出库两条业务线,便于统计和审计”。
结语
本文核心是“聚焦物资捐赠-分配-发放核心业务、实现物资全流程可追溯、设计清晰的审批状态机”。毕设无需复杂系统,把捐赠管理+申请管理+发放管理+物资追踪的业务逻辑讲透、实现一个可运行的物资管理系统、展示完整的物资流转闭环,即可成为答辩亮点。
若需完整项目源码(带详细注释)、测试数据SQL脚本、物资日志表完整设计,可在评论区留言“SpringBoot疫情物资捐赠系统”获取;开发中遇问题(如库存并发控制、审批流程设计、物资追溯实现),也可留言咨询~ 祝毕设顺利!🎉