Files
wwjcloud-nest-v1/docs/AI-FIX-REPORT.md
2025-11-16 22:13:57 +08:00

244 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# API 对比与修复方案
## 概览统计
- v1 控制器: adminapi 81、api 24、core 4、boot 4、ai 2、src 1、apps 1合计 113
- v1 接口: adminapi 552、api 108、core 9、boot 8、ai 8、src 4、apps 3合计 692
- Java 控制器: adminapi 122、api 45合计 167
- Java 接口: adminapi 850、api 200合计 1050
- 分布一致性:两侧以 `/adminapi` 为主、`/api` 次之;方法分布均以 `GET` 为主,`POST/PUT` 次之,`DELETE` 较少,无 `PATCH`
## 模块覆盖明细v1 vs Java
- sysapi
- v1: `sys-config.controller.ts` 5、`sys-verify.controller.ts` 6、`upload.controller.ts` 4、`captcha.controller.ts` 1
- Java: `SysConfigController.java` 7、`SysVerifyController.java` 6、`UploadController.java` 4、`CaptchaController.java` 1
- wechatapi
- v1: `wechat.controller.ts` 9
- Java: `WechatController.java` 9
- weappapi
- v1: `weapp.controller.ts` 6
- Java: `WeappController.java` 7
- payapi
- v1: `pay.controller.ts` 4
- Java: `PayController.java` 4
- memberapi
- v1: `member.controller.ts` 9、`member-cash-out.controller.ts` 13、`member-account.controller.ts` 8、`member-address.controller.ts` 5、`member-sign.controller.ts` 6
- Java: `MemberController.java` 9、`MemberCashOutController.java` 13、`MemberAccountController.java` 8、`MemberAddressController.java` 5、`MemberSignController.java` 6
- loginapi
- v1: `login.controller.ts` 7、`register.controller.ts` 3
- Java: `LoginController.java` 7、`RegisterController.java` 2
- diyapi
- v1: `diy-form.controller.ts` 6、`diy.controller.ts` 4
- Java: `DiyFormController.java` 6、`DiyController.java` 4
- channelapi
- v1: `channel/app.controller.ts` 2
- Java: `channel/AppController.java` 2
- agreementapi
- v1: `agreement.controller.ts` 1
- Java: `AgreementController.java` 1
- addonapi
- v1: `addon.controller.ts` 1
- Java: `AddonController.java` 1
- adminapi样本
- v1: `sys-*` 合计 19`sys-config.controller.ts:19`)、`member-*` 合计 19、`site-*` 合计 18、`notice-*` 合计 27、`diy-*` 合计 24、`niucloud-*` 合计 13、`pay-*` 合计 8、`login-*` 合计 4
- Java: 对应 `sys/*` 19、`member/*` 19、`site/*` 18、`notice/*` 27、`diy/*` 24、`niucloud/*` 13、`pay/*` 8、`login/*` 2
## 模块差异与证据(按域)
- sysapi
- 证据v1
- `wwjcloud/libs/wwjcloud-core/src/controllers/api/sys/sys-config.controller.ts:50,60,70,80,90` — 五个 GET 路由已对齐 Java
- `wwjcloud/libs/wwjcloud-core/src/controllers/api/sys/sys-verify.controller.ts:35,45,55,69,77,85` — 六个路由已对齐(含 POST `verify/{code}`
- `wwjcloud/libs/wwjcloud-core/src/controllers/api/sys/upload.controller.ts:47,61,75,86` — 四个 POST 路由已对齐
- `wwjcloud/libs/wwjcloud-core/src/controllers/api/sys/captcha.controller.ts:35``GET /api/captcha` 对齐
- 证据Java
- `niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/api/sys/SysConfigController.java:64,75,86,96,107,140` — 六个 GETv1 缺 `member_mobile_exist`
- `niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/api/sys/SysVerifyController.java:25,36,48,59,72,85` — 六个路由对齐
- `niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/api/sys/UploadController.java:24,31,38,47` — 四个 POST 对齐
- `niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/api/sys/CaptchaController.java:13-15``GET /api/captcha` 对齐
- 差异:缺失 `GET /api/member_mobile_exist``verify_detail` 参数名 `{code}` vs `:id`
- wechatapi
- 证据v1`wwjcloud/libs/wwjcloud-core/src/controllers/api/wechat/wechat.controller.ts:30,41,49,59,67,75,83,91,99`
- 证据Java`niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/api/wechat/WechatController.java:38,48,60,69,78,87,98,107,116`
- 差异:`GET /api/wechat/user` 返回结构需按 Java 包装为 `{ data: '<json-string>' }`
- weappapi
- 证据v1`wwjcloud/libs/wwjcloud-core/src/controllers/api/weapp/weapp.controller.ts:38,50,62,74,86,98`
- 证据Java`niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/api/weapp/WeappController.java:28,37,46,56,65,75`
- 差异:`getMsgJumpPath` 的查询参数名 `out_trade_no`Java vs `outTradeNo`v1
- payapi
- 证据v1`wwjcloud/libs/wwjcloud-core/src/controllers/api/pay/pay.controller.ts:25,34-55,56-68,70-84`
- 证据Java`niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/api/pay/PayController.java:31-34,47-57,64-67,69-72`
- 差异:无(路径与方法一致)
- memberapi
- 证据v1`member-cash-out.controller.ts:44,62,73,83,93,102,112,125,140,153,165,174,188`(示例)
- 证据Java`MemberCashOutController.java:33-36,43-48,55-59,66-70,77-80,87-93,101-105,112-115,122-127,134-137,144-147,155-159,166-172`
- 差异:无显著差异(路径与方法一致,返回结构键名部分需逐项核验)
- loginapi
- 证据v1`login.controller.ts:44,62,86,106,119,146,159`
- 证据Java`LoginController.java:53-57,65-70,78-83,90-93,100-105,112-116,119-131`
- 差异:`register.controller.ts` 方法数 v1 为 3Java 为 2需核验新增方法来源与必要性
- adminapi/login
- 证据v1`adminapi/login/login.controller.ts:40,60,73-107,114-122`
- 证据Java`adminapi/login/LoginController.java:39-43,50-53,56-67`
- 差异:`tokenInfo` 返回结构差异(`SaResult` vs `{ code,msg,data }`方法总数差异v1:4 vs Java:2
- 其他 adminapi 模块(样本)
- sys`sys-config.controller.ts`v1 19Java 19`sys-poster.controller.ts`v1/Java 13
- site`site.controller.ts`v1/Java 18`site-group.controller.ts`v1/Java 8
- notice`niu-sms.controller.ts`v1/Java 27`notice.controller.ts`v1/Java 7
- diy`diy-form.controller.ts`v1/Java 24`diy.controller.ts`v1/Java 17
- niucloud`cloud.module.controller.ts`v1/Java 8`module.controller.ts`v1/Java 5
- pay`pay.controller.ts`v1/Java 8
- 证据来源:方法装饰器计数基于源码检索(已在“总体规模”与“分布统计”中给出),可按需继续展开到每个具体路由的 `file:line`
## 问题分类
- 缺失接口
- v1 缺少 `GET /api/member_mobile_exist`Java 已实现)
- 路径参数不一致
- `GET /api/verify_detail/{code}`Java vs `GET /api/verify_detail/:id`v1
- 业务实现不一致
- `POST /api/verify/{code}`Java 为核销执行v1 目前调用校验逻辑而非核销执行
- 方法数量轻微差异(需逐路由核验)
- 管理端 login 控制器v1 方法数 4Java 方法数 2可能包含额外路由或组合
- 响应结构不一致(新增)
- `GET /api/wechat/user`Java 返回 `{ data: '<json-string>' }`v1 直接返回对象(需按 Java 包装为字符串字段)
- `GET /adminapi/login/tokenInfo`Java 返回 `SaResult.data(SaTokenInfo)`v1 返回 `{ code,msg,data }` 结构(需按项目统一策略确认是否对齐 SaResult 形态)
## 证据与代码定位
- 缺失接口
- Java `niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/api/sys/SysConfigController.java:140``GET /api/member_mobile_exist`
- v1 `wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/api/sys/sys-config.controller.ts` — 未见对应方法
- 路径参数不一致
- Java `niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/api/sys/SysVerifyController.java:59``GET /api/verify_detail/{code}`
- v1 `wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/api/sys/sys-verify.controller.ts:69``GET /api/verify_detail/:id`
- 业务实现不一致
- Java `niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/api/sys/SysVerifyController.java:85-93``POST /api/verify/{code}` 调用 `verifyCode`
- v1 `wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/api/sys/sys-verify.controller.ts:85-93` — 当前调用 `checkVerifier`
- 方法数量差异(样本)
- v1 `wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/adminapi/login/login.controller.ts` — 方法装饰器计数 4
- Java `niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/adminapi/login/LoginController.java` — 方法计数 2
- 响应结构不一致(证据)
- v1 `wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/api/wechat/wechat.controller.ts:41-47` — 直接返回 service 数据对象
- Java `niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/api/wechat/WechatController.java:48-53` — 返回 `Map<String,String>{ data: '<json-string>' }`
- v1 `wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/adminapi/login/login.controller.ts:73-107` — 返回 `{ code,msg,data }`
- Java `niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/adminapi/login/LoginController.java:56-59` — 返回 `SaResult.data(StpUtil.getTokenInfo())`
- 参数命名不一致(证据)
- Weapp 消息跳转路径:
- v1 `wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/api/weapp/weapp.controller.ts:98-105``@Get('getMsgJumpPath') @Query('outTradeNo')`
- Java `niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/api/weapp/WeappController.java:75-77``@GetMapping('/getMsgJumpPath') @RequestParam('out_trade_no')`
## 修复方案清单
- 缺失接口:补齐 `GET /api/member_mobile_exist`
- 路由定义:`@Controller('/api') @Get('member_mobile_exist')`
- 输入:`openid`Query`Channel`Header默认 `h5`);对齐 Java 逻辑
- 位置:`wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/api/sys/sys-config.controller.ts`
- 验收:返回键包含 `member_mobile_exist``member_exist`
- 路径参数一致化:`verify_detail`
- 将 v1 路由从 `@Get('verify_detail/:id')` 改为 `@Get('verify_detail/:code')`
- DTO/Param统一使用 `code` 字段绑定与传递
- 位置:`wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/api/sys/sys-verify.controller.ts:69`
- 验收:`GET /api/verify_detail/{code}` 返回明细正确,参数名与 Java 一致
- 业务实现一致化:`POST /api/verify/{code}`
- 将 v1 方法体从 `checkVerifier` 调用改为 `verifyCode` 调用
- 位置:`wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/api/sys/sys-verify.controller.ts:85-93`
- 验收:成功返回 `Result.success()`;失败返回 `Result.fail()`,与 Java 行为一致
- 管理端 login 差异核验
- 对比 v1 与 Java 的管理端 login 路由明细(含路径、方法、鉴权)
- 若 v1 存在额外路由需确认其业务来源与必要性;否则按 Java 精简或调整到对应模块
- 位置:
- v1 `wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/adminapi/login/login.controller.ts`
- Java `niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/adminapi/login/LoginController.java`
- 响应结构一致化(新增)
- `GET /api/wechat/user`:按 Java 将 service 返回对象序列化为 JSON 字符串并包装到 `{ data: string }`
- `GET /adminapi/login/tokenInfo`:与团队达成统一策略后,对齐至 `SaResult.data(...)` 等效形态或保持 `{ code,msg,data }` 并在映射工具中设置例外规则
- 参数命名一致化(新增)
- `GET /api/weapp/getMsgJumpPath`:将 v1 的 `outTradeNo` 统一为 `out_trade_no`Query 参数名),保持服务层入参兼容;或在服务层做参数别名映射以不破坏现有前端
## 执行步骤(建议)
- 步骤 1新增 `member_mobile_exist` 方法于 `sys-config.controller.ts`,对齐 Java 入参与服务层返回结构
- 步骤 2统一 `verify_detail` 路由参数名为 `code`,更新 DTO/Param 绑定与服务层入参
- 步骤 3修正 `POST /api/verify/{code}``verifyCode` 业务调用,按结果返回 success/fail
- 步骤 4核验管理端 login 路由,清单化差异并修复(必要时迁移或删除冗余)
- 步骤 5运行映射检查与 e2e 路由校验(含返回结构键名与 HTTP 方法)
## 验收标准
- 路由一致性路径、HTTP 方法、参数名完全与 Java 一致
- 返回结构:键名与层级对齐(例如 `member_exist``member_mobile_exist`
- 业务语义:`verifyCode` 实际执行核销流程;`verify_detail` 正确按 `code` 查询
- 安全一致:`/adminapi` 使用统一守卫(如 Jwt/Roles`/api` 按实际要求应用公开或鉴权
- 检查通过:`auto-mapping-checker.js` 映射检查零差异e2e 覆盖关键路径全部通过
## 全量证据索引
- 生成的路由全量报告(不做任何推断):
- `docs/routes-full-report.md` — 摘要与前 50 的示例列表
- `docs/routes-full-report.json` — 完整的 Nest/Java 路由列表与差异数组,含 `file:line`
- `docs/routes-modules-report.md` — 按模块聚合的差异统计与样例证据
- `docs/routes-modules-report.json` — 模块字典,包含各模块的 nest/java 路由数与缺失计数
## 模块修复优先级(依据 routes-modules-report.md
- `adminapi/goods` — 差异计数最高(缺失于 v1: 122证据示例`webroot/addon/shop/java/.../AttrController.java:27`
- `adminapi/marketing` — 次高(缺失于 v1: 68证据示例`.../marketing/CouponController.java:28`
- `adminapi/delivery` — 高(缺失于 v1: 52证据示例`.../delivery/CompanyController.java:22`
- `adminapi/member` — 高(缺失于 v1: 28缺失于 java: 21证据示例`.../MemberAccountController.java:25`
- `adminapi/notice` — 高(缺失于 v1: 26缺失于 java: 23证据示例`.../NiuSmsController.java:19`
- `adminapi/addon` — 高(缺失于 v1: 24缺失于 java: 19证据示例`.../AddonController.java:124`
- `adminapi/order``api/goods``api/marketing``api/order``api/refund` — 与前端强相关,建议同步推进;详见 `routes-modules-report.md`
## 批次修复计划
- 批次一(前端使用密集):`adminapi/dict``adminapi/channel``adminapi/member`
- 批次二(商城域):`adminapi/goods``adminapi/marketing``adminapi/delivery``api/goods``api/order``api/refund`
- 每批次完成后:更新 `routes-full-report.{json,md}``routes-modules-report.{json,md}`,并在本文件标记模块“已消除”与证据 `file:line`
## AI 修复任务指令(逐项可执行)
- 任务 A补齐 `GET /api/member_mobile_exist`(已修复)
- 证据Java `niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/api/sys/SysConfigController.java:140`
- 位置v1 `wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/api/sys/sys-config.controller.ts`
- 行为:新增 `@Get('member_mobile_exist')`,读取 `openid`Query`Channel`Header默认 `h5`),调用对应服务方法并返回包含 `member_exist``member_mobile_exist`
- 任务 B统一 `verify_detail` 路径参数名(已修复)
- 证据Java `SysVerifyController.java:59` 使用 `{code}`v1 `sys-verify.controller.ts:69` 使用 `:id`
- 位置v1 `wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/api/sys/sys-verify.controller.ts`
- 行为:将路由改为 `@Get('verify_detail/:code')`DTO/Param 绑定字段统一为 `code`
- 任务 C修正 `POST /api/verify/{code}` 的业务实现(已修复)
- 证据Java `SysVerifyController.java:85-93` 调用 `verifyCode`v1 `sys-verify.controller.ts:85-93` 当前调用 `checkVerifier`
- 位置v1 `wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/api/sys/sys-verify.controller.ts`
- 行为:方法体改为调用核销执行服务 `verifyCode`,按结果返回 `Result.success()``Result.fail()`
- 任务 D对齐 `GET /api/wechat/user` 的返回结构(已修复)
- 证据Java `WechatController.java:48-53` 返回 `{ data: '<json-string>' }`v1 `wechat.controller.ts:41-47` 返回对象本身
- 位置v1 `wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/api/wechat/wechat.controller.ts`
- 行为:将 service 返回对象序列化为 JSON 字符串并包装到 `{ data: string }`
- 任务 E对齐 `GET /api/weapp/getMsgJumpPath` 的参数名(已修复)
- 证据Java `WeappController.java:75-77` 使用 `out_trade_no`v1 `weapp.controller.ts:98-105` 使用 `outTradeNo`
- 位置v1 `wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/api/weapp/weapp.controller.ts`
- 行为Query 参数名改为 `out_trade_no`,或在服务层增加参数别名映射以兼容现有前端
- 任务 F管理端 `tokenInfo` 返回结构统一(需团队确认)
- 证据Java `adminapi/login/LoginController.java:56-59` 使用 `SaResult.data(...)`v1 `adminapi/login/login.controller.ts:73-107` 返回 `{ code,msg,data }`
- 位置v1 `wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/adminapi/login/login.controller.ts`
- 行为:按统一策略对齐返回结构;若保持 `{ code,msg,data }`,在映射工具配置例外映射,确保差异不被计为错误
## 影响范围与回归建议
- 受影响模块:`sys-config``sys-verify``login(adminapi)`
- 回归建议:
- 新增/变更路由的 4xx/5xx 行为与防抖/限流(如有)
- 租户隔离(`siteId`/`Channel`)与鉴权策略的一致性
- 上传/核销等接口在 H5/Weapp 渠道的参数来源与头信息
## 参考文件位置
- v1
- `wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/api/sys/sys-config.controller.ts`
- `wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/api/sys/sys-verify.controller.ts`
- `wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/adminapi/login/login.controller.ts`
- Java
- `niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/api/sys/SysConfigController.java`
- `niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/api/sys/SysVerifyController.java`
- `niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/adminapi/login/LoginController.java`