校园活动发布与报名平台
创建于 2026 年 3 月 29 日
项目介绍
高校校园里活动信息分散在班级群、海报栏和各个社团组织里,学生找活动靠”人传人”,组织方统计报名靠手工表格,活动学分更是缺乏统一口径。这个项目把校园活动的完整生命周期搬到了线上:管理员发布活动、学生在线报名、现场签到签退、学分自动累计,最后再以统计图表呈现整体参与情况,覆盖”发布 → 报名 → 参与 → 计分 → 统计”的完整闭环。
系统按需求文档明确了两个关键边界:报名流程不做审核节点,学生点击报名即成功(仅在截止时间前可报名);不设在线留言模块,互动统一收敛为发帖 + 评论。整个系统分为学生端与管理员端,各自拥有独立登录入口,前台视觉采用”顶部工具栏 + 白色主导航 + 首页轮播 + 卡片推荐流”的校园门户风格。
项目架构
系统采用前后端分离架构。后端基于 Spring Boot 3.2.5(Java 17)构建 REST API,数据访问使用 MyBatis-Plus 3.5.7,认证采用 Spring Security + JJWT(0.11.5)签发 JWT 令牌,令牌有效期 24 小时;数据库为 MySQL 8.0,连接串、上传目录、JWT 密钥等集中在 application.yml 中配置。前端使用 Vue 3 + Vue Router + Element Plus + Axios,通过 Vite 构建出静态资源(front/dist),生产部署时由 Nginx 托管前端、以 Jar 方式运行后端。
后端按经典分层组织:controller(接口层)→ service(业务规则层,含截止时间校验、签到签退、学分累计)→ mapper(数据访问层)→ entity/dto/vo(数据模型),并配套 common(统一响应与全局异常处理)、config、security(JWT 拦截器与登录上下文)等基础设施包。认证接口、活动接口、报名管理接口、互动接口、通知接口、统计接口按模块分散在 7 个 Controller 中,统一返回 ApiResponse 包装结构。
数据库脚本 code/db/schema.sql 设计了 11 张核心表:用户表 sys_user(学生/管理员统一存储)、社团表 club、活动表 activity、报名表 activity_signup(activity_id + student_id 唯一约束防重复报名)、签到签退表 activity_sign_record(与报名记录 1 对 1)、学分账户表 credit_account、学分流水表 credit_change_log(student_id + activity_id 唯一约束保证幂等)、帖子表 post、评论表 post_comment、通知表 notice(支持全员/定向)、文件资源表 file_resource。另有 init_data.sql 种子数据和 upgrade_20260330_user_profile_fields.sql 增量脚本。
核心功能
- 活动发布与管理:管理员发布活动,必填标题、类型、内容、活动时间、地点、报名截止时间,学分可选(0.0~10.0,默认 0.0);校验活动开始时间早于结束时间、报名截止不晚于活动开始时间,支持编辑与下架。活动类型固定四种:思想成长、社会实践、文体艺术、学术科技,学生端可按类型筛选浏览。
- 一键报名与报名管理:学生在截止时间前点击报名直接成功,服务端校验活动状态、截止时间并拦截重复报名(数据库唯一约束兜底);管理员可查看某活动的报名名单,并将状态手动调整为已报名/已取消/未到场/已完成。
- 签到签退与学分自动累计:学生报名后可在活动详情页签到、签退;签退时系统判断签到签退均存在且学分未累计过,随后自动将活动学分计入个人账户并写入流水,幂等设计(流水表唯一约束 +
credit_counted标记)确保同一活动学分只累计一次,签到状态同步置为”已完成”。 - 交流互动与通知公告:学生可发帖、评论(支持楼中楼父评论),管理员可管理帖子;通知公告支持全员推送与定向单个学生两种范围,定向通知记录目标学生 ID。
- 管理端数据统计:基于 ECharts 呈现报名人数柱状图与参与度趋势图,接口按天聚合数据,为社团活动组织提供直观的参与情况视图。
功能截图
暂无运行截图。
快速上手
项目根目录 code/ 下分 backend、frontend、db、docs 四部分。先执行 code/db/schema.sql 与 code/db/init_data.sql 初始化数据库(MySQL 8.0),再按需执行 upgrade_20260330_user_profile_fields.sql 增量脚本;随后修改 application.yml 中的数据库连接信息。
后端在 code/backend 目录执行 mvn spring-boot:run(或打包为 Jar 后 java -jar),默认监听 8081 端口,JWT 密钥与上传目录均可在 application.yml 的 app 配置节调整;前端在 code/frontend 目录执行 pnpm install 与 pnpm dev 启动开发服务器,生产构建使用 pnpm build 生成 dist 静态资源,配合 Nginx 部署。学生与管理员的默认账号可参考 init_data.sql 中的种子数据。
总结
这个项目最大的特点是”业务闭环完整且边界清晰”:从活动发布、在线报名、现场签到签退,到学分自动累计和管理端统计,一条链路贯穿学生端与管理员端;同时通过需求收敛(无审核流程、无在线留言)把范围控制在一个 MVP 内,两周排期即可落地。技术选型上,Spring Boot 3 + MyBatis-Plus + JWT 是当前 Java 全栈项目的主流组合,学分幂等、防重复报名等细节处理也体现了对数据一致性的重视。
作为毕业设计或课程项目,它在”能跑通全流程”的基础上留有清晰的扩展空间:后续可以接入消息推送提醒报名截止、增加活动报名名额上限与候补队列、补充学分审核环节,或者把统计模块从固定图表扩展为可配置的报表中心。