# grade-system **Repository Path**: codevibe/grade-system ## Basic Information - **Project Name**: grade-system - **Description**: EduCore 教务管理系统 - **Primary Language**: Java - **License**: LGPL-2.1 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2025-07-08 - **Last Updated**: 2025-09-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # EduCore 教务管理系统 ## 项目概述 > 本系统是一个基于 **Spring Boot + Vue** 构建的前后端分离的 EduCore 教务管理系统。后端使用 **Java 17+** 编写,采用 * *Spring Boot** 框架;前端使用 **Vue 3 + Vite** 开发,UI 支持响应式布局;数据库使用 **MySQL**。 * 系统实现了完整的用户管理、成绩管理、通知公告、操作日志记录等功能,并引入了以下增强特性: - JWT 鉴权机制 - 审计日志记录(通过注解与切面实现) - 文件上传支持(头像、Excel 成绩导入等) - 多角色权限控制(管理员、教师、学生) --- ## 目录 - [项目概述](#项目概述) - [项目结构](#项目结构) - [后端 (`springboot`)](#后端-springboot) - [前端 ([vue])](#前端 ([vue])) - [技术栈](#技术栈) - [功能列表](#功能列表) - [数据库设计](#数据库设计) - [开发部署指南](#开发部署指南) - [最近更新](#最近更新) ## 项目结构 ~~~ EduCore/ ├── .git/ ├── .idea/ ├── files/ ├── springboot/ │ ├── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── example/ │ │ │ │ ├── SpringbootApplication.java │ │ │ │ ├── common/ │ │ │ │ │ ├── advice/ │ │ │ │ │ │ └── GlobalResponseAdvice.java │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ ├── AuditLogRecord.java │ │ │ │ │ │ ├── DataScope.java │ │ │ │ │ │ └── RequiresPermission.java │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── CorsConfig.java │ │ │ │ │ │ ├── JacksonConfig.java │ │ │ │ │ │ ├── JwtProperties.java │ │ │ │ │ │ ├── MyBatisConfig.java │ │ │ │ │ │ ├── RedisConfig.java │ │ │ │ │ │ └── SecurityConfig.java │ │ │ │ │ ├── dto/ │ │ │ │ │ │ └── PageRequestDTO.java │ │ │ │ │ ├── exception/ │ │ │ │ │ │ ├── CustomerException.java │ │ │ │ │ │ └── GlobalExceptionHandler.java │ │ │ │ │ ├── result/ │ │ │ │ │ │ ├── PageResult.java │ │ │ │ │ │ ├── R.java │ │ │ │ │ │ └── ResultCodeEnum.java │ │ │ │ │ └── utils/ │ │ │ │ │ ├── JwtUtil.java │ │ │ │ │ ├── MixUtils.java │ │ │ │ │ └── TokenUtils.java │ │ │ │ ├── core/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ └── BaseController.java │ │ │ │ │ ├── dto/ │ │ │ │ │ ├── mapper/ │ │ │ │ │ │ └── BaseMapper.java │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── BaseService.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ └── utils/ │ │ │ │ ├── enums/ │ │ │ │ │ └── RoleEnum.java │ │ │ │ ├── log/ │ │ │ │ │ └── aspect/ │ │ │ │ │ └── AuditLogAspect.java │ │ │ │ ├── modules/ │ │ │ │ │ └── system/ │ │ │ │ ├── security/ │ │ │ │ │ └── JwtAuthenticationFilter.java │ │ │ │ └── strategy/ │ │ │ │ ├── Context/ │ │ │ │ │ └── RoleStrategyContext.java │ │ │ │ ├── RoleStrategy.java │ │ │ │ └── impl/ │ │ │ └── resources/ │ │ │ ├── application.yml │ │ │ ├── mapper/ │ │ │ │ ├── AdminMapper.xml │ │ │ │ ├── CourseMapper.xml │ │ │ │ ├── ScoreMapper.xml │ │ │ │ ├── StudentMapper.xml │ │ │ │ ├── TeacherMapper.xml │ │ │ │ └── UserMapper.xml │ │ │ └── sql/ │ │ │ └── learnscore.sql │ │ └── test/ │ ├── target/ │ └── pom.xml └── vue/ ├── node_modules/ ├── public/ ├── src/ │ ├── api/ │ │ └── user.js │ ├── assets/ │ │ ├── css/ │ │ │ ├── global.css │ │ │ └── index.scss │ │ └── images/ │ ├── components/ │ ├── router/ │ │ └── index.js │ ├── utils/ │ │ └── request.js │ ├── views/ │ │ ├── 404.vue │ │ ├── Admin.vue │ │ ├── Course.vue │ │ ├── Home.vue │ │ ├── Login.vue │ │ ├── Manager.vue │ │ ├── Person.vue │ │ ├── QrConfirm.vue │ │ ├── Register.vue │ │ ├── Score.vue │ │ ├── Teacher.vue │ │ ├── UpdatePassword.vue │ │ └── User.vue │ ├── App.vue │ └── main.js ├── .env ├── .env.production ├── index.html ├── jsconfig.json ├── package-lock.json ├── package.json ├── vite.config.js └── vue.iml ~~~ --- ### 后端 (`springboot`) #### 主要模块 | 包名 | 功能描述 | |---------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `common` | 通用类,包括返回结果封装、注解、配置、异常处理、工具类等 | | `common.annotation` | 自定义注解,如 [@AuditLogRecord](file://C:\Users\Administrator\Desktop\EduCore\springboot\src\main\java\com\example\common\annotation\AuditLogRecord.java#L15-L20) 用于标记需要记录日志的方法 | | `common.config` | 系统配置类,如跨域配置、拦截器、Jackson 序列化配置等 | | `common.exception` | 异常处理类,包括自定义异常和全局异常处理器 | | `common.utils` | 工具类,如 [TokenUtils](file://C:\Users\Administrator\Desktop\EduCore\springboot\src\main\java\com\example\common\utils\TokenUtils.java#L21-L80) 处理 JWT 令牌 | | `enums` | 枚举类,如角色枚举等 | | `log.aspect` | 切面类,如 [AuditLogAspect](file://C:\Users\Administrator\Desktop\EduCore\springboot\src\main\java\com\example\log\aspect\AuditLogAspect.java#L23-L72) 实现操作日志记录逻辑 | | `modules.system.controller` | 控制器类,处理 HTTP 请求 | | `modules.system.dto` | 数据传输对象,用于接收请求参数 | | `modules.system.entity` | 实体类,与数据库表一一映射 | | `modules.system.mapper` | MyBatis 映射接口,用于数据库操作 | | `modules.system.service` | 业务逻辑接口及其实现类 | | `security` | 安全相关类,如 JWT 过滤器、鉴权逻辑 | | `strategy` | 策略模式实现的扩展逻辑 | | `strategy.Context` | 策略上下文类 | | `strategy.impl` | 策略具体实现类 | | [SpringbootApplication.java](file://C:\Users\Administrator\Desktop\EduCore\springboot\src\main\java\com\example\SpringbootApplication.java) | Spring Boot 启动类 | #### 配置文件 - [application.yml](file://C:\Users\Administrator\Desktop\EduCore\springboot\src\main\resources\application.yml):Spring Boot 主配置文件 - [pom.xml](file://C:\Users\Administrator\Desktop\EduCore\springboot\pom.xml):Maven 依赖配置文件 #### SQL 脚本 - `sql/learnscore.sql`:数据库初始化脚本 --- ### 前端 ([vue]) #### 主要模块 | 目录 | 功能描述 | |------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `src/api` | API 接口封装,如 [user.js](file://C:\Users\Administrator\Desktop\EduCore\vue\src\api\user.js) 定义用户相关的请求 | | `src/assets/css` | 全局样式文件和 SCSS 变量 | | `src/router/index.js` | Vue 路由配置 | | `src/utils/request.js` | 封装 Axios 请求 | | `src/views/` | 页面组件目录,包括:
- [Login.vue](file://C:\Users\Administrator\Desktop\EduCore\vue\src\views\Login.vue) 登录页
- [Register.vue](file://C:\Users\Administrator\Desktop\EduCore\vue\src\views\Register.vue) 注册页
- [Home.vue](file://C:\Users\Administrator\Desktop\EduCore\vue\src\views\Home.vue) 主页
- [User.vue](file://C:\Users\Administrator\Desktop\EduCore\vue\src\views\User.vue) 用户管理
- [Admin.vue](file://C:\Users\Administrator\Desktop\EduCore\vue\src\views\Admin.vue) 管理员管理
- [UpdatePassword.vue](file://C:\Users\Administrator\Desktop\EduCore\vue\src\views\UpdatePassword.vue) 修改密码
- [Person.vue](file://C:\Users\Administrator\Desktop\EduCore\vue\src\views\Person.vue) 个人信息
- [Manager.vue](file://C:\Users\Administrator\Desktop\EduCore\vue\src\views\Manager.vue) 管理界面
- [404.vue](file://C:\Users\Administrator\Desktop\EduCore\vue\src\views\404.vue) 错误页面 | | [App.vue](file://C:\Users\Administrator\Desktop\EduCore\vue\src\App.vue) | 根组件 | | [main.js](file://C:\Users\Administrator\Desktop\EduCore\vue\src\main.js) | Vue 入口文件 | | [index.html](file://C:\Users\Administrator\Desktop\EduCore\vue\index.html) | HTML 模板 | | [package.json](file://C:\Users\Administrator\Desktop\EduCore\vue\package.json) | npm 包配置 | | [vite.config.js](file://C:\Users\Administrator\Desktop\EduCore\vue\vite.config.js) | Vite 构建配置 | ## 技术栈 ### 后端 - **Java 17+** - **Spring Boot 3.4.X** - **MyBatis** - **JWT(JSON Web Token)** - **MySQL** - **Redis** - **Lombok** - **Swagger/OpenAPI** - API文档生成工具 ### 前端 - **Vue 3** - **Vite** - **Axios** - **Element Plus**(UI 框架) - **SCSS / CSS Modules** --- ## 功能列表 | 功能模块 | 描述 | |------|------------------------| | 用户登录 | 使用 JWT 进行身份验证,支持多角色登录 | | 成绩管理 | 支持查看、添加、修改、删除学生成绩 | | 通知公告 | 管理员可以发布通知,用户可查看 | | 日志记录 | 所有操作记录在审计日志中,可通过注解灵活控制 | | 文件上传 | 支持头像上传、批量 Excel 导入成绩 | | 权限控制 | 不同角色(如管理员、教师、学生)拥有不同权限 | --- ## 数据库设计 数据库名称:`learnscore` 主要表: - `user`:用户信息表 - `admin`:管理员信息表 - [account](file://C:\Users\Administrator\Desktop\EduCore\springboot\src\main\java\com\example\modules\system\dto\LoginResult.java#L7-L7) :账号信息表 - `notification`:通知公告表 - `audit_log`:审计日志表 详细字段请参考 `sql/learnscore.sql`。 --- ## 开发部署指南 ### 后端部署 1. 安装 JDK 17+ 2. 安装 Maven 3. 安装 MySQL 4. 导入 `sql/learnscore.sql` 到数据库 5. 修改 [application.yml](file://C:\Users\Administrator\Desktop\EduCore\springboot\src\main\resources\application.yml) 中的数据库连接信息 6. 执行 `mvn spring-boot:run` 启动服务 ### 前端部署 1. 安装 Node.js 18+ 2. 进入 [vue](file://C:\Users\Administrator\Desktop\EduCore\vue\src\App.vue) 目录 3. 执行 `npm install` 4. 执行 `npm run dev` 启动开发服务器 --- ## API文档 本项目使用 Swagger/OpenAPI 来生成 API 文档,便于开发者理解和使用系统的各种接口。 ### 使用的技术 项目中使用了以下与 API 文档相关的依赖: 1. **SpringDoc OpenAPI** - 用于生成符合 OpenAPI 3.0 规范的 API 文档 2. **Swagger Annotations** - 用于在代码中添加 API 文档注解 3. **Springfox** - 另一个 Swagger 集成库(备用) ### 访问方式 启动项目后,可以通过以下 URL 访问 API 文档: - Swagger UI: `http://localhost:8080/swagger-ui.html` - OpenAPI JSON: `http://localhost:8080/v3/api-docs` ### 文档特点 - 自动生成 API 文档,无需手动编写 - 支持在线测试 API 接口 - 提供详细的接口说明、参数说明和示例 - 各个控制器方法都使用了 `@ApiOperation` 注解来描述接口功能 --- ## 最近更新 ### 最新功能增强与修复 1. **系统整体优化**: - 完善了系统各模块的功能实现 - 优化了代码结构和注释规范 - 提升了系统的稳定性和可维护性 2. **API文档增强**: - 添加了完整的Swagger/OpenAPI集成支持 - 提供了详细的API文档说明和访问方式 - 支持在线测试系统接口功能 3. **代码质量提升**: - 统一了所有方法的注释风格,符合JavaDoc标准 - 优化了变量命名规范,提高代码可读性 - 确保所有重写方法都添加了@Override注解 4. **系统稳定性改进**: - 修复了Mapper接口中方法重载导致的Mapped Statements key冲突问题 - 解决了因接口方法冲突导致的服务器启动失败问题 - 优化了Spring Boot应用上下文初始化过程 ### 新增文件和功能 1. **StudentMapper.java** 中添加了新的方法: - `void updateById(Long id);` - 根据学生ID更新学生信息 2. **AdminServiceImpl.java** 代码优化: - 修复了重复代码问题 - 统一了方法注释格式 - 规范了变量命名 3. **代码注释完善**: - 为StudentMapper中的updateById方法添加了完整的JavaDoc注释 - 统一了所有方法的注释风格 4. **代码结构优化**: - 重构了AdminServiceImpl中的重复逻辑 - 完善了所有接口方法的实现 - 保证了代码的一致性和可维护性 ### 进一步的代码改进 1. **目录结构更新**: - 更新了README.md中的项目目录结构,确保与实际项目结构一致 2. **代码质量提升**: - 修复了AdminServiceImpl中updateById方法的参数类型问题 - 统一了所有方法的注释风格,确保符合JavaDoc标准 - 优化了变量命名规范,如将InputPassWord改为inputPassword 3. **文档更新**: - 完善了README.md文档,包含了最新的项目结构和更新记录 - 提供了更详细的模块说明和功能描述 4. **代码一致性改进**: - 确保所有重写方法都添加了@Override注解 - 统一了所有服务实现类的代码风格 - 优化了方法参数和返回值的注释说明 5. **API文档增强**: - 添加了关于Swagger/OpenAPI的详细说明 - 介绍了API文档的访问方式和特点 - 列出了项目中使用的相关技术依赖 ### 最新修复和改进 1. **Mapper接口修复**: - 修复了AdminMapper中selectById方法的重复定义问题,删除了String类型参数的重载方法 - 修复了UserMapper中selectById和deleteById方法的重复定义问题,统一使用Long类型参数 2. **MyBatis配置优化**: - 解决了由于Mapper接口中方法重载导致的Mapped Statements key冲突问题 - 确保MyBatis能够正确解析和注册Mapper XML文件和注解 3. **系统稳定性提升**: - 修复了因Mapper接口方法冲突导致的Tomcat服务器启动失败问题 - 解决了Spring Boot应用上下文初始化时的依赖注入异常 ### 最新代码修复 1. **接口参数一致性修复**: - 修复了AdminService接口中selectById方法参数类型不一致的问题,统一使用Integer类型 - 解决了NotificationController中delete方法与BaseController中同名方法返回值类型冲突的问题 - 确保子类方法与父类方法签名保持一致,避免编译错误 ## 分析: ### ✅ **企业级特征** | 模块 | 企业级标准要求 | 你当前状态 | 说明 | |---------------|---------------------------------------------|--------|--------------------| | **统一鉴权体系** | JWT + 黑名单登出 + 自动续签 | ✅ 已完成 | 支持登录态刷新 + 签名校验机制 | | **通用响应结构** | `R` 泛型封装 + 枚举状态码 + `@ResponseBodyAdvice` | ✅ 已完成 | 支持链式调用、空值过滤、自动文档生成 | | **统一异常处理** | 自定义异常类 + 全局异常拦截 | ✅ 已完成 | 提供接口异常一致性 | | **Base 抽象模板** | `BaseService` + `BaseServiceImpl` + 通用分页 | ✅ 已完成 | 高复用性设计,利于扩展与维护 | | **模块职责分离** | auth、account、user、system 分层 | ✅ 在推进中 | 当前尚为同一项目模块,但结构已分明 | | **认证与上下文安全** | Spring Security + token 鉴权 + 上下文注入 | ✅ 已完成 | 能与前端联动进行权限控制 | --- ## 🔸 尚未完成的“企业级能力盲区”(但尚未落地) | 模块 | 企业级项目必备 | 当前状态 | 建议 | |-----------------|---------------------------|--------------|---------------------------------| | ✅ **RBAC 权限模型** | 用户 - 角色 - 菜单 - 接口 权限动态配置 | ⏳ 尚未落地 | 数据驱动权限控制是企业项目标配 | | ✅ **模块化服务分层** | 单体多模块 或 Gradle 多项目拆分 | ⏳ 尚未拆分 | 利于日后拆分为微服务 | | ✅ **灰度/权限管理面板** | 前后端动态控制页面元素与接口权限 | ⏳ 暂无 | 用于 SaaS 平台、CMS 等 | | ✅ **多环境配置治理** | prod/dev/test 环境变量、配置中心 | ⏳ 基础可配,但未集中化 | 需考虑 Spring Cloud Config 或 Nacos | | ✅ **部署与监控体系** | Docker + 日志采集 + 异常追踪 + 监控 | ❌ 暂无体现 | 属于交付工程的一部分 | | ✅ **审计与安全治理** | 接口日志、登录日志、敏感行为审计 | ❌ 暂无体现 | 企业项目必要性高 | --- ## 🧠 结论: 当前开发的系统已具备: * ✅ **高可维护性**(基于泛型封装 + 抽象模板) * ✅ **良好的安全架构**(完整 JWT 生命周期管理) * ✅ **规范的服务接口分层设计** * ✅ **清晰的职责划分(已开始模块化)** 但尚未涉及: * ❌ **权限控制的动态配置** * ❌ **运维相关工程能力** * ❌ **服务治理与分布式服务能力(例如分布式锁、事务、限流)**