技术栈分析
后端技术栈
- Spring Boot 2.x:提供快速开发、自动配置和嵌入式Tomcat支持。
- Spring Security:实现角色权限控制和JWT身份验证。
- MyBatis/MyBatis-Plus:数据库ORM框架,支持动态SQL和代码生成。
- Redis:缓存用户会话、高频访问数据(如宿舍分配信息)。
- Swagger/Knife4j:自动生成API文档,便于前后端协作。
前端技术栈
- Vue 3:组合式API开发,响应式数据绑定。
- Element Plus/Ant Design Vue:UI组件库,快速搭建表单、表格等界面。
- Axios:封装HTTP请求,拦截器处理Token验证。
- Vue Router:路由管理,支持动态权限路由加载。
- ECharts:可视化迎新数据(如报到率、生源地分布)。
其他工具
- Maven/Gradle:依赖管理和项目构建。
- Nginx:前端部署和反向代理。
- Docker:容器化部署MySQL、Redis等服务。
核心功能模块
学生端功能
- 在线预报到:填写个人信息、上传证件照,生成电子报到单。
- 宿舍预约:查看可选宿舍类型(如4人间、6人间),在线选房。
- 缴费查询:对接支付接口(支付宝/微信),展示学费、住宿费明细。
- 日程提醒:入学教育、体检等日程推送至学生手机。
辅导员/管理员端功能
- 报到审核:核验学生身份证、录取通知书扫描件,标记异常情况。
- 数据统计:实时显示已报到/未报到人数,按专业、省份分类统计。
- 宿舍管理:批量分配宿舍,处理调宿申请。
- 通知发布:通过站内信或短信推送紧急通知(如台风延期报到)。
数据库设计(MySQL)
关键表结构示例
-- 学生信息表
CREATE TABLE `student` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`student_no` VARCHAR(20) UNIQUE COMMENT '学号',
`name` VARCHAR(50) NOT NULL,
`id_card` VARCHAR(18) UNIQUE COMMENT '身份证号',
`admission_no` VARCHAR(30) COMMENT '录取通知书编号',
`major_id` BIGINT COMMENT '关联专业表',
`dorm_id` BIGINT COMMENT '关联宿舍表',
`status` TINYINT DEFAULT 0 COMMENT '0未报到,1已报到,2延迟报到'
);
-- 宿舍表
CREATE TABLE `dormitory` (
`id` BIGINT PRIMARY KEY,
`building_no` VARCHAR(10) COMMENT '楼栋号',
`room_no` VARCHAR(10) COMMENT '房间号',
`type` VARCHAR(20) COMMENT '4人间/6人间',
`remaining_beds` INT DEFAULT 4 COMMENT '剩余床位'
);
-- 报到流程表
CREATE TABLE `registration_step` (
`id` BIGINT PRIMARY KEY,
`step_name` VARCHAR(50) COMMENT '材料核验/缴费/领校园卡',
`completed` BIT DEFAULT 0 COMMENT '是否完成',
`student_id` BIGINT COMMENT '关联学生'
);
系统测试要点
接口测试(Postman)
- 学生登录接口:模拟JWT Token生成与验证。
- 宿舍分配接口:测试并发选房时的锁机制(如Redis分布式锁)。
性能测试(JMeter)
- 模拟高并发报到场景(如每秒1000请求),监测Redis缓存命中率和数据库响应时间。
安全测试
- SQL注入测试:针对学生信息查询接口尝试恶意参数。
- XSS攻击测试:验证前端是否过滤富文本输入(如通知发布内容)。
源码结构建议
src/
├── main/
│ ├── java/
│ │ └── com/university/registration/
│ │ ├── config/ # Spring安全、Swagger配置
│ │ ├── controller/ # 学生、管理员API
│ │ ├── service/ # 业务逻辑(报到流程、宿舍分配)
│ │ └── entity/ # 数据库实体类
│ └── resources/
│ ├── mapper/ # MyBatis映射文件
│ └── application.yml # 多环境配置
├── frontend/ # Vue项目
│ ├── src/
│ │ ├── api/ # Axios请求封装
│ │ ├── router/ # 权限路由
│ │ └── views/ # 学生/管理员页面
└── test/ # 单元测试和集成测试
关键代码片段(Spring Boot)
// 学生报到服务层逻辑
@Service
public class RegistrationService {
@Transactional
public void completeRegistration(Long studentId) {
Student student = studentMapper.selectById(studentId);
if (student.getStatus() != 0) {
throw new BusinessException("该学生已报到");
}
student.setStatus(1);
studentMapper.updateById(student);
// 触发宿舍分配、消息通知等后续操作
}
}
前端页面示例(Vue)
<template>
<el-table :data="studentList">
<el-table-column prop="name" label="姓名"/>
<el-table-column label="操作">
<template #default="{row}">
<el-button @click="showDetail(row.id)">查看详情</el-button>
</template>
</el-table-column>
</el-table>
</template>
<script setup>
import { ref } from 'vue';
const studentList = ref([]);
// Axios获取学生数据
</script>