39 Commits
  • 工作台 8 项指标全部改为明确中文标题。
    ISO 8601 时间统一转换为北京时间,例如 2026/07/23 22:29。
    审计日志、缴费确认时间、通知发布时间统一使用时间格式化。
    管理员层级、流程类型、录取状态等建立统一中文映射。
    工作台、流程设计、学校管理等管理页面的装饰性英文标题改为中文。
    历史审计记录中的 plan、draft 等枚举也会自动翻译。
    更新静态资源版本号,避免浏览器继续使用旧缓存。
  • 2
  • 成绩提交时按考试一次性计算并存储单科名次、排名百分比、等级、合格状态、总分排名及整场合格状态。
    新增 result_statistics、registration_result_summaries 两张统计表,现有数据库首次启动时自动回填。
    SQL 查询首先通过 examId 限定范围。
    科目成绩只排序一次,并使用 registration/subject 字典组织数据。
    汇总接口与成绩明细接口已拆分,明细、成绩录入名单和特征分名单均改为服务端分页。
    所有成绩写入口统一限制为:0—满分,且只能是整数或 .5,包括手工录入、批量录入、Excel 导入和复议改分。
    前端也增加了相同的即时校验。
    修复其他考试卡片显示 undefined 的问题。
  • 已完成迁移验收和清理。
    删除全部 Node.js 后端、.mjs 测试、辅助脚本、package*.json、node_modules 和迁移对照工具。
    浏览器前端保留并迁入 [Eis.Web/wwwroot](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Web/wwwroot/index.html),统一改为 .js 模块。
    修复一个隐藏遗漏:.NET 仍依赖 schema.mjs,且 MySQL 结构解析可能被转义反引号截断。现已改为原生 [SQLite SQL](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Infrastructure/Data/Schema.sqlite.sql) 和 [MySQL SQL](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Infrastructure/Data/Schema.mysql.sql) 资源。
    更新了 [DatabaseInitializer.cs](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Infrastructure/Data/DatabaseInitializer.cs)、项目配置、README 和迁移文档。
    data 目录和现有数据库未修改;测试仅使用系统临时 SQLite 数据库。
  • 新增 [Eis.Tools (line 1)](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Tools/Program.cs:1),支持 database init/reset/seed。
    数据库维护、安全校验和事务逻辑位于 [DatabaseMaintenanceService.cs (line 1)](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Infrastructure/Data/DatabaseMaintenanceService.cs:1)。
    内置完整演示数据:1200 名考生、10800 条成绩、2404 条招生记录。
    删除旧 import-test-data.mjs 和 reset-dev-database.mjs 运行入口。
    Docker 镜像同时包含 Web 和 /app/tools/Eis.Tools.dll。
    [package.json (line 11)](C:/Users/BI/Documents/EIS-dotnet/package.json:11) 原数据库命令已改为调用 .NET。
    新增统一发布脚本:[publish.ps1 (line 1)](C:/Users/BI/Documents/EIS-dotnet/scripts/publish.ps1:1)。
  • 本轮迁移已完成,生产运行链路现已切换为纯 ASP.NET Core 10。
    主要完成:
    补齐招生学校计划、投档审核、报到、扫码、补录等原生接口。
    新增 SQLite/MySQL 空库初始化及默认审批流、号码规则。
    删除 Node 兼容代理,未知 API 直接返回原生 404。
    Docker、Compose、Gitea CI 全部切换到 Eis.Web.dll。
    CKEditor 已固化到 Web 发布资源,不再依赖 node_modules。
    新增纯 .NET 冒烟脚本:[smoke-dotnet-native.ps1 (line 1)](C:/Users/BI/Documents/EIS-dotnet/scripts/smoke-dotnet-native.ps1:1)。
    迁移状态已更新:[MIGRATION.md (line 14)](C:/Users/BI/Documents/EIS-dotnet/MIGRATION.md:14)。
    容器入口见 [Dockerfile (line 31)](C:/Users/BI/Documents/EIS-dotnet/Dockerfile:31)。
  • 本阶段迁移已完成。
    Excel:班级、账号、考生、缴费、考场、成绩、志愿、录取、报到及正式录取名册均改为 ClosedXML 原生处理,支持模板、校验、筛选和导入预检。[SystemWorkbook.cs](C:\\Users\\BI\\Documents\\EIS-dotnet\\src\\Eis.Infrastructure\\Spreadsheets\\SystemWorkbook.cs)
    文书:录取通知书模板、成绩单/准考证/通知书业务数据与防伪验真已脱离 Node;保留现有前端排版导出效果。[AdminAdmissionService.Documents.cs](C:\\Users\\BI\\Documents\\EIS-dotnet\\src\\Eis.Infrastructure\\Administration\\AdminAdmissionService.Documents.cs)
    缓存:完成 Redis 命名空间版本缓存、有界本地回退、请求合并和并发失效保护;公开数据及成绩写入后立即失效。[ApplicationCache.cs](C:\\Users\\BI\\Documents\\EIS-dotnet\\src\\Eis.Infrastructure\\Caching\\ApplicationCache.cs)
    迁移清单已更新为完成。[MIGRATION.md](C:\\Users\\BI\\Documents\\EIS-dotnet\\MIGRATION.md)
  • 已完成本轮迁移:管理后台、审批流和考务编排的业务 API 已全部由 ASP.NET Core 10 原生处理。
    主要完成:
    管理端招生工作台、指标资格、招生学校账号。
    招生计划审核、分数优先多志愿投档、退档监督。
    逐轮录取公示、报到审批、补录轮次推进、最低录取线公示。
    成绩预览导入与管理员账号禁止物理删除。
    新增迁移开关及健康状态:[MIGRATION.md (line 57)](C:\\Users\\BI\\Documents\\EIS-dotnet\\MIGRATION.md:57)
    核心实现:[AdminAdmissionService.cs (line 10)](C:\\Users\\BI\\Documents\\EIS-dotnet\\src\\Eis.Infrastructure\\Administration\\AdminAdmissionService.cs:10)
    原生路由:[NativeAdminReadEndpoints.cs (line 209)](C:\\Users\\BI\\Documents\\EIS-dotnet\\src\\Eis.Web\\Administration\\NativeAdminReadEndpoints.cs:209)
  • 按 examId 延迟加载成绩工作区,未选择考试时不执行排名计算
    单条及批量成绩草稿、发布
    特长分单条及批量维护
    成绩复议多级审批、终审改分、归档锁定
    排名、等级、单科达线和考试汇总
    成绩台账 Excel 导出
    管理范围、超级管理员写权限及事务审计
    独立开关 ADMIN_NATIVE_RESULTS_ENABLED
  • 支持五级混编、稳定种子、容量预检、固定考点、逐科考场/座位及四种准考证号规则。
    正式编排会事务性替换整场计划、准考证、座位和审计记录。
    支持三级管理员范围读取、批量 HTML 准考证、准考证信息 Excel,以及校级考点桌贴、门贴和签名单。
    核心实现见 [AdminArrangementPlanner.cs (line 7)](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Infrastructure/Administration/AdminArrangementPlanner.cs:7)、[AdminArrangementService.cs (line 11)](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Infrastructure/Administration/AdminArrangementService.cs:11) 和 [AdminArrangementExporter.cs (line 5)](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Infrastructure/Administration/AdminArrangementExporter.cs:5)。
    新增开关 ADMIN_NATIVE_ARRANGEMENTS_ENABLED=true,说明已更新到 [MIGRATION.md (line 57)](C:/Users/BI/Documents/EIS-dotnet/MIGRATION.md:57)。
    Excel 由 .NET 直接生成,使用 ClosedXML 0.105.0;该库支持服务端生成 Excel 2007+ 工作簿。ClosedXML NuGet 页面
  • 已完成第十一批迁移:考试维护功能已原生化到 ASP.NET Core 10。
    支持考试创建、草稿修改、发布状态切换及不可逆归档。
    支持科目、费用、满分和合格线策略校验。
    保留已有报名禁止修改科目、待处理成绩复议禁止归档等规则。
    数据修改、科目替换与审计日志使用同一数据库事务。
    新增 ADMIN_NATIVE_EXAM_MANAGEMENT_ENABLED 独立开关。
    路由与实现见 [AdminExamManagementService.cs (line 9)](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Infrastructure/Administration/AdminExamManagementService.cs:9) 和 [NativeAdminReadEndpoints.cs (line 133)](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Web/Administration/NativeAdminReadEndpoints.cs:133)。
    迁移说明已更新至 [MIGRATION.md (line 57)](C:/Users/BI/Documents/EIS-dotnet/MIGRATION.md:57)。
  • 本批“工作流调度”迁移完成:
    GET /api/admin/workflow-instances
    PATCH /api/admin/workflow-instances/{id}/transfer
    PATCH /api/admin/workflow-instances/{id}/supervise
    覆盖资料变更、报名审核、考点变更、批量报名号和成绩复议五类流程,并实现同级转交、范围校验、超级管理员监督回退及业务状态同步重置。
  • 本批“报名审核与缴费更新”迁移完成:
    PATCH /api/admin/registrations/{registrationId}
    PATCH /api/admin/payments/{registrationId}
    实现了多级报名审核、终审绑定报名号与号码规则、缴费确认/撤销、状态防重、考试归档锁定及事务审计
  • 本批“考生账号维护”迁移完成:
    POST /api/admin/candidate-accounts/archive
    POST /api/admin/candidates/{profileId}/reset-password
    PATCH /api/admin/candidates/{profileId}
    实现了校级按班级/年级归档与恢复、超级管理员密码重置、多级资料审批、事务审计和会话失效。核心代码见
  • 本批迁移已完成:
    原生化后台只读接口:GET /api/admin/candidates
    GET /api/admin/registrations
    GET /api/admin/payments
    
    保持超级、校级、班级管理员的数据范围一致。
    保持证件号脱敏、审批流、考试科目、缴费信息及座位号前导零兼容。
    新增灰度开关:ADMIN_NATIVE_OPERATIONAL_READS_ENABLED=true
    归档、审核、缴费更新等写操作暂时继续转发 Node。
  • 本轮完成“考点与考场变更审批”原生迁移:
    GET/POST/PATCH /api/admin/centers
    PATCH /api/admin/center-change-requests/{id}
    校级数据范围、班级管理员禁用
    省市区县及结构化考场校验
    正式档案和待审申请代码去重
    多级工作流分配、通过与拒绝
    终审时原子更新流程、审计、考点及考场
    新增开关 ADMIN_NATIVE_CENTERS_ENABLED=false
  • 本轮完成了完整的通知公告管理迁移:
    原生 GET /api/admin/notices
    原生五类系统公示聚合:计划、资格、录取、分数线、报到
    原生 PATCH /api/admin/publications/{type}/{id} 显隐控制
    权限、事务审计和 Node 返回结构保持一致
    开关升级为 ADMIN_NATIVE_NOTICE_MANAGEMENT_ENABLED
    兼容旧变量 ADMIN_NATIVE_NOTICE_WRITES_ENABLED
    冒烟脚本现在会自动构建 Web,避免使用过期程序集
  • 新增 POST /api/admin/notices、PATCH /api/admin/notices/{id}
    保留超级管理员权限边界
    支持草稿、发布、置顶、自动摘要
    HTML 净化,拦截脚本和危险链接
    公告更新与审计日志同事务提交
    新增开关 ADMIN_NATIVE_NOTICE_WRITES_ENABLED=false
    管理端公告列表和系统自动公告暂时仍由 Node 处理
  • 已完成管理后台第四批 ASP.NET Core 10 迁移:报名号规则与审批流程配置。
    原生接口:
    GET/POST /api/admin/number-rules
    GET /api/admin/workflows
    PUT /api/admin/workflows/{businessType}
    实现包括:
    报名号规则预览、创建和更新
    自动停用旧规则
    审批流程步骤重建
    班级、校级、超级管理员层级校验
    考点及批量申领流程禁止班级审批
    批量申领最终步骤强制为超级管理员
    配置更新与审计日志事务提交
  • 已完成管理后台第三批 ASP.NET Core 10 迁移:批量报名号申领与审批。
    原生接口:
    GET /api/admin/candidate-account-batches
    POST /api/admin/candidate-account-batches
    PATCH /api/admin/candidate-account-batches/{batchId}
    实现包含:
    校级管理员按班级提交名额
    可配置多级审批流与待办负载分配
    当前处理人及管理员层级校验
    审批通过、退回和重复审批保护
    终审时原子生成考生账号、报名号、初始密码和待补录资料
    生成账号兼容现有 PBKDF2 登录及首次强制改密
  • 已完成管理后台第二批 ASP.NET Core 10 迁移:
    学校创建、修改
    班级创建、修改
    管理员创建、修改
    管理员密码重置
    自主注册开关
    写入与审计日志保持同一事务
    停用或重置管理员后自动清除其会话
  • 已完成管理后台第一批只读功能的 ASP.NET Core 10 迁移:
    原生接口:context、dashboard、schools、school-organization、admins、exams
    保持超级、校级、班级管理员的数据范围及权限隔离
    其余管理写入、审批流和考务编排仍由 Node 转发
    新增 ADMIN_NATIVE_READS_ENABLED=true 开关,并强制要求原生认证和共享 Redis
  • 原生志愿、录取、计划余量、指标资格和通知查询:[CandidateService.Admissions.cs (line 29)](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Infrastructure/Candidate/CandidateService.Admissions.cs:29)
    志愿提交、资格校验、补录限制、次数上限与自动锁定:[CandidateService.Admissions.cs (line 152)](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Infrastructure/Candidate/CandidateService.Admissions.cs:152)
    通用招生记录读取及事务写入:[CandidateAdmissionRepository.cs (line 25)](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Infrastructure/Candidate/CandidateAdmissionRepository.cs:25)
    原生路由已接入:[NativeCandidateEndpoints.cs (line 70)](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Web/Candidate/NativeCandidateEndpoints.cs:70)
    迁移状态现在会把 Candidate 标记为原生:[MigrationFeatureCatalog.cs (line 12)](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Infrastructure/Migration/MigrationFeatureCatalog.cs:12)
  • 原生成绩查询、科目/总分排名、达线判断、等级计算及成绩单防伪码:[CandidateService.Results.cs (line 11)](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Infrastructure/Candidate/CandidateService.Results.cs:11)
    原生成绩复议提交,工作流、分配人与审计日志同事务写入。
    原生准考证下载窗口校验及 HTML 文书生成:[CandidateAdmitCardRenderer.cs (line 9)](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Infrastructure/Candidate/CandidateAdmitCardRenderer.cs:9)
    三个路由已切换到 ASP.NET Core:[NativeCandidateEndpoints.cs (line 61)](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Web/Candidate/NativeCandidateEndpoints.cs:61)
    更新迁移说明:[MIGRATION.md (line 50)](C:/Users/BI/Documents/EIS-dotnet/MIGRATION.md:50)
  • PUT /api/candidate/profile
    行政区划、学校班级、特长类别校验
    证件号码唯一性
    自动创建资料审核工作流
    资料和用户显示名称原子更新
    
    POST /api/candidate/registrations
    资料审核状态、报名时间和科目校验
    重复报名防护
    自动选择负载最低的审批管理员
    报名、科目和审批流原子写入
  • 已完成考生域第一批只读迁移:
    GET /api/candidate/dashboard
    GET /api/candidate/notices
    GET /api/candidate/profile
    GET /api/candidate/exams
    GET /api/candidate/registrations
  • 自主注册、登录、退出、当前用户与密码修改
    兼容现有 PBKDF2 密码和 hz_session Cookie
    TOTP 绑定、二步登录、防重放、恢复码与 AES-GCM 密钥
    与 Node 完全一致的 Redis 键格式,可跨运行时共享会话
    生产环境开启原生认证时强制要求 Redis
    默认保持兼容代理;设置 AUTH_NATIVE_ENABLED=true 即可切换
  • 招生计划、资格、录取、分数线及报到公示
    成绩单 HMAC 防伪验真
    录取通知书 HMAC 防伪验真
    防伪码常量时间比较
    生产环境文书密钥强度检查
    旧文书防伪码完全兼容
  • GET /api/public/home
    GET /api/public/notices/{id}
    SQLite / MySQL 双数据库只读连接
    .env 与现有数据库配置兼容
    公告 HTML 安全清洗
    学校、班级、考试、科目、报名及系统通知聚合
  • 第一阶段迁移已完成。
    已实现:
    ASP.NET Core 10 分层解决方案:[Eis.slnx](C:/Users/BI/Documents/EIS-dotnet/Eis.slnx)
    ASP.NET Core 统一入口与健康检查:[Program.cs](C:/Users/BI/Documents/EIS-dotnet/src/Eis.Web/Program.cs)
    原前端静态资源无修改托管
    未迁移 API 自动转发至旧 Node 服务,兼容 JSON、Cookie、请求体和文件下载
    可重复执行的端到端测试:[smoke-dotnet-migration.ps1](C:/Users/BI/Documents/EIS-dotnet/scripts/smoke-dotnet-migration.ps1)
    迁移进度与运行说明:[MIGRATION.md](C:/Users/BI/Documents/EIS-dotnet/MIGRATION.md)
    验证结果: