2026-05-06-REQ-USR-001.md
3.2 KB
req_id: REQ-USR-001 date: 2026-05-06 round: 1
reviewer: superpower-code-reviewer
Review: REQ-USR-001 — round 1
结论
request-changes
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 误回填。
Nice-to-have
- 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 文档同步修正即可。
反例 / 测试覆盖缺口
- spec § 验收 #6(iStaffId 已软删除)IT 层未覆盖(仅 service mock 单测)。
- spec § 验收 #4 sUserNo 唯一冲突 IT 层未直接覆盖(仅 sUserName 冲突的 IT)。
- spec § 业务规则 8 「DuplicateKeyException 端到端映射 40921」无 IT 触发路径(@Transactional 包裹下不易触发;service mock 已覆盖,gap 可接受)。
- docs/05 § REQ-USR-001 错误码段位 40020 与 spec 落地 40010 不一致(spec § 错误码映射注释提到 docs/05 后续 sweep;本 REQ 不阻塞)。
- docs/superpowers 文档残留
bSelected概念,与代码实现脱节(must_fix #2)。
round 1 修复范围:仅修 must_fix #2(spec/plan 文档清洁),代码不动;下一 round verify 重跑全量后预期 approve。