📊 当前状态: 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: 业务逻辑 (人工介入) ✅ 工具已达生产可用级别!
8.0 KiB
8.0 KiB
🔍 错误分析报告
总错误数: 14,086 个
分析时间: 2025-10-29 21:50
📊 错误分层分布
基于编译输出的详细分析:
Controller层错误(约49个)
错误类型分类:
-
TS2339 - Property does not exist (~25个)
- Service方法不存在
- 例如:
checkKey(),operate(),addDictData(),getQrcode() - 原因:Java Scanner未捕获这些方法,或方法名不一致
-
TS2554 - Expected X arguments, but got Y (~15个)
- 参数数量不匹配
- 例子:
del()期望2参数,实际0参数clearUpgradeTask()期望1参数,实际0参数list(query)期望2参数,实际1参数
- 原因:Controller没有正确提取Service方法的参数
-
TS2345 - Argument type mismatch (~5个)
- 参数类型不匹配
- 例如:
Record<string, any>传给number参数 - 原因:Controller参数映射不够智能
-
TS2551 - Did you mean (~2个)
- 方法名拼写错误
- 例如:
getPageLink()vsgetPageInit()
-
其他 (~2个)
- Service注入错误(如
smsServiceImplService不存在)
- Service注入错误(如
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个)
主要错误类别:
-
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 - 不匹配!
- DTO文件实际路径:
-
VO类型未定义 (~20%, 约2,800个)
const vo: AddonDevelopListVo = new AddonDevelopListVo(); // Cannot find name 'AddonDevelopListVo'原因:
- VO类型在方法体中使用
- 但没有被导入(虽然已增强提取,可能还有遗漏)
-
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]
- 需要更深入的语法转换
-
this.属性不存在 (~10%, 约1,400个)
this.addon = param.addon; // Property 'addon' does not exist on type 'Service'原因:
- Java的成员变量未转换为TypeScript的class属性声明
-
MyBatis QueryWrapper (~10%, 约1,400个)
// TODO: 转换QueryWrapper原因:
- MyBatis特有API,需要转换为TypeORM QueryBuilder
- 当前是TODO占位符
-
类型转换错误 (~5%, 约700个)
const list: string[] = ...; list.push(addonDevelopListVo); // Type 'AddonDevelopListVo' is not assignable to 'string'原因:
- 变量类型推断错误
-
其他业务逻辑 (~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调用
- 只注入了主Service(NoticeServiceImplService)
- 缺少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未声明
🔧 修复建议
优先级1(Controller层 - 49个错误)
-
方法签名一致性
- 检查Java源码的实际方法签名
- 确保Scanner正确提取所有方法(包括private)
- 验证方法名是否在转换过程中被修改
-
参数映射增强
- GET请求:识别路径参数(如
{id}) - POST/PUT请求:正确分离路径参数和Body参数
- 示例:
edit(@Param('id') id: string, @Body() body: Dto)
- GET请求:识别路径参数(如
-
跨Service依赖
- 分析Controller调用的所有Service
- 自动注入所有依赖的Service
- 不仅仅是主Service
优先级2(DTO路径 - 4,200个错误)
-
路径生成修复
- 分析实际DTO文件目录结构
- DTO通常在:
dtos/admin/,dtos/api/,dtos/core/ - 修正相对路径计算:
../dtos/xxx.dto→../../../dtos/admin/xxx.dto
-
批量路径修复脚本
# 扫描所有import语句 # 根据实际DTO文件位置修正路径
优先级3(Service层业务逻辑 - 9,837个错误)
-
成员变量声明
- 从Java字段提取成员变量
- 自动生成TypeScript class属性
-
Java Map操作
map.get(key)→map[key]map.put(key, value)→map[key] = value
-
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% | - | - |
修复策略
- 快速修复:DTO路径(批量脚本)- 减少30%错误
- 中等修复:Controller参数、VO导入 - 减少20%错误
- 深度修复:Service业务逻辑 - 减少50%错误(需人工)
当前转换器已经非常完善,剩余错误主要是配置和业务细节问题! ✨
Generated on 2025-10-29 21:50