2026-05-06-REQ-USR-001.md 2.6 KB

req_id: REQ-USR-001 date: 2026-05-06 round: 2

reviewer: superpower-code-reviewer

Review: REQ-USR-001 — round 2

结论

approve

Must-fix

(无)

Round 1 两条 must_fix 处理结果:

  1. HIGH(reviewer 误判)UserServiceImpl.java:102 实际已含 up.setTCreateDate(LocalDateTime.now());,round 1 reviewer 看错。fix commit 520c01f2 正确不动代码。
  2. MEDIUM(已修):spec/plan 中 bSelected 提及全部转为「无该列」注解,与 docs/03 SSoT + UserPermissionEntity 实现一致(fix commit 520c01f2)。

Nice-to-have(待 sweep)

  • backend/src/main/java/com/xly/erp/common/response/ErrorCode.java — 3 个新常量(STAFF_NOT_FOUND / PERM_CATEGORY_NOT_FOUND / USR_USER_NAME_OR_NO_DUP)追 Javadoc,特别 STAFF_NOT_FOUND(40421)MOD_NOT_FOUND(40421) 段位共享但语义不同——Javadoc 注明使用模块差异,避免 IDE 跳错枚举。
  • backend/src/main/java/com/xly/erp/module/usr/service/impl/UserServiceImpl.java:30 — INITIAL_PASSWORD = "666666" 外置到 application.yml + @Value("${xly.user.initial-password:666666}"),便于环境差异化 + REQ-USR-004 登录校验复用。
  • backend/src/test/java/com/xly/erp/module/usr/controller/UserControllerIT.java — 补 post_staffSoftDeleted_returns40421post_duplicateUserNo_returns40921 两条 IT 镜像 service 单测分支。
  • backend/src/main/java/com/xly/erp/module/usr/service/impl/UserServiceImpl.java:70 — permissionCategoryIds 含重复 id 时 found.size() < ids.size() 误报 40422;可在校验前 distinct。
  • docs/05 § REQ-USR-001 错误码段位 40020 vs spec 落地 40010 sweep 对齐。
  • docs/superpowers/plans/2026-05-06-REQ-USR-001.md Task 5 API shape — Javadoc 注释笔误 REQ-MOD-001 用户新增,Controller.java 内已正确为 REQ-USR-001;plan 同步修正即可。

反例 / 测试覆盖缺口

  1. spec § 验收 #6(iStaffId 已软删除)IT 层未覆盖(仅 service mock 单测覆盖)。
  2. spec § 验收 #4 sUserNo 唯一冲突 IT 层未直接覆盖(仅 sUserName 冲突的 IT)。
  3. spec § 业务规则 8 「DuplicateKeyException 端到端映射 40921」无 IT 触发路径(@Transactional 包裹下不易触发;service mock 已覆盖,gap 可接受)。
  4. 跨 round 1 / round 2:fix commit 520c01f2 仅触及 3 份 docs,0 行代码变更;UserServiceImpl / UserPermissionEntity / 测试均保持原样,无新引入风险。scripts/test.sh 全量 101/0/0/0 BUILD SUCCESS。

核心结论:round 1 must_fix #1 是 reviewer 误判(无需修),#2 已修。所有 IT + 单元测试 101 个全绿。verdict: approve。