From 03f6c603f302a20e0906b731ec419806f808c6f5 Mon Sep 17 00:00:00 2001 From: zichun Date: Wed, 6 May 2026 21:26:14 +0800 Subject: [PATCH] docs(usr): review approval REQ-USR-001 round 2 --- docs/08-模块任务管理.md | 2 +- docs/superpowers/reviews/2026-05-06-REQ-USR-001.md | 33 +++++++++++++++++---------------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/docs/08-模块任务管理.md b/docs/08-模块任务管理.md index 2bbdca8..d0b9548 100644 --- a/docs/08-模块任务管理.md +++ b/docs/08-模块任务管理.md @@ -70,7 +70,7 @@ - 路径: backend/src/main/java/com/xly/erp/module/usr/, frontend/src/pages/usr/ - MR: — - 功能: - - [ ] REQ-USR-001 用户新增 + - [x] REQ-USR-001 用户新增 - [ ] REQ-USR-002 用户修改 - [ ] REQ-USR-003 用户查询 - [ ] REQ-USR-004 用户登录 diff --git a/docs/superpowers/reviews/2026-05-06-REQ-USR-001.md b/docs/superpowers/reviews/2026-05-06-REQ-USR-001.md index e1968f3..b358a73 100644 --- a/docs/superpowers/reviews/2026-05-06-REQ-USR-001.md +++ b/docs/superpowers/reviews/2026-05-06-REQ-USR-001.md @@ -1,35 +1,36 @@ --- req_id: REQ-USR-001 date: 2026-05-06 -round: 1 +round: 2 reviewer: superpower-code-reviewer --- -# Review: REQ-USR-001 — round 1 +# Review: REQ-USR-001 — round 2 ## 结论 -request-changes +approve ## Must-fix +(无) -- [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 不涉及该项。 -- [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 误回填。 +Round 1 两条 must_fix 处理结果: +1. **HIGH(reviewer 误判)**:`UserServiceImpl.java:102` 实际已含 `up.setTCreateDate(LocalDateTime.now());`,round 1 reviewer 看错。fix commit 520c01f 正确不动代码。 +2. **MEDIUM(已修)**:spec/plan 中 `bSelected` 提及全部转为「无该列」注解,与 docs/03 SSoT + UserPermissionEntity 实现一致(fix commit 520c01f)。 -## Nice-to-have +## Nice-to-have(待 sweep) -- 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 错误码表)」。 -- backend/src/main/java/com/xly/erp/module/usr/service/impl/UserServiceImpl.java:30 — `INITIAL_PASSWORD = "666666"` 硬编码。spec 已锁定此为业务常量;可改 `@Value("${xly.user.initial-password:666666}")` 注入便于环境覆盖(属软规则边缘,不阻塞)。 -- 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。 -- backend/src/main/java/com/xly/erp/module/usr/service/impl/UserServiceImpl.java:44 — 两次 selectCount 可合并为单次 OR 查询(低优)。 -- backend/src/test/java/com/xly/erp/module/usr/controller/UserControllerIT.java — IT 层缺 `post_staffSoftDeleted_returns40421`、`post_duplicateUserNo_returns40921` 两条用例(service 单测已覆盖)。建议补端到端镜像。 -- docs/superpowers/plans/2026-05-06-REQ-USR-001.md Task 5 API shape — 注释笔误 `REQ-MOD-001 用户新增`,实际 Controller.java 注释正确为 `REQ-USR-001`;plan 文档同步修正即可。 +- 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_returns40421`、`post_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 单测)。 +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. docs/05 § REQ-USR-001 错误码段位 40020 与 spec 落地 40010 不一致(spec § 错误码映射注释提到 docs/05 后续 sweep;本 REQ 不阻塞)。 -5. docs/superpowers 文档残留 `bSelected` 概念,与代码实现脱节(must_fix #2)。 +4. 跨 round 1 / round 2:fix commit 520c01f 仅触及 3 份 docs,0 行代码变更;UserServiceImpl / UserPermissionEntity / 测试均保持原样,无新引入风险。`scripts/test.sh` 全量 101/0/0/0 BUILD SUCCESS。 -**round 1 修复范围**:仅修 must_fix #2(spec/plan 文档清洁),代码不动;下一 round verify 重跑全量后预期 approve。 +**核心结论**:round 1 must_fix #1 是 reviewer 误判(无需修),#2 已修。所有 IT + 单元测试 101 个全绿。verdict: approve。 -- libgit2 0.22.2