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

18 KiB
Raw Permalink Blame History

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-* 合计 19sys-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:35GET /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-15GET /api/captcha 对齐
    • 差异:缺失 GET /api/member_mobile_existverify_detail 参数名 {code} vs :id
  • wechatapi

    • 证据v1wwjcloud/libs/wwjcloud-core/src/controllers/api/wechat/wechat.controller.ts:30,41,49,59,67,75,83,91,99
    • 证据Javaniucloud-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

    • 证据v1wwjcloud/libs/wwjcloud-core/src/controllers/api/weapp/weapp.controller.ts:38,50,62,74,86,98
    • 证据Javaniucloud-java/niucloud-core/src/main/java/com/niu/core/controller/api/weapp/WeappController.java:28,37,46,56,65,75
    • 差异:getMsgJumpPath 的查询参数名 out_trade_noJava vs outTradeNov1
  • payapi

    • 证据v1wwjcloud/libs/wwjcloud-core/src/controllers/api/pay/pay.controller.ts:25,34-55,56-68,70-84
    • 证据Javaniucloud-java/niucloud-core/src/main/java/com/niu/core/controller/api/pay/PayController.java:31-34,47-57,64-67,69-72
    • 差异:无(路径与方法一致)
  • memberapi

    • 证据v1member-cash-out.controller.ts:44,62,73,83,93,102,112,125,140,153,165,174,188(示例)
    • 证据JavaMemberCashOutController.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

    • 证据v1login.controller.ts:44,62,86,106,119,146,159
    • 证据JavaLoginController.java:53-57,65-70,78-83,90-93,100-105,112-116,119-131
    • 差异:register.controller.ts 方法数 v1 为 3Java 为 2需核验新增方法来源与必要性
  • adminapi/login

    • 证据v1adminapi/login/login.controller.ts:40,60,73-107,114-122
    • 证据Javaadminapi/login/LoginController.java:39-43,50-53,56-67
    • 差异:tokenInfo 返回结构差异(SaResult vs { code,msg,data }方法总数差异v1:4 vs Java:2
  • 其他 adminapi 模块(样本)

    • syssys-config.controller.tsv1 19Java 19sys-poster.controller.tsv1/Java 13
    • sitesite.controller.tsv1/Java 18site-group.controller.tsv1/Java 8
    • noticeniu-sms.controller.tsv1/Java 27notice.controller.tsv1/Java 7
    • diydiy-form.controller.tsv1/Java 24diy.controller.tsv1/Java 17
    • niucloudcloud.module.controller.tsv1/Java 8module.controller.tsv1/Java 5
    • paypay.controller.tsv1/Java 8
    • 证据来源:方法装饰器计数基于源码检索(已在“总体规模”与“分布统计”中给出),可按需继续展开到每个具体路由的 file:line

问题分类

  • 缺失接口
    • v1 缺少 GET /api/member_mobile_existJava 已实现)
  • 路径参数不一致
    • GET /api/verify_detail/{code}Java vs GET /api/verify_detail/:idv1
  • 业务实现不一致
    • POST /api/verify/{code}Java 为核销执行v1 目前调用校验逻辑而非核销执行
  • 方法数量轻微差异(需逐路由核验)
    • 管理端 login 控制器v1 方法数 4Java 方法数 2可能包含额外路由或组合
  • 响应结构不一致(新增)
    • GET /api/wechat/userJava 返回 { data: '<json-string>' }v1 直接返回对象(需按 Java 包装为字符串字段)
    • GET /adminapi/login/tokenInfoJava 返回 SaResult.data(SaTokenInfo)v1 返回 { code,msg,data } 结构(需按项目统一策略确认是否对齐 SaResult 形态)

证据与代码定位

  • 缺失接口
    • Java niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/api/sys/SysConfigController.java:140GET /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:59GET /api/verify_detail/{code}
    • v1 wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/api/sys/sys-verify.controller.ts:69GET /api/verify_detail/:id
  • 业务实现不一致
    • Java niucloud-java/niucloud-core/src/main/java/com/niu/core/controller/api/sys/SysVerifyController.java:85-93POST /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')
    • 输入:openidQueryChannelHeader默认 h5);对齐 Java 逻辑
    • 位置:wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/api/sys/sys-config.controller.ts
    • 验收:返回键包含 member_mobile_existmember_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_noQuery 参数名),保持服务层入参兼容;或在服务层做参数别名映射以不破坏现有前端

执行步骤(建议)

  • 步骤 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_existmember_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/orderapi/goodsapi/marketingapi/orderapi/refund — 与前端强相关,建议同步推进;详见 routes-modules-report.md

批次修复计划

  • 批次一(前端使用密集):adminapi/dictadminapi/channeladminapi/member
  • 批次二(商城域):adminapi/goodsadminapi/marketingadminapi/deliveryapi/goodsapi/orderapi/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'),读取 openidQueryChannelHeader默认 h5),调用对应服务方法并返回包含 member_existmember_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 调用 verifyCodev1 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_nov1 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-configsys-verifylogin(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