# 高校文件收集系统 **Repository Path**: design-project2/University-Document-Collection-System ## Basic Information - **Project Name**: 高校文件收集系统 - **Description**: 高校文件收集系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-02-10 - **Last Updated**: 2025-04-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 高校文件收集系统 ## 项目简介 本系统是一个基于 Spring Boot 的高校文件收集系统,主要用于教师发布任务和学生提交文件。 ## 技术栈 - 后端:Spring Boot 2.7.18 - 数据库:MySQL 8.0 - 缓存:Redis - 文件存储:阿里云 OSS - 认证授权:Spring Security + JWT - API文档:Knife4j (OpenAPI 3) - 数据库访问:Spring Data JPA - 对象转换:MapStruct - Excel处理:EasyExcel ## 项目结构 com.backend ├── common # 公共模块 │ ├── annotation # 自定义注解 │ ├── aspect # AOP切面 │ ├── constant # 常量定义 │ ├── enums # 枚举定义 │ ├── exception # 异常定义 │ └── utils # 工具类 ├── config # 配置模块 │ ├── jwt # JWT配置 │ ├── redis # Redis配置 │ ├── swagger # Swagger配置 │ ├── web # Web配置 │ └── oss # OSS配置 └── modules # 业务模块 ├── system # 系统管理 │ ├── controller │ ├── service │ ├── repository │ ├── entity │ ├── dto │ ├── vo │ └── convert ├── task # 任务管理 ├── notification # 通知管理 └── file # 文件管理 ## 数据库设计 ### 核心业务关系 #### 1. 用户与部门关系 - **学生与班级**: 多对一关系 - sys_user (department_id) -> sys_department (id) - 学生(user_type=3)通过 department_id 关联到对应的班级(type=3) - **教师与班级**: 多对多关系 - 通过 sys_teacher_class 关联表实现 - sys_teacher_class (teacher_id) -> sys_user (id) - sys_teacher_class (class_id) -> sys_department (id) - 教师(user_type=2)可以关联多个班级(type=3) #### 2. 部门层级关系 - 学院(type=1) -> 专业(type=2) -> 班级(type=3) - 通过 parent_id 字段实现层级关系 ### 数据库表结构 #### 1. 用户表 (sys_user) | 字段名 | 类型 | 必填 | 描述 | |--------|------|------|------| | id | bigint | 是 | 主键,自增 | | username | varchar(64) | 是 | 用户名/学号/工号 | | password | varchar(255) | 是 | 密码(加密) | | real_name | varchar(64) | 是 | 真实姓名 | | email | varchar(128) | 否 | 邮箱 | | phone | varchar(11) | 否 | 手机号 | | avatar | varchar(255) | 否 | 头像URL | | user_type | int | 是 | 用户类型(1:管理员,2:教师,3:学生) | | department_id | bigint | 否 | 所属部门ID(学生关联班级) | | user_code | varchar(32) | 是 | 用户编号 | | position | varchar(64) | 否 | 职位(教师) | | gender | int | 否 | 性别(0:男,1:女,2:未知) | | status | bit(1) | 是 | 状态(启用/禁用) | | create_time | datetime(6) | 否 | 创建时间 | | creator_id | bigint | 否 | 创建者ID | | update_time | datetime(6) | 否 | 更新时间 | | updater_id | bigint | 否 | 更新者ID | | deleted | bit(1) | 是 | 是否删除 | #### 2. 部门表 (sys_department) | 字段名 | 类型 | 必填 | 描述 | |--------|------|------|------| | id | bigint | 是 | 主键,自增 | | name | varchar(64) | 是 | 部门名称 | | parent_id | bigint | 否 | 父部门ID | | sort | int | 否 | 排序号 | | type | int | 是 | 部门类型(1:学院,2:专业,3:班级) | | create_time | datetime(6) | 否 | 创建时间 | | creator_id | bigint | 否 | 创建者ID | | update_time | datetime(6) | 否 | 更新时间 | | updater_id | bigint | 否 | 更新者ID | | deleted | bit(1) | 是 | 是否删除 | #### 3. 教师班级关联表 (sys_teacher_class) | 字段名 | 类型 | 必填 | 描述 | |--------|------|------|------| | id | bigint | 是 | 主键,自增 | | teacher_id | bigint | 否 | 教师ID | | class_id | bigint | 否 | 班级ID | | create_time | datetime(6) | 否 | 创建时间 | | creator_id | bigint | 否 | 创建者ID | | update_time | datetime(6) | 否 | 更新时间 | | updater_id | bigint | 否 | 更新者ID | | deleted | bit(1) | 是 | 是否删除 | #### 4. 任务表 (task) | 字段名 | 类型 | 必填 | 描述 | |--------|------|------|------| | id | bigint | 是 | 主键,自增 | | name | varchar(255) | 是 | 任务名称 | | description | text | 否 | 任务描述 | | deadline | datetime(6) | 是 | 截止时间 | | file_requirements | text | 否 | 文件要求 | | submit_requirements | text | 否 | 提交要求 | | teacher_id | bigint | 否 | 教师ID | | class_id | bigint | 否 | 班级ID | | create_time | datetime(6) | 否 | 创建时间 | | creator_id | bigint | 否 | 创建者ID | | update_time | datetime(6) | 否 | 更新时间 | | updater_id | bigint | 否 | 更新者ID | | deleted | bit(1) | 是 | 是否删除 | #### 5. 任务提交表 (task_submission) | 字段名 | 类型 | 必填 | 描述 | |--------|------|------|------| | id | bigint | 是 | 主键,自增 | | task_id | bigint | 否 | 任务ID | | student_id | bigint | 否 | 学生ID | | submit_time | datetime(6) | 是 | 提交时间 | | status | varchar(255) | 是 | 状态(PENDING/APPROVED/REJECTED) | | comment | text | 否 | 学生备注 | | review_comment | varchar(255) | 否 | 审核意见 | | review_time | datetime(6) | 否 | 审核时间 | | reviewer_id | bigint | 否 | 审核人ID | | create_time | datetime(6) | 否 | 创建时间 | | creator_id | bigint | 否 | 创建者ID | | update_time | datetime(6) | 否 | 更新时间 | | updater_id | bigint | 否 | 更新者ID | | deleted | bit(1) | 是 | 是否删除 | #### 6. 提交文件表 (task_submission_file) | 字段名 | 类型 | 必填 | 描述 | |--------|------|------|------| | id | bigint | 是 | 主键,自增 | | submission_id | bigint | 否 | 提交记录ID | | file_name | varchar(255) | 是 | 文件名 | | file_url | varchar(255) | 是 | 文件URL | | file_type | varchar(255) | 是 | 文件类型 | | file_size | bigint | 是 | 文件大小 | | sort | int | 否 | 排序号 | | create_time | datetime(6) | 否 | 创建时间 | | creator_id | bigint | 否 | 创建者ID | | update_time | datetime(6) | 否 | 更新时间 | | updater_id | bigint | 否 | 更新者ID | | deleted | bit(1) | 是 | 是否删除 | #### 7. 通知表 (notification) | 字段名 | 类型 | 必填 | 描述 | |--------|------|------|------| | id | bigint | 是 | 主键,自增 | | title | varchar(255) | 是 | 通知标题 | | content | text | 否 | 通知内容 | | type | varchar(255) | 是 | 通知类型 | | receiver_id | bigint | 是 | 接收者ID | | read | bit(1) | 是 | 是否已读,默认false | | related_id | bigint | 否 | 关联ID | | create_time | datetime(6) | 否 | 创建时间 | | creator_id | bigint | 否 | 创建者ID | | update_time | datetime(6) | 否 | 更新时间 | | updater_id | bigint | 否 | 更新者ID | | deleted | bit(1) | 是 | 是否删除 | ### 表关系 1. **用户与部门关系** - 学生关系: - sys_user (department_id) -> sys_department (id): 学生所属班级 - 教师关系: - sys_teacher_class (teacher_id) -> sys_user (id): 关联教师 - sys_teacher_class (class_id) -> sys_department (id): 关联班级 2. **部门层级关系** - sys_department (parent_id) -> sys_department (id): 部门自关联,形成层级结构 - 学院 -> 专业 -> 班级 3. **任务关系** - task (teacher_id) -> sys_user (id): 任务创建教师 - task (class_id) -> sys_department (id): 任务所属班级 4. **提交记录关系** - task_submission (task_id) -> task (id): 提交记录关联任务 - task_submission (student_id) -> sys_user (id): 提交学生 - task_submission (reviewer_id) -> sys_user (id): 审核教师 5. **提交文件关系** - task_submission_file (submission_id) -> task_submission (id): 文件关联提交记录 ### 索引设计 1. **主键索引** - 所有表都使用自增的 bigint 类型作为主键 - 主键列都建立了聚集索引 2. **外键索引** - sys_user.department_id: 用于学生查询所属班级 - sys_teacher_class.teacher_id, class_id: 用于教师-班级关系查询 - sys_department.parent_id: 用于查询部门层级关系 - task_submission.task_id, student_id: 用于任务提交查询 - task_submission_file.submission_id: 用于查询提交文件 3. **业务索引** - notification.receiver_id: 用于快速查询用户通知 - sys_user.username: 唯一索引用于用户登录 ## 核心功能 ### 管理员功能 1. 用户管理 - 教师账号管理:创建、修改、删除、启用/禁用教师账号 - 学生账号管理:创建、修改、删除、启用/禁用学生账号 - 密码重置:重置用户密码为默认密码 - 用户查询:支持多条件组合查询(用户名、姓名、部门等) 2. 部门管理 - 学院管理:创建、修改、删除学院信息 - 专业管理:创建、修改、删除专业信息,设置所属学院 - 班级管理:创建、修改、删除班级信息,设置所属专业 - 部门树形结构:支持树形展示和管理部门层级关系 - 教师班级关联:设置教师与班级的授课关系 ### 教师功能 1. 任务管理 - 任务发布:创建新任务,设置任务要求和截止时间 - 任务更新:修改任务信息、更新任务要求 - 任务删除:删除未开始的任务 - 任务查询:查看已发布的任务列表 - 指定班级:选择任务发布的目标班级 2. 提交管理 - 提交记录查询:查看学生提交情况 - 提交统计:统计各班级提交情况 - 导出记录:导出提交记录为Excel - 批量下载:打包下载学生提交的文件 - 逾期管理:查看和处理逾期提交 3. 班级管理 - 查看负责班级:查看自己负责的班级列表 - 学生管理:查看班级学生名单 - 成绩管理:记录和管理学生成绩 - 考勤管理:记录学生考勤情况 ### 学生功能 1. 任务提交 - 任务查看:查看所在班级的任务列表 - 任务筛选:按状态筛选(进行中、已截止) - 任务详情:查看任务详细要求 - 任务提交:上传任务相关文件 - 提交修改:修改已提交的文件 - 提交历史:查看历史提交记录 - 任务提醒:接收任务截止提醒 2. 通知管理 - 通知查看:查看任务相关通知 - 通知筛选:按类型筛选通知 - 通知标记:标记通知已读/未读 ### 公共功能 1. 个人信息管理 - 基本信息修改:修改姓名、手机号、邮箱等 - 头像上传:上传和修改个人头像 2. 系统功能 - 登录注册:账号登录和注册 - 权限控制:基于角色的权限控制 - 数据导出:支持数据导出为Excel 3. 消息通知 - 站内通知:系统消息推送 - 邮件通知:重要消息邮件提醒 - 截止提醒:任务截止自动提醒 ## 开发规范 1. 代码规范 - 遵循阿里巴巴Java开发手册 - 使用统一的代码格式化配置 - 必要的注释和文档 2. 命名规范 - 类名:大驼峰命名法 - 方法名:小驼峰命名法 - 变量名:小驼峰命名法 - 常量名:全大写下划线分隔 - 包名:全小写 3. API规范 - RESTful API设计 - 统一响应格式 - 统一异常处理 - 接口版本控制 4. 安全规范 - 密码加密存储 - JWT认证 - 权限控制 - 数据校验 - XSS防护 - SQL注入防护 ## 部署说明 1. 环境要求 - JDK 1.8+ - MySQL 8.0+ - Redis 6.0+ - Maven 3.6+ 2. 配置修改 - 数据库配置 - Redis配置 - OSS配置 - JWT配置 3. 打包部署 ```bash mvn clean package java -jar file-collection-system.jar ``` ### E-R 图 ```mermaid erDiagram SYS_USER ||--o{ SYS_TEACHER_CLASS : "教师-班级" SYS_USER ||--o{ TASK_SUBMISSION : "学生提交" SYS_USER ||--o{ NOTIFICATION : "接收通知" SYS_USER ||--o{ TASK : "教师创建" SYS_USER }|--|| SYS_DEPARTMENT : "学生所属班级" SYS_DEPARTMENT ||--o{ SYS_DEPARTMENT : "部门层级" SYS_DEPARTMENT ||--o{ SYS_TEACHER_CLASS : "班级-教师" SYS_DEPARTMENT ||--o{ TASK : "任务目标班级" TASK ||--o{ TASK_SUBMISSION : "任务提交" TASK_SUBMISSION ||--o{ TASK_SUBMISSION_FILE : "提交文件" SYS_USER { bigint id PK varchar username varchar password int user_type bigint department_id FK } SYS_DEPARTMENT { bigint id PK varchar name bigint parent_id FK int type } SYS_TEACHER_CLASS { bigint id PK bigint teacher_id FK bigint class_id FK } TASK { bigint id PK varchar name datetime deadline bigint teacher_id FK bigint class_id FK } TASK_SUBMISSION { bigint id PK bigint task_id FK bigint student_id FK datetime submit_time varchar status } TASK_SUBMISSION_FILE { bigint id PK bigint submission_id FK varchar file_name varchar file_url } NOTIFICATION { bigint id PK varchar title bigint receiver_id FK varchar type boolean read } ``` E-R 图说明: 1. **用户实体(SYS_USER)** - 与部门(班级)是多对一关系:学生属于一个班级 - 与教师班级关联是一对多关系:教师可以关联多个班级 - 与任务是一对多关系:教师可以创建多个任务 - 与提交记录是一对多关系:学生可以提交多个任务 - 与通知是一对多关系:用户可以接收多个通知 2. **部门实体(SYS_DEPARTMENT)** - 自关联形成层级结构:学院->专业->班级 - 与教师班级关联是一对多关系:班级可以关联多个教师 - 与任务是一对多关系:班级可以有多个任务 3. **任务实体(TASK)** - 与提交记录是一对多关系:一个任务可以有多个提交记录 - 与教师是多对一关系:任务由一个教师创建 - 与班级是多对一关系:任务指定给一个班级 4. **提交记录实体(TASK_SUBMISSION)** - 与提交文件是一对多关系:一个提交可以包含多个文件 - 与任务是多对一关系:提交关联到一个任务 - 与学生是多对一关系:提交由一个学生创建 5. **通知实体(NOTIFICATION)** - 与用户是多对一关系:通知发送给一个用户 需求开发: 1. 小程序接口返回 502 问题排查 2. 车辆轨迹接收性能优化(5000条每分钟,完成自测) 3. 对比 CDL 数据库字段默认值是否一致 4. replatform 和 TC bug 处理 5. 太仓黄埔生产发版内容准备 6. 太仓黄埔JIT 新增同步 Prime 数据接口 问题排查: 1. 黄埔 叫料问题排查 2. 太仓 RDRR 页面导入时间格式问题排查处理 下周工作计划: 1. 太仓黄埔生产发版 2. 配合测试验证车辆轨迹接收性能优化 3. replatform 有一个新需求需要做