Files
2026-01-04 10:00:08 +08:00

20 KiB
Raw Permalink Blame History

学生操行分管理模块

📋 模块基本信息

模块名称: 学生操行分管理 / Student Conduct Score Management
负责人: 开发团队
开发状态: 🟡 待开发
技术栈: Spring Boot 3.4.6 + Vue 3 + TypeScript + Element Plus
依赖模块: 用户管理、班级管理、学生管理
开发周期: 待定


🎯 模块概述

业务价值

为学校提供完整的学生操行分管理解决方案,实现班主任每月对班级学生操行表现的量化评价和管理,帮助学生处管理员掌握学生的学期表现情况,为学生综合素质评价提供数据支持。

核心功能

  • 班主任月度评分: 班主任每月为班级学生录入操行分数
  • 学期平均分统计: 自动计算学生的学期操行平均分
  • 多维度数据展示: 按学年、学期、月份等维度展示学生操行表现
  • 权限分级管理: 班主任只能管理本班学生,管理员可查看全校数据

技术特点

  • 数据完整性: 严格的数据验证和业务规则约束
  • 性能优化: 支持大数据量查询和统计分析
  • 权限安全: 基于角色的精细化权限控制
  • 用户体验: 友好的批量录入和数据展示界面

📁 文档结构

学生操行分管理/
├── README.md                    # 本文件 - 模块总览
├── 需求分析/
│   ├── 业务需求说明.md           # 详细业务需求
│   ├── 功能需求清单.md           # 功能点清单
│   ├── 用户故事.md               # 用户使用场景
│   └── 非功能需求.md             # 性能、安全要求
├── 技术设计/
│   ├── 数据库设计.md             # 表结构设计
│   ├── API接口设计.md            # 接口定义
│   ├── 架构设计.md               # 模块架构
│   └── 技术选型.md               # 技术决策说明
├── 实现文档/
│   ├── 后端实现说明.md           # 后端代码结构
│   ├── 前端实现说明.md           # 前端代码结构
│   ├── 关键业务逻辑.md           # 核心算法逻辑
│   └── 代码规范.md               # 编码规范
├── 测试文档/
│   ├── 测试计划.md               # 测试策略
│   ├── 测试用例.md               # 具体测试用例
│   └── 测试报告.md               # 测试结果
└── 运维文档/
    ├── 部署指南.md               # 部署步骤
    ├── 监控配置.md               # 监控指标
    └── 故障处理.md               # 常见问题

🏗️ 系统架构

模块架构图

graph TB
    subgraph "前端层"
        A1[操行分录入页面<br/>ConductScoreInput.vue]
        A2[学期统计页面<br/>SemesterStatistics.vue]
        A3[操行分查询页面<br/>ConductScoreQuery.vue]
    end

    subgraph "接口层"
        B1[操行分Controller<br/>ConductScoreController]
        B2[统计Controller<br/>StatisticsController]
    end

    subgraph "业务层"
        C1[操行分Service<br/>IConductScoreService]
        C2[统计Service<br/>IStatisticsService]
        C3[权限Service<br/>IPermissionService]
    end

    subgraph "数据层"
        D1[操行分Mapper<br/>ConductScoreMapper]
        D2[统计SQL<br/>统计查询语句]
        D3[Redis缓存<br/>缓存统计结果]
    end

    A1 --> B1
    A2 --> B2
    A3 --> B1
    B1 --> C1
    B2 --> C2
    C1 --> C3
    C2 --> C3
    C1 --> D1
    C2 --> D1
    C2 --> D2
    D2 --> D3

数据流向

sequenceDiagram
    participant T as 班主任
    participant F as 前端
    participant C as Controller
    participant S as Service
    participant M as Mapper
    participant D as Database

    T->>F: 选择月份录入操行分
    F->>C: POST /api/conduct-score/batch
    C->>S: 批量保存操行分
    S->>M: 插入/更新分数数据
    M->>D: SQL执行
    D-->>M: 返回结果
    M-->>S: 返回成功
    S-->>C: 返回结果
    C-->>F: JSON响应
    F-->>T: 显示保存成功

    Note over T,D: 学生处管理员查询学期统计
    T->>F: 选择学年学期查询
    F->>C: GET /api/statistics/semester-average
    C->>S: 计算学期平均分
    S->>M: 查询统计数据
    M->>D: SQL执行
    D-->>M: 返回原始数据
    M-->>S: 计算平均分
    S-->>C: 返回统计结果
    C-->>F: JSON响应
    F-->>T: 显示统计表格

🎯 核心功能模块

1. 操行分录入管理

业务描述

班主任每月为负责的班级学生录入操行分数,包含分数和备注信息。如果班主任负责多个班级,则通过多Tab页方式展示。系统需要验证班主任权限、检查数据完整性、防止重复录入等。

技术实现

  • 前端实现: Vue 3 多Tab页组件,支持批量录入和数据验证,每个Tab页独立管理一个班级
  • 后端实现: Spring Boot Controller + Service,通过xg_class_msg.class_teacher_id获取班主任负责的班级
  • 数据存储: MySQL 数据库,支持历史数据追溯
  • Tab页逻辑: 根据班主任负责的班级数量动态生成Tab页,每个Tab页独立保存状态

关键流程

  1. 系统根据当前用户ID查询xg_class_msg表获取负责的班级
  2. 动态生成Tab页,每个Tab对应一个班级
  3. 班主任选择录入月份
  4. 系统加载对应班级学生列表
  5. 班主任为每位学生录入分数和备注
  6. 系统验证数据完整性和合理性
  7. 批量保存到数据库(支持跨Tab页批量保存)
  8. 更新录入状态记录

2. 学期统计分析

业务描述

学生处管理员查看学生的学期操行平均分,系统自动计算每个学生的学期平均表现,并提供导出功能。

技术实现

  • 前端实现: 数据表格组件,支持排序、筛选和导出
  • 后端实现: 统计查询接口,包含缓存优化
  • 数据处理: SQL聚合查询或Java计算逻辑

关键流程

  1. 管理员选择学年和学期
  2. 系统查询该学期所有学生的分数记录
  3. 计算每个学生的平均分
  4. 按班级或专业分组展示
  5. 支持数据导出功能

🔌 API 接口概览

接口分类

基础 CRUD 接口

接口名称 请求方式 路径 功能描述
查询操行分列表 GET /api/conduct-score/list 分页查询操行分记录
查询操行分详情 GET /api/conduct-score/{id} 根据 ID 查询操行分详情
新增操行分 POST /api/conduct-score 创建新的操行分记录
更新操行分 PUT /api/conduct-score/{id} 更新指定操行分记录
删除操行分 DELETE /api/conduct-score/{id} 删除指定操行分记录

业务逻辑接口

接口名称 请求方式 路径 功能描述
批量录入操行分 POST /api/conduct-score/batch 批量保存操行分
班主任班级学生 GET /api/conduct-score/class-students 获取班主任班级学生列表
学期平均分统计 GET /api/statistics/semester-average 查询学期平均分
导出学期统计 GET /api/statistics/export 导出学期统计数据
验证录入权限 GET /api/conduct-score/check-permission 检查班主任录入权限

接口规范

  • 请求格式: JSON
  • 响应格式: 统一响应体结构
  • 认证方式: JWT Token
  • 权限控制: 基于角色的权限验证

🗄️ 数据模型

核心实体

操行分表 (xg_conduct_score)

字段名 类型 长度 非空 默认值 说明
id BIGINT - Y - 主键 ID
tenant_id VARCHAR 20 Y 000000 租户编号
academic_year INT 4 Y - 学年(如:2024)
semester TINYINT 1 Y - 学期(1-第一学期,2-第二学期)
month TINYINT 2 Y - 月份(1-12)
student_id BIGINT - Y - 学生ID,关联xg_student_msg.id
class_id BIGINT - Y - 班级ID,关联xg_class_msg.id
class_teacher_id BIGINT - Y - 班主任ID,关联sys_user.id
score DECIMAL 5,2 Y - 操行分数(0.00-100.00)
remark VARCHAR 500 N NULL 备注信息
create_dept BIGINT - N NULL 创建部门
create_by BIGINT - N NULL 创建者
create_time DATETIME - N NULL 创建时间
update_by BIGINT - N NULL 更新者
update_time DATETIME - N NULL 更新时间
deleted TINYINT 1 Y 0 删除标志(0代表存在 1代表删除)

实体关系图

erDiagram
    xg_conduct_score ||--o{ xg_student_msg : "关联学生"
    xg_conduct_score }o--|| xg_class_msg : "关联班级"
    xg_conduct_score }o--|| sys_user : "关联班主任"
    xg_class_msg ||--o{ xg_student_msg : "班级包含学生"
    xg_class_msg }o--|| sys_user : "班级有班主任"

    xg_conduct_score {
        bigint id PK
        int academic_year
        tinyint semester
        tinyint month
        bigint student_id FK
        bigint class_id FK
        bigint class_teacher_id FK
        decimal score
        varchar remark
        datetime create_time
    }

    xg_student_msg {
        bigint id PK
        varchar student_no
        varchar name
        varchar class_name
    }

    xg_class_msg {
        bigint id PK
        varchar class_name
        bigint class_teacher_id FK
    }

    sys_user {
        bigint id PK
        varchar user_name
        varchar nick_name
    }

🔄 业务流程

主要业务流程

班主任录入操行分流程

flowchart TD
    A[班主任登录] --> B{选择录入月份}
    B --> C[加载班级学生列表]
    C --> D{学生列表为空?}
    D -->|是| E[提示无学生数据]
    D -->|否| F[显示学生列表和录入表单]
    F --> G[录入分数和备注]
    G --> H{数据验证通过?}
    H -->|否| I[显示错误提示]
    I --> G
    H -->|是| J[批量保存数据]
    J --> K{保存成功?}
    K -->|否| L[显示保存失败信息]
    L --> J
    K -->|是| M[更新录入状态]
    M --> N[显示保存成功]
    N --> O[结束]

学期统计查询流程

flowchart TD
    A[管理员选择学年学期] --> B[查询该学期操行分数据]
    B --> C{有数据?}
    C -->|否| D[显示无数据提示]
    C -->|是| E[按学生分组计算平均分]
    E --> F[按班级排序展示]
    F --> G{需要导出?}
    G -->|否| H[显示统计表格]
    G -->|是| I[生成Excel文件]
    I --> J[下载文件]
    J --> H
    H --> K[结束]

🎨 前端设计

页面结构

操行分录入页面 (ConductScoreInput.vue)

  • 功能: 班主任每月录入负责班级学生操行分
  • 组件: 月份选择器、多Tab页、学生列表表格、批量编辑表单
  • 交互: 多Tab页展示不同班级,支持批量保存、数据验证提示
  • 数据: 通过xg_class_msg.class_teacher_id获取班主任负责的所有班级及学生信息
  • 特性: 一个老师负责多个班级的场景,每个班级一个Tab页,Tab间独立录入

学期统计页面 (SemesterStatistics.vue)

  • 功能: 学生处管理员查看学期平均分
  • 组件: 学年学期选择器、统计数据表格、导出按钮
  • 交互: 支持筛选排序、数据导出
  • 数据: 学期平均分统计、学生基本信息

操行分查询页面 (ConductScoreQuery.vue)

  • 功能: 查询历史操行分记录
  • 组件: 查询条件表单、数据表格、分页组件
  • 交互: 支持多条件筛选、详情查看
  • 数据: 操行分历史记录、关联的学生和班级信息

组件设计

批量录入组件 (BatchScoreInput.vue)

// 组件属性接口
interface BatchScoreInputProps {
  academicYear: number;      // 学年
  semester: number;          // 学期
  month: number;             // 月份
  classId: string;           // 班级ID
  students: StudentInfo[];   // 学生列表
}

// 组件事件接口
interface BatchScoreInputEmits {
  save: [scores: ConductScore[]];           // 保存分数
  cancel: [];                               // 取消操作
}

统计表格组件 (StatisticsTable.vue)

// 组件属性接口
interface StatisticsTableProps {
  data: SemesterAverage[];   // 统计数据
  loading: boolean;          // 加载状态
  showExport: boolean;       // 是否显示导出按钮
}

// 组件事件接口
interface StatisticsTableEmits {
  export: [format: 'excel' | 'pdf'];        // 导出数据
  sort: [field: string, order: 'asc' | 'desc']; // 排序
}

📝 开发规范

代码结构

后端代码结构

src/main/java/org/dromara/modules/conduct/
├── controller/
│   ├── ConductScoreController.java
│   └── StatisticsController.java
├── domain/
│   ├── bo/
│   │   ├── ConductScoreBo.java
│   │   └── ConductScoreQueryBo.java
│   └── vo/
│       ├── ConductScoreVo.java
│       ├── SemesterAverageVo.java
│       └── ConductScoreDetailVo.java
├── mapper/
│   ├── ConductScoreMapper.java
│   └── ConductScoreMapper.xml
├── service/
│   ├── IConductScoreService.java
│   ├── IStatisticsService.java
│   └── impl/
│       ├── ConductScoreServiceImpl.java
│       └── StatisticsServiceImpl.java
└── utils/
    └── ConductScoreUtils.java

前端代码结构

src/views/conduct/
├── index.vue                    # 主页面
├── components/
│   ├── ConductScoreInput.vue    # 录入组件
│   ├── SemesterStatistics.vue   # 统计组件
│   └── ConductScoreQuery.vue    # 查询组件
├── types/
│   └── index.ts                 # 类型定义
└── api/
    └── index.ts                 # API接口

命名规范

后端命名规范

  • 类名: PascalCase (如: ConductScoreController, ConductScoreService)
  • 方法名: camelCase (如: getConductScoreList, createConductScore)
  • 常量: UPPER_SNAKE_CASE (如: MAX_SCORE_VALUE)
  • 包名: 全小写 (如: com.example.module)

前端命名规范

  • 组件名: PascalCase (如: ConductScoreList, ConductScoreForm)
  • 方法名: camelCase (如: handleSubmit, getConductScoreInfo)
  • 变量名: camelCase (如: conductScoreList, isLoading)
  • 常量: UPPER_SNAKE_CASE (如: API_BASE_URL)

数据库命名规范

  • 表名: 下划线命名 (如: xg_conduct_score)
  • 字段名: 下划线命名 (如: academic_year, semester)
  • 索引名: idx_表名_字段名 (如: idx_conduct_score_student_id)

🧪 测试策略

测试分类

单元测试

  • 覆盖范围: Service 层业务逻辑、数据验证逻辑
  • 测试框架: JUnit 5 + Mockito
  • 覆盖率要求: > 80%

集成测试

  • 覆盖范围: Controller 层 API 接口、数据库操作
  • 测试框架: Spring Boot Test
  • 测试数据: 测试数据库

前端测试

  • 覆盖范围: 组件功能测试、表单验证
  • 测试框架: Vue Test Utils + Jest
  • 测试类型: 组件渲染、用户交互、数据绑定

测试用例设计

功能测试用例

  • 正常流程测试: 验证正常的操行分录入和查询流程
  • 边界值测试: 验证分数范围、日期范围等边界条件
  • 异常流程测试: 验证错误处理和权限控制

性能测试用例

  • 响应时间测试: 验证接口响应时间 < 200ms
  • 并发测试: 验证批量录入时的并发处理能力
  • 大数据量测试: 验证万人规模数据查询性能

🚀 部署运维

部署环境

开发环境

  • 部署方式: 本地 Docker 容器
  • 数据库: MySQL 8.0
  • 缓存: Redis 7.0
  • 配置: application-dev.yml

生产环境

  • 部署方式: Kubernetes
  • 数据库: MySQL 8.0(集群)
  • 缓存: Redis 7.0(集群)
  • 配置: application-prod.yml

监控指标

业务指标

  • 录入成功率: 操行分录入操作的成功率
  • 查询响应时间: 统计查询的平均响应时间
  • 数据完整性: 操行分数据的完整性检查

技术指标

  • 接口响应时间: 平均响应时间 < 200ms
  • 系统可用性: 99.9%可用性
  • 错误率: 错误率 < 0.1%

📅 开发计划

开发阶段

第一阶段:基础框架(1周)

  • 数据库表结构设计和创建
  • 基础 CRUD 接口开发
  • 基础页面和组件开发
  • 单元测试编写

第二阶段:核心功能(2周)

  • 操行分录入功能开发
  • 学期统计功能开发
  • 权限控制逻辑实现
  • 集成测试

第三阶段:完善优化(1周)

  • 功能完善和用户体验优化
  • 性能测试和优化
  • 文档完善
  • 验收测试

里程碑

  • 里程碑 1: 基础框架完成
  • 里程碑 2: 核心功能完成
  • 里程碑 3: 测试完成,准备发布
  • 里程碑 4: 正式发布上线

🔧 开发工具

后端开发工具

  • IDE: IntelliJ IDEA
  • 构建工具: Maven
  • 代码质量: SonarQube
  • API 测试: Postman

前端开发工具

  • IDE: VSCode
  • 构建工具: Vite
  • 代码规范: ESLint + Prettier
  • 组件预览: Storybook

数据库工具

  • 管理工具: Navicat Premium
  • 版本控制: Flyway
  • 性能监控: MySQL Performance Schema

📖 相关文档

  • 项目总览: ../项目总览/README.md
  • 开发规范: ../开发文档/README.md
  • API 接口: ../开发文档/API.md
  • 数据库设计: ../设计文档/database/
  • 变更记录: ../变更管理/README.md

📝 开发注意事项

重要提醒

  1. 数据完整性: 操行分数据关系到学生评价,必须确保数据准确性和完整性
  2. 权限控制: 班主任只能录入本班学生,管理员查看权限需严格控制
  3. 性能优化: 统计查询涉及大量数据计算,需要合理设计索引和缓存策略
  4. 用户体验: 批量录入功能需要良好的交互设计和数据验证
  5. 业务规则: 每月只能录入一次,不可重复录入同一学生的当月分数

技术要点

  1. 雪花ID: 主键使用雪花ID,确保分布式环境下的唯一性
  2. 逻辑删除: 所有删除操作使用逻辑删除,保留历史数据
  3. 多租户: 支持多租户数据隔离
  4. 审计字段: 完整记录数据的创建和更新信息
  5. 数据验证: 前后端都需进行数据验证,确保数据质量