1. 项目背景与核心痛点
高校志愿服务一直存在"三难"问题:学生参与难、组织管理难、数据统计难。传统纸质登记+Excel统计的方式,让一场本该充满成就感的公益活动,变成了各方都在抱怨的负担。我曾亲眼见过学生会干部熬夜核对几百份手写签到表,也见过志愿者因为忘记带纸质证明而无法获得应有的时长认证。
这套系统的设计初衷,就是要用技术手段解决这些痛点。通过将"报名-签到-签退-反馈-积分"全流程线上化,我们实现了:
- 活动信息透明化(学生随时可查可报)
- 参与流程便捷化(扫码签到、自动计时)
- 数据统计自动化(实时生成各类报表)
- 积分体系可视化(个人贡献一目了然)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型与架构设计
2.1 技术栈组合解析
选择SpringBoot+Vue+MySQL这个"黄金组合"主要基于三点考量:
- 开发效率:SpringBoot的约定优于配置+内嵌Tomcat,让后端开发可以专注于业务逻辑
- 前后端分离:Vue的组件化开发完美适配现代Web应用,与后端通过RESTful API交互
- 数据可靠性:MySQL的事务支持确保志愿时长、积分等关键数据的准确性
技术栈版本说明:
- JDK 1.8(LTS长期支持版)
- SpringBoot 2.7.x(稳定版本线)
- Vue 2.x(生态成熟)
- MySQL 5.7/8.0(根据学校IT环境选择)
2.2 系统架构图解
code复制[浏览器] ←HTTP→ [Nginx] ←反向代理→ [SpringBoot] ←JDBC→ [MySQL]
↑
[Vue静态资源]
关键设计要点:
- 采用B/S架构,学生通过浏览器即可访问,无需安装APP
- Nginx实现动静分离(前端Vue打包文件与后端API分离)
- 使用JWT进行无状态认证,避免Session共享问题
3. 核心功能实现细节
3.1 志愿者生命周期管理
3.1.1 注册与审核流程
java复制// 伪代码示例:志愿者注册逻辑
@PostMapping("/register")
public Result register(@Valid Volunteer volunteer) {
if (volunteerService.existsUsername(volunteer.getUsername())) {
return Result.error("用户名已存在");
}
volunteer.setPassword(DigestUtils.md5DigestAsHex(volunteer.getPassword().getBytes()));
volunteer.setStatus(0); // 0-待审核
volunteerService.save(volunteer);
return Result.success("注册成功,等待管理员审核");
}
关键点:
- 密码使用MD5加密存储(实际项目建议BCrypt)
- 新注册用户需管理员审核后才能登录
- 学生证信息验证通过OCR接口实现(可选)
3.1.2 权限控制设计
sql复制-- 权限表结构示例
CREATE TABLE `sys_role` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(50) COMMENT '角色名(志愿者/管理员)',
`code` varchar(50) COMMENT '角色编码',
PRIMARY KEY (`id`)
);
CREATE TABLE `sys_menu` (
`id` int NOT NULL AUTO_INCREMENT,
`parent_id` int COMMENT '父菜单ID',
`name` varchar(50) COMMENT '菜单名称',
`perms` varchar(500) COMMENT '权限标识',
PRIMARY KEY (`id`)
);
3.2 活动全流程管理
3.2.1 活动发布模板
管理员发布活动时,系统提供结构化表单:
- 基础信息(名称、时间、地点、人数上限)
- 活动详情(富文本编辑器)
- 签到设置(GPS定位范围/二维码有效期)
- 积分规则(基础分+额外奖励分)
后台校验逻辑:
java复制if (activity.getStartTime().isBefore(LocalDateTime.now())) {
throw new BizException("活动开始时间不能早于当前时间");
}
if (activity
