 wangzhibiaoandCursor
|
fb5834bb1e
|
修复能力:统一DMS禁用态门禁能力声明
capabilities 中 manualRevokeAvailable 此前硬编码为 true,在 dms.enabled=false 时
仍向用户表示真实外部门禁撤权可执行。
- manualRevokeAvailable 与 dms.enabled 保持一致
- 新增 localRevokeGovernanceAvailable 与 revokeMode,明确区分外部派发与本地排队治理,
本地授权状态治理与安全补偿路径继续可用,撤权入口不被移除
- 前端门禁能力默认按外部通道不可用初始化,接口返回前不向用户承诺不存在的能力
- 门禁服务未启用时注销确认文案如实说明仅完成本地待注销登记
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-22 17:04:50 +08:00 |
|
 wangzhibiaoandCursor
|
b7a9b89ec5
|
完善考勤:支持未签到学员人工登记缺勤
名册中无任何打卡记录的已报到学员此前只能"先签到再改成缺勤",会留下伪造的签到事实。
- 新增 POST /train/attendance/mark-absence,权限 train:attendance:edit,带操作日志
- 写入 attendance_status=0、sign_in_time 与 sign_out_time 保持 NULL、manual_flag=1,
缺勤原因必填,绝不伪造签到时间
- 前置条件全部 fail closed:课次已开始、与课次同属一个开班计划、
参训状态必须恰好为已报到;请假不得被自动改写为缺勤
- 已有考勤记录时拒绝新建并引导改用调整考勤记录,
并发命中唯一索引转为同一业务错误,不泄露数据库异常
- 名册新增 canMarkAbsence,前端直接采用后端判定,登记后可继续调整考勤记录
- 未改动出勤率统计口径与 Analytics 业务策略
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-22 17:04:41 +08:00 |
|
 wangzhibiaoandCursor
|
b7eab13a83
|
修复权限:首页按真实业务身份选择工作台
菜单层与 API 层已按真实业务身份限制,但首页只看 role_key,导致有 train_teacher
角色却无教师档案绑定的账号先进入教师工作台再被 API 拒绝。
- 身份服务新增 hasActiveTeacherIdentity / hasActiveStudentIdentity,
语义与原菜单过滤完全一致,异常吞掉返回 false
- SysLoginController 抽出 resolveSelfServiceIdentity 作为唯一事实源,
自服务菜单过滤与 getInfo 新增的 selfService 标志共用该方法,不新增第三套规则
- 前端 store 新增 selfService 标志,缺失时默认全 false 并严格布尔化,登出时重置
- 自服务路由过滤与首页渲染改为按身份标志判断,且与角色授权取交集,与菜单层口径一致
- 有角色无业务档案的账号落到普通首页,Dashboard 组件根本不创建,
不会发起任何自服务 API 请求,页面给出明确的未绑定提示
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-22 17:04:26 +08:00 |
|
 wangzhibiaoandCursor
|
eb8ce6f85c
|
修复排课:停用教师禁止新排课并消除候选列表静默截断
停用教师仍出现在排课教师下拉且后端未校验 status;教师、教室、场地候选统一按
pageSize=100 拉取,数量超过 100 时会静默丢失合法候选。
- 后端在创建课次时强制校验目标教师在岗,修改课次仅在真的更换授课教师时校验,
维持原教师不变的历史课次继续放行,既不自动删除课次也不自动替换教师
- 新增业务错误文案"该教师当前已停用,不能安排新的授课任务",不暴露内部状态码
- 新增只读端点 GET /train/lessons/scheduling-options 全量返回教师、教室、场地候选,
不分页、服务端无条数上限;教师候选只返回在岗有效教师,且只下发下拉必需字段
- 前端排课面板改用该端点,编辑历史课次时为已停用的原教师补一条禁用选项,
保证原教师名可见但不可被重新选中
- 排课冲突策略不变,仍为前端 Warning 加二次确认后允许保存
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-22 17:04:10 +08:00 |
|
 wangzhibiaoandCursor
|
dc3990b29a
|
修复门禁:退宿时正确进入授权撤销流程
退宿后 enrollment 仍为已报到但已无有效住宿,reconcile(enrollmentId) 只会返回
WAITING_FOR_PREREQUISITE,被退宿住宿对应的 train_dorm_auth 因此永远无法进入撤权状态。
- 编排器新增住宿关系终止撤权路径 revokeAuthorizationsForAccommodation,
只针对被终止的那一条住宿记录,不改动 reconcile 整体对账语义
- 撤权全程复用既有安全机制:DMS 禁用态语义、CAS 原子 Claim、AMBIGUOUS 判定、
禁止盲重发,绝不直接 UPDATE auth_status='REVOKED' 绕过状态机
- 已处于 REVOKED / REVOKING / PENDING_REVOKE 的授权直接跳过,避免重复排队
- 退宿改走该路径,撤权推进失败不回滚退宿事实
- 调房不受影响,仍保持新房授权生效后再撤旧房 (GRANT_NEW_THEN_REVOKE_OLD)
- 补充住宿终止撤权与住宿状态守卫单元测试
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-22 17:03:55 +08:00 |
|
 wangzhibiaoandCursor
|
aeb76ce35a
|
修复住宿:统一住宿生命周期状态与状态变更入口
住宿状态在数据库与业务上只有 0 预分配 / 1 已入住 / 2 已退宿三种,不存在 3 已调房。
调房是业务操作,真实语义为旧记录置退宿、新记录置在住,不应表现为独立状态值。
- 前端住宿页面移除筛选项与两处状态标签中的"已调房"(status=3),补齐历史表格缺失的预分配标签
- 后端通用 PUT /train/accommodation 封死 accommodation_status 写入路径,
状态变更只能经办理入住、办理退宿、调房等专属业务操作
- 新增住宿状态白名单守卫,非法整数与新增即退宿一律拒绝入库
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-09-22 17:03:43 +08:00 |
|
wangzhibiao
|
ecfd38be17
|
修复权限:隔离教师工作台与学员中心菜单自服务可见性
|
2026-09-22 11:59:38 +08:00 |
|
wangzhibiao
|
2b1fcdb260
|
优化体验:统一业务状态与操作按钮文案
|
2026-09-22 10:47:36 +08:00 |
|
wangzhibiao
|
5871731edd
|
优化体验:清理管理端技术化与AI化文案
|
2026-09-22 10:47:30 +08:00 |
|
wangzhibiao
|
08b8abe778
|
测试考勤:覆盖参训状态签到守卫与真实前端策略
|
2026-09-22 00:05:56 +08:00 |
|
wangzhibiao
|
e2c15e6216
|
修复考勤交互:对齐名册签到资格与参训状态展示
|
2026-09-22 00:05:31 +08:00 |
|
wangzhibiao
|
49dbde8836
|
修复考勤:收紧首次签到参训生命周期校验
|
2026-09-22 00:04:51 +08:00 |
|
wangzhibiao
|
38d4851a18
|
测试考勤:覆盖首次签到与未签到展示
|
2026-09-21 23:21:35 +08:00 |
|
wangzhibiao
|
dfd0133df0
|
前端考勤:补齐培训管理员课次签到入口
|
2026-09-21 23:21:31 +08:00 |
|
wangzhibiao
|
18b8a07f55
|
后端考勤:增加课次学员考勤名册查询
|
2026-09-21 23:21:29 +08:00 |
|
wangzhibiao
|
b716e55ac7
|
文档分析:记录考勤统计口径与待确认业务定义
|
2026-09-21 21:44:03 +08:00 |
|
wangzhibiao
|
330a7ab1f8
|
测试分析:增加考勤统计守恒与真实库只读验证
|
2026-09-21 21:44:03 +08:00 |
|
wangzhibiao
|
6d82478466
|
修复交互:补齐未签到状态展示与分析图例
|
2026-09-21 21:44:03 +08:00 |
|
wangzhibiao
|
7cb758dd06
|
修复分析:统一已开始课次考勤统计基础集合与异常排行口径
|
2026-09-21 21:44:03 +08:00 |
|
wangzhibiao
|
fd8e0f7477
|
测试业务:补齐状态并发与批量新增真实行为验证
|
2026-09-21 21:43:53 +08:00 |
|
wangzhibiao
|
612f24d5f1
|
修复结训:锁定参训记录避免结训并发竞态
|
2026-09-21 21:43:52 +08:00 |
|
wangzhibiao
|
a7fe99f94d
|
修复参训:串行化报到与状态迁移
|
2026-09-21 21:43:52 +08:00 |
|
wangzhibiao
|
579ce861b6
|
修复考勤:原子签退防止并发覆盖首次时间
|
2026-09-21 21:43:52 +08:00 |
|
wangzhibiao
|
78ea5ce387
|
测试业务:增加报到结训与签到签退状态回归
|
2026-09-21 21:43:52 +08:00 |
|
wangzhibiao
|
62088a6209
|
修复交互:对齐参训状态与考勤操作可达性
|
2026-09-21 21:43:52 +08:00 |
|
wangzhibiao
|
8df14882cb
|
修复考勤:禁止无签到记录直接签退生成正常出勤
|
2026-09-21 21:43:52 +08:00 |
|
wangzhibiao
|
8900dcb101
|
修复结训:阻止未报到与请假学员被错误归档
|
2026-09-21 21:43:52 +08:00 |
|
wangzhibiao
|
1c395b7827
|
修复参训:收紧报到状态与报到记录一致性
|
2026-09-21 21:43:52 +08:00 |
|
wangzhibiao
|
481c998e82
|
测试门禁:覆盖失败提示与空响应重发保护
|
2026-09-21 16:56:06 +08:00 |
|
wangzhibiao
|
63914e2499
|
修复门禁:将空响应Mutation归类为外部结果不确定
|
2026-09-21 16:56:01 +08:00 |
|
wangzhibiao
|
9922ae3aa4
|
修复前端:按真实门禁结果展示下发注销与对账状态
|
2026-09-21 16:55:57 +08:00 |
|
wangzhibiao
|
7d10968b50
|
修复门禁:校准批量撤权结果成功语义
|
2026-09-21 16:55:55 +08:00 |
|
wangzhibiao
|
b0917fc36f
|
测试住宿:覆盖跨计划床位时间冲突与并发分配
|
2026-09-21 16:14:27 +08:00 |
|
wangzhibiao
|
fbfec1a2ec
|
修复住宿:增加并发床位分配串行保护
|
2026-09-21 16:14:21 +08:00 |
|
wangzhibiao
|
b3a1fa58d6
|
修复住宿:按培训时间窗口校验床位占用冲突
|
2026-09-21 16:14:18 +08:00 |
|
wangzhibiao
|
614908d674
|
整理迁移:移除错误全局床位唯一约束并强化015断言
|
2026-09-21 16:14:07 +08:00 |
|
wangzhibiao
|
0a637bfbbc
|
测试门禁:覆盖外部不确定性与并发派发场景
|
2026-09-21 14:57:53 +08:00 |
|
wangzhibiao
|
a12b2e3543
|
修复前端:按真实门禁状态展示下发与注销结果
|
2026-09-21 14:57:46 +08:00 |
|
wangzhibiao
|
1c46efbcad
|
权限门禁:拆分凭据与硬件映射最小权限
|
2026-09-21 14:57:40 +08:00 |
|
wangzhibiao
|
b8f18e6421
|
修复门禁:校准撤权批量结果与禁用态语义
|
2026-09-21 14:57:30 +08:00 |
|
wangzhibiao
|
3349675183
|
修复门禁:增加外部操作原子派发与崩溃保护
|
2026-09-21 14:57:21 +08:00 |
|
wangzhibiao
|
71bde5e674
|
修复门禁:阻断不确定下发重试并保护迟到结果
|
2026-09-21 14:57:14 +08:00 |
|
wangzhibiao
|
1d2ca54d26
|
修复住宿:增加有效床位占用唯一保护
|
2026-09-21 14:57:05 +08:00 |
|
wangzhibiao
|
f109b574da
|
优化门禁:对齐宿舍权限查询注解契约
|
2026-09-21 12:52:07 +08:00 |
|
wangzhibiao
|
056f3d7cac
|
测试门禁:增加授权生命周期行为回归
|
2026-09-21 12:51:20 +08:00 |
|
wangzhibiao
|
84e1972947
|
权限门禁:补齐住宿与门禁最小权限迁移
|
2026-09-21 12:51:17 +08:00 |
|
wangzhibiao
|
f8ca87cfab
|
修复门禁:补齐多授权撤销与事务补偿
|
2026-09-21 12:51:13 +08:00 |
|
wangzhibiao
|
0d5df72d8e
|
修复门禁:安全化凭据下发与有效期来源
|
2026-09-21 12:51:10 +08:00 |
|
wangzhibiao
|
a83a3a642e
|
修复门禁:统一授权状态机与注销入口
|
2026-09-21 12:50:58 +08:00 |
|
wangzhibiao
|
ec3a7afe46
|
测试路由:增加动态菜单与前端钻取契约检查
|
2026-09-21 00:14:50 +08:00 |
|