tasks.md 6.0 KB

040 进度

状态:已验证(本地代码与定向检查)。当前分支 test-202609v2;本轮与 029 一并提交;尚未发布。

  • 确认主动注销用 del_flag=1,平台停用用 status=1;仅普通用户获得翻悔期。
  • 按用户确认移除旧 token 无 Redis 会话的兼容放行,所有 @Auth 接口要求有效会话;失效返回 HTTP/业务 401。
  • 新增可空 cancellation_deadline_at,补齐实体、Mapper 映射与专用 SQL;通用实体更新不能写入截止时间。
  • 注销记录默认 7 天截止时间、撤销用户会话,重复申请不得延长;保留已有未完成订单检查。
  • 手机号、Apple/Google/LINE 已绑定登录、第三方绑定手机号、设备确认及独立 LINE 网页回调覆盖恢复。
  • 数据库行锁覆盖注销、登录与 token 刷新;恢复 SQL 再校验角色、停用/删除状态、截止时间。会话签发失败抛错回滚;LINE 回调捕获异常也回滚。
  • 到期、历史无截止时间及平台停用账号禁止恢复;平台直接删除清空截止时间。
  • 补充业务注释、spec.md、plan.md、迁移 SQL 及 frontend-app-integration.md;未修改 App。
  • JDK21 定向测试 121 项通过,受影响模块 Maven package 成功,git diff --check 通过。

验证记录(2026-10-30)

使用本机 GraalVM JDK21,执行:

mvn -q -pl ruoyi-admin -am '-Dtest=UserCancellationServiceTest,UserCancellationMapperTest,InfoUserControllerTest,DeviceTrustFlowTest,LineCallbackControllerTest,LineCallbackDeviceTrustTest,AuthAspectTest,MerchantSessionAuthAnnotationTest' '-Dsurefire.failIfNoSpecifiedTests=false' package

8 个测试类共 121 项,失败 0、错误 0、跳过 0。Mapper 测试实际解析 MyBatis XML 并检查账号锁、角色/停用/截止时间条件和平台删除清理。业务测试覆盖七天、截止时刻、历史删除、停用、非用户、重复申请、短信失败、各恢复入口、刷新不恢复与旧会话拒绝。

构建日志:ruoyi-admin/target/grace-package.log;产物:ruoyi-admin/target/ruoyi-admin.jar。

未执行:真实 MySQL/Redis 并发集成、用户 App 联调及环境发布。迁移 SQL 仅登记在 updatesql/sql.md,须由开发者手动执行后再部署。没有依赖定时任务的到期操作。

2026-10-30 联合提交前验证

用户要求 029 同设备换号解绑与 040 注销翻悔期一并提交。使用 JDK21 执行:

mvn -q -pl ruoyi-admin -am '-Dtest=UserCancellationServiceTest,UserCancellationMapperTest,DeviceBindingSwitchTest,DeviceTrustServiceTest,DeviceTrustFlowTest,InfoUserControllerTest,LineCallback*Test,AuthAspectTest,MerchantSessionAuthAnnotationTest' '-Dsurefire.failIfNoSpecifiedTests=false' package

结果:143 项测试,0 失败、0 错误、0 跳过;package 成功,git diff --cached --check 通过。日志:ruoyi-admin/target/029-040-package.log。

未执行真实 MySQL/Redis 并发集成、App 联调及环境发布。用户已确认 029 关联表 SQL 在测试库执行;040 cancellation_deadline_at 字段迁移是否已执行尚未单独确认。

字典管理增量

  • T010 翻悔期改为 user_cancellation_grace_days 字典;读取失败或非法值回退7天,已有截止时间不重算。
  • T011 更新注释、spec/plan、App文档及幂等字典初始化 SQL;执行定向测试及模块构建。

字典增量验证:JDK21 执行 mvn -q -pl ruoyi-admin -am -Dtest=UserCancellationServiceTest,UserCancellationMapperTest,InfoUserControllerTest -Dsurefire.failIfNoSpecifiedTests=false package,94项测试通过,模块打包成功,git diff --check 通过。新测试先复现字典设为14仍返回7,再随实现通过。日志:ruoyi-admin/target/040-dict-package.log。

本次新增字典 INSERT 尚未执行;此前测试库关联表执行确认不包括本次字典 SQL。未执行真实数据库/Redis及App联调,本轮字典调整单独提交,发票打印等其他改动不纳入本次提交。

2026-11-05 登录前确认恢复

状态:已验证(本次改动独立源码副本)。

  • T012 先返回冷静期确认信息,统一剩余天数与一次性短期凭证;确认时重新检查注销周期并原子恢复。
  • T013 覆盖手机号、已绑定OAuth、短信绑号、设备确认与LINE回调;确认之前不签token、不写绑定/信任。
  • T014 补齐重放、到期、停用、身份变更、登录失败回滚及原渠道回归,更新国际化和前端文档并构建验证。

本轮验证(2026-11-05):原登录直接签发token的4个OAuth渠道断言先失败;复审发现数据库秒精度下旧兄弟凭证可能跨注销周期,新增用例先复现,再加入Redis周期标识解决。H2配合真实DataSourceTransactionManager和Controller事务代理验证恢复提交及签会话失败回滚。

执行 JDK21 mvn -q -pl ruoyi-admin -am -Dtest=UserCancellationServiceTest,CancellationLoginConfirmationTest,UserCancellationMapperTest,DeviceBindingSwitchTest,DeviceTrustServiceTest,DeviceTrustFlowTest,InfoUserControllerTest,LineCallback*Test,AuthAspectTest,MerchantSessionAuthAnnotationTest -Dsurefire.failIfNoSpecifiedTests=false package,独立副本共171项测试通过,失败/错误/跳过均0,package退出码0。副本为当前HEAD加本次注销相关代码、测试与语言key,与工作区交付文件逐字节核对一致;JSON示例及git diff --check通过,独立复审无剩余重要问题。

工作区首次回归另有MerchantSessionAuthAnnotationTest失败:其他任务删除了PosOrderShOprateController.orderDetail,非本次改动;保留原工作区内容,独立副本未纳入该删除。真实MySQL/Redis并发集成、App与第三方实机联调、全量回归及部署未执行。无新SQL、无分支、未提交或推送。日志:ruoyi-admin/target/cancellation-confirm-red.log、cancellation-confirm-cycle-red.log、cancellation-confirm-green.log(含上述无关失败)、cancellation-confirm-isolated.log(最终通过)。