Commit 03f6c603f302a20e0906b731ec419806f808c6f5
1 parent
520c01f2
docs(usr): review approval REQ-USR-001 round 2
Showing
2 changed files
with
18 additions
and
17 deletions
docs/08-模块任务管理.md
| @@ -70,7 +70,7 @@ | @@ -70,7 +70,7 @@ | ||
| 70 | - 路径: backend/src/main/java/com/xly/erp/module/usr/, frontend/src/pages/usr/ | 70 | - 路径: backend/src/main/java/com/xly/erp/module/usr/, frontend/src/pages/usr/ |
| 71 | - MR: — | 71 | - MR: — |
| 72 | - 功能: | 72 | - 功能: |
| 73 | - - [ ] REQ-USR-001 用户新增 | 73 | + - [x] REQ-USR-001 用户新增 |
| 74 | - [ ] REQ-USR-002 用户修改 | 74 | - [ ] REQ-USR-002 用户修改 |
| 75 | - [ ] REQ-USR-003 用户查询 | 75 | - [ ] REQ-USR-003 用户查询 |
| 76 | - [ ] REQ-USR-004 用户登录 | 76 | - [ ] REQ-USR-004 用户登录 |
docs/superpowers/reviews/2026-05-06-REQ-USR-001.md
| 1 | --- | 1 | --- |
| 2 | req_id: REQ-USR-001 | 2 | req_id: REQ-USR-001 |
| 3 | date: 2026-05-06 | 3 | date: 2026-05-06 |
| 4 | -round: 1 | 4 | +round: 2 |
| 5 | reviewer: superpower-code-reviewer | 5 | reviewer: superpower-code-reviewer |
| 6 | --- | 6 | --- |
| 7 | 7 | ||
| 8 | -# Review: REQ-USR-001 — round 1 | 8 | +# Review: REQ-USR-001 — round 2 |
| 9 | 9 | ||
| 10 | ## 结论 | 10 | ## 结论 |
| 11 | -request-changes | 11 | +approve |
| 12 | 12 | ||
| 13 | ## Must-fix | 13 | ## Must-fix |
| 14 | +(无) | ||
| 14 | 15 | ||
| 15 | -- [high → 误判,已 verified] backend/src/main/java/com/xly/erp/module/usr/service/impl/UserServiceImpl.java:102 — reviewer 报告 `UserPermissionEntity insert 未设置 tCreateDate`,但本主会话用 `grep -n "setTCreateDate"` 确认 line 102 实际为 `up.setTCreateDate(LocalDateTime.now());`。reviewer 误读,**无需代码修复**;本 round fix commit 不涉及该项。 | ||
| 16 | -- [medium] docs/superpowers/specs/2026-05-06-REQ-USR-001.md / docs/superpowers/plans/2026-05-06-REQ-USR-001.md — spec § 业务规则 5 + § 依赖的 schema 表 § tUserPermission 仍写 `bSelected=1`,但 docs/03 修订版已删除该列、UserPermissionEntity 也无该字段。需把 spec/plan 的 bSelected 提及改为 "—(关联存在即已选)",避免 REQ-USR-002 误回填。 | 16 | +Round 1 两条 must_fix 处理结果: |
| 17 | +1. **HIGH(reviewer 误判)**:`UserServiceImpl.java:102` 实际已含 `up.setTCreateDate(LocalDateTime.now());`,round 1 reviewer 看错。fix commit 520c01f 正确不动代码。 | ||
| 18 | +2. **MEDIUM(已修)**:spec/plan 中 `bSelected` 提及全部转为「无该列」注解,与 docs/03 SSoT + UserPermissionEntity 实现一致(fix commit 520c01f)。 | ||
| 17 | 19 | ||
| 18 | -## Nice-to-have | 20 | +## Nice-to-have(待 sweep) |
| 19 | 21 | ||
| 20 | -- backend/src/main/java/com/xly/erp/common/response/ErrorCode.java — `MOD_NOT_FOUND(40421)` 与 `STAFF_NOT_FOUND(40421)` / `MOD_PARENT_LOOP(40921)` 与 `USR_USER_NAME_OR_NO_DUP(40921)` 共用同一数值。当前由枚举名+message 区分语义合理;建议在文件 Javadoc 写一条说明「同 code 不同枚举为合法重载(参考 docs/04 § 1.3 / docs/05 错误码表)」。 | ||
| 21 | -- backend/src/main/java/com/xly/erp/module/usr/service/impl/UserServiceImpl.java:30 — `INITIAL_PASSWORD = "666666"` 硬编码。spec 已锁定此为业务常量;可改 `@Value("${xly.user.initial-password:666666}")` 注入便于环境覆盖(属软规则边缘,不阻塞)。 | ||
| 22 | -- backend/src/main/java/com/xly/erp/module/usr/service/impl/UserServiceImpl.java:70 — `permissionCategoryIds` 含重复 id(如 [1,1,2])会导致 found.size() < ids.size() 误报 40422;可在校验前 distinct。 | ||
| 23 | -- backend/src/main/java/com/xly/erp/module/usr/service/impl/UserServiceImpl.java:44 — 两次 selectCount 可合并为单次 OR 查询(低优)。 | ||
| 24 | -- backend/src/test/java/com/xly/erp/module/usr/controller/UserControllerIT.java — IT 层缺 `post_staffSoftDeleted_returns40421`、`post_duplicateUserNo_returns40921` 两条用例(service 单测已覆盖)。建议补端到端镜像。 | ||
| 25 | -- docs/superpowers/plans/2026-05-06-REQ-USR-001.md Task 5 API shape — 注释笔误 `REQ-MOD-001 用户新增`,实际 Controller.java 注释正确为 `REQ-USR-001`;plan 文档同步修正即可。 | 22 | +- 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 跳错枚举。 |
| 23 | +- 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 登录校验复用。 | ||
| 24 | +- backend/src/test/java/com/xly/erp/module/usr/controller/UserControllerIT.java — 补 `post_staffSoftDeleted_returns40421`、`post_duplicateUserNo_returns40921` 两条 IT 镜像 service 单测分支。 | ||
| 25 | +- backend/src/main/java/com/xly/erp/module/usr/service/impl/UserServiceImpl.java:70 — `permissionCategoryIds` 含重复 id 时 found.size() < ids.size() 误报 40422;可在校验前 distinct。 | ||
| 26 | +- docs/05 § REQ-USR-001 错误码段位 40020 vs spec 落地 40010 sweep 对齐。 | ||
| 27 | +- docs/superpowers/plans/2026-05-06-REQ-USR-001.md Task 5 API shape — Javadoc 注释笔误 `REQ-MOD-001 用户新增`,Controller.java 内已正确为 `REQ-USR-001`;plan 同步修正即可。 | ||
| 26 | 28 | ||
| 27 | ## 反例 / 测试覆盖缺口 | 29 | ## 反例 / 测试覆盖缺口 |
| 28 | 30 | ||
| 29 | -1. spec § 验收 #6(iStaffId 已软删除)IT 层未覆盖(仅 service mock 单测)。 | 31 | +1. spec § 验收 #6(iStaffId 已软删除)IT 层未覆盖(仅 service mock 单测覆盖)。 |
| 30 | 2. spec § 验收 #4 sUserNo 唯一冲突 IT 层未直接覆盖(仅 sUserName 冲突的 IT)。 | 32 | 2. spec § 验收 #4 sUserNo 唯一冲突 IT 层未直接覆盖(仅 sUserName 冲突的 IT)。 |
| 31 | 3. spec § 业务规则 8 「DuplicateKeyException 端到端映射 40921」无 IT 触发路径(@Transactional 包裹下不易触发;service mock 已覆盖,gap 可接受)。 | 33 | 3. spec § 业务规则 8 「DuplicateKeyException 端到端映射 40921」无 IT 触发路径(@Transactional 包裹下不易触发;service mock 已覆盖,gap 可接受)。 |
| 32 | -4. docs/05 § REQ-USR-001 错误码段位 40020 与 spec 落地 40010 不一致(spec § 错误码映射注释提到 docs/05 后续 sweep;本 REQ 不阻塞)。 | ||
| 33 | -5. docs/superpowers 文档残留 `bSelected` 概念,与代码实现脱节(must_fix #2)。 | 34 | +4. 跨 round 1 / round 2:fix commit 520c01f 仅触及 3 份 docs,0 行代码变更;UserServiceImpl / UserPermissionEntity / 测试均保持原样,无新引入风险。`scripts/test.sh` 全量 101/0/0/0 BUILD SUCCESS。 |
| 34 | 35 | ||
| 35 | -**round 1 修复范围**:仅修 must_fix #2(spec/plan 文档清洁),代码不动;下一 round verify 重跑全量后预期 approve。 | 36 | +**核心结论**:round 1 must_fix #1 是 reviewer 误判(无需修),#2 已修。所有 IT + 单元测试 101 个全绿。verdict: approve。 |