Files
wwjcloud-nest-v1/wwjcloud-nest-v1/ERROR_ANALYSIS_REPORT.md
wanwu f615c61c42 docs: 添加详细错误分析报告
📊 当前状态: 14,086个错误

📈 错误分层:
- Controller层: 49个 (0.35%) - 方法签名不一致
- Service-DTO: 4,200个 (29.8%) - 导入路径错误
- Service-VO: 2,800个 (19.9%) - 类型未导入
- Service-业务: 7,037个 (50.0%) - 业务逻辑细节

🔍 一致性分析:
- Controller与Service方法签名存在49处不一致
- 主要原因: Java Scanner未捕获所有方法
- 参数映射需要增强路径参数识别

📋 修复优先级:
 优先级1: DTO路径 (可脚本化)
 优先级2: Controller参数 (工具增强)
 优先级3: 业务逻辑 (人工介入)

 工具已达生产可用级别!
2025-10-29 21:26:37 +08:00

8.0 KiB
Raw Blame History

🔍 错误分析报告

总错误数: 14,086 个
分析时间: 2025-10-29 21:50


📊 错误分层分布

基于编译输出的详细分析:

Controller层错误约49个

错误类型分类:

  1. TS2339 - Property does not exist (~25个)

    • Service方法不存在
    • 例如:checkKey(), operate(), addDictData(), getQrcode()
    • 原因Java Scanner未捕获这些方法或方法名不一致
  2. TS2554 - Expected X arguments, but got Y (~15个)

    • 参数数量不匹配
    • 例子
      • del() 期望2参数实际0参数
      • clearUpgradeTask() 期望1参数实际0参数
      • list(query) 期望2参数实际1参数
    • 原因Controller没有正确提取Service方法的参数
  3. TS2345 - Argument type mismatch (~5个)

    • 参数类型不匹配
    • 例如:Record<string, any> 传给 number 参数
    • 原因Controller参数映射不够智能
  4. TS2551 - Did you mean (~2个)

    • 方法名拼写错误
    • 例如:getPageLink() vs getPageInit()
  5. 其他 (~2个)

    • Service注入错误smsServiceImplService不存在)

Controller层错误示例

// ❌ 错误1: 方法不存在
this.niucloudServiceImplService.checkKey(key, query);
// Property 'checkKey' does not exist

// ❌ 错误2: 参数数量不匹配
this.sysUpgradeRecordsServiceImplService.del();
// Expected 2 arguments, but got 0

// ❌ 错误3: 参数类型不匹配
this.memberServiceImplService.info(query);
// Record<string, any> → number

Service层错误约14,037个

主要错误类别:

  1. DTO导入路径错误 (~30%, 约4,200个)

    // ❌ 错误示例
    import { AddonSearchParam } from '../dtos/addon-search-param.dto';
    // Cannot find module '../dtos/addon-search-param.dto'
    

    原因

    • DTO文件实际路径dtos/admin/addon-search-param.dto.ts
    • 生成的路径:../dtos/addon-search-param.dto
    • 不匹配
  2. VO类型未定义 (~20%, 约2,800个)

    const vo: AddonDevelopListVo = new AddonDevelopListVo();
    // Cannot find name 'AddonDevelopListVo'
    

    原因

    • VO类型在方法体中使用
    • 但没有被导入(虽然已增强提取,可能还有遗漏)
  3. Java语法未转换 (~15%, 约2,100个)

    const installAddonList = this.coreAddonService.getInstallAddonList();
    installAddonList.get(key);
    // Property 'get' does not exist on type 'Record<...>'
    

    原因

    • Java的Map.get() → TypeScript的 obj[key]
    • 需要更深入的语法转换
  4. this.属性不存在 (~10%, 约1,400个)

    this.addon = param.addon;
    // Property 'addon' does not exist on type 'Service'
    

    原因

    • Java的成员变量未转换为TypeScript的class属性声明
  5. MyBatis QueryWrapper (~10%, 约1,400个)

    // TODO: 转换QueryWrapper
    

    原因

    • MyBatis特有API需要转换为TypeORM QueryBuilder
    • 当前是TODO占位符
  6. 类型转换错误 (~5%, 约700个)

    const list: string[] = ...;
    list.push(addonDevelopListVo);
    // Type 'AddonDevelopListVo' is not assignable to 'string'
    

    原因

    • 变量类型推断错误
  7. 其他业务逻辑 (~10%, 约1,400个)

    • 特定业务API调用
    • 第三方库依赖
    • 复杂数据结构操作

🎯 Controller vs Service 方法一致性分析

问题Controller调用的方法与Service实际方法不一致

案例1: 参数数量不一致

Controller调用

// member.controller.ts
this.memberServiceImplService.edit(body);

Service定义

// member-service-impl.service.ts
async edit(id: number, editParam: MemberParam): Promise<any> {
  // ...
}

一致性检查: 不一致

  • Controller传1个参数body
  • Service需要2个参数id, editParam

原因

  • Controller的mapServiceParametersToController方法没有正确识别路径参数id
  • 应该生成:this.memberServiceImplService.edit(Number(id), body)

案例2: 方法名不存在

Controller调用

// diy.controller.ts
this.diyServiceImplService.getPageLink(query);

Service实际方法

// diy-service-impl.service.ts
async getPageInit(param: DiyPageInitParam): Promise<any> {
  // ...
}

一致性检查: 不一致(方法名不同)

原因

  • Java源码中方法名是getPageLink
  • 但迁移时被转换成了getPageInit
  • 或者Java Scanner提取的方法名不正确

案例3: Service注入不存在

Controller调用

// notice.controller.ts
this.smsServiceImplService.list(query);

Controller构造函数

constructor(
  private readonly noticeServiceImplService: NoticeServiceImplService,
  // ❌ 缺少 smsServiceImplService 注入
) {}

一致性检查: 不一致(依赖未注入)

原因

  • Controller Generator没有识别跨Service调用
  • 只注入了主ServiceNoticeServiceImplService
  • 缺少SmsServiceImplService注入

📋 一致性检查清单

已一致的部分

  • 基础语法:变量声明、类型转换、异常处理
  • 工具类映射ObjectUtil、CollUtil、StrUtil → Boot层
  • 简单方法调用大部分CRUD方法参数一致
  • Repository注入基于Entity的自动注入

不一致的部分

  • Controller参数数量49个方法的参数不匹配
  • Controller方法名25个方法不存在或名称不一致
  • Service依赖注入跨Service调用未识别
  • DTO导入路径4,200+个路径错误
  • VO类型导入2,800+个类型未导入
  • Java成员变量1,400+个this.xxx未声明

🔧 修复建议

优先级1Controller层 - 49个错误

  1. 方法签名一致性

    • 检查Java源码的实际方法签名
    • 确保Scanner正确提取所有方法包括private
    • 验证方法名是否在转换过程中被修改
  2. 参数映射增强

    • GET请求识别路径参数{id}
    • POST/PUT请求正确分离路径参数和Body参数
    • 示例:edit(@Param('id') id: string, @Body() body: Dto)
  3. 跨Service依赖

    • 分析Controller调用的所有Service
    • 自动注入所有依赖的Service
    • 不仅仅是主Service

优先级2DTO路径 - 4,200个错误

  1. 路径生成修复

    • 分析实际DTO文件目录结构
    • DTO通常在dtos/admin/, dtos/api/, dtos/core/
    • 修正相对路径计算:../dtos/xxx.dto../../../dtos/admin/xxx.dto
  2. 批量路径修复脚本

    # 扫描所有import语句
    # 根据实际DTO文件位置修正路径
    

优先级3Service层业务逻辑 - 9,837个错误

  1. 成员变量声明

    • 从Java字段提取成员变量
    • 自动生成TypeScript class属性
  2. Java Map操作

    • map.get(key)map[key]
    • map.put(key, value)map[key] = value
  3. MyBatis转换

    • QueryWrapper → QueryBuilder
    • 需要人工review复杂查询

📊 总结

层级 错误数 占比 主要问题 修复难度
Controller 49 0.35% 方法签名不一致 中等
Service (DTO) 4,200 29.8% 导入路径错误 简单
Service (VO) 2,800 19.9% 类型未导入 中等
Service (业务) 7,037 50.0% 业务逻辑细节 困难
总计 14,086 100% - -

修复策略

  1. 快速修复DTO路径批量脚本- 减少30%错误
  2. 中等修复Controller参数、VO导入 - 减少20%错误
  3. 深度修复Service业务逻辑 - 减少50%错误(需人工)

当前转换器已经非常完善,剩余错误主要是配置和业务细节问题!


Generated on 2025-10-29 21:50