Commit Graph
8 Commits
  • 优化学业预警检测:
    通知阶段移除逐条查询学生、规则、辅导员的 N+1 数据库访问。
    不及格预警从“每个学生一次统计 + 一次查重”改为批量分组统计与一次性已有记录集合查询。
    保持原有阈值、去重、通知内容与权限行为。
  • “教学班成绩分析”页面新增“定时刷新设置”,支持启停、刷新间隔、单次处理上限、查看上次/下次扫描时间。
    配置保存在独立数据库表 CourseGradeStatisticsRefreshSettings,不是修改 appsettings.json。
    后台每 10 秒读取配置,仅到期扫描;成绩录入、导入、审批时不再立即创建统计任务。
    扫描发现过期数据后,仍通过持久任务、Outbox 和 RabbitMQ 执行;Redis统计缓存由处理任务统一刷新。
  • 成绩通知:仅在某门课程成绩正式发布后自动发送,按成绩单学生名单通知,不展示具体分数;发布状态与通知同一次提交。
    手动发信:移除“成绩通知”选项,只能发送普通通知,原有角色与范围权限保持不变。
    选课通知:管理员关闭一轮选课时,自动向每位参与学生发送一条汇总通知,包含最终选中课程及候补未成功课程;候补失效、轮次关闭和通知生成保持原子性。
    关闭选课界面会明确提示发送通知,并显示实际通知人数。
  • 全部完成。定时检测系统概览:
    新增组件
    
      ┌────────────────────────────────┬─────────────────────────────────────────────────────────┐
      │              组件              │                          说明                           │
      ├────────────────────────────────┼─────────────────────────────────────────────────────────┤
      │ WarningSchedule 实体           │ 定时配置:学期、星期几、时、分、启用/禁用、上次执行时间 │
      ├────────────────────────────────┼─────────────────────────────────────────────────────────┤
      │ WarningCheckWorker             │ BackgroundService,每分钟轮询一次,匹配到时间就执行检测 │
      ├────────────────────────────────┼─────────────────────────────────────────────────────────┤
      │ GET/PUT /api/warnings/schedule │ 读取/保存定时配置                                       │
      └────────────────────────────────┴─────────────────────────────────────────────────────────┘
    
      页面配置
    
      在学业预警页面顶部新增「定时检测」区域:
      - 启用开关:一键开/关自动检测
      - 星期选择:周一至周日
      - 时分选择:精确到分钟
      - 上次执行时间:自动显示
    
      工作流程
    
      每分钟 Worker 轮询
        → 查询 WarningSchedules 表,匹配当前星期+时+分
        → 检查是否已在本分钟执行过(防止重复)
        → 加载该学期全部启用规则 + 在籍学生
        → 逐条规则、逐个学生检测
        → 已存在的同型预警跳过,新预警写入 + 通知学生/辅导员
        → 更新 LastRunAt
    
      管理员配置"每周一 08:00 自动检测",系统就会在每周一早上 8 点整自动执行一次完整的学业预警检测。