Commit Graph
21 Commits
  • 将索引缩短为 IX_CE_Offering_Status_WaitlistedAt。
    将候补迁移改为可重入:先检查列和索引是否存在,再执行 DDL。
    附件中已经成功添加 WaitlistedAt、但索引创建失败的数据库可直接重试,不会报重复列。
    运行时和 dotnet ef 连接统一开启 AllowUserVariables;Connector/NET 默认关闭该选项。Connector/NET 官方说明
    增加所有 MySQL 索引名不得超过 64 字符的回归测试。
  • 仪表盘和 6 类统计摘要接入 HybridCache(内存 + Redis)。
    默认 Redis 缓存 3 分钟、本地缓存 30 秒,可通过环境变量调整。
    缓存键包含数据权限范围、有效学院和全部筛选条件,避免跨学院串数据。
    Excel 导出保持实时查询,不使用摘要缓存。
    无需数据库迁移。
  • 主要变更:
    新增统一缓存封装:[AppCache.cs (line 12)](/E:/jiaowu/src/Jiaowu.Api/Infrastructure/Caching/AppCache.cs:12)
    接入 HybridCache 和可选 Redis:[Program.cs (line 153)](/E:/jiaowu/src/Jiaowu.Api/Program.cs:153)
    缓存学生激活选项、基础数据、公开课表和课表选项。
    个人课表、选课容量、成绩、权限、通知和任务状态保持实时查询。
    基础数据、课程、教师、教学任务、作息、考试和课表发布后自动失效相关缓存。
    新增 /health/cache,Redis 故障不影响 /health/ready。
    Compose 增加 256MB、allkeys-lfu、无持久化的 redis:8.8-alpine 服务;该镜像标签已由 Docker 官方镜像仓库核对。
    更新 [.env.example (line 1)](/E:/jiaowu/.env.example:1) 和 [README.md (line 190)](/E:/jiaowu/README.md:190) 部署说明。
  • 新增显式命令:--seed-demo-data --confirm-production-demo-data
    仅允许非 Development 环境运行。
    只允许写入没有业务数据的独立空库。
    演示数据使用单个 InnoDB 事务,失败整体回滚;迁移 DDL 仍单独执行,因为 MySQL 8.4 的 DDL 会隐式提交。MySQL 事务文档、隐式提交说明
    不包含通用测试密码或学生、教师登录账号。
    包含校区、学期、30 间教室、16 个学院、52 个专业、104 个班级、128 名教师、3,640 名学生和148门课程。
  • 全部完成。定时检测系统概览:
    新增组件
    
      ┌────────────────────────────────┬─────────────────────────────────────────────────────────┐
      │              组件              │                          说明                           │
      ├────────────────────────────────┼─────────────────────────────────────────────────────────┤
      │ WarningSchedule 实体           │ 定时配置:学期、星期几、时、分、启用/禁用、上次执行时间 │
      ├────────────────────────────────┼─────────────────────────────────────────────────────────┤
      │ WarningCheckWorker             │ BackgroundService,每分钟轮询一次,匹配到时间就执行检测 │
      ├────────────────────────────────┼─────────────────────────────────────────────────────────┤
      │ GET/PUT /api/warnings/schedule │ 读取/保存定时配置                                       │
      └────────────────────────────────┴─────────────────────────────────────────────────────────┘
    
      页面配置
    
      在学业预警页面顶部新增「定时检测」区域:
      - 启用开关:一键开/关自动检测
      - 星期选择:周一至周日
      - 时分选择:精确到分钟
      - 上次执行时间:自动显示
    
      工作流程
    
      每分钟 Worker 轮询
        → 查询 WarningSchedules 表,匹配当前星期+时+分
        → 检查是否已在本分钟执行过(防止重复)
        → 加载该学期全部启用规则 + 在籍学生
        → 逐条规则、逐个学生检测
        → 已存在的同型预警跳过,新预警写入 + 通知学生/辅导员
        → 更新 LastRunAt
    
      管理员配置"每周一 08:00 自动检测",系统就会在每周一早上 8 点整自动执行一次完整的学业预警检测。
  • 已改成后台“检查并发布”任务,原来的超时主要就是同步逐条校验导致的。
    发布接口立即返回 202 Accepted,页面轮询显示检查进度。
    校验改为批量读取,减少重复数据库查询。
    检查失败保留草稿并显示具体原因;成功后原子完成旧课表归档和新课表发布。
    同一学期禁止两个发布任务并发,服务重启后未完成任务会自动恢复。
    发布期间锁定编辑、自动排课等冲突操作。
    已补齐 SQLite 开发迁移及 MySQL 生产迁移。
  • 主要更新:
    班级课表支持年级、学院、专业、行政班分级筛选。
    管理员课表查询中心支持班级、教师、场地三种课表。
    超级管理员、校级教务、学院教务、领导可查询草稿和已发布版本;学院管理员保留学院数据范围。
    增加周视图、日视图切换。
    支持 Excel 导出和当前视图 PDF 导出。
    学生端增加“空闲教室”,支持学期、周次、星期、连续节次、校区、教学楼、容量筛选,并按教学楼分组、分页展示。
    空闲教室只依据正式课表计算;未配置节次表时自动提供默认节次。
  • 取消新增/Excel 导入档案时自动创建账号。
    取消修改人员档案时同步登录账号。
    Excel 人员模板恢复为不含“初始密码”。
    登录页新增“学生首次登录?自助激活账号”入口。
    公开激活地址:http://127.0.0.1:5255/activate
  • 主要改动:
    自动排课接口立即返回 202 + jobId
    后台服务独立执行,不受浏览器关闭或前端超时影响
    进度、成功、失败状态持久化到数据库
    服务重启后自动恢复排队中或中断的任务
    同一草稿禁止重复提交后台任务
    运行期间禁止编辑、发布或删除该课表
    排课结果和任务成功状态在同一事务中提交
    前端每秒轮询进度,显示已处理教学班和已规划安排数
  • 自动排课:保留手工安排,按教师、行政班、周次、节次、容量和场地约束补排。
    课程约束:可限定校区、教学楼、指定教室、允许上课日、最早/最晚节次。
    无教室课程:教室可为空,但仍校验教师和班级冲突。
    作息维护:按学期维护节次、上下课时间和启用状态。
    发布保护:发布前重新检查全部约束,并阻止学时未排满的课表发布。
    工作台升级:增加“排课规则与作息”“自动排课”入口,自动生成后仍支持手工微调。
    同时兼容 SQLite 和 MySQL,已生成正式迁移。
  • 多角色账号按 All > College > Class > Self 自动取最高权限。
    学院管理员限制在所属学院。
    辅导员通过稳定账号 ID 绑定行政班,避免重名串班。
    教师只能访问本人档案、授课课程和所授课学生。
    学生只能访问本人档案及所在班级课程。
    教师/学生角色会自动校验并绑定工号或学号档案。
    超级管理员可在用户页面调整角色、学院、工号/学号,并预览生效后的数据范围。
  • 3
  • 2
  • 1