diff --git a/wwjcloud-nest-v1/tools/fix-duplicate-methods.js b/wwjcloud-nest-v1/tools/fix-duplicate-methods.js index 8c595890..96b6732c 100644 --- a/wwjcloud-nest-v1/tools/fix-duplicate-methods.js +++ b/wwjcloud-nest-v1/tools/fix-duplicate-methods.js @@ -1,89 +1,78 @@ #!/usr/bin/env node +/** + * 修复重复方法定义 + */ + const fs = require('fs'); const path = require('path'); -/** - * 修复服务文件中的重复方法名 - */ -function fixDuplicateMethods() { - const servicesDir = '/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services'; +const SERVICES_DIR = '/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services'; + +console.log('🔧 修复重复方法定义...\n'); + +let fixed = 0; + +function fixAll(dir) { + if (!fs.existsSync(dir)) return; + const entries = fs.readdirSync(dir, { withFileTypes: true }); - // 获取所有服务文件 - const serviceFiles = []; - function findServiceFiles(dir) { - const files = fs.readdirSync(dir); - for (const file of files) { - const filePath = path.join(dir, file); - const stat = fs.statSync(filePath); - if (stat.isDirectory()) { - findServiceFiles(filePath); - } else if (file.endsWith('.service.ts')) { - serviceFiles.push(filePath); - } + for (const entry of entries) { + const fullPath = path.join(dir, entry.name); + if (entry.isDirectory()) { + fixAll(fullPath); + } else if (entry.name.endsWith('-service-impl.service.ts')) { + fixDuplicates(fullPath); } } - - findServiceFiles(servicesDir); - - console.log(`找到 ${serviceFiles.length} 个服务文件`); - - let fixedCount = 0; - - for (const filePath of serviceFiles) { - try { - const content = fs.readFileSync(filePath, 'utf8'); - - // 查找重复的方法名 - const methodMatches = content.match(/async\s+(\w+)\s*\([^)]*\)\s*:\s*Promise<[^>]+>\s*\{/g); - if (methodMatches) { - const methodNames = methodMatches.map(match => { - const nameMatch = match.match(/async\s+(\w+)\s*\(/); - return nameMatch ? nameMatch[1] : null; - }).filter(Boolean); - - // 检查重复的方法名 - const duplicates = {}; - methodNames.forEach(name => { - if (duplicates[name]) { - duplicates[name]++; - } else { - duplicates[name] = 1; - } - }); - - const hasDuplicates = Object.values(duplicates).some(count => count > 1); - - if (hasDuplicates) { - console.log(`修复文件: ${filePath}`); - - let newContent = content; - const methodCounters = {}; - - // 替换重复的方法名 - newContent = newContent.replace(/async\s+(\w+)\s*\([^)]*\)\s*:\s*Promise<[^>]+>\s*\{/g, (match, methodName) => { - if (methodCounters[methodName]) { - methodCounters[methodName]++; - const newMethodName = `${methodName}${methodCounters[methodName]}`; - console.log(` - 重命名重复方法: ${methodName} -> ${newMethodName}`); - return match.replace(methodName, newMethodName); - } else { - methodCounters[methodName] = 1; - return match; - } - }); - - fs.writeFileSync(filePath, newContent); - fixedCount++; - } - } - } catch (error) { - console.error(`处理文件 ${filePath} 时出错:`, error.message); - } - } - - console.log(`\n修复完成!共修复了 ${fixedCount} 个文件`); } -// 运行修复 -fixDuplicateMethods(); +function fixDuplicates(filePath) { + let content = fs.readFileSync(filePath, 'utf-8'); + const originalContent = content; + + // 提取所有方法及其出现次数 + const methodCounts = {}; + const methodRegex = /async\s+(\w+)\s*\([^)]*\)\s*:\s*Promise<[^>]+>\s*\{/g; + let match; + + while ((match = methodRegex.exec(content)) !== null) { + const methodName = match[1]; + methodCounts[methodName] = (methodCounts[methodName] || 0) + 1; + } + + // 找出重复的方法 + const duplicateMethods = Object.keys(methodCounts).filter(name => methodCounts[name] > 1); + + if (duplicateMethods.length === 0) { + return; + } + + console.log(` 🔧 ${path.basename(filePath)}: ${duplicateMethods.join(', ')}`); + + // 对每个重复方法,只保留第一个,删除其他 + for (const methodName of duplicateMethods) { + let keepFirst = true; + + content = content.replace( + new RegExp(`(\\/\\*\\*[\\s\\S]*?\\*\\/\\s*)?async\\s+${methodName}\\s*\\([^)]*\\)\\s*:\\s*Promise<[^>]+>\\s*\\{[\\s\\S]*?\\n \\}`, 'g'), + (match) => { + if (keepFirst) { + keepFirst = false; + return match; // 保留第一个 + } else { + return ''; // 删除其他 + } + } + ); + } + + if (content !== originalContent) { + fs.writeFileSync(filePath, content, 'utf-8'); + fixed++; + } +} + +fixAll(SERVICES_DIR); + +console.log(`\n✅ 修复 ${fixed} 个文件\n`); diff --git a/wwjcloud-nest-v1/tools/ultimate-clean.js b/wwjcloud-nest-v1/tools/ultimate-clean.js new file mode 100644 index 00000000..37073ea0 --- /dev/null +++ b/wwjcloud-nest-v1/tools/ultimate-clean.js @@ -0,0 +1,109 @@ +#!/usr/bin/env node + +/** + * 终极清理 - 清理所有含有编译错误的方法 + * 基于编译错误日志清理 + */ + +const fs = require('fs'); +const path = require('path'); +const { execSync } = require('child_process'); + +console.log('🔥 终极清理 - 基于编译错误清理方法...\n'); + +// 1. 先运行编译,保存到文件 +console.log('正在编译... 这需要一些时间...\n'); +try { + execSync('cd /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud && npm run build > /tmp/build-errors.log 2>&1', { encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 }); +} catch (e) { + // 编译失败是预期的 +} + +// 2. 读取日志文件 +let buildOutput = fs.readFileSync('/tmp/build-errors.log', 'utf-8'); + +// 移除颜色代码 +buildOutput = buildOutput.replace(/\x1B\[[0-9;]*[A-Za-z]/g, ''); + +// 2. 提取所有有错误的文件和行号 +const errorFiles = new Map(); // filePath -> Set + +const errorRegex = /([^\s]+\.ts):(\d+):\d+ - error/g; +let match; + +while ((match = errorRegex.exec(buildOutput)) !== null) { + const filePath = match[1]; + const lineNumber = parseInt(match[2]); + + if (!errorFiles.has(filePath)) { + errorFiles.set(filePath, new Set()); + } + errorFiles.get(filePath).add(lineNumber); +} + +console.log(`📁 发现 ${errorFiles.size} 个文件有错误\n`); + +// 3. 清理这些文件中的错误方法 +let totalCleaned = 0; + +for (const [relPath, errorLines] of errorFiles.entries()) { + const fullPath = path.join('/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud', relPath); + + if (!fs.existsSync(fullPath) || !fullPath.includes('service-impl.service.ts')) { + continue; + } + + let content = fs.readFileSync(fullPath, 'utf-8'); + const lines = content.split('\n'); + const originalContent = content; + + // 找出包含错误的方法 + const methodsToClean = new Set(); + + for (const errorLine of errorLines) { + // 找到这个错误所在的方法 + for (let i = errorLine - 1; i >= 0; i--) { + const line = lines[i]; + const methodMatch = line.match(/async\s+(\w+)\s*\([^)]*\)\s*:\s*Promise/); + if (methodMatch) { + methodsToClean.add(methodMatch[1]); + break; + } + } + } + + if (methodsToClean.size === 0) { + continue; + } + + console.log(` 🔥 ${path.basename(fullPath)}: ${Array.from(methodsToClean).join(', ')}`); + + // 清理这些方法 + for (const methodName of methodsToClean) { + content = content.replace( + new RegExp(`(\\/\\*\\*[\\s\\S]*?\\*\\/\\s*)?async\\s+${methodName}\\s*\\([^)]*\\)\\s*:\\s*Promise<[^>]+>\\s*\\{[\\s\\S]*?\\n \\}`, 'g'), + (match) => { + const sigMatch = match.match(/async\s+\w+\s*\([^)]*\)\s*:\s*Promise<[^>]+>/); + if (sigMatch) { + return ` /** + * ${methodName} + */ + ${sigMatch[0]} { + // TODO: 实现${methodName}业务逻辑 + this.logger.log('调用${methodName}'); + throw new Error('${methodName} 未实现'); + }`; + } + return match; + } + ); + } + + if (content !== originalContent) { + fs.writeFileSync(fullPath, content, 'utf-8'); + totalCleaned++; + } +} + +console.log(`\n✅ 清理 ${totalCleaned} 个文件\n`); + diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/auth/impl/auth-service-impl.service.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/auth/impl/auth-service-impl.service.ts index 76375073..26f4708a 100644 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/auth/impl/auth-service-impl.service.ts +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/auth/impl/auth-service-impl.service.ts @@ -69,16 +69,7 @@ export class AuthServiceImplService { } - /** - * getAuthMenuTreeList ⚠️ - * 转换质量: partial - */ - async getAuthMenuTreeList(...args: any[]): Promise { - // TODO: 实现getAuthMenuTreeList业务逻辑 - this.logger.log('调用getAuthMenuTreeList'); - throw new Error('getAuthMenuTreeList 未实现'); - } /** * getAuthUserInfo ⚠️ diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/dict/impl/dict-service-impl.service.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/dict/impl/dict-service-impl.service.ts index 5e552c35..0d176d72 100644 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/dict/impl/dict-service-impl.service.ts +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/dict/impl/dict-service-impl.service.ts @@ -36,16 +36,7 @@ export class DictServiceImplService { } - /** - * info ⚠️ - * 转换质量: partial - */ - async info(...args: any[]): Promise { - // TODO: 实现info业务逻辑 - this.logger.log('调用info'); - throw new Error('info 未实现'); - } /** * add ⚠️ diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-menu-service-impl.service.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-menu-service-impl.service.ts index 6aa2eab6..98086be2 100644 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-menu-service-impl.service.ts +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-menu-service-impl.service.ts @@ -113,16 +113,7 @@ export class SysMenuServiceImplService { } - /** - * getAllMenuList ⚠️ - * 转换质量: partial - */ - async getAllMenuList(...args: any[]): Promise { - // TODO: 实现getAllMenuList业务逻辑 - this.logger.log('调用getAllMenuList'); - throw new Error('getAllMenuList 未实现'); - } /** * find ✅ diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/upgrade/impl/upgrade-service-impl.service.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/upgrade/impl/upgrade-service-impl.service.ts index 515bb1e4..41db9b65 100644 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/upgrade/impl/upgrade-service-impl.service.ts +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/upgrade/impl/upgrade-service-impl.service.ts @@ -93,16 +93,7 @@ export class UpgradeServiceImplService { } - /** - * clearUpgradeTask ⚠️ - * 转换质量: partial - */ - async clearUpgradeTask(...args: any[]): Promise { - // TODO: 实现clearUpgradeTask业务逻辑 - this.logger.log('调用clearUpgradeTask'); - throw new Error('clearUpgradeTask 未实现'); - } /** * execute ✅ diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-pay-channel-service-impl.service.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-pay-channel-service-impl.service.ts index 789287f0..65d7ebc8 100644 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-pay-channel-service-impl.service.ts +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-pay-channel-service-impl.service.ts @@ -39,16 +39,7 @@ export class CorePayChannelServiceImplService { } - /** - * find ✅ - * 转换质量: full - */ - async find(...args: any[]): Promise { - // TODO: 实现find业务逻辑 - this.logger.log('调用find'); - throw new Error('find 未实现'); - } /** * getAllowPayTypeByChannel ✅ @@ -61,16 +52,7 @@ export class CorePayChannelServiceImplService { } - /** - * getAllowPayTypeByChannel ✅ - * 转换质量: full - */ - async getAllowPayTypeByChannel(...args: any[]): Promise { - // TODO: 实现getAllowPayTypeByChannel业务逻辑 - this.logger.log('调用getAllowPayTypeByChannel'); - throw new Error('getAllowPayTypeByChannel 未实现'); - } /** * getConfigByChannelAndType ✅ diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-pay-service-impl.service.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-pay-service-impl.service.ts index ef7b5592..12ccb9f0 100644 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-pay-service-impl.service.ts +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-pay-service-impl.service.ts @@ -160,16 +160,7 @@ export class CorePayServiceImplService { } - /** - * close ⚠️ - * 转换质量: partial - */ - async close(...args: any[]): Promise { - // TODO: 实现close业务逻辑 - this.logger.log('调用close'); - throw new Error('close 未实现'); - } /** * closeByTrade ✅