1. 项目背景与核心需求
旧物捐赠系统作为典型的公益类Web应用,在高校计算机专业毕业设计中具有较高选题率。这类系统既要满足基础CRUD功能,又需考虑公益场景下的特殊业务逻辑。基于SpringBoot框架开发的优势在于:
- 快速构建RESTful API服务层
- 简化传统SSM框架的配置复杂度
- 内置Tomcat容器便于部署演示
- 丰富的Starter依赖可快速集成数据库、安全认证等模块
典型用户场景包括:
- 捐赠者发布闲置物品信息
- 受赠方浏览可申领物品
- 管理员审核捐赠物品真实性
- 物流跟踪(可选高级功能)
- 捐赠数据可视化统计
提示:毕业设计类项目需特别注意功能完整性证明,建议在系统中保留操作日志模块,记录关键业务操作流水。
2. 技术架构设计
2.1 基础技术栈选型
graph TD A[SpringBoot 2.7.x] --> B[Spring MVC] A --> C[Spring Data JPA] A --> D[Thymeleaf] B --> E[RESTful API] C --> F[MySQL 8.0] D --> G[前端模板]2.2 分层架构实现
com.example.donation ├── config # 安全/Web配置 ├── controller # 请求入口 ├── service # 业务逻辑 ├── repository # 数据访问 ├── model # 实体类 ├── util # 工具类 └── exception # 异常处理实体关系设计要点:
- 用户表(user)与捐赠记录表(donation)一对多
- 捐赠表与物品类别表(category)多对一
- 申领记录表(application)关联用户和捐赠
注意:JPA的@ManyToOne默认采用懒加载,在Controller层返回JSON时需要@JsonIgnoreProperties避免循环引用
3. 核心功能实现
3.1 捐赠流程实现
// DonationController.java @PostMapping("/publish") public Result publishDonation(@Valid @RequestBody DonationDTO dto) { // 1. DTO参数校验(Hibernate Validator) // 2. 转换DTO为Entity // 3. 设置发布用户(从Shiro获取当前用户) // 4. 默认状态为待审核 donationService.save(donation); return Result.success("发布成功,等待审核"); }3.2 审核状态机设计
public enum DonationStatus { PENDING("待审核"), APPROVED("已上架"), REJECTED("已驳回"), RECEIVED("已领取"), COMPLETED("已完成"); @JsonValue private final String desc; }状态转换规则:
- 管理员可将PENDING改为APPROVED/REJECTED
- 用户可对APPROVED状态物品发起申领
- 捐赠者确认后变为RECEIVED
- 物流完成标记COMPLETED
4. 特色功能扩展
4.1 捐赠热度算法
// 综合浏览量、收藏数、发布时间计算 public double calculateHotScore(Donation donation) { long viewCount = donation.getViewCount(); long favorCount = donation.getFavorCount(); long hourDiff = Duration.between(donation.getCreateTime(), LocalDateTime.now()).toHours(); return (viewCount * 0.3 + favorCount * 0.7) / Math.log(hourDiff + 2); }4.2 智能推荐实现
基于用户历史捐赠/申领记录,使用协同过滤算法:
- 构建用户-物品矩阵
- 计算余弦相似度
- 取Top3相似用户偏好物品
- 过滤已捐赠物品
5. 部署与测试
5.1 多环境配置
# application-dev.yml spring: datasource: url: jdbc:mysql://localhost:3306/donation_dev username: devuser password: dev123 # application-prod.yml spring: datasource: url: jdbc:mysql://prod-db:3306/donation username: ${DB_USER} password: ${DB_PASS}5.2 压力测试方案
使用JMeter模拟:
- 50并发用户持续请求物品列表接口
- 20并发提交捐赠申请
- 监控指标:
- 平均响应时间<500ms
- 错误率<0.1%
- 数据库连接池使用率
6. 毕设答辩要点
- 技术选型对比:SpringBoot vs 传统SSM
- 数据库设计范式说明
- 关键算法流程图绘制
- 测试用例覆盖度(建议≥80%)
- 系统安全措施:
- XSS过滤(HtmlUtils.htmlEscape)
- CSRF防护(Spring Security默认启用)
- SQL注入防御(JPA参数化查询)
项目源码建议采用模块化组织:
donation-system ├── donation-core # 核心业务 ├── donation-admin # 管理后台 ├── donation-api # 接口文档 └── donation-web # 前端页面我在实际开发中发现三个易错点:
- 日期字段建议统一使用LocalDateTime
- 文件上传需配置spring.servlet.multipart.max-file-size
- 事务注解@Transactional要正确设置rollbackFor