毕业设计实战:基于Spring Boot的疫情物资捐赠和分配系统设计与实现全攻略

0 阅读11分钟

毕业设计实战:基于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疫情物资捐赠系统”获取;开发中遇问题(如库存并发控制、审批流程设计、物资追溯实现),也可留言咨询~ 祝毕设顺利!🎉