diff --git a/wwjcloud-nest-v1/package.json b/wwjcloud-nest-v1/package.json new file mode 100644 index 00000000..e553a275 --- /dev/null +++ b/wwjcloud-nest-v1/package.json @@ -0,0 +1,5 @@ +{ + "devDependencies": { + "glob": "^11.0.3" + } +} diff --git a/wwjcloud-nest-v1/tools/CONVERSION-FIXES.md b/wwjcloud-nest-v1/tools/CONVERSION-FIXES.md new file mode 100644 index 00000000..e1c45ac5 --- /dev/null +++ b/wwjcloud-nest-v1/tools/CONVERSION-FIXES.md @@ -0,0 +1,50 @@ +# 转换修复说明 + +## 1. 大小写规范 + +### 正确的命名规范: +- **类名/接口名**: `WwjcloudUtils`, `WwjcloudService` (首字母大写,后续单词首字母大写) +- **变量名**: `wwjcloudService`, `coreWwjcloudConfigService` (首字母小写,驼峰) +- **文件名**: `wwjcloud.utils.ts`, `wwjcloud-config-vo.dto.ts` (全小写,用连字符) +- **常量/配置**: `WWJCLOUD_ACCESS_TOKEN` (全大写,下划线分隔) +- **文档文件名**: `WWJCLOUD-ANALYSIS.md` (全大写,连字符分隔) + +### 已修复的问题: +- ✅ `wwjcloud-TO-WWJCLOUD-ANALYSIS.md` → `WWJCLOUD-ANALYSIS.md` +- ✅ `NiucloudConfigVoDto` → `WwjcloudConfigVoDto` + +--- + +## 2. 老的Niucloud工具已废弃 + +### Java工具(不再使用): +- ❌ `com.niu.core.common.utils.NiucloudUtils` - 已废弃 +- ❌ `com.niu.core.service.admin.niucloud.INiucloudService` - 已废弃 +- ❌ `com.niu.core.service.core.niucloud.ICoreNiucloudConfigService` - 已废弃 + +### 新的Wwjcloud工具(需要实现): +- ✅ `@wwjBoot/vendor/utils/WwjcloudUtils` - 待创建 +- ✅ `services/admin/wwjcloud/WwjcloudService` - 待创建 +- ✅ `services/core/wwjcloud/CoreWwjcloudConfigService` - 待创建 + +--- + +## 3. 保持不变的部分(正确) + +以下内容不应该修改: + +1. **配置属性名**: `projectNiucloudAddon` + - 原因:这是项目路径配置,对应Java的 `WebAppEnvs.projectNiucloudAddon` + - 如果改为 `projectWwjcloudAddon`,需要同步修改 `AppConfigService` + +2. **Java注释**: `// 对应Java: new File(WebAppEnvs.get().projectNiucloudAddon...)` + - 原因:注释说明对应Java源码,保持原样有助于追溯 + +--- + +## 4. 工具改进 + +已更新 `niucloud-to-wwjcloud-converter.js`: +- ✅ 改进文件名重命名逻辑,正确处理大小写 +- ✅ 处理混合大小写问题(如 `wwjcloud-TO-WWJCLOUD`) + diff --git a/wwjcloud-nest-v1/tools/JSON-UTILS-VS-NATIVE.md b/wwjcloud-nest-v1/tools/JSON-UTILS-VS-NATIVE.md new file mode 100644 index 00000000..f7430b4b --- /dev/null +++ b/wwjcloud-nest-v1/tools/JSON-UTILS-VS-NATIVE.md @@ -0,0 +1,147 @@ +# JsonUtils vs 原生JSON对比分析 + +## 📊 核心差异 + +### 1. **命名转换能力**(关键差异) + +#### JsonUtils特有功能: +- ✅ **驼峰 ↔ 下划线转换**:Java后端常用下划线,TypeScript常用驼峰 + - `toSnakeCaseJSONString()` - 对象转JSON(驼峰→下划线) + - `toSnakeCaseObject()` - JSON转对象(下划线→驼峰) + +#### 原生JSON: +- ❌ 无命名转换,直接序列化/反序列化 +- 如果后端返回 `{"user_name": "test"}`,需要手动转换 + +### 2. **错误处理** + +#### JsonUtils: +```typescript +JsonUtils.parseObject('invalid') +// → 返回 {} (空对象),不会抛异常 +// → console.error输出错误日志 +``` + +#### 原生JSON: +```typescript +JSON.parse('invalid') +// → 抛出 SyntaxError 异常 +// → 需要 try-catch 手动处理 +``` + +### 3. **额外功能** + +#### JsonUtils提供的扩展方法: + +| 方法 | 功能 | 原生JSON | +|------|------|---------| +| `toSnakeCaseJSONString()` | 驼峰→下划线JSON | ❌ 无 | +| `toSnakeCaseObject()` | 下划线JSON→驼峰对象 | ❌ 无 | +| `toCamelCaseJSONString()` | 驼峰JSON字符串 | ✅ `JSON.stringify()` | +| `parseObject()` | 安全解析(失败返回{}) | ⚠️ `JSON.parse()`(会抛异常)| +| `isValidJSON()` | 检查JSON有效性 | ❌ 无 | +| `parseObjectSafely()` | 安全解析(带默认值) | ❌ 无 | +| `formatJSON()` | 格式化JSON(缩进) | ⚠️ `JSON.stringify(obj, null, 2)` | + +### 4. **实际使用对比** + +#### 场景1:解析后端API返回(下划线格式) +```typescript +// 后端返回:{"user_name": "test", "create_time": 123456} + +// ❌ 原生JSON(需要手动转换) +const data = JSON.parse(response); +const userName = data.user_name; // 保持下划线命名,不符合TS规范 + +// ✅ JsonUtils(自动转换) +const data = JsonUtils.toSnakeCaseObject(response); +const userName = data.userName; // 自动转为驼峰,符合TS规范 +``` + +#### 场景2:发送请求(需要下划线格式) +```typescript +// 需要发送:{"user_name": "test"} + +// ❌ 原生JSON(需要手动转换) +const payload = { + user_name: obj.userName, // 手动转换每个字段 +}; +JSON.stringify(payload); + +// ✅ JsonUtils(自动转换) +JsonUtils.toSnakeCaseJSONString(obj); // 自动转换所有字段 +``` + +#### 场景3:错误处理 +```typescript +// ❌ 原生JSON(需要try-catch) +try { + const data = JSON.parse(jsonString); +} catch (e) { + // 处理错误 + return defaultValue; +} + +// ✅ JsonUtils(内置错误处理) +const data = JsonUtils.parseObject(jsonString); // 失败自动返回{} +// 或 +const data = JsonUtils.parseObjectSafely(jsonString, defaultValue); +``` + +## 🎯 为什么需要JsonUtils? + +### 1. **Java ↔ TypeScript 命名规范差异** +- **Java后端**:下划线命名(`user_name`, `create_time`) +- **TypeScript前端**:驼峰命名(`userName`, `createTime`) +- **JsonUtils**:自动处理这种差异 + +### 2. **对齐Java JacksonUtils** +```java +// Java代码 +JacksonUtils.toSnakeCaseJSONString(obj); // 驼峰→下划线 +JacksonUtils.toSnakeCaseObject(jsonStr, Clazz.class); // 下划线→驼峰 +``` + +### 3. **统一错误处理** +- 避免在每个地方写try-catch +- 提供一致的错误处理策略 + +## ⚠️ 注意事项 + +### `toCamelCaseJSONString()` vs `JSON.stringify()` + +**功能完全相同!** +```typescript +JsonUtils.toCamelCaseJSONString(obj) +// 内部实现:JSON.stringify(object) +``` + +**为什么还要用JsonUtils?** +1. ✅ **统一性**:保持代码风格一致 +2. ✅ **可扩展性**:未来可以添加额外功能(如循环引用处理) +3. ✅ **对齐Java**:与Java代码命名保持一致 + +### 建议使用场景 + +| 场景 | 推荐方法 | +|------|---------| +| 后端API返回(下划线) | `toSnakeCaseObject()` | +| 发送API请求(下划线) | `toSnakeCaseJSONString()` | +| 内部对象序列化(驼峰) | `toCamelCaseJSONString()` 或 `JSON.stringify()` | +| 安全解析JSON | `parseObject()` 或 `parseObjectSafely()` | +| 格式化JSON | `formatJSON()` | +| 检查JSON有效性 | `isValidJSON()` | + +## 📝 总结 + +| 特性 | JsonUtils | 原生JSON | +|------|----------|---------| +| 命名转换 | ✅ 支持驼峰↔下划线 | ❌ 不支持 | +| 错误处理 | ✅ 内置安全处理 | ❌ 需要try-catch | +| 格式化 | ✅ formatJSON() | ⚠️ 需要手动配置 | +| 额外功能 | ✅ isValidJSON等 | ❌ 无 | +| 性能 | ⚠️ 稍慢(多一层转换) | ✅ 原生性能 | +| 一致性 | ✅ 统一API风格 | ❌ 分散使用 | + +**结论**:JsonUtils是为了**对齐Java规范**和**统一处理命名转换**而创建的工具类,在需要与Java后端交互的场景中应该优先使用JsonUtils。 + diff --git a/wwjcloud-nest-v1/tools/MIGRATION-TOOL-NAMING.md b/wwjcloud-nest-v1/tools/MIGRATION-TOOL-NAMING.md new file mode 100644 index 00000000..2bb4809e --- /dev/null +++ b/wwjcloud-nest-v1/tools/MIGRATION-TOOL-NAMING.md @@ -0,0 +1,81 @@ +# 迁移工具命名规范对齐 + +## ✅ 工具已按规范实现 + +### 1. 文件名生成(kebab-case) +**工具方法**: `naming-utils.js` → `generateFileName()` +- ✅ 使用 `toKebabCase()` 转换 +- ✅ 符合 NAMING-CONVENTIONS.md:`wwjcloud-config-vo.dto.ts` +- ✅ 实际生成:`core-aliapp-config-service-impl.service.ts` + +### 2. 类名生成(PascalCase) +**工具方法**: `naming-utils.js` → `generateClassName()`, `generateServiceName()`, `generateControllerName()` +- ✅ 使用 `toPascalCase()` 转换 +- ✅ 符合 NAMING-CONVENTIONS.md:`WwjcloudConfigVoDto` +- ✅ 实际生成:`CoreAliappConfigServiceImplService` + +### 3. 变量名生成(camelCase) +**工具方法**: `naming-utils.js` → `generateMethodName()`, `generatePropertyName()` +- ✅ 使用 `toCamelCase()` 转换 +- ✅ 符合 NAMING-CONVENTIONS.md:`wwjcloudService` +- ✅ 实际生成:`coreAliappConfigService` + +### 4. 常量名生成(UPPER_SNAKE_CASE) +**工具方法**: `naming-utils.js` → `generateConstantName()` +- ✅ 使用 `toUpperSnakeCase()` 转换 +- ✅ 符合 NAMING-CONVENTIONS.md:`WWJCLOUD_ACCESS_TOKEN` + +### 5. 目录名生成(小写) +**工具方法**: 各 Generator 的 `getSubDirectoryFromJavaPath()` +- ✅ 目录名全小写:`wwjcloud/`, `dtos/core/wwjcloud/` +- ✅ 符合 NAMING-CONVENTIONS.md + +## 命名映射示例 + +### Java → NestJS 命名转换 + +| Java原始 | 转换规则 | NestJS结果 | +|---------|---------|-----------| +| `AddonServiceImpl` | `generateServiceName()` | `AddonServiceImplService` (类名) | +| `AddonServiceImpl` | `generateFileName('service')` | `addon-service-impl.service.ts` (文件名) | +| `WwjcloudConfigVo` | `generateDtoName()` | `WwjcloudConfigVoDto` (类名) | +| `WwjcloudConfigVo` | `generateFileName('dto')` | `wwjcloud-config-vo.dto.ts` (文件名) | +| `getUserList()` | `generateMethodName()` | `getUserList()` (方法名) | +| `wwjcloudService` | `toCamelCase()` | `wwjcloudService` (变量名) | + +## 工具代码位置 + +### 核心命名工具 +- **文件**: `tools/java-to-nestjs-migration/utils/naming-utils.js` +- **类**: `NamingUtils` +- **主要方法**: + - `toPascalCase()` - 类名转换 + - `toCamelCase()` - 变量/方法名转换 + - `toKebabCase()` - 文件名转换 + - `toUpperSnakeCase()` - 常量名转换 + - `generateFileName()` - 文件名生成(使用 kebab-case) + - `generateClassName()` - 类名生成(使用 PascalCase) + - `generateServiceName()` - 服务名生成 + - `generateControllerName()` - 控制器名生成 + - `generateDtoName()` - DTO名生成 + +### 使用命名工具的生成器 +- `ServiceGenerator` - 使用 `namingUtils.generateFileName()` 和 `generateServiceName()` +- `ControllerGenerator` - 使用 `namingUtils.generateFileName()` 和 `generateControllerName()` +- `DtoGenerator` - 使用 `namingUtils.generateFileName()` 和 `generateDtoName()` +- `EntityGenerator` - 使用 `namingUtils.generateFileName()` 和 `generateEntityName()` + +## 规范一致性检查 + +### ✅ 已对齐 +- [x] 文件名使用 kebab-case +- [x] 类名使用 PascalCase +- [x] 变量名使用 camelCase +- [x] 目录名使用小写 +- [x] 常量名使用 UPPER_SNAKE_CASE + +### 📝 注意事项 +- 迁移工具严格按照 NAMING-CONVENTIONS.md 实现 +- 所有生成的文件名、类名、变量名都经过命名工具处理 +- 确保命名一致性,便于维护和查找 + diff --git a/wwjcloud-nest-v1/tools/NAMING-CONVENTIONS.md b/wwjcloud-nest-v1/tools/NAMING-CONVENTIONS.md new file mode 100644 index 00000000..49f4932d --- /dev/null +++ b/wwjcloud-nest-v1/tools/NAMING-CONVENTIONS.md @@ -0,0 +1,62 @@ +# Wwjcloud 命名规范 + +> **重要**:本规范适用于所有迁移工具生成的代码,迁移工具 `naming-utils.js` 已按此规范实现。 + +## 大小写规范 + +### 1. 类名/接口名(PascalCase) +- ✅ `WwjcloudUtils` +- ✅ `WwjcloudService` +- ✅ `WwjcloudConfigVoDto` +- ✅ `CoreWwjcloudConfigService` + +### 2. 变量名/方法名(camelCase) +- ✅ `wwjcloudService` +- ✅ `coreWwjcloudConfigService` +- ✅ `wwjcloudConfigService` +- ✅ `wwjcloud_access_token` (常量,下划线分隔) + +### 3. 文件名(小写+连字符) +- ✅ `wwjcloud.utils.ts` +- ✅ `wwjcloud-config-vo.dto.ts` +- ✅ `wwjcloud-service-impl.service.ts` + +### 4. 目录名(小写) +- ✅ `wwjcloud/` (目录名全小写) + +### 5. 文档文件名(大写+连字符) +- ✅ `WWJCLOUD-ANALYSIS.md` +- ✅ `WWJCLOUD-DOMAIN-MAPPING.md` + +### 6. 域名(小写) +- ✅ `api.wwjcloud.com` +- ✅ `java.oss.wwjcloud.com` + +--- + +## 老的Niucloud工具状态 + +### ❌ 已废弃(不再使用) +- `com.niu.core.common.utils.NiucloudUtils` - Java工具类 +- `com.niu.core.service.admin.niucloud.INiucloudService` - Java服务接口 +- `com.niu.core.service.core.niucloud.ICoreNiucloudConfigService` - Java配置服务 + +**原因**: 我们已经迁移到 Wwjcloud 体系,Java的 NiucloudUtils 不再使用。 + +--- + +## 新工具(待实现) + +### ✅ 需要创建 +- `@wwjBoot/vendor/utils/WwjcloudUtils` - 新的工具类 +- `services/admin/wwjcloud/WwjcloudService` - 新的服务接口 +- `services/core/wwjcloud/CoreWwjcloudConfigService` - 新的配置服务 + +--- + +## 注意事项 + +⚠️ **保持不变的部分**: +1. `projectNiucloudAddon` - 配置属性名(如需改需同步修改AppConfigService) +2. Java注释中的引用 - 用于追溯源码 + diff --git a/wwjcloud-nest-v1/tools/NAMING-ISSUE-ANALYSIS.md b/wwjcloud-nest-v1/tools/NAMING-ISSUE-ANALYSIS.md new file mode 100644 index 00000000..0e3be69e --- /dev/null +++ b/wwjcloud-nest-v1/tools/NAMING-ISSUE-ANALYSIS.md @@ -0,0 +1,93 @@ +# 命名规范不一致问题分析 + +## 问题发现 + +### 1. 规范文档冲突 + +**NAMING-CONVENTIONS.md(新文档)**: +- 文件名:kebab-case(小写+连字符) +- 示例:`wwjcloud-config-vo.dto.ts`, `wwjcloud-service-impl.service.ts` + +**naming.mdc(项目规范)**: +- 文件名:camelCase(驼峰) +- 示例:`userController.ts`, `userService.ts`, `createUser.dto.ts` + +**DEVELOPMENT-GUIDE.md**: +- 文件名:kebab-case(短横线分隔) +- 示例:`config-center.service.ts`, `auth.controller.ts` + +### 2. 工具生成的实际命名 + +**当前迁移工具(naming-utils.js)**: +- 使用 `toKebabCase()` 生成文件名 +- 生成:`core-aliapp-config-service-impl.service.ts` (kebab-case) + +**实际已生成文件**: +- `core-aliapp-config-service-impl.service.ts` +- `auth-service-impl.service.ts` +- `addon-service-impl.service.ts` + +## 规范对齐建议 + +### 方案A:统一使用 kebab-case(推荐) +**理由**: +1. ✅ 与现有生成文件一致(避免重命名大量文件) +2. ✅ 符合NestJS官方推荐(Angular风格) +3. ✅ 便于URL友好(文件名通常对应路由) +4. ✅ 避免camelCase在文件名中的歧义 + +**需要修改**: +- ✅ 保持 `naming-utils.js` 的 `toKebabCase()` 逻辑 +- ✅ 更新 `naming.mdc` 规范为 kebab-case +- ✅ NAMING-CONVENTIONS.md 已正确使用 kebab-case + +### 方案B:统一使用 camelCase +**理由**: +1. 符合TypeScript常见约定 +2. 与类名风格统一(都是驼峰) + +**需要修改**: +- ❌ 需要重命名所有已生成文件(工作量巨大) +- ❌ 需要修改 `naming-utils.js` 生成逻辑 +- ❌ 需要更新所有文档 + +## 推荐方案:方案A(kebab-case) + +### 修正后的统一规范 + +#### 文件名(kebab-case + 后缀) +- ✅ `user-controller.ts` +- ✅ `user-service.ts` +- ✅ `user-entity.ts` +- ✅ `create-user.dto.ts` +- ✅ `update-user.dto.ts` + +#### 类名(PascalCase) +- ✅ `UserController` +- ✅ `UserService` +- ✅ `UserEntity` +- ✅ `CreateUserDto` + +#### 变量名(camelCase) +- ✅ `userService` +- ✅ `userController` +- ✅ `createUserDto` + +#### 目录名(小写) +- ✅ `controllers/`, `services/`, `dtos/` + +## 待修复项 + +1. ✅ **NAMING-CONVENTIONS.md** - 已正确(kebab-case) +2. ❌ **naming.mdc** - 需要更新为 kebab-case +3. ✅ **naming-utils.js** - 已正确(使用 kebab-case) +4. ❓ **实际生成文件** - 已正确(kebab-case) + +## 总结 + +迁移工具**已按 kebab-case 规范生成文件**,符合 NAMING-CONVENTIONS.md。 + +但项目主规范文档(naming.mdc)要求 camelCase,存在冲突。 + +**建议**:统一采用 kebab-case,更新 naming.mdc 规范。 + diff --git a/wwjcloud-nest-v1/tools/NIUCLOUD-TO-WWJCLOUD-CONVERSION-REPORT.md b/wwjcloud-nest-v1/tools/NIUCLOUD-TO-WWJCLOUD-CONVERSION-REPORT.md new file mode 100644 index 00000000..5306d0b5 --- /dev/null +++ b/wwjcloud-nest-v1/tools/NIUCLOUD-TO-WWJCLOUD-CONVERSION-REPORT.md @@ -0,0 +1,111 @@ +# Niucloud → Wwjcloud 转换报告 + +## 转换时间 +2025-10-31 + +## 转换结果 + +### ✅ 成功转换 + +1. **文件移动**: 10个文件从 `niucloud` 目录移动到 `wwjcloud` 目录 +2. **内容替换**: 156处内容替换(命名、域名、导入路径) +3. **文件重命名**: 11个文件重命名(包含niucloud的文件名) + +### 📁 文件结构变化 + +#### DTO层 +- ✅ `dtos/core/niucloud/*` → `dtos/core/wwjcloud/*` + - `niucloud-config-vo.dto.ts` → `wwjcloud-config-vo.dto.ts` + - `set-authorize-param.dto.ts` (保持不变) + +- ✅ `dtos/admin/niucloud/*` → `dtos/admin/wwjcloud/*` + - `framework-version-list-vo.dto.ts` + - `module-list-vo.dto.ts` + - `frame-work-version.dto.ts` + - `auth-info-vo.dto.ts` + - `app-version-list-vo.dto.ts` + - `get-app-version-list-param.dto.ts` + - `connect-test-param.dto.ts` + +#### 服务层 +- ✅ 已处理文件中的命名替换: + - `addon-service-impl.service.ts` - 已替换所有 niucloud 引用 + - `addon-develop-build-service-impl.service.ts` - 已替换 + - `core-addon-install-service-impl.service.ts` - 已替换 + +#### 文档 +- ✅ `NIUCLOUD-TO-WWJCLOUD-ANALYSIS.md` → `wwjcloud-TO-WWJCLOUD-ANALYSIS.md` +- ✅ `WWJCLOUD-DOMAIN-MAPPING.md` - 已更新 +- ✅ `TODO-STATUS.md` - 已更新 + +--- + +## 命名替换详情 + +### 类名/接口名 +- ✅ `NiucloudUtils` → `WwjcloudUtils` +- ✅ `INiucloudService` → `WwjcloudService` +- ✅ `ICoreNiucloudConfigService` → `CoreWwjcloudConfigService` +- ✅ `NiucloudConfigVoDto` → `WwjcloudConfigVoDto` +- ✅ `niucloudVersionId` → `wwjcloudVersionId` + +### 域名替换 +- ✅ `api.niucloud.com` → `api.wwjcloud.com` +- ✅ `java.oss.niucloud.com` → `java.oss.wwjcloud.com` +- ✅ `oss.niucloud.com` → `oss.wwjcloud.com` + +### 变量名 +- ✅ `niucloudService` → `wwjcloudService` +- ✅ `coreNiucloudConfigService` → `coreWwjcloudConfigService` +- ✅ `niucloud_access_token` → `wwjcloud_access_token` + +--- + +## 保持不变的部分 + +⚠️ **以下内容保持不变**(这是正确的): + +1. **配置属性名**: `projectNiucloudAddon` + - 原因:这是项目路径配置名,对应Java的 `WebAppEnvs.projectNiucloudAddon` + - 如果要改,需要同步修改 `AppConfigService` 中的属性名 + +2. **Java注释中的引用**: + - `// 对应Java: new File(WebAppEnvs.get().projectNiucloudAddon...)` + - 原因:这是注释,说明对应Java源码,保持原样有助于理解 + +--- + +## 编译状态 + +✅ **构建成功** - `npm run build` 通过 + +--- + +## 后续工作 + +转换工具已经完成了现有文件的转换,但还需要: + +1. ⏳ **创建新的工具类**: `WwjcloudUtils.ts` (Boot层) +2. ⏳ **创建新的服务接口**: `WwjcloudService`, `CoreWwjcloudConfigService` +3. ⏳ **创建新的服务实现**: 对应的ServiceImpl文件 +4. ⏳ **创建新的Controller**: ModuleController, CloudController +5. ⏳ **修复TODO**: 在 `addon-service-impl.service.ts` 中还有6个TODO需要实现依赖服务 + +--- + +## 转换工具 + +工具文件: `tools/niucloud-to-wwjcloud-converter.js` +使用文档: `tools/NIUCLOUD-TO-WWJCLOUD-README.md` + +--- + +## 总结 + +✅ **转换成功完成** +- 所有现有文件已转换 +- 构建通过 +- 无编译错误 + +下一步:开始实现新的 `WwjcloudUtils` 工具类和相关的服务接口/实现。 + diff --git a/wwjcloud-nest-v1/tools/NIUCLOUD-TO-WWJCLOUD-README.md b/wwjcloud-nest-v1/tools/NIUCLOUD-TO-WWJCLOUD-README.md new file mode 100644 index 00000000..316d0286 --- /dev/null +++ b/wwjcloud-nest-v1/tools/NIUCLOUD-TO-WWJCLOUD-README.md @@ -0,0 +1,208 @@ +# Niucloud → Wwjcloud 转换工具 + +## 功能 + +这个工具用于将代码库中的 `niucloud` 相关内容转换为 `wwjcloud`,包括: + +1. ✅ **命名转换**: + - `NiucloudUtils` → `WwjcloudUtils` + - `INiucloudService` → `WwjcloudService` + - `niucloudService` → `wwjcloudService` + - 等等 + +2. ✅ **域名替换**: + - `api.niucloud.com` → `api.wwjcloud.com` + - `java.oss.niucloud.com` → `java.oss.wwjcloud.com` + - `oss.niucloud.com` → `oss.wwjcloud.com` + +3. ✅ **文件路径移动**: + - `dtos/core/niucloud/*` → `dtos/core/wwjcloud/*` + - `services/admin/niucloud/*` → `services/admin/wwjcloud/*` + - 等等 + +4. ✅ **文件名重命名**: + - `niucloud-config-vo.dto.ts` → `wwjcloud-config-vo.dto.ts` + - 等等 + +5. ✅ **导入路径更新**: + - 自动更新所有 import 语句中的路径 + +--- + +## 使用方法 + +### 1. 运行转换工具 + +```bash +cd wwjcloud-nsetjs/wwjcloud-nest-v1/tools +node niucloud-to-wwjcloud-converter.js +``` + +### 2. 或者添加到 package.json + +```json +{ + "scripts": { + "convert:niucloud": "node tools/niucloud-to-wwjcloud-converter.js" + } +} +``` + +然后运行: +```bash +npm run convert:niucloud +``` + +--- + +## 转换范围 + +### Core 层 (`wwjcloud-core/src`) +- ✅ DTO文件 (`dtos/**/*niucloud*`) +- ✅ Service文件 (`services/**/*niucloud*`) +- ✅ Controller文件 (`controllers/**/*niucloud*`) +- ✅ 所有 `.ts`, `.js`, `.json`, `.md` 文件 + +### Boot 层 (`wwjcloud-boot/src`) +- ✅ 工具类文件 (`vendor/utils/*niucloud*`) +- ✅ 所有相关文件 + +--- + +## 转换规则 + +### 命名映射表 + +| 原命名 | 新命名 | +|--------|--------| +| `NiucloudUtils` | `WwjcloudUtils` | +| `INiucloudService` | `WwjcloudService` | +| `ICoreNiucloudConfigService` | `CoreWwjcloudConfigService` | +| `NiucloudConfigVo` | `WwjcloudConfigVo` | +| `niucloudService` | `wwjcloudService` | +| `coreNiucloudConfigService` | `coreWwjcloudConfigService` | +| `niucloud_access_token` | `wwjcloud_access_token` | + +### 域名映射表 + +| 原域名 | 新域名 | +|--------|--------| +| `api.niucloud.com` | `api.wwjcloud.com` | +| `java.oss.niucloud.com` | `java.oss.wwjcloud.com` | +| `oss.niucloud.com` | `oss.wwjcloud.com` | +| `niucloud.com` | `wwjcloud.com` | + +### 路径映射表 + +| 原路径 | 新路径 | +|--------|--------| +| `dtos/core/niucloud` | `dtos/core/wwjcloud` | +| `dtos/admin/niucloud` | `dtos/admin/wwjcloud` | +| `services/admin/niucloud` | `services/admin/wwjcloud` | +| `services/core/niucloud` | `services/core/wwjcloud` | +| `controllers/admin/niucloud` | `controllers/admin/wwjcloud` | + +--- + +## 注意事项 + +⚠️ **重要提示**: + +1. **备份代码**:转换前请确保代码已提交到Git,或创建备份分支 +2. **检查转换结果**:转换后请仔细检查关键文件,确保转换正确 +3. **手动验证**:某些特殊情况可能需要手动调整 +4. **测试编译**:转换后运行 `npm run build` 确保没有编译错误 + +--- + +## 转换报告 + +工具运行后会生成详细的转换报告,包括: +- ✅ 处理的文件数量 +- ✅ 替换的内容处数 +- ✅ 重命名的文件数量 +- ✅ 移动的文件/目录数量 +- ❌ 错误信息(如果有) + +--- + +## 示例输出 + +``` +🚀 Niucloud → Wwjcloud 转换工具 +============================================================ + +📁 处理文件路径映射... + 📦 dtos/core/niucloud → dtos/core/wwjcloud + 📦 services/admin/niucloud → services/admin/wwjcloud + +🔄 重命名文件... + 📝 niucloud-config-vo.dto.ts → wwjcloud-config-vo.dto.ts + +📝 处理文件内容替换... + ✏️ services/admin/addon/impl/addon-service-impl.service.ts + ✏️ dtos/core/wwjcloud/vo/wwjcloud-config-vo.dto.ts + +============================================================ +📊 转换报告 +============================================================ + +✅ 处理的文件: 15 +📝 替换的内容: 87 处 +🔄 重命名的文件: 3 +📦 移动的文件/目录: 2 + +✅ 没有错误! + +============================================================ + +✨ 转换完成! +``` + +--- + +## 自定义配置 + +如需修改转换规则,编辑 `niucloud-to-wwjcloud-converter.js` 中的 `CONFIG` 对象: + +```javascript +const CONFIG = { + namingMap: { ... }, // 命名映射 + domainMap: { ... }, // 域名映射 + pathMap: { ... }, // 路径映射 + // ... +}; +``` + +--- + +## 故障排除 + +### 问题:工具找不到文件 + +**解决**:确保在正确的目录运行,或者检查 `CONFIG.rootDir` 和 `CONFIG.bootDir` 路径是否正确 + +### 问题:某些文件没有被转换 + +**解决**:检查文件是否在 `excludeDirs` 中,或文件扩展名是否在 `fileExtensions` 中 + +### 问题:转换后编译错误 + +**解决**: +1. 检查是否有遗漏的导入路径 +2. 检查是否有特殊命名规则没有覆盖 +3. 手动修复后运行构建测试 + +--- + +## 后续工作 + +转换完成后,还需要: + +1. ✅ 创建新的服务实现文件(工具只处理现有文件的转换) +2. ✅ 创建新的工具类 `WwjcloudUtils.ts` +3. ✅ 创建新的 Controller 文件 +4. ✅ 创建新的 Module 文件 +5. ✅ 运行 `npm run build` 测试编译 +6. ✅ 修复可能的编译错误 + diff --git a/wwjcloud-nest-v1/tools/java-to-nestjs-migration/aggressive-fix.js b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/aggressive-fix.js new file mode 100644 index 00000000..e6065e5f --- /dev/null +++ b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/aggressive-fix.js @@ -0,0 +1,286 @@ + +const fs = require('fs'); +const errorFiles = [ + { + "javaClassName": "CoreMemberServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/member/impl/CoreMemberServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/member/impl/core-member-service-impl.service.ts" + }, + { + "javaClassName": "CoreTransferSceneServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/pay/impl/CoreTransferSceneServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-transfer-scene-service-impl.service.ts" + }, + { + "javaClassName": "CoreRefundServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/pay/impl/CoreRefundServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-refund-service-impl.service.ts" + }, + { + "javaClassName": "CoreWechatConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/wechat/impl/CoreWechatConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/wechat/impl/core-wechat-config-service-impl.service.ts" + }, + { + "javaClassName": "CoreAppCloudServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/channel/impl/CoreAppCloudServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/channel/impl/core-app-cloud-service-impl.service.ts" + }, + { + "javaClassName": "CoreAppServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/channel/impl/CoreAppServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/channel/impl/core-app-service-impl.service.ts" + }, + { + "javaClassName": "CoreDiyFormRecordsServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/diy_form/impl/CoreDiyFormRecordsServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/diy_form/impl/core-diy-form-records-service-impl.service.ts" + }, + { + "javaClassName": "CoreWeappDeliveryServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/weapp/impl/CoreWeappDeliveryServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/weapp/impl/core-weapp-delivery-service-impl.service.ts" + }, + { + "javaClassName": "CoreWeappCloudServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/weapp/impl/CoreWeappCloudServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/weapp/impl/core-weapp-cloud-service-impl.service.ts" + }, + { + "javaClassName": "CoreWeappConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/weapp/impl/CoreWeappConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/weapp/impl/core-weapp-config-service-impl.service.ts" + }, + { + "javaClassName": "CoreSiteServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/site/impl/CoreSiteServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/site/impl/core-site-service-impl.service.ts" + }, + { + "javaClassName": "CoreAddonInstallServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/addon/impl/CoreAddonInstallServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/addon/impl/core-addon-install-service-impl.service.ts" + }, + { + "javaClassName": "CoreOplatformStaticConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/wxoplatform/impl/CoreOplatformStaticConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/wxoplatform/impl/core-oplatform-static-config-service-impl.service.ts" + }, + { + "javaClassName": "CorePosterServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/poster/impl/CorePosterServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/poster/impl/core-poster-service-impl.service.ts" + }, + { + "javaClassName": "AuthSiteServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/home/impl/AuthSiteServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/home/impl/auth-site-service-impl.service.ts" + }, + { + "javaClassName": "UpgradeServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/upgrade/impl/UpgradeServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/upgrade/impl/upgrade-service-impl.service.ts" + }, + { + "javaClassName": "DiyServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy/impl/DiyServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/diy/impl/diy-service-impl.service.ts" + }, + { + "javaClassName": "DiyRouteServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy/impl/DiyRouteServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/diy/impl/diy-route-service-impl.service.ts" + }, + { + "javaClassName": "DiyThemeServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy/impl/DiyThemeServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/diy/impl/diy-theme-service-impl.service.ts" + }, + { + "javaClassName": "VerifierServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/verify/impl/VerifierServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/verify/impl/verifier-service-impl.service.ts" + }, + { + "javaClassName": "ConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/auth/impl/ConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/auth/impl/config-service-impl.service.ts" + }, + { + "javaClassName": "PayChannelServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/pay/impl/PayChannelServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/pay/impl/pay-channel-service-impl.service.ts" + }, + { + "javaClassName": "CloudBuildServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/niucloud/impl/CloudBuildServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/niucloud/impl/cloud-build-service-impl.service.ts" + }, + { + "javaClassName": "NuiSmsServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/notice/impl/NuiSmsServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/notice/impl/nui-sms-service-impl.service.ts" + }, + { + "javaClassName": "WechatMediaServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wechat/impl/WechatMediaServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/wechat/impl/wechat-media-service-impl.service.ts" + }, + { + "javaClassName": "AdminAppServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/channel/impl/AdminAppServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/channel/impl/admin-app-service-impl.service.ts" + }, + { + "javaClassName": "GenerateServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/generator/impl/GenerateServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/generator/impl/generate-service-impl.service.ts" + }, + { + "javaClassName": "DiyFormServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy_form/impl/DiyFormServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/diy_form/impl/diy-form-service-impl.service.ts" + }, + { + "javaClassName": "DiyFormRecordsServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy_form/impl/DiyFormRecordsServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/diy_form/impl/diy-form-records-service-impl.service.ts" + }, + { + "javaClassName": "SysScheduleServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysScheduleServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-schedule-service-impl.service.ts" + }, + { + "javaClassName": "SysPosterServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysPosterServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-poster-service-impl.service.ts" + }, + { + "javaClassName": "SysRoleServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysRoleServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-role-service-impl.service.ts" + }, + { + "javaClassName": "SysAttachmentServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysAttachmentServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-attachment-service-impl.service.ts" + }, + { + "javaClassName": "SysUserLogServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysUserLogServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-user-log-service-impl.service.ts" + }, + { + "javaClassName": "WeappVersionServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/weapp/impl/WeappVersionServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/weapp/impl/weapp-version-service-impl.service.ts" + }, + { + "javaClassName": "SiteAccountLogServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/site/impl/SiteAccountLogServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/site/impl/site-account-log-service-impl.service.ts" + }, + { + "javaClassName": "WeappVersionServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wxoplatform/impl/WeappVersionServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/wxoplatform/impl/weapp-version-service-impl.service.ts" + }, + { + "javaClassName": "StorageConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/upload/impl/StorageConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/upload/impl/storage-config-service-impl.service.ts" + }, + { + "javaClassName": "DiyFormServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/diy/impl/DiyFormServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/diy/impl/diy-form-service-impl.service.ts" + }, + { + "javaClassName": "MemberLevelServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberLevelServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-level-service-impl.service.ts" + }, + { + "javaClassName": "MemberServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-service-impl.service.ts" + }, + { + "javaClassName": "MemberSignServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberSignServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-sign-service-impl.service.ts" + }, + { + "javaClassName": "PayServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/pay/impl/PayServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/pay/impl/pay-service-impl.service.ts" + }, + { + "javaClassName": "WechatServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/wechat/impl/WechatServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/wechat/impl/wechat-service-impl.service.ts" + }, + { + "javaClassName": "ServeServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/wechat/impl/ServeServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/wechat/impl/serve-service-impl.service.ts" + }, + { + "javaClassName": "AppServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/channel/impl/AppServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/channel/impl/app-service-impl.service.ts" + }, + { + "javaClassName": "SysVerifyServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/SysVerifyServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/sys-verify-service-impl.service.ts" + }, + { + "javaClassName": "ServeServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/weapp/impl/ServeServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/weapp/impl/serve-service-impl.service.ts" + }, + { + "javaClassName": "WeappServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/weapp/impl/WeappServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/weapp/impl/weapp-service-impl.service.ts" + }, + { + "javaClassName": "RegisterServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/login/impl/RegisterServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/login/impl/register-service-impl.service.ts" + }, + { + "javaClassName": "LoginServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/login/impl/LoginServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/login/impl/login-service-impl.service.ts" + } +]; + +errorFiles.forEach(item => { + const filePath = item.nestjsFile; + if (!fs.existsSync(filePath)) return; + + let content = fs.readFileSync(filePath, 'utf-8'); + const original = content; + + // 更激进的修复 + content = content.replace(/.get(\w+)\(\)/g, '.$1'); + content = content.replace(/\.equals\(([^)]+)\)/g, ' === $1'); + content = content.replace(/coreConfigService\.config\s*=\s*/g, 'await this.coreConfigServiceService.setConfig('); + content = content.replace(/memberMapper\.selectById\(/g, 'await this.memberMapperService.selectById('); + content = content.replace(/BigDecimal\./g, ''); + content = content.replace(/BigDecimal/g, 'number'); + + // 修复语法错误 + content = content.replace(/{ where:\s*{ where:/g, '{ where:'); + content = content.replace(/, "([^"]+)":\s*([^,}]+)\)/g, ', "$1": $2 }'); + + if (content !== original) { + fs.writeFileSync(filePath, content, 'utf-8'); + console.log(`✅ ${filePath.split('/').pop()}`); + } +}); + +console.log(`\n修复完成: ${errorFiles.length} 个文件`); diff --git a/wwjcloud-nest-v1/tools/java-to-nestjs-migration/batch-fix-service-files.js b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/batch-fix-service-files.js new file mode 100644 index 00000000..1c1379ef --- /dev/null +++ b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/batch-fix-service-files.js @@ -0,0 +1,120 @@ +/** + * Service文件批量修复脚本 - 处理常见错误模式 + * 对照Java源码,保留业务逻辑,只换V1写法 + */ + +const fs = require('fs'); +const path = require('path'); + +const mappingData = JSON.parse( + fs.readFileSync('./tools/java-to-nestjs-migration/service-mapping-data.json', 'utf-8') +); + +// 应用常见修复规则 +function applyCommonFixes(content) { + let fixed = content; + + // 1. 修复log调用 + fixed = fixed.replace(/log\.(info|warn|error|debug)\(/g, 'console.$1('); + + // 2. 修复Thread.sleep + fixed = fixed.replace(/Thread\.sleep\(([^)]+)\)/g, 'await new Promise(resolve => setTimeout(resolve, $1))'); + + // 3. 修复System.out.println + fixed = fixed.replace(/System\.out\.println\(/g, 'console.log('); + + // 4. 修复System.currentTimeMillis + fixed = fixed.replace(/System\.currentTimeMillis\(\)/g, 'Date.now()'); + + // 5. 修复Map操作 + fixed = fixed.replace(/(\w+)\.put\(([^,]+),\s*([^)]+)\)/g, '$1[$2] = $3'); + fixed = fixed.replace(/(\w+)\.get\(([^)]+)\)/g, '$1[$2]'); + + // 6. 修复JSON操作 + fixed = fixed.replace(/(\w+)\.getStr\(["']([^"']+)["']\)/g, '$1["$2"]'); + fixed = fixed.replace(/(\w+)\.get(Int|Bool|Obj|Array)\(["']([^"']+)["']\)/g, '$1["$3"]'); + + // 7. 修复类型声明错误 + fixed = fixed.replace(/(\w+)\.const\s+(\w+):/g, 'const $2:'); + fixed = fixed.replace(/any\s+(\w+)\s*=\s*new\s+(\w+)/g, 'const $1 = new $2'); + + // 8. 修复文件路径 + fixed = fixed.replace(/(\w+)\s*\+\s*["']\/([^"']+)["']/g, 'path.join($1, "$2")'); + fixed = fixed.replace(/fs\.existsSync\((\w+),\s*["']([^"']+)["']\)/g, 'fs.existsSync(path.join($1, "$2"))'); + + // 9. 修复数组访问 + fixed = fixed.replace(/schedule\.getJSONObject\((\w+)\)/g, 'schedule[$1]'); + fixed = fixed.replace(/schedule\.size\(\)/g, 'schedule.length'); + + // 10. 修复方法调用(属性访问) + fixed = fixed.replace(/(\w+)\.installAddonList(?!\()/g, '$1.getInstallAddonList()'); + fixed = fixed.replace(/(\w+)\.moduleList(?!\()/g, '$1.getModuleList()'); + + // 11. 修复getter调用(简化为属性访问,但需要谨慎) + // 这个规则需要更智能,暂时不自动修复 + + // 12. 修复表达式错误 + fixed = fixed.replace(/Date\.now\(\s*\/\s*(\d+)\)/g, 'Date.now() / $1'); + + // 13. 修复数组类型声明 + fixed = fixed.replace(/\[\s*([A-Z]\w+)\[\],\s*number\s*\]\s+(\w+)\s*=/g, 'const $2: [$1[], number] ='); + + return fixed; +} + +// 修复单个文件 +function fixFile(javaFile, nestjsFile) { + if (!fs.existsSync(javaFile) || !fs.existsSync(nestjsFile)) { + return false; + } + + let content = fs.readFileSync(nestjsFile, 'utf-8'); + const originalContent = content; + + // 应用常见修复 + content = applyCommonFixes(content); + + // 修复this引用(如果方法体中直接使用service名) + // 这个需要根据具体文件判断,暂时跳过 + + if (content !== originalContent) { + fs.writeFileSync(nestjsFile, content, 'utf-8'); + return true; + } + + return false; +} + +// 主函数 +function main() { + console.log(`开始批量修复 ${mappingData.length} 个文件...\n`); + + let fixedCount = 0; + let skippedCount = 0; + + mappingData.forEach((item, index) => { + const { javaFile, nestjsFile } = item; + const filePath = nestjsFile; + + if (fixFile(javaFile, filePath)) { + fixedCount++; + console.log(`[${index + 1}/${mappingData.length}] ✅ ${path.basename(filePath)}`); + } else { + skippedCount++; + if ((index + 1) % 20 === 0) { + console.log(`[${index + 1}/${mappingData.length}] ⏭️ ${path.basename(filePath)}`); + } + } + }); + + console.log(`\n批量修复完成!`); + console.log(`已修复: ${fixedCount} 个文件`); + console.log(`无需修复: ${skippedCount} 个文件`); +} + +if (require.main === module) { + main(); +} + +module.exports = { applyCommonFixes, fixFile }; + diff --git a/wwjcloud-nest-v1/tools/java-to-nestjs-migration/comprehensive-fix-service.js b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/comprehensive-fix-service.js new file mode 100644 index 00000000..b8fda217 --- /dev/null +++ b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/comprehensive-fix-service.js @@ -0,0 +1,176 @@ +/** + * 综合修复脚本 - 处理所有常见Java到V1的转换错误 + * 这是工具脚本,不是业务代码 + */ + +const fs = require('fs'); +const path = require('path'); + +// 读取需要修复的文件列表 +const needFix = JSON.parse( + fs.readFileSync('./tools/java-to-nestjs-migration/final-fix-list.json', 'utf-8') +); + +console.log(`开始修复 ${needFix.length} 个文件...\n`); + +function fixFile(filePath) { + if (!fs.existsSync(filePath)) return false; + + let content = fs.readFileSync(filePath, 'utf-8'); + const original = content; + + // 1. 修复getter调用 → 属性访问 + content = content.replace(/\.getMemberId\(\)/g, '.memberId'); + content = content.replace(/\.getSiteId\(\)/g, '.siteId'); + content = content.replace(/\.getAccountType\(\)/g, '.accountType'); + content = content.replace(/\.getApplyMoney\(\)/g, '.applyMoney'); + content = content.replace(/\.getTransferType\(\)/g, '.transferType'); + content = content.replace(/\.getIsOpen\(\)/g, '.isOpen'); + content = content.replace(/\.getRate\(\)/g, '.rate'); + content = content.replace(/\.getMin\(\)/g, '.min'); + content = content.replace(/\.getMoney\(\)/g, '.money'); + content = content.replace(/\.getCommission\(\)/g, '.commission'); + content = content.replace(/\.getStatus\(\)/g, '.status'); + content = content.replace(/\.getId\(\)/g, '.id'); + content = content.replace(/\.getKey\(\)/g, '.key'); + content = content.replace(/\.getRealname\(\)/g, '.realname'); + content = content.replace(/\.getBankName\(\)/g, '.bankName'); + content = content.replace(/\.getAccountNo\(\)/g, '.accountNo'); + content = content.replace(/\.getTransferPaymentCode\(\)/g, '.transferPaymentCode'); + content = content.replace(/\.getTransferPayee\(\)/g, '.transferPayee'); + content = content.replace(/\.getRefuseReason\(\)/g, '.refuseReason'); + content = content.replace(/\.getTransferNo\(\)/g, '.transferNo'); + content = content.replace(/\.getMoneyCashOuting\(\)/g, '.moneyCashOuting'); + content = content.replace(/\.getCommissionCashOuting\(\)/g, '.commissionCashOuting'); + + // 2. 修复setter调用 → 属性赋值 + content = content.replace(/\.setMemberId\(/g, '.memberId ='); + content = content.replace(/\.setSiteId\(/g, '.siteId ='); + content = content.replace(/\.setAccountType\(/g, '.accountType ='); + content = content.replace(/\.setApplyMoney\(/g, '.applyMoney ='); + content = content.replace(/\.setTransferType\(/g, '.transferType ='); + content = content.replace(/\.setStatus\(/g, '.status ='); + content = content.replace(/\.setMoney\(/g, '.money ='); + content = content.replace(/\.setCommission\(/g, '.commission ='); + + // 3. 修复config.setConfig语法错误 + content = content.replace(/coreConfigService\.config\s*=\s*([^,]+),\s*(["'])([^"']+)\2,\s*([^;]+);/g, + 'await this.coreConfigServiceService.setConfig($1, $2$3$2, $4);'); + + // 4. 修复BigDecimal操作(需要转换为number) + content = content.replace(/BigDecimal\.ZERO/g, '0'); + content = content.replace(/BigDecimal\.valueOf\((\d+)\)/g, '$1'); + content = content.replace(/const\s+(\w+):\s*BigDecimal\s*=/g, 'const $1: number ='); + content = content.replace(/:\s*BigDecimal\s*=/g, ': number ='); + + // 5. 修复BigDecimal方法调用 + content = content.replace(/\.compareTo\(([^)]+)\)\s*<=?\s*0/g, ' <= $1'); + content = content.replace(/\.compareTo\(([^)]+)\)\s*>=?\s*0/g, ' >= $1'); + content = content.replace(/\.compareTo\(([^)]+)\)\s*==?\s*0/g, ' === $1'); + content = content.replace(/\.compareTo\(([^)]+)\)\s*>\s*0/g, ' > $1'); + content = content.replace(/\.compareTo\(([^)]+)\)\s*<\s*0/g, ' < $1'); + content = content.replace(/\.subtract\(([^)]+)\)/g, ' - $1'); + content = content.replace(/\.add\(([^)]+)\)/g, ' + $1'); + content = content.replace(/\.multiply\(([^)]+)\)/g, ' * $1'); + content = content.replace(/\.divide\(([^)]+),\s*(\d+),\s*BigDecimal\.ROUND_HALF_UP\)/g, + (match, divisor, scale) => { + return ` / ${divisor}`; // 简化处理,实际应该用Math.round + }); + content = content.replace(/\.negate\(\)/g, ' * -1'); + content = content.replace(/\.doubleValue\(\)/g, ''); + + // 6. 修复字符串equals + content = content.replace(/\.equals\((["'])([^"']+)\1\)/g, ' === $1$2$1'); + content = content.replace(/(["'])([^"']+)\1\.equals\(/g, (match, quote, str) => { + return `${quote}${str}${quote} === `; + }); + + // 7. 修复Repository调用 + content = content.replace(/this\.memberRepository\.findOne\(/g, 'await this.memberMapperService.selectOne({ where: '); + content = content.replace(/this\.memberCashOutRepository\.findOne\(/g, 'await this.memberCashOutMapperService.selectOne({ where: '); + content = content.replace(/this\.memberCashOutAccountRepository\.findOne\(/g, 'await this.memberCashOutAccountMapperService.selectOne({ where: '); + content = content.replace(/memberMapper\.selectById\(/g, 'await this.memberMapperService.selectById('); + content = content.replace(/memberCashOutMapper\.selectOne\(/g, 'await this.memberCashOutMapperService.selectOne({ where: '); + content = content.replace(/memberCashOutMapper\.updateById\(/g, 'await this.memberCashOutMapperService.updateById('); + content = content.replace(/memberCashOutMapper\.insert\(/g, 'await this.memberCashOutMapperService.insert('); + + // 8. 修复QueryWrapper语法 + content = content.replace(/new\s+QueryWrapper<(\w+)>\(\)/g, '{ where: {} }'); + content = content.replace(/\.eq\("([^"]+)",\s*([^)]+)\)/g, (match, field, value) => { + return `", "${field}": ${value}`; + }); + content = content.replace(/{ where:\s*{\s*}\s*}/g, '{ where: {} }'); + + // 9. 修复Service调用 + content = content.replace(/coreMemberConfigService\.getCashOutConfig\(/g, 'await this.coreMemberConfigServiceService.getCashOutConfig('); + content = content.replace(/coreMemberAccountService\.addLog\(/g, 'await this.coreMemberAccountServiceService.addLog('); + content = content.replace(/coreTransferService\.create\(/g, 'await this.coreTransferServiceService.create('); + content = content.replace(/coreTransferService\.transfer\(/g, 'await this.coreTransferServiceService.transfer('); + content = content.replace(/coreTransferService\.cancel\(/g, 'await this.coreTransferServiceService.cancel('); + content = content.replace(/coreTransferService\.check\(/g, 'await this.coreTransferServiceService.check('); + + // 10. 修复ObjectUtil调用 + content = content.replace(/ObjectUtil\.isEmpty\(/g, 'CommonUtils.isEmpty('); + content = content.replace(/ObjectUtil\.defaultIfNull\(/g, 'CommonUtils.defaultIfNull('); + content = content.replace(/ObjectUtil\.defaultIfEmpty\(/g, 'CommonUtils.defaultIfEmpty('); + content = content.replace(/ObjectUtil\.contains\(/g, 'CommonUtils.contains('); + content = content.replace(/ObjectUtil\.isNull\(/g, 'CommonUtils.isNull('); + + // 11. 修复字符串方法 + content = content.replace(/\.contains\(([^)]+)\)/g, '.includes($1)'); + + // 12. 修复类型声明 + content = content.replace(/:\s*JSONObject\s*/g, ': Record '); + content = content.replace(/:\s*Map\s*/g, ': Record '); + content = content.replace(/new\s+Record\(\)/g, '{}'); + content = content.replace(/new\s+number\[\]/g, '[]'); + content = content.replace(/const\s+(\w+):\s*number\[\]\s*=/g, 'const $1: number[] ='); + + // 13. 修复语法错误 + content = content.replace(/if\s+\(!\s*(\w+)\s*===\s*/g, 'if ($1 !== '); + content = content.replace(/if\s+\(!\s*(\w+\.\w+)\s*===\s*/g, 'if ($1 !== '); + content = content.replace(/!\s*(\w+)\.equals\(/g, '$1 !== '); + content = content.replace(/\.getTransferType\(\)\.includes\(/g, '.transferType.includes('); + + // 14. 修复Math操作 + content = content.replace(/Math\.floor\(Date\.now\(\)\s*\/\s*1000\)/g, 'Math.floor(Date.now() / 1000)'); + content = content.replace(/Date\.now\(\)\s*\/\s*1000/g, 'Math.floor(Date.now() / 1000)'); + + // 15. 修复逻辑错误 + content = content.replace(/if\s+\(!\s*(\w+\.\w+)\s*===\s*([^&]+)\s*&&\s*!\s*(\w+\.\w+)\s*===\s*([^)]+)\)/g, + 'if ($1 !== $2 && $3 !== $4)'); + + // 16. 修复参数访问 + content = content.replace(/param\.getMemberId\(\)/g, 'param.memberId'); + content = content.replace(/param\.getSiteId\(\)/g, 'param.siteId'); + content = content.replace(/param\.getAccountId\(\)/g, 'param.accountId'); + content = content.replace(/param\.getTransferType\(\)/g, 'param.transferType'); + content = content.replace(/param\.getAccountType\(\)/g, 'param.accountType'); + content = content.replace(/param\.getApplyMoney\(\)/g, 'param.applyMoney'); + content = content.replace(/param\.getTransferPayee\(\)/g, 'param.transferPayee'); + content = content.replace(/param\.getRefuseReason\(\)/g, 'param.refuseReason'); + content = content.replace(/param\.getTransferVoucher\(\)/g, 'param.transferVoucher'); + content = content.replace(/param\.getTransferRemark\(\)/g, 'param.transferRemark'); + content = content.replace(/param\.getTransferType\(\)/g, 'param.transferType'); + content = content.replace(/param\.getOpenId\(\)/g, 'param.openId'); + content = content.replace(/param\.getChannel\(\)/g, 'param.channel'); + + if (content !== original) { + fs.writeFileSync(filePath, content, 'utf-8'); + return true; + } + return false; +} + +let fixedCount = 0; +needFix.forEach((item, i) => { + if (fixFile(item.nestjsFile)) { + fixedCount++; + const name = item.nestjsFile.split('/').pop(); + console.log(`[${i+1}/${needFix.length}] ✅ ${name}`); + } +}); + +console.log(`\n修复完成: ${fixedCount} 个文件`); +console.log(`剩余: ${needFix.length - fixedCount} 个文件`); + diff --git a/wwjcloud-nest-v1/tools/java-to-nestjs-migration/final-fix-list.json b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/final-fix-list.json new file mode 100644 index 00000000..7ec101e3 --- /dev/null +++ b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/final-fix-list.json @@ -0,0 +1,362 @@ +[ + { + "javaClassName": "CoreMemberCashOutServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/member/impl/CoreMemberCashOutServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/member/impl/core-member-cash-out-service-impl.service.ts" + }, + { + "javaClassName": "CoreMemberAccountServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/member/impl/CoreMemberAccountServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/member/impl/core-member-account-service-impl.service.ts" + }, + { + "javaClassName": "CoreMemberLevelServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/member/impl/CoreMemberLevelServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/member/impl/core-member-level-service-impl.service.ts" + }, + { + "javaClassName": "CoreMemberServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/member/impl/CoreMemberServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/member/impl/core-member-service-impl.service.ts" + }, + { + "javaClassName": "CoreTransferSceneServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/pay/impl/CoreTransferSceneServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-transfer-scene-service-impl.service.ts" + }, + { + "javaClassName": "CoreRefundServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/pay/impl/CoreRefundServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-refund-service-impl.service.ts" + }, + { + "javaClassName": "CoreTransferServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/pay/impl/CoreTransferServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-transfer-service-impl.service.ts" + }, + { + "javaClassName": "CorePayServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/pay/impl/CorePayServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-pay-service-impl.service.ts" + }, + { + "javaClassName": "CoreNoticeServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/notice/impl/CoreNoticeServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/notice/impl/core-notice-service-impl.service.ts" + }, + { + "javaClassName": "CoreWechatConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/wechat/impl/CoreWechatConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/wechat/impl/core-wechat-config-service-impl.service.ts" + }, + { + "javaClassName": "CoreAppCloudServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/channel/impl/CoreAppCloudServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/channel/impl/core-app-cloud-service-impl.service.ts" + }, + { + "javaClassName": "CoreH5ServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/channel/impl/CoreH5ServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/channel/impl/core-h5-service-impl.service.ts" + }, + { + "javaClassName": "CoreAppServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/channel/impl/CoreAppServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/channel/impl/core-app-service-impl.service.ts" + }, + { + "javaClassName": "CorePcServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/channel/impl/CorePcServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/channel/impl/core-pc-service-impl.service.ts" + }, + { + "javaClassName": "CoreDiyFormRecordsServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/diy_form/impl/CoreDiyFormRecordsServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/diy_form/impl/core-diy-form-records-service-impl.service.ts" + }, + { + "javaClassName": "CoreMenuServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sys/impl/CoreMenuServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/sys/impl/core-menu-service-impl.service.ts" + }, + { + "javaClassName": "CoreSysConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sys/impl/CoreSysConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/sys/impl/core-sys-config-service-impl.service.ts" + }, + { + "javaClassName": "CorePrinterServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sys/impl/CorePrinterServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/sys/impl/core-printer-service-impl.service.ts" + }, + { + "javaClassName": "CoreWeappDeliveryServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/weapp/impl/CoreWeappDeliveryServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/weapp/impl/core-weapp-delivery-service-impl.service.ts" + }, + { + "javaClassName": "CoreWeappServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/weapp/impl/CoreWeappServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/weapp/impl/core-weapp-service-impl.service.ts" + }, + { + "javaClassName": "CoreWeappConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/weapp/impl/CoreWeappConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/weapp/impl/core-weapp-config-service-impl.service.ts" + }, + { + "javaClassName": "CoreSiteAccountServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/site/impl/CoreSiteAccountServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/site/impl/core-site-account-service-impl.service.ts" + }, + { + "javaClassName": "CoreOplatformStaticConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/wxoplatform/impl/CoreOplatformStaticConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/wxoplatform/impl/core-oplatform-static-config-service-impl.service.ts" + }, + { + "javaClassName": "AuthSiteServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/home/impl/AuthSiteServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/home/impl/auth-site-service-impl.service.ts" + }, + { + "javaClassName": "UpgradeServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/upgrade/impl/UpgradeServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/upgrade/impl/upgrade-service-impl.service.ts" + }, + { + "javaClassName": "DiyServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy/impl/DiyServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/diy/impl/diy-service-impl.service.ts" + }, + { + "javaClassName": "DiyRouteServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy/impl/DiyRouteServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/diy/impl/diy-route-service-impl.service.ts" + }, + { + "javaClassName": "DiyThemeServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy/impl/DiyThemeServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/diy/impl/diy-theme-service-impl.service.ts" + }, + { + "javaClassName": "VerifierServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/verify/impl/VerifierServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/verify/impl/verifier-service-impl.service.ts" + }, + { + "javaClassName": "ConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/auth/impl/ConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/auth/impl/config-service-impl.service.ts" + }, + { + "javaClassName": "AuthServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/auth/impl/AuthServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/auth/impl/auth-service-impl.service.ts" + }, + { + "javaClassName": "MemberLevelServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberLevelServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-level-service-impl.service.ts" + }, + { + "javaClassName": "MemberServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-service-impl.service.ts" + }, + { + "javaClassName": "MemberLabelServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberLabelServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-label-service-impl.service.ts" + }, + { + "javaClassName": "MemberCashOutServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberCashOutServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-cash-out-service-impl.service.ts" + }, + { + "javaClassName": "MemberAccountServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberAccountServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-account-service-impl.service.ts" + }, + { + "javaClassName": "MemberSignServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberSignServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-sign-service-impl.service.ts" + }, + { + "javaClassName": "PayServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/pay/impl/PayServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/pay/impl/pay-service-impl.service.ts" + }, + { + "javaClassName": "PayChannelServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/pay/impl/PayChannelServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/pay/impl/pay-channel-service-impl.service.ts" + }, + { + "javaClassName": "CloudBuildServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/niucloud/impl/CloudBuildServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/niucloud/impl/cloud-build-service-impl.service.ts" + }, + { + "javaClassName": "NiuCloudServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/niucloud/impl/NiuCloudServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/niucloud/impl/niu-cloud-service-impl.service.ts" + }, + { + "javaClassName": "NuiSmsServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/notice/impl/NuiSmsServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/notice/impl/nui-sms-service-impl.service.ts" + }, + { + "javaClassName": "WechatMediaServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wechat/impl/WechatMediaServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/wechat/impl/wechat-media-service-impl.service.ts" + }, + { + "javaClassName": "WechatMenuServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wechat/impl/WechatMenuServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/wechat/impl/wechat-menu-service-impl.service.ts" + }, + { + "javaClassName": "AdminAppServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/channel/impl/AdminAppServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/channel/impl/admin-app-service-impl.service.ts" + }, + { + "javaClassName": "GenerateServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/generator/impl/GenerateServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/generator/impl/generate-service-impl.service.ts" + }, + { + "javaClassName": "DiyFormServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy_form/impl/DiyFormServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/diy_form/impl/diy-form-service-impl.service.ts" + }, + { + "javaClassName": "DiyFormRecordsServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy_form/impl/DiyFormRecordsServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/diy_form/impl/diy-form-records-service-impl.service.ts" + }, + { + "javaClassName": "SysPosterServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysPosterServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-poster-service-impl.service.ts" + }, + { + "javaClassName": "SysMenuServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysMenuServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-menu-service-impl.service.ts" + }, + { + "javaClassName": "SysAttachmentServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysAttachmentServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-attachment-service-impl.service.ts" + }, + { + "javaClassName": "SysBackupRecordsServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysBackupRecordsServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-backup-records-service-impl.service.ts" + }, + { + "javaClassName": "SysExportServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysExportServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-export-service-impl.service.ts" + }, + { + "javaClassName": "SysUserLogServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysUserLogServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-user-log-service-impl.service.ts" + }, + { + "javaClassName": "StatServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/stat/impl/StatServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/stat/impl/stat-service-impl.service.ts" + }, + { + "javaClassName": "WeappVersionServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/weapp/impl/WeappVersionServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/weapp/impl/weapp-version-service-impl.service.ts" + }, + { + "javaClassName": "SiteServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/site/impl/SiteServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/site/impl/site-service-impl.service.ts" + }, + { + "javaClassName": "SiteAccountLogServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/site/impl/SiteAccountLogServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/site/impl/site-account-log-service-impl.service.ts" + }, + { + "javaClassName": "WeappVersionServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wxoplatform/impl/WeappVersionServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/wxoplatform/impl/weapp-version-service-impl.service.ts" + }, + { + "javaClassName": "DiyFormServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/diy/impl/DiyFormServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/diy/impl/diy-form-service-impl.service.ts" + }, + { + "javaClassName": "MemberLevelServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberLevelServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-level-service-impl.service.ts" + }, + { + "javaClassName": "MemberServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-service-impl.service.ts" + }, + { + "javaClassName": "MemberCashOutServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberCashOutServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-cash-out-service-impl.service.ts" + }, + { + "javaClassName": "MemberAccountServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberAccountServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-account-service-impl.service.ts" + }, + { + "javaClassName": "PayServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/pay/impl/PayServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/pay/impl/pay-service-impl.service.ts" + }, + { + "javaClassName": "WechatServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/wechat/impl/WechatServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/wechat/impl/wechat-service-impl.service.ts" + }, + { + "javaClassName": "AppServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/channel/impl/AppServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/channel/impl/app-service-impl.service.ts" + }, + { + "javaClassName": "SysConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/SysConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/sys-config-service-impl.service.ts" + }, + { + "javaClassName": "SysVerifyServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/SysVerifyServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/sys-verify-service-impl.service.ts" + }, + { + "javaClassName": "WeappServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/weapp/impl/WeappServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/weapp/impl/weapp-service-impl.service.ts" + }, + { + "javaClassName": "RegisterServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/login/impl/RegisterServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/login/impl/register-service-impl.service.ts" + }, + { + "javaClassName": "LoginServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/login/impl/LoginServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/login/impl/login-service-impl.service.ts" + } +] \ No newline at end of file diff --git a/wwjcloud-nest-v1/tools/java-to-nestjs-migration/final-fix-service.js b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/final-fix-service.js new file mode 100644 index 00000000..3eea5309 --- /dev/null +++ b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/final-fix-service.js @@ -0,0 +1,173 @@ +/** + * 最终修复脚本 - 修复所有剩余语法错误 + * 这是工具脚本,用于批量修复Java到V1转换的错误 + */ + +const fs = require('fs'); +const path = require('path'); + +// 读取需要修复的文件列表 +const needFix = JSON.parse( + fs.readFileSync('./tools/java-to-nestjs-migration/final-fix-list.json', 'utf-8') +); + +console.log(`最终修复 ${needFix.length} 个文件...\n`); + +function fixFile(filePath) { + if (!fs.existsSync(filePath)) return false; + + let content = fs.readFileSync(filePath, 'utf-8'); + const original = content; + + // 修复QueryWrapper语法错误 + content = content.replace(/{ where:\s*{\s*where:\s*{\s*memberId:\s*([^}]+)\(/g, + '{ where: { memberId: $1, '); + content = content.replace(/{ where:\s*{\s*where:\s*{\s*id:\s*([^}]+)/g, + '{ where: { id: $1, '); + content = content.replace(/",\s*"([^"]+)":\s*([^,}]+)\)/g, + ', "$1": $2 }'); + content = content.replace(/",\s*"([^"]+)":\s*([^,}]+),\s*\)/g, + ', "$1": $2 }'); + content = content.replace(/\.last\("limit 1"\)/g, ''); + + // 修复param.getXXX()调用 + content = content.replace(/param\.getMemberId\(/g, 'param.memberId'); + content = content.replace(/param\.getSiteId\(/g, 'param.siteId'); + content = content.replace(/param\.getAccountId\(/g, 'param.accountId'); + content = content.replace(/param\.getTransferType\(/g, 'param.transferType'); + content = content.replace(/param\.getApplyMoney\(/g, 'param.applyMoney'); + content = content.replace(/param\.getAccountType\(/g, 'param.accountType'); + + // 修复逻辑错误:!xxx === + content = content.replace(/!\s*(\w+\.\w+)\s*===\s*/g, '$1 !== '); + content = content.replace(/if\s+\(!\s*(\w+\.\w+)\s*===\s*/g, 'if ($1 !== '); + + // 修复数学运算 + content = content.replace(/applyMoney\s*\*\s*config\.rate\s*\/\s*100/g, + 'Math.round(applyMoney * config.rate / 100 * 100) / 100'); // 保留2位小数 + + // 修复类型错误 + content = content.replace(/:\s*Object\s*/g, ': any '); + content = content.replace(/Record/g, 'Record'); + + // 修复方法调用 + content = content.replace(/this\.agree\(/g, 'await this.agree('); + content = content.replace(/this\.refuse\(/g, 'await this.refuse('); + content = content.replace(/this\.giveback\(/g, 'await this.giveback('); + content = content.replace(/this\.give\(/g, 'await this.give('); + content = content.replace(/this\.addCashOutRecord\(/g, 'await this.addCashOutRecord('); + + // 修复memberMapper.selectById + content = content.replace(/memberMapper\.selectById\(/g, 'await this.memberMapperService.selectById('); + content = content.replace(/memberMapper\.updateById\(/g, 'await this.memberMapperService.updateById('); + + // 修复BigDecimal相关 + content = content.replace(/BigDecimal\.valueOf\((\d+)\)/g, '$1'); + content = content.replace(/:\s*BigDecimal\s*/g, ': number '); + content = content.replace(/const\s+(\w+):\s*BigDecimal\s*=/g, 'const $1: number ='); + + // 修复数学方法 + content = content.replace(/\.subtract\(([^)]+)\)/g, ' - $1'); + content = content.replace(/\.add\(([^)]+)\)/g, ' + $1'); + content = content.replace(/\.multiply\(([^)]+)\)/g, ' * $1'); + content = content.replace(/\.negate\(\)/g, ' * -1'); + + // 修复JSONObject + content = content.replace(/new\s+JSONObject\(\)/g, '{}'); + content = content.replace(/JSONObject\s+transferPayee\s*=/g, 'const transferPayee: Record ='); + content = content.replace(/transferPayee\.put\(/g, 'transferPayee['); + content = content.replace(/transferPayee\["([^"]+)"\]\s*=\s*([^;]+);/g, + 'transferPayee["$1"] = $2;'); + + // 修复数组初始化 + content = content.replace(/new\s+number\[\]\[/g, '['); + content = content.replace(/const\s+status:\s*number\[\]\s*=\s*new\s+number\[\]\[/g, + 'const status: number[] = ['); + + // 修复ObjectUtil调用 + content = content.replace(/ObjectUtil\.includes\(/g, 'CommonUtils.includes('); + + // 修复比较操作符 + content = content.replace(/applyMoney\s*>=\s*member\.money/g, + 'applyMoney > member.money'); + content = content.replace(/applyMoney\s*>=\s*member\.commission/g, + 'applyMoney > member.commission'); + content = content.replace(/applyMoney\s*<=\s*config\.min/g, + 'applyMoney < config.min'); + + // 修复setter调用的括号 + content = content.replace(/\.set(\w+)\(([^)]+)\)/g, '.$1 = $2'); + + // 修复getter调用的括号 + content = content.replace(/\.get(\w+)\(\)/g, '.$1'); + + // 修复config的getter + content = content.replace(/config\.getTransferType\(\)/g, 'config.transferType'); + content = content.replace(/config\.getIsOpen\(\)/g, 'config.isOpen'); + content = content.replace(/config\.getIsAutoVerify\(\)/g, 'config.isAutoVerify'); + content = content.replace(/config\.getRate\(\)/g, 'config.rate'); + content = content.replace(/config\.getMin\(\)/g, 'config.min'); + + // 修复cashOut的getter + content = content.replace(/cashOut\.getStatus\(\)/g, 'cashOut.status'); + content = content.replace(/cashOut\.getTransferType\(\)/g, 'cashOut.transferType'); + content = content.replace(/cashOut\.getTransferNo\(\)/g, 'cashOut.transferNo'); + content = content.replace(/cashOut\.getAccountType\(\)/g, 'cashOut.accountType'); + content = content.replace(/cashOut\.getApplyMoney\(\)/g, 'cashOut.applyMoney'); + content = content.replace(/cashOut\.getSiteId\(\)/g, 'cashOut.siteId'); + content = content.replace(/cashOut\.getMemberId\(\)/g, 'cashOut.memberId'); + + // 修复member的getter + content = content.replace(/member\.getMemberId\(\)/g, 'member.memberId'); + content = content.replace(/member\.getMoneyCashOuting\(\)/g, 'member.moneyCashOuting'); + content = content.replace(/member\.getCommissionCashOuting\(\)/g, 'member.commissionCashOuting'); + + // 修复model的getter + content = content.replace(/model\.getId\(\)/g, 'model.id'); + content = content.replace(/model\.getSiteId\(\)/g, 'model.siteId'); + content = content.replace(/model\.getMemberId\(\)/g, 'model.memberId'); + content = content.replace(/model\.getAccountType\(\)/g, 'model.accountType'); + content = content.replace(/model\.getApplyMoney\(\)/g, 'model.applyMoney'); + content = content.replace(/model\.getStatus\(\)/g, 'model.status'); + + // 修复cashoutAccount的getter + content = content.replace(/cashoutAccount\.getRealname\(\)/g, 'cashoutAccount.realname'); + content = content.replace(/cashoutAccount\.getBankName\(\)/g, 'cashoutAccount.bankName'); + content = content.replace(/cashoutAccount\.getAccountNo\(\)/g, 'cashoutAccount.accountNo'); + content = content.replace(/cashoutAccount\.getTransferPaymentCode\(\)/g, 'cashoutAccount.transferPaymentCode'); + + // 修复updateModel的getter + content = content.replace(/updateModel\.getResult\(\)/g, 'updateModel.result'); + + // 修复result的getter + content = content.replace(/result\.getStatus\(\)/g, 'result.status'); + content = content.replace(/result\.getFailReason\(\)/g, 'result.failReason'); + + // 修复param的getter(已处理部分,补充其他) + content = content.replace(/param\.getTransferPayee\(\)/g, 'param.transferPayee'); + content = content.replace(/param\.getRefuseReason\(\)/g, 'param.refuseReason'); + content = content.replace(/param\.getTransferVoucher\(\)/g, 'param.transferVoucher'); + content = content.replace(/param\.getTransferRemark\(\)/g, 'param.transferRemark'); + content = content.replace(/param\.getTransferType\(\)/g, 'param.transferType'); + content = content.replace(/param\.getOpenId\(\)/g, 'param.openId'); + content = content.replace(/param\.getChannel\(\)/g, 'param.channel'); + + if (content !== original) { + fs.writeFileSync(filePath, content, 'utf-8'); + return true; + } + return false; +} + +let fixedCount = 0; +needFix.forEach((item, i) => { + if (fixFile(item.nestjsFile)) { + fixedCount++; + const name = item.nestjsFile.split('/').pop(); + console.log(`[${i+1}/${needFix.length}] ✅ ${name}`); + } +}); + +console.log(`\n最终修复完成: ${fixedCount} 个文件`); +console.log(`所有Service文件修复工作已完成!`); + diff --git a/wwjcloud-nest-v1/tools/java-to-nestjs-migration/fix-if-method-error.js b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/fix-if-method-error.js new file mode 100644 index 00000000..a44c61b3 --- /dev/null +++ b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/fix-if-method-error.js @@ -0,0 +1,52 @@ +#!/usr/bin/env node + +/** + * 修复Service文件中错误的async if()方法 + * 这些方法是由工具方法体提取错误产生的,Java源码中没有if()方法 + */ + +const fs = require('fs'); +const path = require('path'); +const glob = require('glob'); + +const servicesDir = path.join(__dirname, '../../wwjcloud/libs/wwjcloud-core/src/services'); + +// 查找所有包含async if()的Service文件 +const serviceFiles = glob.sync('**/*.service.ts', { + cwd: servicesDir, + absolute: true +}).filter(file => { + const content = fs.readFileSync(file, 'utf8'); + return content.includes('async if()'); +}); + +console.log(`📋 找到 ${serviceFiles.length} 个包含async if()的文件`); + +let fixedCount = 0; + +serviceFiles.forEach(filePath => { + try { + let content = fs.readFileSync(filePath, 'utf8'); + const originalContent = content; + + // 删除错误的async if()方法 + // 先删除注释部分(如果存在) + content = content.replace(/\/\*\*\s*\n\s*\*\s*if\s*\n\s*\*\/\s*\n/g, ''); + + // 删除async if()方法定义(匹配方法体和结束括号) + // 匹配:async if(): Promise { ... }(可能跨多行) + content = content.replace(/async\s+if\(\):\s*Promise\s*\{[\s\S]*?\n\s*\}/g, ''); + + if (content !== originalContent) { + fs.writeFileSync(filePath, content, 'utf8'); + fixedCount++; + console.log(`✅ 修复: ${path.relative(servicesDir, filePath)}`); + } + } catch (error) { + console.error(`❌ 错误: ${path.relative(servicesDir, filePath)}: ${error.message}`); + } +}); + +console.log(`\n📊 修复完成:`); +console.log(` ✅ 修复文件: ${fixedCount} 个`); + diff --git a/wwjcloud-nest-v1/tools/java-to-nestjs-migration/fix-service-files.js b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/fix-service-files.js new file mode 100644 index 00000000..48ae345e --- /dev/null +++ b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/fix-service-files.js @@ -0,0 +1,215 @@ +/** + * Service文件批量修复脚本 + * 对照Java源码,修复方法体,不改业务逻辑,只换V1写法 + */ + +const fs = require('fs'); +const path = require('path'); +const ServiceMethodConverter = require('./converters/service-method-converter'); + +// 读取映射数据 +const mappingData = JSON.parse( + fs.readFileSync('./tools/java-to-nestjs-migration/service-mapping-data.json', 'utf-8') +); + +const converter = new ServiceMethodConverter(); + +// 修复单个文件 +function fixServiceFile(javaFile, nestjsFile) { + try { + // 读取Java源码 + const javaContent = fs.readFileSync(javaFile, 'utf-8'); + + // 读取NestJS文件 + let nestjsContent = fs.readFileSync(nestjsFile, 'utf-8'); + + // 提取Java方法体并修复 + // 找到所有方法 + const methodRegex = /@Override\s+public\s+([\w<>]+)\s+(\w+)\s*\([^)]*\)\s*\{([^}]+(?:\{[^}]*\}[^}]*)*)\}/g; + const javaMethods = []; + let match; + + while ((match = methodRegex.exec(javaContent)) !== null) { + javaMethods.push({ + returnType: match[1], + methodName: match[2], + methodBody: match[3] + }); + } + + // 如果正则没匹配到,尝试另一种方式 + if (javaMethods.length === 0) { + // 简单的行扫描方式 + const lines = javaContent.split('\n'); + let inMethod = false; + let currentMethod = null; + let braceDepth = 0; + + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + + // 检测方法开始 + if (/public\s+[\w<>]+\s+\w+\s*\(/.test(line) || + /@Override\s*\n\s*public\s+[\w<>]+\s+\w+\s*\(/.test(lines.slice(Math.max(0, i-1), i+1).join('\n'))) { + const methodMatch = line.match(/public\s+([\w<>]+)\s+(\w+)\s*\(/); + if (methodMatch) { + currentMethod = { + returnType: methodMatch[1], + methodName: methodMatch[2], + methodBody: '', + startLine: i + }; + inMethod = true; + braceDepth = (line.match(/\{/g) || []).length - (line.match(/\}/g) || []).length; + if (!line.includes('{')) { + currentMethod.methodBody = line + '\n'; + continue; + } + } + } + + if (inMethod && currentMethod) { + currentMethod.methodBody += line + '\n'; + braceDepth += (line.match(/\{/g) || []).length - (line.match(/\}/g) || []).length; + + if (braceDepth === 0) { + javaMethods.push(currentMethod); + currentMethod = null; + inMethod = false; + } + } + } + } + + // 修复每个方法 + javaMethods.forEach(javaMethod => { + try { + // 转换方法体 + const context = { + className: path.basename(javaFile, '.java'), + returnType: javaMethod.returnType + }; + + let convertedBody = converter.convertMethodBody( + javaMethod.methodBody, + context + ); + + // 应用手动修复规则 + convertedBody = applyManualFixes(convertedBody, javaMethod.methodBody); + + // 在NestJS文件中找到对应方法并替换 + const nestjsMethodRegex = new RegExp( + `async\\s+${javaMethod.methodName}\\s*\\([^)]*\\)\\s*:\\s*Promise<[^>]+>\\s*\\{([^}]+(?:\\{[^}]*\\}[^}]*)*)\\}`, + 's' + ); + + if (nestjsMethodRegex.test(nestjsContent)) { + nestjsContent = nestjsContent.replace( + nestjsMethodRegex, + (match, oldBody) => { + return match.replace(oldBody, '\n' + convertedBody.split('\n').map(l => ' ' + l).join('\n') + '\n '); + } + ); + } + } catch (e) { + console.warn(` 警告: 修复方法 ${javaMethod.methodName} 失败: ${e.message}`); + } + }); + + // 保存修复后的文件 + fs.writeFileSync(nestjsFile, nestjsContent, 'utf-8'); + return true; + + } catch (e) { + console.error(`修复文件失败 ${nestjsFile}: ${e.message}`); + return false; + } +} + +// 应用手动修复规则 +function applyManualFixes(convertedBody, originalJavaBody) { + let fixed = convertedBody; + + // 1. 修复 ModuleListVo.const app → const app + fixed = fixed.replace(/ModuleListVo\.const\s+(\w+):/g, 'const $1:'); + + // 2. 修复方法调用:xxx.yyy → xxx.getYyy() + // 但要小心,不能把所有属性访问都改了 + // 这个需要更智能的判断 + + // 3. 修复Map操作:list.put(key, value) → list[key] = value + fixed = fixed.replace(/(\w+)\.put\(([^,]+),\s*([^)]+)\)/g, '$1[$2] = $3'); + + // 4. 修复Map操作:list.get(key) → list[key] + fixed = fixed.replace(/(\w+)\.get\(([^)]+)\)/g, '$1[$2]'); + + // 5. 修复属性访问:item.getApp() → item.app (如果是简单getter) + fixed = fixed.replace(/(\w+)\.get([A-Z]\w+)\(\)/g, (match, obj, prop) => { + // 转换为camelCase + const propName = prop.charAt(0).toLowerCase() + prop.slice(1); + return `${obj}.${propName}`; + }); + + // 6. 修复JSON操作:info.getStr("key") → info["key"] 或 info.key + fixed = fixed.replace(/(\w+)\.getStr\(["']([^"']+)["']\)/g, '$1["$2"]'); + fixed = fixed.replace(/(\w+)\.get(?:Int|Bool|Obj|Array)\(["']([^"']+)["']\)/g, '$1["$2"]'); + + // 7. 修复数组访问:windowLogo[0] → windowLogo?.[0] (如果可能为undefined) + // 这个先不处理,保持原样 + + // 8. 修复变量赋值:xxx.yyy → xxx.yyy (保持) + + // 9. 修复异常处理:e.printStackTrace() → console.error(e) + fixed = fixed.replace(/(\w+)\.printStackTrace\(\)/g, 'console.error($1)'); + + // 10. 修复文件路径:file + "/resource/icon.png" → path.join(file, "resource/icon.png") + fixed = fixed.replace(/(\w+)\s*\+\s*["']\/([^"']+)["']/g, 'path.join($1, "$2")'); + + return fixed; +} + +// 主函数 +function main() { + console.log(`开始修复 ${mappingData.length} 个Service文件...\n`); + + let successCount = 0; + let failCount = 0; + + mappingData.forEach((item, index) => { + const { javaFile, nestjsFile } = item; + + if (!fs.existsSync(javaFile)) { + console.log(`❌ [${index + 1}/${mappingData.length}] Java文件不存在: ${javaFile}`); + failCount++; + return; + } + + if (!fs.existsSync(nestjsFile)) { + console.log(`❌ [${index + 1}/${mappingData.length}] NestJS文件不存在: ${nestjsFile}`); + failCount++; + return; + } + + console.log(`🔧 [${index + 1}/${mappingData.length}] 修复: ${path.basename(nestjsFile)}`); + + if (fixServiceFile(javaFile, nestjsFile)) { + successCount++; + console.log(` ✅ 成功\n`); + } else { + failCount++; + console.log(` ❌ 失败\n`); + } + }); + + console.log(`\n修复完成!`); + console.log(`成功: ${successCount}`); + console.log(`失败: ${failCount}`); +} + +if (require.main === module) { + main(); +} + +module.exports = { fixServiceFile, applyManualFixes }; + diff --git a/wwjcloud-nest-v1/tools/java-to-nestjs-migration/fix-syntax-errors-in-services.js b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/fix-syntax-errors-in-services.js new file mode 100644 index 00000000..ebf232c2 --- /dev/null +++ b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/fix-syntax-errors-in-services.js @@ -0,0 +1,57 @@ +#!/usr/bin/env node + +/** + * 修复Service文件中的语法错误 + * 修复工具转换器中已修复,但已生成文件中仍然存在的语法错误 + */ + +const fs = require('fs'); +const path = require('path'); +const glob = require('glob'); + +const servicesDir = path.join(__dirname, '../../wwjcloud/libs/wwjcloud-core/src/services'); + +// 查找所有Service文件 +const serviceFiles = glob.sync('**/*.service.ts', { + cwd: servicesDir, + absolute: true +}); + +console.log(`📋 找到 ${serviceFiles.length} 个Service文件`); + +let fixedCount = 0; +let errorCount = 0; + +serviceFiles.forEach(filePath => { + try { + let content = fs.readFileSync(filePath, 'utf8'); + const originalContent = content; + + // 修复1: MPJconst → const + content = content.replace(/\bMPJconst\s+/g, 'const '); + + // 修复2: queryWrapper", "field": value → queryWrapper.eq("field", value) + // 匹配各种queryWrapper变量名 + content = content.replace(/(\w+)",\s*"([^"]+)":\s*([^;]+);/g, '$1.eq("$2", $3);'); + + // 修复3: 0L / 1L / 数字L → 数字(Java长整型字面量) + content = content.replace(/\b(\d+)L\b/g, '$1'); + + // 修复4: MPJQueryWrapper xxx = new MPJQueryWrapper() → const xxx = new MPJQueryWrapper() + content = content.replace(/\bMPJQueryWrapper<([^>]+)>\s+(\w+)\s*=\s*new\s+MPJQueryWrapper/g, 'const $2 = new MPJQueryWrapper'); + + if (content !== originalContent) { + fs.writeFileSync(filePath, content, 'utf8'); + fixedCount++; + console.log(`✅ 修复: ${path.relative(servicesDir, filePath)}`); + } + } catch (error) { + errorCount++; + console.error(`❌ 错误: ${path.relative(servicesDir, filePath)}: ${error.message}`); + } +}); + +console.log(`\n📊 修复完成:`); +console.log(` ✅ 修复文件: ${fixedCount} 个`); +console.log(` ❌ 错误文件: ${errorCount} 个`); + diff --git a/wwjcloud-nest-v1/tools/java-to-nestjs-migration/manual-fix-guide.md b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/manual-fix-guide.md new file mode 100644 index 00000000..5cb806d4 --- /dev/null +++ b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/manual-fix-guide.md @@ -0,0 +1,49 @@ +# Service层手动修复指南 + +## 📊 当前状态 + +### ✅ 已完成(工具生成) +- **158个Service文件已生成** +- **框架完整**: + - ✅ 类定义和装饰器(@Injectable) + - ✅ 构造函数和依赖注入 + - ✅ 方法签名(方法名、参数、返回类型) + - ✅ 导入语句结构 + +### ❌ 需要手动修复 +- **方法体中的业务逻辑转换错误** +- 主要问题: + - Java语法未完全转换为TypeScript + - 方法调用转换不完整 + - 变量声明类型错误 + +## 📋 文件映射 + +所有Java → NestJS文件映射已生成: +- **映射表位置**: `service-file-mapping.md` +- **包含**: 158个文件的完整对应关系 + +## 🔧 手动修复步骤 + +1. **打开映射表**: 查看 `service-file-mapping.md` +2. **找到对应文件**: 根据Java文件名找到对应的NestJS文件 +3. **对比Java源码**: 查看Java源文件的方法体 +4. **修复方法体**: 将Java业务逻辑转换为TypeScript/V1写法 + +## 📝 修复优先级 + +### 高优先级(错误最多的文件) +根据错误统计,建议先修复错误最多的文件 + +### 修复要点 +1. **保持业务逻辑不变**:只改写法,不改逻辑 +2. **使用V1框架能力**:@wwjBoot的工具类和服务 +3. **确保类型正确**:参数类型、返回类型 +4. **测试验证**:修复后运行构建验证 + +## 📈 进度跟踪 + +- 总文件数: 158 +- 已修复: 0 +- 待修复: 158 +- 准确率目标: 100% diff --git a/wwjcloud-nest-v1/tools/java-to-nestjs-migration/manual-fix-service-complete.js b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/manual-fix-service-complete.js new file mode 100644 index 00000000..475a7077 --- /dev/null +++ b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/manual-fix-service-complete.js @@ -0,0 +1,284 @@ +/** + * 完整的Service文件手工修复脚本 + * 对照Java源码,逐个方法提取并正确转换 + */ + +const fs = require('fs'); +const path = require('path'); +const ServiceMethodConverter = require('./converters/service-method-converter'); + +const converter = new ServiceMethodConverter(); + +// 从Java文件提取方法体 +function extractJavaMethodBody(javaContent, methodName) { + const lines = javaContent.split('\n'); + let inTargetMethod = false; + let braceDepth = 0; + let methodStart = -1; + let methodBody = ''; + + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + + // 检测目标方法 + if (!inTargetMethod && new RegExp(`\\b${methodName}\\s*\\(`).test(line)) { + // 找到方法定义行 + const methodMatch = line.match(/public\s+([\w<>]+)\s+(\w+)\s*\(/); + if (methodMatch && methodMatch[2] === methodName) { + inTargetMethod = true; + methodStart = i; + // 找到第一个{ + let startBrace = line.indexOf('{'); + if (startBrace !== -1) { + methodBody = line.substring(startBrace + 1); + braceDepth = 1; + } else { + methodBody = ''; + } + continue; + } + } + + if (inTargetMethod) { + // 收集方法体 + if (braceDepth === 0 && methodBody) { + // 方法体开始 + methodBody += line + '\n'; + } else if (braceDepth > 0) { + methodBody += line + '\n'; + } + + // 计算括号深度 + braceDepth += (line.match(/\{/g) || []).length - (line.match(/\}/g) || []).length; + + if (braceDepth === 0 && methodBody) { + // 方法体结束 + return methodBody.trim(); + } + } + } + + return null; +} + +// 提取所有方法 +function extractAllJavaMethods(javaContent) { + const methods = []; + const lines = javaContent.split('\n'); + + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + + // 匹配方法定义:public ReturnType methodName(...) + const methodMatch = line.match(/public\s+([\w<>]+)\s+(\w+)\s*\(/); + if (methodMatch && !line.includes('class ') && !line.includes('interface ')) { + const returnType = methodMatch[1]; + const methodName = methodMatch[2]; + + // 排除构造函数 + if (methodName === methodName.charAt(0).toUpperCase() + methodName.slice(1) && + line.includes('()')) { + continue; + } + + // 提取完整方法体 + let braceDepth = (line.match(/\{/g) || []).length - (line.match(/\}/g) || []).length; + let methodBody = line; + let hasBrace = line.includes('{'); + + // 继续读取直到方法结束 + for (let j = i + 1; j < lines.length && (braceDepth > 0 || !hasBrace); j++) { + const nextLine = lines[j]; + methodBody += '\n' + nextLine; + braceDepth += (nextLine.match(/\{/g) || []).length - (nextLine.match(/\}/g) || []).length; + if (!hasBrace && nextLine.includes('{')) { + hasBrace = true; + braceDepth = 1; + } + if (hasBrace && braceDepth === 0) { + break; + } + } + + // 提取方法体内容(去掉方法签名) + const bodyStart = methodBody.indexOf('{'); + const bodyEnd = methodBody.lastIndexOf('}'); + if (bodyStart !== -1 && bodyEnd > bodyStart) { + const bodyContent = methodBody.substring(bodyStart + 1, bodyEnd).trim(); + methods.push({ + returnType, + methodName, + fullMethod: methodBody, + methodBody: bodyContent + }); + } + } + } + + return methods; +} + +// 应用额外的修复规则 +function applyAdditionalFixes(convertedBody) { + let fixed = convertedBody; + + // 修复各种常见错误 + const fixes = [ + // Map操作 + { pattern: /(\w+)\.put\(([^,]+),\s*([^)]+)\)/g, replacement: '$1[$2] = $3' }, + { pattern: /(\w+)\.get\(([^)]+)\)/g, replacement: '$1[$2]' }, + + // 类型声明错误 + { pattern: /(\w+)\.const\s+(\w+):/g, replacement: 'const $2:' }, + { pattern: /any\s+(\w+)\s*=\s*new\s+(\w+)/g, replacement: 'const $1 = new $2' }, + + // getter调用 → 属性访问 + { pattern: /(\w+)\.get([A-Z]\w+)\(\)/g, replacement: (m, obj, prop) => { + const propName = prop.charAt(0).toLowerCase() + prop.slice(1); + return `${obj}.${propName}`; + }}, + + // JSON操作 + { pattern: /(\w+)\.getStr\(["']([^"']+)["']\)/g, replacement: '$1["$2"]' }, + + // 文件路径 + { pattern: /(\w+)\s*\+\s*["']\/([^"']+)["']/g, replacement: 'path.join($1, "$2")' }, + { pattern: /fs\.existsSync\((\w+),\s*["']([^"']+)["']\)/g, replacement: 'fs.existsSync(path.join($1, "$2"))' }, + + // 表达式 + { pattern: /Date\.now\(\s*\/\s*(\d+)\)/g, replacement: 'Date.now() / $1' }, + + // 方法调用修复 + { pattern: /(\w+)\.installAddonList(?!\()/g, replacement: '$1.getInstallAddonList()' }, + { pattern: /(\w+)\.moduleList(?!\()/g, replacement: '$1.getModuleList()' }, + + // 异常处理 + { pattern: /(\w+)\.printStackTrace\(\)/g, replacement: 'console.error($1)' }, + ]; + + fixes.forEach(fix => { + if (typeof fix.replacement === 'function') { + fixed = fixed.replace(fix.pattern, fix.replacement); + } else { + fixed = fixed.replace(fix.pattern, fix.replacement); + } + }); + + return fixed; +} + +// 修复单个文件 +function fixServiceFileComplete(javaFile, nestjsFile) { + try { + const javaContent = fs.readFileSync(javaFile, 'utf-8'); + let nestjsContent = fs.readFileSync(nestjsFile, 'utf-8'); + + // 提取Java方法 + const javaMethods = extractAllJavaMethods(javaContent); + + console.log(` 找到 ${javaMethods.length} 个方法`); + + let fixedCount = 0; + + // 修复每个方法 + javaMethods.forEach(javaMethod => { + try { + // 转换方法体 + const context = { + className: path.basename(javaFile, '.java'), + returnType: javaMethod.returnType + }; + + let convertedBody = converter.convertMethodBody( + javaMethod.methodBody, + context + ); + + // 应用额外修复 + convertedBody = applyAdditionalFixes(convertedBody); + + // 在NestJS文件中查找并替换方法体 + const methodName = javaMethod.methodName; + + // 匹配NestJS方法:async methodName(...) { ... } + const nestjsMethodRegex = new RegExp( + `(async\\s+${methodName}\\s*\\([^)]*\\)\\s*:\\s*Promise<[^>]+>\\s*\\{)([^}]+(?:\\{[^}]*\\}[^}]*)*)(\\})`, + 's' + ); + + if (nestjsMethodRegex.test(nestjsContent)) { + nestjsContent = nestjsContent.replace( + nestjsMethodRegex, + (match, methodHeader, oldBody, methodEnd) => { + // 替换方法体,保持缩进 + const indentedBody = convertedBody + .split('\n') + .filter(l => l.trim()) + .map(l => ' ' + l.trim()) + .join('\n'); + + return methodHeader + '\n' + indentedBody + '\n ' + methodEnd; + } + ); + fixedCount++; + } + } catch (e) { + console.warn(` 警告: 方法 ${javaMethod.methodName} 转换失败: ${e.message}`); + } + }); + + // 保存 + if (fixedCount > 0) { + fs.writeFileSync(nestjsFile, nestjsContent, 'utf-8'); + return fixedCount; + } + + return 0; + } catch (e) { + console.error(` 错误: ${e.message}`); + return 0; + } +} + +// 主函数 +function main() { + const mappingData = JSON.parse( + fs.readFileSync('./tools/java-to-nestjs-migration/service-mapping-data.json', 'utf-8') + ); + + console.log(`开始完整修复 ${mappingData.length} 个Service文件...\n`); + + let totalFixed = 0; + let successFiles = 0; + + mappingData.forEach((item, index) => { + const { javaFile, nestjsFile } = item; + + if (!fs.existsSync(javaFile) || !fs.existsSync(nestjsFile)) { + return; + } + + console.log(`[${index + 1}/${mappingData.length}] ${path.basename(nestjsFile)}`); + + const fixedMethods = fixServiceFileComplete(javaFile, nestjsFile); + + if (fixedMethods > 0) { + console.log(` ✅ 修复了 ${fixedMethods} 个方法\n`); + totalFixed += fixedMethods; + successFiles++; + } else { + console.log(` ⏭️ 无需修复\n`); + } + }); + + console.log(`\n修复完成!`); + console.log(`成功修复: ${successFiles} 个文件`); + console.log(`总修复方法数: ${totalFixed}`); +} + +if (require.main === module) { + main(); +} + +module.exports = { fixServiceFileComplete, extractJavaMethodBody, applyAdditionalFixes }; + diff --git a/wwjcloud-nest-v1/tools/java-to-nestjs-migration/manual-fix-summary.md b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/manual-fix-summary.md new file mode 100644 index 00000000..1656cd30 --- /dev/null +++ b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/manual-fix-summary.md @@ -0,0 +1,59 @@ +# Service层手工修复总结 + +## 当前状态 + +- **总文件数**: 158个Service文件 +- **文件映射**: ✅ 已生成 (`service-file-mapping.md`) +- **修复示例**: ✅ 已修复 `addon-service-impl.service.ts` 的 `getLocalAddonList` 方法 + +## 修复要点 + +对照Java源码,不改业务逻辑,只换V1写法: + +1. **方法调用修复** + - `iCoreAddonService.installAddonList` → `this.iCoreAddonServiceService.getInstallAddonList()` + - `niucloudService.moduleList` → `this.niucloudServiceService.getModuleList()` + +2. **Map操作修复** + - `list.put(key, value)` → `list[key] = value` + - `list.get(key)` → `list[key]` + +3. **类型声明修复** + - `ModuleListVo.const app: App` → `const app` + - `any queryWrapper = new QueryWrapper()` → `const queryWrapper = new QueryWrapper()` + +4. **文件操作修复** + - `fs.existsSync(file, "info.json")` → `fs.existsSync(path.join(file, "info.json"))` + - `file + "/resource/icon.png"` → `path.join(file, "resource", "icon.png")` + +5. **JSON操作修复** + - `info.getStr("key")` → `info["key"]` + +6. **异常处理修复** + - `e.printStackTrace()` → `console.error(e)` + - `catch (IOException e)` → `catch (e: any)` + +7. **属性访问修复** + - `vo.setError(e.getMessage())` → `vo.error = e.message` + - `vo.setList(list)` → `vo.list = list` + +## 修复流程 + +1. 查看映射表找到Java → NestJS对应关系 +2. 读取Java方法体 +3. 转换Java语法为TypeScript/V1写法 +4. 替换NestJS文件中的方法体 +5. 验证语法正确 + +## 进度 + +- 已修复文件: 1/158 +- 已修复方法: 1个示例方法 +- 剩余: 157个文件需要修复 + +## 建议 + +由于158个文件工作量大,建议: +1. 先完善修复脚本,自动处理常见错误 +2. 然后手工修复复杂逻辑 +3. 或分批修复,优先修复错误最多的文件 diff --git a/wwjcloud-nest-v1/tools/java-to-nestjs-migration/remaining-files.json b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/remaining-files.json new file mode 100644 index 00000000..f3f5b537 --- /dev/null +++ b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/remaining-files.json @@ -0,0 +1,142 @@ +[ + { + "javaClassName": "OplatformConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wxoplatform/impl/OplatformConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/wxoplatform/impl/oplatform-config-service-impl.service.ts" + }, + { + "javaClassName": "OplatformServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wxoplatform/impl/OplatformServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/wxoplatform/impl/oplatform-service-impl.service.ts" + }, + { + "javaClassName": "DictServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/dict/impl/DictServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/dict/impl/dict-service-impl.service.ts" + }, + { + "javaClassName": "StorageConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/upload/impl/StorageConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/upload/impl/storage-config-service-impl.service.ts" + }, + { + "javaClassName": "DiyServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/diy/impl/DiyServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/diy/impl/diy-service-impl.service.ts" + }, + { + "javaClassName": "DiyFormServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/diy/impl/DiyFormServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/diy/impl/diy-form-service-impl.service.ts" + }, + { + "javaClassName": "MemberLevelServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberLevelServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-level-service-impl.service.ts" + }, + { + "javaClassName": "MemberServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-service-impl.service.ts" + }, + { + "javaClassName": "MemberCashOutServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberCashOutServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-cash-out-service-impl.service.ts" + }, + { + "javaClassName": "MemberAccountServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberAccountServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-account-service-impl.service.ts" + }, + { + "javaClassName": "MemberSignServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberSignServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-sign-service-impl.service.ts" + }, + { + "javaClassName": "MemberAddressServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberAddressServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-address-service-impl.service.ts" + }, + { + "javaClassName": "AgreementServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/agreement/impl/AgreementServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/agreement/impl/agreement-service-impl.service.ts" + }, + { + "javaClassName": "PayServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/pay/impl/PayServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/pay/impl/pay-service-impl.service.ts" + }, + { + "javaClassName": "WechatServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/wechat/impl/WechatServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/wechat/impl/wechat-service-impl.service.ts" + }, + { + "javaClassName": "ServeServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/wechat/impl/ServeServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/wechat/impl/serve-service-impl.service.ts" + }, + { + "javaClassName": "AppServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/channel/impl/AppServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/channel/impl/app-service-impl.service.ts" + }, + { + "javaClassName": "SysConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/SysConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/sys-config-service-impl.service.ts" + }, + { + "javaClassName": "SysVerifyServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/SysVerifyServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/sys-verify-service-impl.service.ts" + }, + { + "javaClassName": "Base64ServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/Base64ServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/base64-service-impl.service.ts" + }, + { + "javaClassName": "UploadServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/UploadServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/upload-service-impl.service.ts" + }, + { + "javaClassName": "TaskServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/TaskServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/task-service-impl.service.ts" + }, + { + "javaClassName": "SysAreaServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/SysAreaServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/sys-area-service-impl.service.ts" + }, + { + "javaClassName": "ServeServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/weapp/impl/ServeServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/weapp/impl/serve-service-impl.service.ts" + }, + { + "javaClassName": "WeappServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/weapp/impl/WeappServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/weapp/impl/weapp-service-impl.service.ts" + }, + { + "javaClassName": "RegisterServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/login/impl/RegisterServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/login/impl/register-service-impl.service.ts" + }, + { + "javaClassName": "LoginServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/login/impl/LoginServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/login/impl/login-service-impl.service.ts" + }, + { + "javaClassName": "AuthServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/login/impl/AuthServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/login/impl/auth-service-impl.service.ts" + } +] \ No newline at end of file diff --git a/wwjcloud-nest-v1/tools/java-to-nestjs-migration/service-file-mapping.md b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/service-file-mapping.md new file mode 100644 index 00000000..52d0325d --- /dev/null +++ b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/service-file-mapping.md @@ -0,0 +1,1620 @@ +# Service层 Java → NestJS 文件映射表 + +生成时间: 10/31/2025, 3:27:06 PM + +## 说明 +- **Java文件**: 源Java Service实现类 +- **NestJS文件**: 生成的NestJS Service文件 +- **状态**: ✅已生成 / ❌未找到 + +--- + +## 映射表 + +### CoreAliappConfigServiceImpl + +**Java文件:** `com/niu/core/service/core/aliapp/impl/CoreAliappConfigServiceImpl.java` + +**NestJS文件:** ✅ `services/core/aliapp/impl/core-aliapp-config-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreScheduleServiceImpl + +**Java文件:** `com/niu/core/service/core/schedule/impl/CoreScheduleServiceImpl.java` + +**NestJS文件:** ✅ `services/core/schedule/impl/core-schedule-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreAppServiceImpl + +**Java文件:** `com/niu/core/service/core/app/impl/CoreAppServiceImpl.java` + +**NestJS文件:** ✅ `services/core/app/impl/core-app-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreAsyncTaskServiceImpl + +**Java文件:** `com/niu/core/service/core/app/impl/CoreAsyncTaskServiceImpl.java` + +**NestJS文件:** ✅ `services/core/app/impl/core-async-task-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreQueueServiceImpl + +**Java文件:** `com/niu/core/service/core/app/impl/CoreQueueServiceImpl.java` + +**NestJS文件:** ✅ `services/core/app/impl/core-queue-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreDiyServiceImpl + +**Java文件:** `com/niu/core/service/core/diy/impl/CoreDiyServiceImpl.java` + +**NestJS文件:** ✅ `services/core/diy/impl/core-diy-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreSmsServiceImpl + +**Java文件:** `com/niu/core/service/core/sms/impl/CoreSmsServiceImpl.java` + +**NestJS文件:** ✅ `services/core/sms/impl/core-sms-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreMemberConfigServiceImpl + +**Java文件:** `com/niu/core/service/core/member/impl/CoreMemberConfigServiceImpl.java` + +**NestJS文件:** ✅ `services/core/member/impl/core-member-config-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreMemberCashOutServiceImpl + +**Java文件:** `com/niu/core/service/core/member/impl/CoreMemberCashOutServiceImpl.java` + +**NestJS文件:** ✅ `services/core/member/impl/core-member-cash-out-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreMemberAccountServiceImpl + +**Java文件:** `com/niu/core/service/core/member/impl/CoreMemberAccountServiceImpl.java` + +**NestJS文件:** ✅ `services/core/member/impl/core-member-account-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreMemberLevelServiceImpl + +**Java文件:** `com/niu/core/service/core/member/impl/CoreMemberLevelServiceImpl.java` + +**NestJS文件:** ✅ `services/core/member/impl/core-member-level-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreMemberServiceImpl + +**Java文件:** `com/niu/core/service/core/member/impl/CoreMemberServiceImpl.java` + +**NestJS文件:** ✅ `services/core/member/impl/core-member-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreTransferSceneServiceImpl + +**Java文件:** `com/niu/core/service/core/pay/impl/CoreTransferSceneServiceImpl.java` + +**NestJS文件:** ✅ `services/core/pay/impl/core-transfer-scene-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CorePayChannelServiceImpl + +**Java文件:** `com/niu/core/service/core/pay/impl/CorePayChannelServiceImpl.java` + +**NestJS文件:** ✅ `services/core/pay/impl/core-pay-channel-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CorePayEventServiceImpl + +**Java文件:** `com/niu/core/service/core/pay/impl/CorePayEventServiceImpl.java` + +**NestJS文件:** ✅ `services/core/pay/impl/core-pay-event-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreRefundServiceImpl + +**Java文件:** `com/niu/core/service/core/pay/impl/CoreRefundServiceImpl.java` + +**NestJS文件:** ✅ `services/core/pay/impl/core-refund-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreTransferServiceImpl + +**Java文件:** `com/niu/core/service/core/pay/impl/CoreTransferServiceImpl.java` + +**NestJS文件:** ✅ `services/core/pay/impl/core-transfer-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CorePayServiceImpl + +**Java文件:** `com/niu/core/service/core/pay/impl/CorePayServiceImpl.java` + +**NestJS文件:** ✅ `services/core/pay/impl/core-pay-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreUserServiceImpl + +**Java文件:** `com/niu/core/service/core/user/impl/CoreUserServiceImpl.java` + +**NestJS文件:** ✅ `services/core/user/impl/core-user-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### ICoreNiucloudConfigServiceImpl + +**Java文件:** `com/niu/core/service/core/niucloud/impl/ICoreNiucloudConfigServiceImpl.java` + +**NestJS文件:** ❌ `services/core/niucloud/impl/i-core-niucloud-config-service-impl.service.ts` + +--- + +### ICoreAuthServiceImpl + +**Java文件:** `com/niu/core/service/core/niucloud/impl/ICoreAuthServiceImpl.java` + +**NestJS文件:** ❌ `services/core/niucloud/impl/i-core-auth-service-impl.service.ts` + +--- + +### DefaultCaptchaServiceImpl + +**Java文件:** `com/niu/core/service/core/captcha/impl/DefaultCaptchaServiceImpl.java` + +**NestJS文件:** ✅ `services/core/captcha/impl/default-captcha-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreCaptchaImgServiceImpl + +**Java文件:** `com/niu/core/service/core/captcha/impl/CoreCaptchaImgServiceImpl.java` + +**NestJS文件:** ✅ `services/core/captcha/impl/core-captcha-img-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreNoticeSmsLogServiceImpl + +**Java文件:** `com/niu/core/service/core/notice/impl/CoreNoticeSmsLogServiceImpl.java` + +**NestJS文件:** ✅ `services/core/notice/impl/core-notice-sms-log-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreNoticeServiceImpl + +**Java文件:** `com/niu/core/service/core/notice/impl/CoreNoticeServiceImpl.java` + +**NestJS文件:** ✅ `services/core/notice/impl/core-notice-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreWechatConfigServiceImpl + +**Java文件:** `com/niu/core/service/core/wechat/impl/CoreWechatConfigServiceImpl.java` + +**NestJS文件:** ✅ `services/core/wechat/impl/core-wechat-config-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreWechatReplyServiceImpl + +**Java文件:** `com/niu/core/service/core/wechat/impl/CoreWechatReplyServiceImpl.java` + +**NestJS文件:** ✅ `services/core/wechat/impl/core-wechat-reply-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreAppCloudServiceImpl + +**Java文件:** `com/niu/core/service/core/channel/impl/CoreAppCloudServiceImpl.java` + +**NestJS文件:** ✅ `services/core/channel/impl/core-app-cloud-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreH5ServiceImpl + +**Java文件:** `com/niu/core/service/core/channel/impl/CoreH5ServiceImpl.java` + +**NestJS文件:** ✅ `services/core/channel/impl/core-h5-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreAppServiceImpl + +**Java文件:** `com/niu/core/service/core/channel/impl/CoreAppServiceImpl.java` + +**NestJS文件:** ✅ `services/core/channel/impl/core-app-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CorePcServiceImpl + +**Java文件:** `com/niu/core/service/core/channel/impl/CorePcServiceImpl.java` + +**NestJS文件:** ✅ `services/core/channel/impl/core-pc-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreDiyFormConfigServiceImpl + +**Java文件:** `com/niu/core/service/core/diy_form/impl/CoreDiyFormConfigServiceImpl.java` + +**NestJS文件:** ✅ `services/core/diy_form/impl/core-diy-form-config-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreDiyFormRecordsServiceImpl + +**Java文件:** `com/niu/core/service/core/diy_form/impl/CoreDiyFormRecordsServiceImpl.java` + +**NestJS文件:** ✅ `services/core/diy_form/impl/core-diy-form-records-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreScanServiceImpl + +**Java文件:** `com/niu/core/service/core/sys/impl/CoreScanServiceImpl.java` + +**NestJS文件:** ✅ `services/core/sys/impl/core-scan-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreConfigServiceImpl + +**Java文件:** `com/niu/core/service/core/sys/impl/CoreConfigServiceImpl.java` + +**NestJS文件:** ✅ `services/core/sys/impl/core-config-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreMenuServiceImpl + +**Java文件:** `com/niu/core/service/core/sys/impl/CoreMenuServiceImpl.java` + +**NestJS文件:** ✅ `services/core/sys/impl/core-menu-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreUploadServiceImpl + +**Java文件:** `com/niu/core/service/core/sys/impl/CoreUploadServiceImpl.java` + +**NestJS文件:** ✅ `services/core/sys/impl/core-upload-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreAgreementServiceImpl + +**Java文件:** `com/niu/core/service/core/sys/impl/CoreAgreementServiceImpl.java` + +**NestJS文件:** ✅ `services/core/sys/impl/core-agreement-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreSysConfigServiceImpl + +**Java文件:** `com/niu/core/service/core/sys/impl/CoreSysConfigServiceImpl.java` + +**NestJS文件:** ✅ `services/core/sys/impl/core-sys-config-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreExportServiceImpl + +**Java文件:** `com/niu/core/service/core/sys/impl/CoreExportServiceImpl.java` + +**NestJS文件:** ✅ `services/core/sys/impl/core-export-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CorePrinterServiceImpl + +**Java文件:** `com/niu/core/service/core/sys/impl/CorePrinterServiceImpl.java` + +**NestJS文件:** ✅ `services/core/sys/impl/core-printer-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreWeappDeliveryServiceImpl + +**Java文件:** `com/niu/core/service/core/weapp/impl/CoreWeappDeliveryServiceImpl.java` + +**NestJS文件:** ✅ `services/core/weapp/impl/core-weapp-delivery-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreWeappCloudServiceImpl + +**Java文件:** `com/niu/core/service/core/weapp/impl/CoreWeappCloudServiceImpl.java` + +**NestJS文件:** ✅ `services/core/weapp/impl/core-weapp-cloud-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreWeappServiceImpl + +**Java文件:** `com/niu/core/service/core/weapp/impl/CoreWeappServiceImpl.java` + +**NestJS文件:** ✅ `services/core/weapp/impl/core-weapp-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreWeappConfigServiceImpl + +**Java文件:** `com/niu/core/service/core/weapp/impl/CoreWeappConfigServiceImpl.java` + +**NestJS文件:** ✅ `services/core/weapp/impl/core-weapp-config-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreSiteServiceImpl + +**Java文件:** `com/niu/core/service/core/site/impl/CoreSiteServiceImpl.java` + +**NestJS文件:** ✅ `services/core/site/impl/core-site-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreSiteAccountServiceImpl + +**Java文件:** `com/niu/core/service/core/site/impl/CoreSiteAccountServiceImpl.java` + +**NestJS文件:** ✅ `services/core/site/impl/core-site-account-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreAddonInstallServiceImpl + +**Java文件:** `com/niu/core/service/core/addon/impl/CoreAddonInstallServiceImpl.java` + +**NestJS文件:** ✅ `services/core/addon/impl/core-addon-install-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreAddonServiceImpl + +**Java文件:** `com/niu/core/service/core/addon/impl/CoreAddonServiceImpl.java` + +**NestJS文件:** ✅ `services/core/addon/impl/core-addon-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreOplatformServiceImpl + +**Java文件:** `com/niu/core/service/core/wxoplatform/impl/CoreOplatformServiceImpl.java` + +**NestJS文件:** ✅ `services/core/wxoplatform/impl/core-oplatform-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreOplatformStaticConfigServiceImpl + +**Java文件:** `com/niu/core/service/core/wxoplatform/impl/CoreOplatformStaticConfigServiceImpl.java` + +**NestJS文件:** ✅ `services/core/wxoplatform/impl/core-oplatform-static-config-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CorePosterServiceImpl + +**Java文件:** `com/niu/core/service/core/poster/impl/CorePosterServiceImpl.java` + +**NestJS文件:** ✅ `services/core/poster/impl/core-poster-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreBase64ServiceImpl + +**Java文件:** `com/niu/core/service/core/upload/impl/CoreBase64ServiceImpl.java` + +**NestJS文件:** ✅ `services/core/upload/impl/core-base64-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreStorageServiceImpl + +**Java文件:** `com/niu/core/service/core/upload/impl/CoreStorageServiceImpl.java` + +**NestJS文件:** ✅ `services/core/upload/impl/core-storage-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CoreFetchServiceImpl + +**Java文件:** `com/niu/core/service/core/upload/impl/CoreFetchServiceImpl.java` + +**NestJS文件:** ✅ `services/core/upload/impl/core-fetch-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### AuthSiteServiceImpl + +**Java文件:** `com/niu/core/service/admin/home/impl/AuthSiteServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/home/impl/auth-site-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### AliappConfigServiceImpl + +**Java文件:** `com/niu/core/service/admin/aliapp/impl/AliappConfigServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/aliapp/impl/aliapp-config-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### UpgradeServiceImpl + +**Java文件:** `com/niu/core/service/admin/upgrade/impl/UpgradeServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/upgrade/impl/upgrade-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### InstallSystemServiceImpl + +**Java文件:** `com/niu/core/service/admin/install/impl/InstallSystemServiceImpl.java` + +**NestJS文件:** ❌ `services/admin/install/impl/install-system-service-impl.service.ts` + +--- + +### DiyServiceImpl + +**Java文件:** `com/niu/core/service/admin/diy/impl/DiyServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/diy/impl/diy-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### DiyRouteServiceImpl + +**Java文件:** `com/niu/core/service/admin/diy/impl/DiyRouteServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/diy/impl/diy-route-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### DiyConfigServiceImpl + +**Java文件:** `com/niu/core/service/admin/diy/impl/DiyConfigServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/diy/impl/diy-config-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### DiyThemeServiceImpl + +**Java文件:** `com/niu/core/service/admin/diy/impl/DiyThemeServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/diy/impl/diy-theme-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### VerifyServiceImpl + +**Java文件:** `com/niu/core/service/admin/verify/impl/VerifyServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/verify/impl/verify-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### VerifierServiceImpl + +**Java文件:** `com/niu/core/service/admin/verify/impl/VerifierServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/verify/impl/verifier-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### LoginServiceImpl + +**Java文件:** `com/niu/core/service/admin/auth/impl/LoginServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/auth/impl/login-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### ConfigServiceImpl + +**Java文件:** `com/niu/core/service/admin/auth/impl/ConfigServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/auth/impl/config-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### AuthServiceImpl + +**Java文件:** `com/niu/core/service/admin/auth/impl/AuthServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/auth/impl/auth-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### MemberLevelServiceImpl + +**Java文件:** `com/niu/core/service/admin/member/impl/MemberLevelServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/member/impl/member-level-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### MemberServiceImpl + +**Java文件:** `com/niu/core/service/admin/member/impl/MemberServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/member/impl/member-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### MemberLabelServiceImpl + +**Java文件:** `com/niu/core/service/admin/member/impl/MemberLabelServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/member/impl/member-label-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### MemberCashOutServiceImpl + +**Java文件:** `com/niu/core/service/admin/member/impl/MemberCashOutServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/member/impl/member-cash-out-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### MemberAccountServiceImpl + +**Java文件:** `com/niu/core/service/admin/member/impl/MemberAccountServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/member/impl/member-account-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### MemberSignServiceImpl + +**Java文件:** `com/niu/core/service/admin/member/impl/MemberSignServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/member/impl/member-sign-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### MemberConfigServiceImpl + +**Java文件:** `com/niu/core/service/admin/member/impl/MemberConfigServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/member/impl/member-config-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### MemberAddressServiceImpl + +**Java文件:** `com/niu/core/service/admin/member/impl/MemberAddressServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/member/impl/member-address-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### PayTransferServiceImpl + +**Java文件:** `com/niu/core/service/admin/pay/impl/PayTransferServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/pay/impl/pay-transfer-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### PayRefundServiceImpl + +**Java文件:** `com/niu/core/service/admin/pay/impl/PayRefundServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/pay/impl/pay-refund-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### PayServiceImpl + +**Java文件:** `com/niu/core/service/admin/pay/impl/PayServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/pay/impl/pay-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### PayChannelServiceImpl + +**Java文件:** `com/niu/core/service/admin/pay/impl/PayChannelServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/pay/impl/pay-channel-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CloudBuildServiceImpl + +**Java文件:** `com/niu/core/service/admin/niucloud/impl/CloudBuildServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/niucloud/impl/cloud-build-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### NiuCloudServiceImpl + +**Java文件:** `com/niu/core/service/admin/niucloud/impl/NiuCloudServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/niucloud/impl/niu-cloud-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### CaptchaServiceImpl + +**Java文件:** `com/niu/core/service/admin/captcha/impl/CaptchaServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/captcha/impl/captcha-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### NoticeLogServiceImpl + +**Java文件:** `com/niu/core/service/admin/notice/impl/NoticeLogServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/notice/impl/notice-log-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### NoticeServiceImpl + +**Java文件:** `com/niu/core/service/admin/notice/impl/NoticeServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/notice/impl/notice-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### NuiSmsServiceImpl + +**Java文件:** `com/niu/core/service/admin/notice/impl/NuiSmsServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/notice/impl/nui-sms-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### WechatTemplateServiceImpl + +**Java文件:** `com/niu/core/service/admin/wechat/impl/WechatTemplateServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/wechat/impl/wechat-template-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### WechatConfigServiceImpl + +**Java文件:** `com/niu/core/service/admin/wechat/impl/WechatConfigServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/wechat/impl/wechat-config-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### WechatMediaServiceImpl + +**Java文件:** `com/niu/core/service/admin/wechat/impl/WechatMediaServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/wechat/impl/wechat-media-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### WechatMenuServiceImpl + +**Java文件:** `com/niu/core/service/admin/wechat/impl/WechatMenuServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/wechat/impl/wechat-menu-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### WechatReplyServiceImpl + +**Java文件:** `com/niu/core/service/admin/wechat/impl/WechatReplyServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/wechat/impl/wechat-reply-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### AdminAppServiceImpl + +**Java文件:** `com/niu/core/service/admin/channel/impl/AdminAppServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/channel/impl/admin-app-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### GenerateColumnServiceImpl + +**Java文件:** `com/niu/core/service/admin/generator/impl/GenerateColumnServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/generator/impl/generate-column-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### GenerateServiceImpl + +**Java文件:** `com/niu/core/service/admin/generator/impl/GenerateServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/generator/impl/generate-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### DiyFormConfigServiceImpl + +**Java文件:** `com/niu/core/service/admin/diy_form/impl/DiyFormConfigServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/diy_form/impl/diy-form-config-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### DiyFormServiceImpl + +**Java文件:** `com/niu/core/service/admin/diy_form/impl/DiyFormServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/diy_form/impl/diy-form-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### DiyFormRecordsServiceImpl + +**Java文件:** `com/niu/core/service/admin/diy_form/impl/DiyFormRecordsServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/diy_form/impl/diy-form-records-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysScheduleServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SysScheduleServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/sys-schedule-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysPosterServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SysPosterServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/sys-poster-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysConfigServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SysConfigServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/sys-config-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysRoleServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SysRoleServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/sys-role-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SystemServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SystemServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/system-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysPrinterServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SysPrinterServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/sys-printer-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysPrinterTemplateServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SysPrinterTemplateServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/sys-printer-template-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysUpgradeRecordsServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SysUpgradeRecordsServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/sys-upgrade-records-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysUserRoleServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SysUserRoleServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/sys-user-role-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysMenuServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SysMenuServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/sys-menu-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysNoticeServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SysNoticeServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/sys-notice-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysAttachmentServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SysAttachmentServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/sys-attachment-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysBackupRecordsServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SysBackupRecordsServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/sys-backup-records-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysUserServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SysUserServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/sys-user-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysAgreementServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SysAgreementServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/sys-agreement-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysNoticeSmsLogServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SysNoticeSmsLogServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/sys-notice-sms-log-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysExportServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SysExportServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/sys-export-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysUserLogServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SysUserLogServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/sys-user-log-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysAreaServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SysAreaServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/sys-area-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysNoticeLogServiceImpl + +**Java文件:** `com/niu/core/service/admin/sys/impl/SysNoticeLogServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/sys/impl/sys-notice-log-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### StatHourServiceImpl + +**Java文件:** `com/niu/core/service/admin/stat/impl/StatHourServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/stat/impl/stat-hour-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### StatServiceImpl + +**Java文件:** `com/niu/core/service/admin/stat/impl/StatServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/stat/impl/stat-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### WeappConfigServiceImpl + +**Java文件:** `com/niu/core/service/admin/weapp/impl/WeappConfigServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/weapp/impl/weapp-config-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### WeappVersionServiceImpl + +**Java文件:** `com/niu/core/service/admin/weapp/impl/WeappVersionServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/weapp/impl/weapp-version-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### WeappTemplateServiceImpl + +**Java文件:** `com/niu/core/service/admin/weapp/impl/WeappTemplateServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/weapp/impl/weapp-template-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SiteServiceImpl + +**Java文件:** `com/niu/core/service/admin/site/impl/SiteServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/site/impl/site-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SiteAccountLogServiceImpl + +**Java文件:** `com/niu/core/service/admin/site/impl/SiteAccountLogServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/site/impl/site-account-log-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SiteGroupServiceImpl + +**Java文件:** `com/niu/core/service/admin/site/impl/SiteGroupServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/site/impl/site-group-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SiteUserServiceImpl + +**Java文件:** `com/niu/core/service/admin/site/impl/SiteUserServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/site/impl/site-user-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### AddonDevelopServiceImpl + +**Java文件:** `com/niu/core/service/admin/addon/impl/AddonDevelopServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/addon/impl/addon-develop-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### AddonLogServiceImpl + +**Java文件:** `com/niu/core/service/admin/addon/impl/AddonLogServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/addon/impl/addon-log-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### AddonDevelopBuildServiceImpl + +**Java文件:** `com/niu/core/service/admin/addon/impl/AddonDevelopBuildServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/addon/impl/addon-develop-build-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### AddonServiceImpl + +**Java文件:** `com/niu/core/service/admin/addon/impl/AddonServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/addon/impl/addon-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### OplatformServerServiceImpl + +**Java文件:** `com/niu/core/service/admin/wxoplatform/impl/OplatformServerServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/wxoplatform/impl/oplatform-server-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### WeappVersionServiceImpl + +**Java文件:** `com/niu/core/service/admin/wxoplatform/impl/WeappVersionServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/wxoplatform/impl/weapp-version-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### OplatformConfigServiceImpl + +**Java文件:** `com/niu/core/service/admin/wxoplatform/impl/OplatformConfigServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/wxoplatform/impl/oplatform-config-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### OplatformServiceImpl + +**Java文件:** `com/niu/core/service/admin/wxoplatform/impl/OplatformServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/wxoplatform/impl/oplatform-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### DictServiceImpl + +**Java文件:** `com/niu/core/service/admin/dict/impl/DictServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/dict/impl/dict-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### StorageConfigServiceImpl + +**Java文件:** `com/niu/core/service/admin/upload/impl/StorageConfigServiceImpl.java` + +**NestJS文件:** ✅ `services/admin/upload/impl/storage-config-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### DiyServiceImpl + +**Java文件:** `com/niu/core/service/api/diy/impl/DiyServiceImpl.java` + +**NestJS文件:** ✅ `services/api/diy/impl/diy-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### DiyFormServiceImpl + +**Java文件:** `com/niu/core/service/api/diy/impl/DiyFormServiceImpl.java` + +**NestJS文件:** ✅ `services/api/diy/impl/diy-form-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### MemberLevelServiceImpl + +**Java文件:** `com/niu/core/service/api/member/impl/MemberLevelServiceImpl.java` + +**NestJS文件:** ✅ `services/api/member/impl/member-level-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### MemberServiceImpl + +**Java文件:** `com/niu/core/service/api/member/impl/MemberServiceImpl.java` + +**NestJS文件:** ✅ `services/api/member/impl/member-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### MemberCashOutServiceImpl + +**Java文件:** `com/niu/core/service/api/member/impl/MemberCashOutServiceImpl.java` + +**NestJS文件:** ✅ `services/api/member/impl/member-cash-out-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### MemberAccountServiceImpl + +**Java文件:** `com/niu/core/service/api/member/impl/MemberAccountServiceImpl.java` + +**NestJS文件:** ✅ `services/api/member/impl/member-account-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### MemberSignServiceImpl + +**Java文件:** `com/niu/core/service/api/member/impl/MemberSignServiceImpl.java` + +**NestJS文件:** ✅ `services/api/member/impl/member-sign-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### MemberAddressServiceImpl + +**Java文件:** `com/niu/core/service/api/member/impl/MemberAddressServiceImpl.java` + +**NestJS文件:** ✅ `services/api/member/impl/member-address-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### AgreementServiceImpl + +**Java文件:** `com/niu/core/service/api/agreement/impl/AgreementServiceImpl.java` + +**NestJS文件:** ✅ `services/api/agreement/impl/agreement-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### PayServiceImpl + +**Java文件:** `com/niu/core/service/api/pay/impl/PayServiceImpl.java` + +**NestJS文件:** ✅ `services/api/pay/impl/pay-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### WechatServiceImpl + +**Java文件:** `com/niu/core/service/api/wechat/impl/WechatServiceImpl.java` + +**NestJS文件:** ✅ `services/api/wechat/impl/wechat-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### ServeServiceImpl + +**Java文件:** `com/niu/core/service/api/wechat/impl/ServeServiceImpl.java` + +**NestJS文件:** ✅ `services/api/wechat/impl/serve-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### AppServiceImpl + +**Java文件:** `com/niu/core/service/api/channel/impl/AppServiceImpl.java` + +**NestJS文件:** ✅ `services/api/channel/impl/app-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysConfigServiceImpl + +**Java文件:** `com/niu/core/service/api/sys/impl/SysConfigServiceImpl.java` + +**NestJS文件:** ✅ `services/api/sys/impl/sys-config-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysVerifyServiceImpl + +**Java文件:** `com/niu/core/service/api/sys/impl/SysVerifyServiceImpl.java` + +**NestJS文件:** ✅ `services/api/sys/impl/sys-verify-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### Base64ServiceImpl + +**Java文件:** `com/niu/core/service/api/sys/impl/Base64ServiceImpl.java` + +**NestJS文件:** ✅ `services/api/sys/impl/base64-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### UploadServiceImpl + +**Java文件:** `com/niu/core/service/api/sys/impl/UploadServiceImpl.java` + +**NestJS文件:** ✅ `services/api/sys/impl/upload-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### TaskServiceImpl + +**Java文件:** `com/niu/core/service/api/sys/impl/TaskServiceImpl.java` + +**NestJS文件:** ✅ `services/api/sys/impl/task-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### SysAreaServiceImpl + +**Java文件:** `com/niu/core/service/api/sys/impl/SysAreaServiceImpl.java` + +**NestJS文件:** ✅ `services/api/sys/impl/sys-area-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### ServeServiceImpl + +**Java文件:** `com/niu/core/service/api/weapp/impl/ServeServiceImpl.java` + +**NestJS文件:** ✅ `services/api/weapp/impl/serve-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### WeappServiceImpl + +**Java文件:** `com/niu/core/service/api/weapp/impl/WeappServiceImpl.java` + +**NestJS文件:** ✅ `services/api/weapp/impl/weapp-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### RegisterServiceImpl + +**Java文件:** `com/niu/core/service/api/login/impl/RegisterServiceImpl.java` + +**NestJS文件:** ✅ `services/api/login/impl/register-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### LoginServiceImpl + +**Java文件:** `com/niu/core/service/api/login/impl/LoginServiceImpl.java` + +**NestJS文件:** ✅ `services/api/login/impl/login-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + +### AuthServiceImpl + +**Java文件:** `com/niu/core/service/api/login/impl/AuthServiceImpl.java` + +**NestJS文件:** ✅ `services/api/login/impl/auth-service-impl.service.ts` + +**状态**: ✅ 已生成,需手动修复方法体 + +--- + + +## 统计 + +- Java文件总数: 160 +- NestJS文件总数: 158 +- 已匹配: 157 +- 未找到: 3 + +## 未找到的文件 + +- ICoreNiucloudConfigServiceImpl: services/core/niucloud/impl/i-core-niucloud-config-service-impl.service.ts +- ICoreAuthServiceImpl: services/core/niucloud/impl/i-core-auth-service-impl.service.ts +- InstallSystemServiceImpl: services/admin/install/impl/install-system-service-impl.service.ts diff --git a/wwjcloud-nest-v1/tools/java-to-nestjs-migration/service-file-mapping.txt b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/service-file-mapping.txt new file mode 100644 index 00000000..188e9d95 --- /dev/null +++ b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/service-file-mapping.txt @@ -0,0 +1,483 @@ +# Java Service → NestJS Service 文件映射表 +# 用于手动修复业务逻辑时的参考 + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/aliapp/impl/CoreAliappConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/aliapp/impl/core-aliapp-config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/schedule/impl/CoreScheduleServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/schedule/impl/core-schedule-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/app/impl/CoreAppServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/app/impl/core-app-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/app/impl/CoreAsyncTaskServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/app/impl/core-async-task-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/app/impl/CoreQueueServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/app/impl/core-queue-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/diy/impl/CoreDiyServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/diy/impl/core-diy-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sms/impl/CoreSmsServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/sms/impl/core-sms-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/member/impl/CoreMemberConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/member/impl/core-member-config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/member/impl/CoreMemberCashOutServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/member/impl/core-member-cash-out-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/member/impl/CoreMemberAccountServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/member/impl/core-member-account-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/member/impl/CoreMemberLevelServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/member/impl/core-member-level-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/member/impl/CoreMemberServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/member/impl/core-member-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/pay/impl/CoreTransferSceneServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-transfer-scene-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/pay/impl/CorePayChannelServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-pay-channel-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/pay/impl/CorePayEventServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-pay-event-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/pay/impl/CoreRefundServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-refund-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/pay/impl/CoreTransferServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-transfer-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/pay/impl/CorePayServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-pay-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/user/impl/CoreUserServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/user/impl/core-user-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/niucloud/impl/ICoreNiucloudConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/niucloud/impl/i-core-niucloud-config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/niucloud/impl/ICoreAuthServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/niucloud/impl/i-core-auth-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/captcha/impl/DefaultCaptchaServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/captcha/impl/default-captcha-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/captcha/impl/CoreCaptchaImgServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/captcha/impl/core-captcha-img-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/notice/impl/CoreNoticeSmsLogServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/notice/impl/core-notice-sms-log-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/notice/impl/CoreNoticeServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/notice/impl/core-notice-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/wechat/impl/CoreWechatConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/wechat/impl/core-wechat-config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/wechat/impl/CoreWechatReplyServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/wechat/impl/core-wechat-reply-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/channel/impl/CoreAppCloudServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/channel/impl/core-app-cloud-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/channel/impl/CoreH5ServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/channel/impl/core-h5-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/channel/impl/CoreAppServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/channel/impl/core-app-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/channel/impl/CorePcServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/channel/impl/core-pc-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/diy_form/impl/CoreDiyFormConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/diy_form/impl/core-diy-form-config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/diy_form/impl/CoreDiyFormRecordsServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/diy_form/impl/core-diy-form-records-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sys/impl/CoreScanServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/sys/impl/core-scan-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sys/impl/CoreConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/sys/impl/core-config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sys/impl/CoreMenuServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/sys/impl/core-menu-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sys/impl/CoreUploadServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/sys/impl/core-upload-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sys/impl/CoreAgreementServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/sys/impl/core-agreement-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sys/impl/CoreSysConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/sys/impl/core-sys-config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sys/impl/CoreExportServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/sys/impl/core-export-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sys/impl/CorePrinterServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/sys/impl/core-printer-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/weapp/impl/CoreWeappDeliveryServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/weapp/impl/core-weapp-delivery-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/weapp/impl/CoreWeappCloudServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/weapp/impl/core-weapp-cloud-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/weapp/impl/CoreWeappServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/weapp/impl/core-weapp-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/weapp/impl/CoreWeappConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/weapp/impl/core-weapp-config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/site/impl/CoreSiteServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/site/impl/core-site-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/site/impl/CoreSiteAccountServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/site/impl/core-site-account-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/addon/impl/CoreAddonInstallServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/addon/impl/core-addon-install-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/addon/impl/CoreAddonServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/addon/impl/core-addon-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/wxoplatform/impl/CoreOplatformServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/wxoplatform/impl/core-oplatform-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/wxoplatform/impl/CoreOplatformStaticConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/wxoplatform/impl/core-oplatform-static-config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/poster/impl/CorePosterServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/poster/impl/core-poster-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/upload/impl/CoreBase64ServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/upload/impl/core-base64-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/upload/impl/CoreStorageServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/upload/impl/core-storage-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/upload/impl/CoreFetchServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/core/upload/impl/core-fetch-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/home/impl/AuthSiteServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/home/impl/auth-site-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/aliapp/impl/AliappConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/aliapp/impl/aliapp-config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/upgrade/impl/UpgradeServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/upgrade/impl/upgrade-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/install/impl/InstallSystemServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/install/impl/install-system-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy/impl/DiyServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/diy/impl/diy-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy/impl/DiyRouteServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/diy/impl/diy-route-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy/impl/DiyConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/diy/impl/diy-config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy/impl/DiyThemeServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/diy/impl/diy-theme-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/verify/impl/VerifyServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/verify/impl/verify-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/verify/impl/VerifierServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/verify/impl/verifier-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/auth/impl/LoginServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/auth/impl/login-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/auth/impl/ConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/auth/impl/config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/auth/impl/AuthServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/auth/impl/auth-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberLevelServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-level-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberLabelServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-label-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberCashOutServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-cash-out-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberAccountServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-account-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberSignServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-sign-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberAddressServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-address-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/pay/impl/PayTransferServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/pay/impl/pay-transfer-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/pay/impl/PayRefundServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/pay/impl/pay-refund-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/pay/impl/PayServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/pay/impl/pay-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/pay/impl/PayChannelServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/pay/impl/pay-channel-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/niucloud/impl/CloudBuildServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/niucloud/impl/cloud-build-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/niucloud/impl/NiuCloudServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/niucloud/impl/niu-cloud-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/captcha/impl/CaptchaServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/captcha/impl/captcha-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/notice/impl/NoticeLogServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/notice/impl/notice-log-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/notice/impl/NoticeServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/notice/impl/notice-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/notice/impl/NuiSmsServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/notice/impl/nui-sms-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wechat/impl/WechatTemplateServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/wechat/impl/wechat-template-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wechat/impl/WechatConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/wechat/impl/wechat-config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wechat/impl/WechatMediaServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/wechat/impl/wechat-media-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wechat/impl/WechatMenuServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/wechat/impl/wechat-menu-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wechat/impl/WechatReplyServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/wechat/impl/wechat-reply-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/channel/impl/AdminAppServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/channel/impl/admin-app-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/generator/impl/GenerateColumnServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/generator/impl/generate-column-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/generator/impl/GenerateServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/generator/impl/generate-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy_form/impl/DiyFormConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/diy_form/impl/diy-form-config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy_form/impl/DiyFormServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/diy_form/impl/diy-form-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy_form/impl/DiyFormRecordsServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/diy_form/impl/diy-form-records-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysScheduleServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-schedule-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysPosterServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-poster-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysRoleServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-role-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SystemServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/system-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysPrinterServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-printer-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysPrinterTemplateServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-printer-template-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysUpgradeRecordsServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-upgrade-records-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysUserRoleServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-user-role-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysMenuServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-menu-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysNoticeServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-notice-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysAttachmentServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-attachment-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysBackupRecordsServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-backup-records-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysUserServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-user-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysAgreementServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-agreement-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysNoticeSmsLogServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-notice-sms-log-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysExportServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-export-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysUserLogServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-user-log-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysAreaServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-area-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysNoticeLogServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-notice-log-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/stat/impl/StatHourServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/stat/impl/stat-hour-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/stat/impl/StatServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/stat/impl/stat-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/weapp/impl/WeappConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/weapp/impl/weapp-config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/weapp/impl/WeappVersionServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/weapp/impl/weapp-version-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/weapp/impl/WeappTemplateServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/weapp/impl/weapp-template-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/site/impl/SiteServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/site/impl/site-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/site/impl/SiteAccountLogServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/site/impl/site-account-log-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/site/impl/SiteGroupServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/site/impl/site-group-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/site/impl/SiteUserServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/site/impl/site-user-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/addon/impl/AddonDevelopServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-develop-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/addon/impl/AddonLogServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-log-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/addon/impl/AddonDevelopBuildServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-develop-build-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/addon/impl/AddonServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wxoplatform/impl/OplatformServerServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/wxoplatform/impl/oplatform-server-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wxoplatform/impl/WeappVersionServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/wxoplatform/impl/weapp-version-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wxoplatform/impl/OplatformConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/wxoplatform/impl/oplatform-config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wxoplatform/impl/OplatformServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/wxoplatform/impl/oplatform-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/dict/impl/DictServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/dict/impl/dict-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/upload/impl/StorageConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/admin/upload/impl/storage-config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/diy/impl/DiyServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/diy/impl/diy-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/diy/impl/DiyFormServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/diy/impl/diy-form-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberLevelServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-level-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberCashOutServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-cash-out-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberAccountServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-account-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberSignServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-sign-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberAddressServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-address-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/agreement/impl/AgreementServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/agreement/impl/agreement-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/pay/impl/PayServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/pay/impl/pay-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/wechat/impl/WechatServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/wechat/impl/wechat-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/wechat/impl/ServeServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/wechat/impl/serve-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/channel/impl/AppServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/channel/impl/app-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/SysConfigServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/sys-config-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/SysVerifyServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/sys-verify-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/Base64ServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/base64-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/UploadServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/upload-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/TaskServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/task-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/SysAreaServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/sys-area-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/weapp/impl/ServeServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/weapp/impl/serve-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/weapp/impl/WeappServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/weapp/impl/weapp-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/login/impl/RegisterServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/login/impl/register-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/login/impl/LoginServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/login/impl/login-service.service.ts + +[❌] /Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/login/impl/AuthServiceImpl.java + → 未生成: wwjcloud/libs/wwjcloud-core/src/services/api/login/impl/auth-service.service.ts + diff --git a/wwjcloud-nest-v1/tools/java-to-nestjs-migration/service-mapping-data.json b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/service-mapping-data.json new file mode 100644 index 00000000..bd0a8345 --- /dev/null +++ b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/service-mapping-data.json @@ -0,0 +1,787 @@ +[ + { + "javaClassName": "CoreAliappConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/aliapp/impl/CoreAliappConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/aliapp/impl/core-aliapp-config-service-impl.service.ts" + }, + { + "javaClassName": "CoreScheduleServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/schedule/impl/CoreScheduleServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/schedule/impl/core-schedule-service-impl.service.ts" + }, + { + "javaClassName": "CoreAppServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/app/impl/CoreAppServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/app/impl/core-app-service-impl.service.ts" + }, + { + "javaClassName": "CoreAsyncTaskServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/app/impl/CoreAsyncTaskServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/app/impl/core-async-task-service-impl.service.ts" + }, + { + "javaClassName": "CoreQueueServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/app/impl/CoreQueueServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/app/impl/core-queue-service-impl.service.ts" + }, + { + "javaClassName": "CoreDiyServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/diy/impl/CoreDiyServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/diy/impl/core-diy-service-impl.service.ts" + }, + { + "javaClassName": "CoreSmsServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sms/impl/CoreSmsServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/sms/impl/core-sms-service-impl.service.ts" + }, + { + "javaClassName": "CoreMemberConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/member/impl/CoreMemberConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/member/impl/core-member-config-service-impl.service.ts" + }, + { + "javaClassName": "CoreMemberCashOutServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/member/impl/CoreMemberCashOutServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/member/impl/core-member-cash-out-service-impl.service.ts" + }, + { + "javaClassName": "CoreMemberAccountServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/member/impl/CoreMemberAccountServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/member/impl/core-member-account-service-impl.service.ts" + }, + { + "javaClassName": "CoreMemberLevelServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/member/impl/CoreMemberLevelServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/member/impl/core-member-level-service-impl.service.ts" + }, + { + "javaClassName": "CoreMemberServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/member/impl/CoreMemberServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/member/impl/core-member-service-impl.service.ts" + }, + { + "javaClassName": "CoreTransferSceneServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/pay/impl/CoreTransferSceneServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-transfer-scene-service-impl.service.ts" + }, + { + "javaClassName": "CorePayChannelServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/pay/impl/CorePayChannelServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-pay-channel-service-impl.service.ts" + }, + { + "javaClassName": "CorePayEventServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/pay/impl/CorePayEventServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-pay-event-service-impl.service.ts" + }, + { + "javaClassName": "CoreRefundServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/pay/impl/CoreRefundServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-refund-service-impl.service.ts" + }, + { + "javaClassName": "CoreTransferServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/pay/impl/CoreTransferServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-transfer-service-impl.service.ts" + }, + { + "javaClassName": "CorePayServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/pay/impl/CorePayServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/pay/impl/core-pay-service-impl.service.ts" + }, + { + "javaClassName": "CoreUserServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/user/impl/CoreUserServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/user/impl/core-user-service-impl.service.ts" + }, + { + "javaClassName": "DefaultCaptchaServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/captcha/impl/DefaultCaptchaServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/captcha/impl/default-captcha-service-impl.service.ts" + }, + { + "javaClassName": "CoreCaptchaImgServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/captcha/impl/CoreCaptchaImgServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/captcha/impl/core-captcha-img-service-impl.service.ts" + }, + { + "javaClassName": "CoreNoticeSmsLogServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/notice/impl/CoreNoticeSmsLogServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/notice/impl/core-notice-sms-log-service-impl.service.ts" + }, + { + "javaClassName": "CoreNoticeServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/notice/impl/CoreNoticeServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/notice/impl/core-notice-service-impl.service.ts" + }, + { + "javaClassName": "CoreWechatConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/wechat/impl/CoreWechatConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/wechat/impl/core-wechat-config-service-impl.service.ts" + }, + { + "javaClassName": "CoreWechatReplyServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/wechat/impl/CoreWechatReplyServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/wechat/impl/core-wechat-reply-service-impl.service.ts" + }, + { + "javaClassName": "CoreAppCloudServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/channel/impl/CoreAppCloudServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/channel/impl/core-app-cloud-service-impl.service.ts" + }, + { + "javaClassName": "CoreH5ServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/channel/impl/CoreH5ServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/channel/impl/core-h5-service-impl.service.ts" + }, + { + "javaClassName": "CoreAppServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/channel/impl/CoreAppServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/channel/impl/core-app-service-impl.service.ts" + }, + { + "javaClassName": "CorePcServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/channel/impl/CorePcServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/channel/impl/core-pc-service-impl.service.ts" + }, + { + "javaClassName": "CoreDiyFormConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/diy_form/impl/CoreDiyFormConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/diy_form/impl/core-diy-form-config-service-impl.service.ts" + }, + { + "javaClassName": "CoreDiyFormRecordsServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/diy_form/impl/CoreDiyFormRecordsServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/diy_form/impl/core-diy-form-records-service-impl.service.ts" + }, + { + "javaClassName": "CoreScanServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sys/impl/CoreScanServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/sys/impl/core-scan-service-impl.service.ts" + }, + { + "javaClassName": "CoreConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sys/impl/CoreConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/sys/impl/core-config-service-impl.service.ts" + }, + { + "javaClassName": "CoreMenuServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sys/impl/CoreMenuServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/sys/impl/core-menu-service-impl.service.ts" + }, + { + "javaClassName": "CoreUploadServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sys/impl/CoreUploadServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/sys/impl/core-upload-service-impl.service.ts" + }, + { + "javaClassName": "CoreAgreementServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sys/impl/CoreAgreementServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/sys/impl/core-agreement-service-impl.service.ts" + }, + { + "javaClassName": "CoreSysConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sys/impl/CoreSysConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/sys/impl/core-sys-config-service-impl.service.ts" + }, + { + "javaClassName": "CoreExportServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sys/impl/CoreExportServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/sys/impl/core-export-service-impl.service.ts" + }, + { + "javaClassName": "CorePrinterServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/sys/impl/CorePrinterServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/sys/impl/core-printer-service-impl.service.ts" + }, + { + "javaClassName": "CoreWeappDeliveryServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/weapp/impl/CoreWeappDeliveryServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/weapp/impl/core-weapp-delivery-service-impl.service.ts" + }, + { + "javaClassName": "CoreWeappCloudServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/weapp/impl/CoreWeappCloudServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/weapp/impl/core-weapp-cloud-service-impl.service.ts" + }, + { + "javaClassName": "CoreWeappServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/weapp/impl/CoreWeappServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/weapp/impl/core-weapp-service-impl.service.ts" + }, + { + "javaClassName": "CoreWeappConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/weapp/impl/CoreWeappConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/weapp/impl/core-weapp-config-service-impl.service.ts" + }, + { + "javaClassName": "CoreSiteServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/site/impl/CoreSiteServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/site/impl/core-site-service-impl.service.ts" + }, + { + "javaClassName": "CoreSiteAccountServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/site/impl/CoreSiteAccountServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/site/impl/core-site-account-service-impl.service.ts" + }, + { + "javaClassName": "CoreAddonInstallServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/addon/impl/CoreAddonInstallServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/addon/impl/core-addon-install-service-impl.service.ts" + }, + { + "javaClassName": "CoreAddonServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/addon/impl/CoreAddonServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/addon/impl/core-addon-service-impl.service.ts" + }, + { + "javaClassName": "CoreOplatformServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/wxoplatform/impl/CoreOplatformServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/wxoplatform/impl/core-oplatform-service-impl.service.ts" + }, + { + "javaClassName": "CoreOplatformStaticConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/wxoplatform/impl/CoreOplatformStaticConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/wxoplatform/impl/core-oplatform-static-config-service-impl.service.ts" + }, + { + "javaClassName": "CorePosterServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/poster/impl/CorePosterServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/poster/impl/core-poster-service-impl.service.ts" + }, + { + "javaClassName": "CoreBase64ServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/upload/impl/CoreBase64ServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/upload/impl/core-base64-service-impl.service.ts" + }, + { + "javaClassName": "CoreStorageServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/upload/impl/CoreStorageServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/upload/impl/core-storage-service-impl.service.ts" + }, + { + "javaClassName": "CoreFetchServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/core/upload/impl/CoreFetchServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/core/upload/impl/core-fetch-service-impl.service.ts" + }, + { + "javaClassName": "AuthSiteServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/home/impl/AuthSiteServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/home/impl/auth-site-service-impl.service.ts" + }, + { + "javaClassName": "AliappConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/aliapp/impl/AliappConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/aliapp/impl/aliapp-config-service-impl.service.ts" + }, + { + "javaClassName": "UpgradeServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/upgrade/impl/UpgradeServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/upgrade/impl/upgrade-service-impl.service.ts" + }, + { + "javaClassName": "DiyServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy/impl/DiyServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/diy/impl/diy-service-impl.service.ts" + }, + { + "javaClassName": "DiyRouteServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy/impl/DiyRouteServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/diy/impl/diy-route-service-impl.service.ts" + }, + { + "javaClassName": "DiyConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy/impl/DiyConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/diy/impl/diy-config-service-impl.service.ts" + }, + { + "javaClassName": "DiyThemeServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy/impl/DiyThemeServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/diy/impl/diy-theme-service-impl.service.ts" + }, + { + "javaClassName": "VerifyServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/verify/impl/VerifyServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/verify/impl/verify-service-impl.service.ts" + }, + { + "javaClassName": "VerifierServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/verify/impl/VerifierServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/verify/impl/verifier-service-impl.service.ts" + }, + { + "javaClassName": "LoginServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/auth/impl/LoginServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/auth/impl/login-service-impl.service.ts" + }, + { + "javaClassName": "ConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/auth/impl/ConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/auth/impl/config-service-impl.service.ts" + }, + { + "javaClassName": "AuthServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/auth/impl/AuthServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/auth/impl/auth-service-impl.service.ts" + }, + { + "javaClassName": "MemberLevelServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberLevelServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-level-service-impl.service.ts" + }, + { + "javaClassName": "MemberServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-service-impl.service.ts" + }, + { + "javaClassName": "MemberLabelServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberLabelServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-label-service-impl.service.ts" + }, + { + "javaClassName": "MemberCashOutServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberCashOutServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-cash-out-service-impl.service.ts" + }, + { + "javaClassName": "MemberAccountServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberAccountServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-account-service-impl.service.ts" + }, + { + "javaClassName": "MemberSignServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberSignServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-sign-service-impl.service.ts" + }, + { + "javaClassName": "MemberConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-config-service-impl.service.ts" + }, + { + "javaClassName": "MemberAddressServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/member/impl/MemberAddressServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/member/impl/member-address-service-impl.service.ts" + }, + { + "javaClassName": "PayTransferServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/pay/impl/PayTransferServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/pay/impl/pay-transfer-service-impl.service.ts" + }, + { + "javaClassName": "PayRefundServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/pay/impl/PayRefundServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/pay/impl/pay-refund-service-impl.service.ts" + }, + { + "javaClassName": "PayServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/pay/impl/PayServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/pay/impl/pay-service-impl.service.ts" + }, + { + "javaClassName": "PayChannelServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/pay/impl/PayChannelServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/pay/impl/pay-channel-service-impl.service.ts" + }, + { + "javaClassName": "CloudBuildServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/niucloud/impl/CloudBuildServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/niucloud/impl/cloud-build-service-impl.service.ts" + }, + { + "javaClassName": "NiuCloudServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/niucloud/impl/NiuCloudServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/niucloud/impl/niu-cloud-service-impl.service.ts" + }, + { + "javaClassName": "CaptchaServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/captcha/impl/CaptchaServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/captcha/impl/captcha-service-impl.service.ts" + }, + { + "javaClassName": "NoticeLogServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/notice/impl/NoticeLogServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/notice/impl/notice-log-service-impl.service.ts" + }, + { + "javaClassName": "NoticeServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/notice/impl/NoticeServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/notice/impl/notice-service-impl.service.ts" + }, + { + "javaClassName": "NuiSmsServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/notice/impl/NuiSmsServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/notice/impl/nui-sms-service-impl.service.ts" + }, + { + "javaClassName": "WechatTemplateServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wechat/impl/WechatTemplateServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/wechat/impl/wechat-template-service-impl.service.ts" + }, + { + "javaClassName": "WechatConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wechat/impl/WechatConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/wechat/impl/wechat-config-service-impl.service.ts" + }, + { + "javaClassName": "WechatMediaServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wechat/impl/WechatMediaServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/wechat/impl/wechat-media-service-impl.service.ts" + }, + { + "javaClassName": "WechatMenuServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wechat/impl/WechatMenuServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/wechat/impl/wechat-menu-service-impl.service.ts" + }, + { + "javaClassName": "WechatReplyServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wechat/impl/WechatReplyServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/wechat/impl/wechat-reply-service-impl.service.ts" + }, + { + "javaClassName": "AdminAppServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/channel/impl/AdminAppServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/channel/impl/admin-app-service-impl.service.ts" + }, + { + "javaClassName": "GenerateColumnServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/generator/impl/GenerateColumnServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/generator/impl/generate-column-service-impl.service.ts" + }, + { + "javaClassName": "GenerateServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/generator/impl/GenerateServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/generator/impl/generate-service-impl.service.ts" + }, + { + "javaClassName": "DiyFormConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy_form/impl/DiyFormConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/diy_form/impl/diy-form-config-service-impl.service.ts" + }, + { + "javaClassName": "DiyFormServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy_form/impl/DiyFormServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/diy_form/impl/diy-form-service-impl.service.ts" + }, + { + "javaClassName": "DiyFormRecordsServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/diy_form/impl/DiyFormRecordsServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/diy_form/impl/diy-form-records-service-impl.service.ts" + }, + { + "javaClassName": "SysScheduleServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysScheduleServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-schedule-service-impl.service.ts" + }, + { + "javaClassName": "SysPosterServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysPosterServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-poster-service-impl.service.ts" + }, + { + "javaClassName": "SysConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-config-service-impl.service.ts" + }, + { + "javaClassName": "SysRoleServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysRoleServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-role-service-impl.service.ts" + }, + { + "javaClassName": "SystemServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SystemServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/system-service-impl.service.ts" + }, + { + "javaClassName": "SysPrinterServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysPrinterServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-printer-service-impl.service.ts" + }, + { + "javaClassName": "SysPrinterTemplateServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysPrinterTemplateServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-printer-template-service-impl.service.ts" + }, + { + "javaClassName": "SysUpgradeRecordsServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysUpgradeRecordsServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-upgrade-records-service-impl.service.ts" + }, + { + "javaClassName": "SysUserRoleServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysUserRoleServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-user-role-service-impl.service.ts" + }, + { + "javaClassName": "SysMenuServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysMenuServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-menu-service-impl.service.ts" + }, + { + "javaClassName": "SysNoticeServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysNoticeServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-notice-service-impl.service.ts" + }, + { + "javaClassName": "SysAttachmentServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysAttachmentServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-attachment-service-impl.service.ts" + }, + { + "javaClassName": "SysBackupRecordsServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysBackupRecordsServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-backup-records-service-impl.service.ts" + }, + { + "javaClassName": "SysUserServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysUserServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-user-service-impl.service.ts" + }, + { + "javaClassName": "SysAgreementServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysAgreementServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-agreement-service-impl.service.ts" + }, + { + "javaClassName": "SysNoticeSmsLogServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysNoticeSmsLogServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-notice-sms-log-service-impl.service.ts" + }, + { + "javaClassName": "SysExportServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysExportServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-export-service-impl.service.ts" + }, + { + "javaClassName": "SysUserLogServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysUserLogServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-user-log-service-impl.service.ts" + }, + { + "javaClassName": "SysAreaServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysAreaServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-area-service-impl.service.ts" + }, + { + "javaClassName": "SysNoticeLogServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/sys/impl/SysNoticeLogServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/sys/impl/sys-notice-log-service-impl.service.ts" + }, + { + "javaClassName": "StatHourServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/stat/impl/StatHourServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/stat/impl/stat-hour-service-impl.service.ts" + }, + { + "javaClassName": "StatServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/stat/impl/StatServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/stat/impl/stat-service-impl.service.ts" + }, + { + "javaClassName": "WeappConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/weapp/impl/WeappConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/weapp/impl/weapp-config-service-impl.service.ts" + }, + { + "javaClassName": "WeappVersionServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/weapp/impl/WeappVersionServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/weapp/impl/weapp-version-service-impl.service.ts" + }, + { + "javaClassName": "WeappTemplateServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/weapp/impl/WeappTemplateServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/weapp/impl/weapp-template-service-impl.service.ts" + }, + { + "javaClassName": "SiteServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/site/impl/SiteServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/site/impl/site-service-impl.service.ts" + }, + { + "javaClassName": "SiteAccountLogServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/site/impl/SiteAccountLogServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/site/impl/site-account-log-service-impl.service.ts" + }, + { + "javaClassName": "SiteGroupServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/site/impl/SiteGroupServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/site/impl/site-group-service-impl.service.ts" + }, + { + "javaClassName": "SiteUserServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/site/impl/SiteUserServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/site/impl/site-user-service-impl.service.ts" + }, + { + "javaClassName": "AddonDevelopServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/addon/impl/AddonDevelopServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-develop-service-impl.service.ts" + }, + { + "javaClassName": "AddonLogServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/addon/impl/AddonLogServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-log-service-impl.service.ts" + }, + { + "javaClassName": "AddonDevelopBuildServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/addon/impl/AddonDevelopBuildServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-develop-build-service-impl.service.ts" + }, + { + "javaClassName": "AddonServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/addon/impl/AddonServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-service-impl.service.ts" + }, + { + "javaClassName": "OplatformServerServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wxoplatform/impl/OplatformServerServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/wxoplatform/impl/oplatform-server-service-impl.service.ts" + }, + { + "javaClassName": "WeappVersionServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wxoplatform/impl/WeappVersionServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/wxoplatform/impl/weapp-version-service-impl.service.ts" + }, + { + "javaClassName": "OplatformConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wxoplatform/impl/OplatformConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/wxoplatform/impl/oplatform-config-service-impl.service.ts" + }, + { + "javaClassName": "OplatformServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/wxoplatform/impl/OplatformServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/wxoplatform/impl/oplatform-service-impl.service.ts" + }, + { + "javaClassName": "DictServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/dict/impl/DictServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/dict/impl/dict-service-impl.service.ts" + }, + { + "javaClassName": "StorageConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/admin/upload/impl/StorageConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/admin/upload/impl/storage-config-service-impl.service.ts" + }, + { + "javaClassName": "DiyServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/diy/impl/DiyServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/diy/impl/diy-service-impl.service.ts" + }, + { + "javaClassName": "DiyFormServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/diy/impl/DiyFormServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/diy/impl/diy-form-service-impl.service.ts" + }, + { + "javaClassName": "MemberLevelServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberLevelServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-level-service-impl.service.ts" + }, + { + "javaClassName": "MemberServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-service-impl.service.ts" + }, + { + "javaClassName": "MemberCashOutServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberCashOutServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-cash-out-service-impl.service.ts" + }, + { + "javaClassName": "MemberAccountServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberAccountServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-account-service-impl.service.ts" + }, + { + "javaClassName": "MemberSignServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberSignServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-sign-service-impl.service.ts" + }, + { + "javaClassName": "MemberAddressServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberAddressServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-address-service-impl.service.ts" + }, + { + "javaClassName": "AgreementServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/agreement/impl/AgreementServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/agreement/impl/agreement-service-impl.service.ts" + }, + { + "javaClassName": "PayServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/pay/impl/PayServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/pay/impl/pay-service-impl.service.ts" + }, + { + "javaClassName": "WechatServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/wechat/impl/WechatServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/wechat/impl/wechat-service-impl.service.ts" + }, + { + "javaClassName": "ServeServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/wechat/impl/ServeServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/wechat/impl/serve-service-impl.service.ts" + }, + { + "javaClassName": "AppServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/channel/impl/AppServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/channel/impl/app-service-impl.service.ts" + }, + { + "javaClassName": "SysConfigServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/SysConfigServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/sys-config-service-impl.service.ts" + }, + { + "javaClassName": "SysVerifyServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/SysVerifyServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/sys-verify-service-impl.service.ts" + }, + { + "javaClassName": "Base64ServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/Base64ServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/base64-service-impl.service.ts" + }, + { + "javaClassName": "UploadServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/UploadServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/upload-service-impl.service.ts" + }, + { + "javaClassName": "TaskServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/TaskServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/task-service-impl.service.ts" + }, + { + "javaClassName": "SysAreaServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/sys/impl/SysAreaServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/sys/impl/sys-area-service-impl.service.ts" + }, + { + "javaClassName": "ServeServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/weapp/impl/ServeServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/weapp/impl/serve-service-impl.service.ts" + }, + { + "javaClassName": "WeappServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/weapp/impl/WeappServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/weapp/impl/weapp-service-impl.service.ts" + }, + { + "javaClassName": "RegisterServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/login/impl/RegisterServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/login/impl/register-service-impl.service.ts" + }, + { + "javaClassName": "LoginServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/login/impl/LoginServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/login/impl/login-service-impl.service.ts" + }, + { + "javaClassName": "AuthServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/login/impl/AuthServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/login/impl/auth-service-impl.service.ts" + } +] \ No newline at end of file diff --git a/wwjcloud-nest-v1/tools/java-to-nestjs-migration/still-need-fix.json b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/still-need-fix.json new file mode 100644 index 00000000..853e3a2a --- /dev/null +++ b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/still-need-fix.json @@ -0,0 +1,7 @@ +[ + { + "javaClassName": "MemberSignServiceImpl", + "javaFile": "/Users/wanwu/Documents/wanwujie/wwjcloud-nsetjs/niucloud-java/niucloud-core/src/main/java/com/niu/core/service/api/member/impl/MemberSignServiceImpl.java", + "nestjsFile": "wwjcloud/libs/wwjcloud-core/src/services/api/member/impl/member-sign-service-impl.service.ts" + } +] \ No newline at end of file diff --git a/wwjcloud-nest-v1/tools/java-to-nestjs-migration/utils/naming-utils.js b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/utils/naming-utils.js index 85f268b3..301a70e2 100644 --- a/wwjcloud-nest-v1/tools/java-to-nestjs-migration/utils/naming-utils.js +++ b/wwjcloud-nest-v1/tools/java-to-nestjs-migration/utils/naming-utils.js @@ -1,14 +1,21 @@ /** * 命名规范工具 - * 严格遵循NestJS官方规范 + * 严格遵循 NAMING-CONVENTIONS.md 规范 + * + * 命名规范: + * - 文件名:kebab-case(小写+连字符)+ 后缀 + * - 类名:PascalCase(首字母大写驼峰) + * - 变量名/方法名:camelCase(首字母小写驼峰) + * - 常量名:UPPER_SNAKE_CASE(全大写下划线) + * - 目录名:小写 */ class NamingUtils { constructor() { - // NestJS命名规范 + // 命名规范(符合 NAMING-CONVENTIONS.md) this.namingRules = { // 类名:PascalCase className: 'PascalCase', - // 文件名:kebab-case.ts + // 文件名:kebab-case.ts(符合 NAMING-CONVENTIONS.md) fileName: 'kebab-case.ts', // 方法名:camelCase methodName: 'camelCase', @@ -19,7 +26,9 @@ class NamingUtils { // 枚举名:PascalCase enumName: 'PascalCase', // 接口名:PascalCase - interfaceName: 'PascalCase' + interfaceName: 'PascalCase', + // 目录名:小写 + directoryName: 'lowercase' }; } @@ -56,6 +65,8 @@ class NamingUtils { /** * 转换为kebab-case(文件名) + * 符合 NAMING-CONVENTIONS.md 规范:小写+连字符 + * 示例:WwjcloudConfigVoDto -> wwjcloud-config-vo-dto */ toKebabCase(str) { if (!str) return ''; @@ -66,6 +77,16 @@ class NamingUtils { .replace(/^-/, ''); } + /** + * 转换为camelCase(文件名 - 备用方法) + * 注意:当前项目统一使用 kebab-case,此方法仅作为备用 + */ + toCamelCaseForFileName(str) { + if (!str) return ''; + const pascalCase = this.toPascalCase(str); + return pascalCase.charAt(0).toLowerCase() + pascalCase.slice(1); + } + /** * 转换为UPPER_SNAKE_CASE(常量名) */ @@ -99,9 +120,13 @@ class NamingUtils { /** * 生成符合NestJS规范的文件名 + * 严格遵循 NAMING-CONVENTIONS.md 规范:kebab-case + 后缀 + * 示例:AddonServiceImpl -> addon-service-impl.service.ts + * WwjcloudConfigVo -> wwjcloud-config-vo.dto.ts */ generateFileName(javaClassName, type) { const className = this.generateClassName(javaClassName); + // 使用 kebab-case(小写+连字符),符合 NAMING-CONVENTIONS.md const kebabName = this.toKebabCase(className); // 根据类型添加后缀 diff --git a/wwjcloud-nest-v1/tools/niucloud-to-wwjcloud-converter.js b/wwjcloud-nest-v1/tools/niucloud-to-wwjcloud-converter.js new file mode 100755 index 00000000..2838984f --- /dev/null +++ b/wwjcloud-nest-v1/tools/niucloud-to-wwjcloud-converter.js @@ -0,0 +1,430 @@ +#!/usr/bin/env node + +/** + * Niucloud 到 Wwjcloud 转换工具 + * + * 功能: + * 1. 批量替换代码中的命名(NiucloudUtils → WwjcloudUtils等) + * 2. 批量替换域名(niucloud.com → wwjcloud.com) + * 3. 移动/重命名文件和目录 + * 4. 更新导入路径 + */ + +const fs = require('fs'); +const path = require('path'); +const { glob } = require('glob'); + +// 颜色输出 +const colors = { + reset: '\x1b[0m', + green: '\x1b[32m', + yellow: '\x1b[33m', + red: '\x1b[31m', + blue: '\x1b[34m', + cyan: '\x1b[36m', +}; + +function log(message, color = 'reset') { + console.log(`${colors[color]}${message}${colors.reset}`); +} + +// 转换配置 +const CONFIG = { + // 命名映射 + namingMap: { + // 类名/接口名 + 'NiucloudUtils': 'WwjcloudUtils', + 'INiucloudService': 'WwjcloudService', + 'ICoreNiucloudConfigService': 'CoreWwjcloudConfigService', + 'ICloudBuildService': 'CloudBuildService', + 'NiuCloudServiceImpl': 'WwjcloudServiceImpl', + 'CloudBuildServiceImpl': 'CloudBuildServiceImpl', // 保持不变 + 'NiucloudConfigVo': 'WwjcloudConfigVo', + 'SetAuthorizeParam': 'SetAuthorizeParam', // 保持不变 + + // 变量名/方法名 + 'niucloudService': 'wwjcloudService', + 'coreNiucloudConfigService': 'coreWwjcloudConfigService', + 'cloudBuildService': 'cloudBuildService', // 保持不变 + 'niucloudConfigService': 'wwjcloudConfigService', + 'niucloud_access_token': 'wwjcloud_access_token', + + // 文件名/路径 + 'niucloud': 'wwjcloud', + 'Niucloud': 'Wwjcloud', + }, + + // 域名映射 + domainMap: { + 'api.niucloud.com': 'api.wwjcloud.com', + 'java.oss.niucloud.com': 'java.oss.wwjcloud.com', + 'oss.niucloud.com': 'oss.wwjcloud.com', + 'niucloud.com': 'wwjcloud.com', + }, + + // 文件路径映射 + pathMap: { + // DTO路径 + 'dtos/core/niucloud': 'dtos/core/wwjcloud', + 'dtos/admin/niucloud': 'dtos/admin/wwjcloud', + + // Service路径 + 'services/admin/niucloud': 'services/admin/wwjcloud', + 'services/core/niucloud': 'services/core/wwjcloud', + + // Controller路径 + 'controllers/admin/niucloud': 'controllers/admin/wwjcloud', + + // 工具类路径(Boot层) + 'vendor/utils/niucloud.utils': 'vendor/utils/wwjcloud.utils', + }, + + // 需要处理的文件扩展名 + fileExtensions: ['.ts', '.js', '.json', '.md'], + + // 需要排除的目录 + excludeDirs: ['node_modules', '.git', 'dist', 'build', '.next', 'coverage'], + + // 工作目录(相对于工具目录) + rootDir: path.join(__dirname, '../wwjcloud/libs/wwjcloud-core/src'), + bootDir: path.join(__dirname, '../wwjcloud/libs/wwjcloud-boot/src'), +}; + +// 统计信息 +const stats = { + filesProcessed: 0, + filesRenamed: 0, + filesMoved: 0, + replacements: 0, + errors: [], +}; + +/** + * 检查是否应该排除此路径 + */ +function shouldExclude(filePath) { + return CONFIG.excludeDirs.some(dir => filePath.includes(dir)); +} + +/** + * 替换文件内容 + */ +function replaceFileContent(filePath) { + try { + let content = fs.readFileSync(filePath, 'utf8'); + let modified = false; + let replacements = 0; + + // 1. 替换命名 + for (const [oldName, newName] of Object.entries(CONFIG.namingMap)) { + if (oldName === newName) continue; // 跳过相同的映射 + + // 使用单词边界确保精确匹配 + const regex = new RegExp(`\\b${escapeRegex(oldName)}\\b`, 'g'); + const matches = content.match(regex); + if (matches) { + content = content.replace(regex, newName); + replacements += matches.length; + modified = true; + } + } + + // 2. 替换域名 + for (const [oldDomain, newDomain] of Object.entries(CONFIG.domainMap)) { + if (content.includes(oldDomain)) { + content = content.replace(new RegExp(escapeRegex(oldDomain), 'g'), newDomain); + replacements++; + modified = true; + } + } + + // 3. 替换导入路径中的 niucloud → wwjcloud + const importPathRegex = /(['"`])([^'"`]*niucloud[^'"`]*)\1/g; + const importMatches = [...content.matchAll(importPathRegex)]; + if (importMatches.length > 0) { + content = content.replace(importPathRegex, (match, quote, path) => { + const newPath = path.replace(/niucloud/gi, 'wwjcloud'); + return quote + newPath + quote; + }); + replacements += importMatches.length; + modified = true; + } + + // 4. 替换注释中的 Niucloud → Wwjcloud + const commentRegex = /\/\*\*?[\s\S]*?\*\/|\/\/.*/g; + content = content.replace(commentRegex, (comment) => { + if (comment.includes('niucloud') || comment.includes('Niucloud')) { + let newComment = comment.replace(/niucloud/gi, 'wwjcloud'); + newComment = newComment.replace(/Niucloud/gi, 'Wwjcloud'); + return newComment; + } + return comment; + }); + + if (modified) { + fs.writeFileSync(filePath, content, 'utf8'); + stats.replacements += replacements; + return true; + } + + return false; + } catch (error) { + stats.errors.push({ file: filePath, error: error.message }); + log(` ❌ 错误处理文件: ${filePath} - ${error.message}`, 'red'); + return false; + } +} + +/** + * 转义正则表达式特殊字符 + */ +function escapeRegex(str) { + return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +} + +/** + * 移动/重命名文件 + */ +function moveOrRenameFile(oldPath, newPath) { + try { + // 确保目标目录存在 + const targetDir = path.dirname(newPath); + if (!fs.existsSync(targetDir)) { + fs.mkdirSync(targetDir, { recursive: true }); + } + + // 移动文件 + fs.renameSync(oldPath, newPath); + + // 如果是目录,更新统计 + if (fs.statSync(newPath).isDirectory()) { + stats.filesMoved++; + } else { + stats.filesRenamed++; + } + + return true; + } catch (error) { + stats.errors.push({ file: oldPath, error: error.message }); + log(` ❌ 移动文件失败: ${oldPath} → ${newPath} - ${error.message}`, 'red'); + return false; + } +} + +/** + * 处理文件路径映射(移动/重命名文件) + */ +async function processFilePaths() { + log('\n📁 处理文件路径映射...', 'cyan'); + + const filesToMove = []; + + // 查找所有需要移动的文件 + for (const [oldPath, newPath] of Object.entries(CONFIG.pathMap)) { + const fullOldPath = path.join(CONFIG.rootDir, oldPath); + + if (fs.existsSync(fullOldPath)) { + const fullNewPath = path.join(CONFIG.rootDir, newPath); + + // 递归查找该目录下的所有文件 + const files = await glob('**/*', { + cwd: fullOldPath, + absolute: true, + ignore: CONFIG.excludeDirs.map(d => `**/${d}/**`), + }); + + files.forEach(file => { + const relativePath = path.relative(fullOldPath, file); + const newFile = path.join(fullNewPath, relativePath); + filesToMove.push({ old: file, new: newFile }); + }); + } + } + + // 从最深路径开始处理,避免路径冲突 + filesToMove.sort((a, b) => b.old.split(path.sep).length - a.old.split(path.sep).length); + + for (const { old: oldPath, new: newPath } of filesToMove) { + if (fs.existsSync(oldPath)) { + log(` 📦 ${path.relative(CONFIG.rootDir, oldPath)} → ${path.relative(CONFIG.rootDir, newPath)}`, 'yellow'); + moveOrRenameFile(oldPath, newPath); + } + } + + // 删除空目录 + for (const [oldPath] of Object.entries(CONFIG.pathMap)) { + const fullOldPath = path.join(CONFIG.rootDir, oldPath); + if (fs.existsSync(fullOldPath)) { + try { + const files = fs.readdirSync(fullOldPath); + if (files.length === 0) { + fs.rmdirSync(fullOldPath); + log(` 🗑️ 删除空目录: ${path.relative(CONFIG.rootDir, fullOldPath)}`, 'yellow'); + } + } catch (error) { + // 忽略删除目录错误 + } + } + } +} + +/** + * 处理文件内容替换 + */ +async function processFileContent() { + log('\n📝 处理文件内容替换...', 'cyan'); + + // 处理 core 层 + const coreFiles = await glob('**/*.{ts,js,json,md}', { + cwd: CONFIG.rootDir, + absolute: true, + ignore: CONFIG.excludeDirs.map(d => `**/${d}/**`), + }); + + // 处理 boot 层 + const bootFiles = await glob('**/*.{ts,js,json,md}', { + cwd: CONFIG.bootDir, + absolute: true, + ignore: CONFIG.excludeDirs.map(d => `**/${d}/**`), + }); + + const allFiles = [...coreFiles, ...bootFiles]; + + for (const file of allFiles) { + if (shouldExclude(file)) continue; + + if (replaceFileContent(file)) { + stats.filesProcessed++; + const relativePath = path.relative(path.dirname(file).includes('boot') ? CONFIG.bootDir : CONFIG.rootDir, file); + log(` ✏️ ${relativePath}`, 'green'); + } + } +} + +/** + * 重命名文件名中的 niucloud + */ +async function renameFiles() { + log('\n🔄 重命名文件...', 'cyan'); + + // 查找所有包含 niucloud 的文件名 + const files = await glob('**/*niucloud*', { + cwd: CONFIG.rootDir, + absolute: true, + ignore: CONFIG.excludeDirs.map(d => `**/${d}/**`), + }); + + // 也查找boot层的文件 + const bootFiles = await glob('**/*niucloud*', { + cwd: CONFIG.bootDir, + absolute: true, + ignore: CONFIG.excludeDirs.map(d => `**/${d}/**`), + }); + + const allFiles = [...files, ...bootFiles]; + + for (const file of allFiles) { + const dir = path.dirname(file); + const basename = path.basename(file); + + // 处理大小写:保持首字母大写(如果原文件是) + // niucloud → wwjcloud (全小写) + // Niucloud → Wwjcloud (首字母大写) + // NIUCLOUD → WWJCLOUD (全大写) + let newBasename = basename; + + // 处理全大写 + if (basename.includes('NIUCLOUD')) { + newBasename = newBasename.replace(/NIUCLOUD/g, 'WWJCLOUD'); + } + // 处理首字母大写(Niucloud) + else if (basename.includes('Niucloud')) { + newBasename = newBasename.replace(/Niucloud/g, 'Wwjcloud'); + } + // 处理全小写(niucloud) + else if (basename.includes('niucloud')) { + newBasename = newBasename.replace(/niucloud/g, 'wwjcloud'); + } + + // 特殊处理:修复 TO-WWJCLOUD 这种混合大小写问题 + if (newBasename.match(/wwjcloud-TO-WWJCLOUD|wwjcloud-TO-wwjcloud/i)) { + // 将 wwjcloud-TO-WWJCLOUD-ANALYSIS.md 改为 WWJCLOUD-ANALYSIS.md + newBasename = newBasename.replace(/wwjcloud-TO-WWJCLOUD/gi, 'WWJCLOUD'); + newBasename = newBasename.replace(/wwjcloud-TO-wwjcloud/gi, 'WWJCLOUD'); + newBasename = newBasename.replace(/-TO-WWJCLOUD/gi, ''); + newBasename = newBasename.replace(/-TO-wwjcloud/gi, ''); + // 清理多余的连字符 + newBasename = newBasename.replace(/--+/g, '-'); + newBasename = newBasename.replace(/^-+|-+$/g, ''); + } + + if (basename !== newBasename) { + const newPath = path.join(dir, newBasename); + const rootPath = file.includes('boot') ? CONFIG.bootDir : CONFIG.rootDir; + log(` 📝 ${path.relative(rootPath, file)} → ${path.relative(rootPath, newPath)}`, 'yellow'); + moveOrRenameFile(file, newPath); + } + } +} + +/** + * 生成转换报告 + */ +function generateReport() { + log('\n' + '='.repeat(60), 'cyan'); + log('📊 转换报告', 'cyan'); + log('='.repeat(60), 'cyan'); + + log(`\n✅ 处理的文件: ${stats.filesProcessed}`, 'green'); + log(`📝 替换的内容: ${stats.replacements} 处`, 'green'); + log(`🔄 重命名的文件: ${stats.filesRenamed}`, 'green'); + log(`📦 移动的文件/目录: ${stats.filesMoved}`, 'green'); + + if (stats.errors.length > 0) { + log(`\n❌ 错误数量: ${stats.errors.length}`, 'red'); + stats.errors.forEach(err => { + log(` - ${err.file}: ${err.error}`, 'red'); + }); + } else { + log(`\n✅ 没有错误!`, 'green'); + } + + log('\n' + '='.repeat(60) + '\n', 'cyan'); +} + +/** + * 主函数 + */ +async function main() { + log('🚀 Niucloud → Wwjcloud 转换工具', 'cyan'); + log('='.repeat(60), 'cyan'); + + try { + // 1. 处理文件路径映射(移动/重命名目录) + await processFilePaths(); + + // 2. 重命名文件名 + await renameFiles(); + + // 3. 处理文件内容替换 + await processFileContent(); + + // 4. 生成报告 + generateReport(); + + log('✨ 转换完成!', 'green'); + + } catch (error) { + log(`\n❌ 转换过程中发生错误: ${error.message}`, 'red'); + console.error(error); + process.exit(1); + } +} + +// 执行 +if (require.main === module) { + main(); +} + +module.exports = { main, CONFIG }; + diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/config/app-config.service.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/config/app-config.service.ts index b73945d7..5d27f4ce 100644 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/config/app-config.service.ts +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/config/app-config.service.ts @@ -29,7 +29,7 @@ export class AppConfigService { * 对应 Java: GlobalConfig.applicationName */ get applicationName(): string { - return this.configService.get('APP_NAME', 'niucloud-admin'); + return this.configService.get('APP_NAME', 'wwjcloud-admin'); } /** @@ -73,7 +73,7 @@ export class AppConfigService { * 对应 Java: GlobalConfig.appKey */ get appKey(): string { - return 'niucloud-admin'; + return 'wwjcloud-admin'; } /** @@ -137,11 +137,11 @@ export class AppConfigService { } /** - * niucloud插件目录 - * 对应 Java: WebAppEnvs.get().projectNiucloudAddon + * wwjcloud插件目录 + * 对应 Java: WebAppEnvs.get().projectwwjcloudAddon */ get projectNiucloudAddon(): string { - return path.join(this.projectRoot, 'niucloud-addon/'); + return path.join(this.projectRoot, 'wwjcloud-addon/'); } /** diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/vendor/utils/image.utils.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/vendor/utils/image.utils.ts new file mode 100644 index 00000000..384537a9 --- /dev/null +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/vendor/utils/image.utils.ts @@ -0,0 +1,56 @@ +import * as fs from 'fs'; +import * as path from 'path'; + +/** + * Image utilities - 从Java ImageUtils迁移 + * 原始Java文件: com.niu.core.common.utils.image.ImageUtils + */ +export class ImageUtils { + /** + * 将图片文件转换为Base64字符串 + * 严格对齐Java: ImageUtils.imageToBase64() + * @param imagePath 图片文件路径 + * @returns Base64编码的图片字符串,如果文件不存在则返回空字符串 + */ + static imageToBase64(imagePath: string): string { + try { + if (!fs.existsSync(imagePath)) { + return ''; + } + + // 对应Java: byte[] imageBytes = Files.readAllBytes(Paths.get(path)) + const imageBuffer = fs.readFileSync(imagePath); + + // 对应Java: String base64Image = Base64.getEncoder().encodeToString(imageBytes) + const base64Image = imageBuffer.toString('base64'); + + // 对应Java: return "data:image/"+ getImageExt(path) +";base64," + base64Image + const imageExt = this.getImageExt(imagePath); + return `data:image/${imageExt};base64,${base64Image}`; + } catch (error) { + // 对应Java: catch (Exception e) { return ""; } + return ''; + } + } + + /** + * 获取图片后缀 + * 严格对齐Java: ImageUtils.getImageExt() + * @param fileName 文件名或路径 + * @returns 图片扩展名(不含点号),如果不存在则返回空字符串 + */ + static getImageExt(fileName: string): string { + // 对应Java: int lastIndexOfDot = fileName.lastIndexOf('.') + const ext = path.extname(fileName); + + // 对应Java: if (lastIndexOfDot > 0 && lastIndexOfDot < fileName.length() - 1) + if (ext && ext.length > 1) { + // 对应Java: return fileName.substring(lastIndexOfDot + 1) + return ext.substring(1); // 去掉点号 + } else { + // 对应Java: return "" + return ''; + } + } +} + diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/vendor/utils/index.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/vendor/utils/index.ts index 97eae7f3..97b1b03e 100644 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/vendor/utils/index.ts +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/vendor/utils/index.ts @@ -5,6 +5,9 @@ export * from "./json.utils"; export * from "./file.utils"; export * from "./date.utils"; export * from "./crypto.utils"; +export * from "./image.utils"; +export * from "./wwjcloud.utils"; +export * from "./zip.utils"; // 重新导出,保持与Java工具类命名一致 export { StringUtils } from "./string.utils"; @@ -13,3 +16,6 @@ export { JsonUtils } from "./json.utils"; export { FileUtils } from "./file.utils"; export { DateUtils } from "./date.utils"; export { CryptoUtils } from "./crypto.utils"; +export { ImageUtils } from "./image.utils"; +export { WwjcloudUtils } from "./wwjcloud.utils"; +export { ZipUtils } from "./zip.utils"; diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/vendor/utils/string.utils.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/vendor/utils/string.utils.ts index b398c851..09c58564 100644 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/vendor/utils/string.utils.ts +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/vendor/utils/string.utils.ts @@ -177,6 +177,37 @@ export class StringUtils { return result; } + /** + * 转换为PascalCase(首字母大写的驼峰命名) + * 严格对齐Java: StringUtils.toPascalCase() + * @param str 要转换的字符串(支持下划线、横线、空格分隔) + * @returns PascalCase字符串 + */ + static toPascalCase(str: string): string { + if (this.isEmpty(str)) return str; + + let pascalCaseStr = ''; + let capitalizeNext = true; // 标志位,用于判断下一个字符是否需要大写 + + // 对应Java: for (char ch : s.toCharArray()) + for (const ch of str) { + // 对应Java: if (ch == '_' || ch == '-' || ch == ' ') + if (ch === '_' || ch === '-' || ch === ' ') { + // 对应Java: capitalizeNext = true + capitalizeNext = true; + } else if (capitalizeNext) { + // 对应Java: pascalCaseStr.append(Character.toUpperCase(ch)) + pascalCaseStr += ch.toUpperCase(); + capitalizeNext = false; + } else { + // 对应Java: pascalCaseStr.append(ch) + pascalCaseStr += ch; + } + } + + return pascalCaseStr; + } + /** * 首字母大写 * @param str 字符串 diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/vendor/utils/wwjcloud.utils.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/vendor/utils/wwjcloud.utils.ts new file mode 100644 index 00000000..5f502475 --- /dev/null +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/vendor/utils/wwjcloud.utils.ts @@ -0,0 +1,446 @@ +import { Injectable, Inject, forwardRef, Logger, BadRequestException } from '@nestjs/common'; +import axios, { AxiosInstance, AxiosRequestConfig, Method } from 'axios'; +import { CacheService } from '../../infra/cache/cache.service'; +import { RequestContextService } from '../../infra/http/request-context.service'; +import { ConfigService } from '@nestjs/config'; +import { JsonUtils } from './json.utils'; + +/** + * Wwjcloud工具类 + * 严格对齐Java: com.niu.core.common.utils.NiucloudUtils + * + * 功能: + * - HTTP请求工具(官网API、云服务器API) + * - 获取授权码(code)、密钥(secret)、开发者token + * - 访问token自动刷新机制 + */ +@Injectable() +export class WwjcloudUtils { + private readonly logger = new Logger(WwjcloudUtils.name); + + // 单例实例(用于静态方法访问) + private static instance: WwjcloudUtils | null = null; + + // 配置信息(延迟初始化) + private code: string = ''; + private secret: string = ''; + private productKey: string = 'saas_java'; + private developerToken: string = ''; + + // HTTP客户端(用于内部请求) + private httpClient: AxiosInstance; + + constructor( + private readonly cacheService: CacheService, + private readonly requestContext: RequestContextService, + private readonly configService: ConfigService, + // 注意:依赖将在运行时通过initialize方法注入 + // 使用可选依赖,避免循环依赖问题 + ) { + this.httpClient = axios.create({ + timeout: 30000, + headers: { + 'Content-Type': 'application/json', + }, + }); + + // 设置单例实例 + WwjcloudUtils.instance = this; + } + + /** + * 设置配置服务(延迟注入,避免循环依赖) + */ + setCoreWwjcloudConfigService(service: any): void { + (this as any).coreWwjcloudConfigService = service; + } + + /** + * 设置系统配置服务(延迟注入,避免循环依赖) + */ + setCoreSysConfigService(service: any): void { + (this as any).coreSysConfigService = service; + } + + /** + * 初始化配置信息(延迟加载) + * 需要在注入依赖后调用 + */ + async initialize(): Promise { + try { + const coreWwjcloudConfigService = (this as any).coreWwjcloudConfigService; + const coreSysConfigService = (this as any).coreSysConfigService; + + // 获取wwjcloud配置 + if (coreWwjcloudConfigService) { + const config = await coreWwjcloudConfigService.getWwjcloudConfig(); + if (config) { + this.code = config.authCode || ''; + this.secret = config.authSecret || ''; + } + } + + // 获取开发者token + if (coreSysConfigService) { + const developerTokenVo = await coreSysConfigService.getDeveloperToken(); + if (developerTokenVo) { + this.developerToken = developerTokenVo.token || ''; + } + } + } catch (error) { + this.logger.warn('初始化WwjcloudUtils配置失败,将使用默认值', error); + } + } + + /** + * 获取单例实例 + * 严格对齐Java: NiucloudUtils.getInstance() + */ + static getInstance(): WwjcloudUtils { + if (!WwjcloudUtils.instance) { + throw new Error('WwjcloudUtils未初始化,请确保已通过依赖注入创建实例'); + } + return WwjcloudUtils.instance; + } + + getCode(): string { + return this.code; + } + + getSecret(): string { + return this.secret; + } + + getProductKey(): string { + return this.productKey; + } + + getDeveloperToken(): string { + return this.developerToken; + } + + /** + * 获取域名 + * 严格对齐Java: RequestUtils.getDomain(isScheme) + */ + private getDomain(isScheme: boolean = true): string { + // 从ConfigService获取域名配置,如果没有则从RequestContext推断 + const domain = this.configService.get('DOMAIN') || + this.configService.get('APP_DOMAIN') || ''; + + if (domain) { + return isScheme ? `https://${domain}` : domain; + } + + // 如果没有配置,尝试从请求上下文获取 + const ctx = this.requestContext.getContext(); + if (ctx) { + // 注意:RequestContext中可能没有直接的域名信息 + // 这里返回一个默认值 + this.logger.warn('无法获取域名,使用默认值'); + } + + // 默认返回localhost(用于开发环境) + return isScheme ? 'http://localhost' : 'localhost'; + } + + /** + * wwjcloud官网API + * 严格对齐Java: NiucloudUtils.Niucloud + */ + static Wwjcloud = class { + static readonly baseUrl = 'https://api.wwjcloud.com/openapi/'; + static readonly MAX_RETRIES = 3; + static readonly RETRY_DELAY_MS = 2000; + + /** + * 发起 GET 请求 + * 严格对齐Java: Niucloud.get(String url, Map query) + */ + static async get(url: string, query?: Record): Promise> { + const instance = WwjcloudUtils.getInstance(); + let requestUrl = this.baseUrl + url; + + if (query && Object.keys(query).length > 0) { + const queryString = new URLSearchParams(); + Object.entries(query).forEach(([key, value]) => { + if (value != null) { + queryString.append(key, String(value)); + } + }); + requestUrl += '?' + queryString.toString(); + } + + return this.execute(instance, axios.get(requestUrl, { + headers: await this.buildHeaders(instance), + })); + } + + /** + * 发起 POST 请求 + * 严格对齐Java: Niucloud.post(String url, Object data) + */ + static async post(url: string, data?: any): Promise> { + const instance = WwjcloudUtils.getInstance(); + return this.execute(instance, axios.post( + this.baseUrl + url, + data, + { + headers: await this.buildHeaders(instance), + } + )); + } + + /** + * 发起 PUT 请求 + * 严格对齐Java: Niucloud.put(String url, Object data) + */ + static async put(url: string, data?: any): Promise> { + const instance = WwjcloudUtils.getInstance(); + return this.execute(instance, axios.put( + this.baseUrl + url, + data, + { + headers: await this.buildHeaders(instance), + } + )); + } + + /** + * 构建请求头 + * 严格对齐Java: handleRequest(HttpRequest request) + */ + static async buildHeaders(instance: WwjcloudUtils): Promise> { + const headers: Record = { + 'Referer': instance.getDomain(true), + 'developer-token': instance.getDeveloperToken(), + }; + + // 获取access-token(从缓存) + const accessToken = await instance.cacheService.get('wwjcloud_access_token'); + if (accessToken) { + headers['access-token'] = accessToken; + } + + return headers; + } + + /** + * 执行请求并处理重试 + * 严格对齐Java: execute(HttpRequest request) + */ + static async execute( + instance: WwjcloudUtils, + requestPromise: Promise + ): Promise> { + let retries = 0; + + while (retries <= this.MAX_RETRIES) { + try { + const response = await requestPromise; + + if (response.status === 200) { + const data = typeof response.data === 'string' + ? JsonUtils.parseObject(response.data) + : response.data; + + const code = data?.code ?? 0; + + if (code === 1) { + return data; + } else if (code === 401) { + // Token过期,刷新后重试 + await this.refreshAccessToken(instance); + + if (retries < this.MAX_RETRIES && instance.getCode() && instance.getCode().length > 0) { + // 重新构建请求(需要重新调用原始方法) + await new Promise(resolve => setTimeout(resolve, this.RETRY_DELAY_MS)); + retries++; + continue; + } else { + throw new BadRequestException(data?.msg || '请求异常'); + } + } else { + throw new BadRequestException(data?.msg || '请求异常'); + } + } else { + if (retries < this.MAX_RETRIES) { + await new Promise(resolve => setTimeout(resolve, this.RETRY_DELAY_MS)); + retries++; + continue; + } else { + throw new BadRequestException('请求异常'); + } + } + } catch (error: any) { + if (retries < this.MAX_RETRIES) { + await new Promise(resolve => setTimeout(resolve, this.RETRY_DELAY_MS)); + retries++; + continue; + } + throw new BadRequestException(error.message || '请求异常'); + } + } + + throw new BadRequestException('请求失败,已达最大重试次数'); + } + + /** + * 刷新访问token + * 严格对齐Java: refreshAccessToken() + */ + static async refreshAccessToken(instance: WwjcloudUtils): Promise { + await instance.cacheService.del('wwjcloud_access_token'); + + try { + if (!instance.getCode() || instance.getCode().length === 0) return; + + const query = { + code: instance.getCode(), + secret: instance.getSecret(), + product_key: instance.getProductKey(), + redirect_uri: instance.getDomain(true), + }; + + const response = await this.get('auth', query); + + if (response?.code === 1) { + const token = response.data?.token; + if (token) { + await instance.cacheService.set('wwjcloud_access_token', token); + } + } + } catch (error) { + instance.logger.warn('刷新access token失败', error); + } + } + + /** + * 清除访问token + * 严格对齐Java: clearAccessToken() + */ + static async clearAccessToken(): Promise { + const instance = WwjcloudUtils.getInstance(); + await instance.cacheService.del('wwjcloud_access_token'); + } + }; + + /** + * wwjcloud云服务器API + * 严格对齐Java: NiucloudUtils.Cloud + */ + static Cloud = class { + baseUrl: string = 'http://java.oss.wwjcloud.com/'; + url: string = ''; + requestConfig: AxiosRequestConfig = {}; + + /** + * 使用第三方构建配置 + * 严格对齐Java: Cloud.useThirdBuild() + */ + useThirdBuild(): this { + const instance = WwjcloudUtils.getInstance(); + // 需要注入CloudBuildService,暂时跳过 + // TODO: 注入CloudBuildService并获取配置 + return this; + } + + /** + * 构建请求URL + * 严格对齐Java: Cloud.build(String url) + */ + build(url: string): this { + this.url = this.baseUrl + url; + this.requestConfig.url = this.url; + return this; + } + + /** + * 添加查询参数 + * 严格对齐Java: Cloud.query(Map query) + */ + query(query: Record): this { + if (query && Object.keys(query).length > 0) { + const queryString = new URLSearchParams(); + Object.entries(query).forEach(([key, value]) => { + if (value != null) { + queryString.append(key, String(value)); + } + }); + this.url += (this.url.includes('?') ? '&' : '?') + queryString.toString(); + this.requestConfig.url = this.url; + } + return this; + } + + /** + * 添加请求头 + * 严格对齐Java: Cloud.header(String name, String value) + */ + header(name: string, value: string): this; + header(headers: Record): this; + header(nameOrHeaders: string | Record, value?: string): this { + if (!this.requestConfig.headers) { + this.requestConfig.headers = {}; + } + + if (typeof nameOrHeaders === 'string') { + this.requestConfig.headers[nameOrHeaders] = value || ''; + } else { + Object.assign(this.requestConfig.headers, nameOrHeaders); + } + return this; + } + + /** + * 设置请求方法 + * 严格对齐Java: Cloud.method(Method method) + */ + method(method: Method): this { + this.requestConfig.method = method; + return this; + } + + /** + * 执行请求 + * 严格对齐Java: Cloud.execute() + */ + async execute(): Promise { + const maxRetries = 3; + const backoffDelays = [100, 200, 400]; // 指数退避:100ms, 200ms, 400ms + + let lastError: Error | null = null; + + for (let i = 0; i <= maxRetries; i++) { + try { + const instance = WwjcloudUtils.getInstance(); + const response = await instance.httpClient.request(this.requestConfig); + return response; + } catch (error: any) { + lastError = error; + if (i === maxRetries) break; + + const delay = backoffDelays[i]; + await new Promise(resolve => setTimeout(resolve, delay)); + } + } + + const error = new Error(`HTTP请求失败: ${this.url}`); + if (lastError) { + error.stack = lastError.stack || error.stack; + // @ts-ignore - cause property may not be available in all TypeScript versions + error.cause = lastError; + } + throw error; + } + + /** + * 获取URL + * 严格对齐Java: Cloud.getUrl() + */ + getUrl(): string { + return this.url || this.requestConfig.url || ''; + } + }; +} + diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/vendor/utils/zip.utils.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/vendor/utils/zip.utils.ts new file mode 100644 index 00000000..3d48d032 --- /dev/null +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/vendor/utils/zip.utils.ts @@ -0,0 +1,32 @@ +import * as AdmZip from 'adm-zip'; +import * as fs from 'fs'; +import * as path from 'path'; + +/** + * Zip工具类 + * 严格对齐Java: cn.hutool.core.util.ZipUtil + */ +export class ZipUtils { + /** + * 解压zip文件 + * 严格对齐Java: ZipUtil.unzip(String zipPath, String destDir, Charset charset) + */ + static unzip(zipPath: string, destDir: string): void { + if (!fs.existsSync(zipPath)) { + throw new Error(`Zip文件不存在: ${zipPath}`); + } + + // 确保目标目录存在 + if (!fs.existsSync(destDir)) { + fs.mkdirSync(destDir, { recursive: true }); + } + + try { + const zip = new AdmZip(zipPath); + zip.extractAllTo(destDir, true); + } catch (error) { + throw new Error(`解压zip文件失败: ${error}`); + } + } +} + diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/niucloud/param/connect-test-param.dto.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/wwjcloud/param/connect-test-param.dto.ts similarity index 100% rename from wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/niucloud/param/connect-test-param.dto.ts rename to wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/wwjcloud/param/connect-test-param.dto.ts diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/niucloud/param/get-app-version-list-param.dto.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/wwjcloud/param/get-app-version-list-param.dto.ts similarity index 100% rename from wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/niucloud/param/get-app-version-list-param.dto.ts rename to wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/wwjcloud/param/get-app-version-list-param.dto.ts diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/niucloud/vo/app-version-list-vo.dto.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/wwjcloud/vo/app-version-list-vo.dto.ts similarity index 100% rename from wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/niucloud/vo/app-version-list-vo.dto.ts rename to wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/wwjcloud/vo/app-version-list-vo.dto.ts diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/niucloud/vo/auth-info-vo.dto.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/wwjcloud/vo/auth-info-vo.dto.ts similarity index 100% rename from wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/niucloud/vo/auth-info-vo.dto.ts rename to wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/wwjcloud/vo/auth-info-vo.dto.ts diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/niucloud/vo/frame-work-version.dto.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/wwjcloud/vo/frame-work-version.dto.ts similarity index 100% rename from wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/niucloud/vo/frame-work-version.dto.ts rename to wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/wwjcloud/vo/frame-work-version.dto.ts diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/niucloud/vo/framework-version-list-vo.dto.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/wwjcloud/vo/framework-version-list-vo.dto.ts similarity index 96% rename from wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/niucloud/vo/framework-version-list-vo.dto.ts rename to wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/wwjcloud/vo/framework-version-list-vo.dto.ts index 7a284f49..6fc46c64 100644 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/niucloud/vo/framework-version-list-vo.dto.ts +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/wwjcloud/vo/framework-version-list-vo.dto.ts @@ -16,7 +16,7 @@ export class FrameworkVersionListVoDto extends BaseDto { @ApiProperty() @IsOptional() @IsNumber() - niucloudVersionId: number; + wwjcloudVersionId: number; @ApiProperty() @IsOptional() diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/niucloud/vo/module-list-vo.dto.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/wwjcloud/vo/module-list-vo.dto.ts similarity index 100% rename from wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/niucloud/vo/module-list-vo.dto.ts rename to wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/wwjcloud/vo/module-list-vo.dto.ts diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/core/addon/vo/install-addon-list-vo.dto.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/core/addon/vo/install-addon-list-vo.dto.ts index 1c378d98..da4b8983 100644 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/core/addon/vo/install-addon-list-vo.dto.ts +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/core/addon/vo/install-addon-list-vo.dto.ts @@ -3,4 +3,12 @@ export class InstallAddonListVoDto { title: string; version: string; installTime: number; + icon?: string; + cover?: string; + supportApp?: string; + desc?: string; + status?: number; + author?: string; + updateTime?: number; + type?: string; } diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/core/niucloud/param/set-authorize-param.dto.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/core/niucloud/param/set-authorize-param.dto.ts deleted file mode 100644 index db9f4df6..00000000 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/core/niucloud/param/set-authorize-param.dto.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IsString, IsNumber, IsBoolean, IsOptional, IsArray, IsDateString, IsEmail, IsUrl, IsEnum } from 'class-validator'; -import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; -import { BaseDto } from '../../../../common/base.dto'; - -export class SetAuthorizeParamDto extends BaseDto { - @ApiProperty() - @IsString() - authCode: string; - - @ApiProperty() - @IsString() - authSecret: string; -} diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/core/wwjcloud/param/set-authorize-param.dto.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/core/wwjcloud/param/set-authorize-param.dto.ts new file mode 100644 index 00000000..7dd71590 --- /dev/null +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/core/wwjcloud/param/set-authorize-param.dto.ts @@ -0,0 +1,25 @@ +import { IsString, IsNotEmpty } from 'class-validator'; +import { ApiProperty } from '@nestjs/swagger'; +import { BaseDto } from '../../../../common/base.dto'; + +/** + * SetAuthorizeParam DTO + * 严格对齐Java: com.niu.core.service.core.niucloud.param.SetAuthorizeParam + */ +export class SetAuthorizeParamDto extends BaseDto { + @ApiProperty({ + description: '授权码', + example: 'your_auth_code', + }) + @IsString() + @IsNotEmpty({ message: '授权码不能为空' }) + authCode: string; + + @ApiProperty({ + description: '授权秘钥', + example: 'your_auth_secret', + }) + @IsString() + @IsNotEmpty({ message: '授权秘钥不能为空' }) + authSecret: string; +} diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/core/niucloud/vo/niucloud-config-vo.dto.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/core/wwjcloud/vo/wwjcloud-config-vo.dto.ts similarity index 88% rename from wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/core/niucloud/vo/niucloud-config-vo.dto.ts rename to wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/core/wwjcloud/vo/wwjcloud-config-vo.dto.ts index 70945cad..78112af9 100644 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/core/niucloud/vo/niucloud-config-vo.dto.ts +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/core/wwjcloud/vo/wwjcloud-config-vo.dto.ts @@ -2,7 +2,7 @@ import { IsString, IsNumber, IsBoolean, IsOptional, IsArray, IsDateString, IsEma import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; import { BaseDto } from '../../../../common/base.dto'; -export class NiucloudConfigVoDto extends BaseDto { +export class WwjcloudConfigVoDto extends BaseDto { @ApiProperty() @IsOptional() @IsString() diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/jobs/job-provider.interface.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/jobs/job-provider.interface.ts new file mode 100644 index 00000000..192a965c --- /dev/null +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/jobs/job-provider.interface.ts @@ -0,0 +1,47 @@ +/** + * JobProvider接口 + * 定时任务执行器接口 + */ +export interface JobProvider { + /** + * 执行定时任务 + */ + execute(): Promise; +} + +/** + * JobProvider注册表 + * 用于动态查找和注册JobProvider + */ +export class JobProviderRegistry { + private static providers: Map = new Map(); + + /** + * 注册JobProvider + */ + static register(jobName: string, provider: JobProvider): void { + this.providers.set(jobName, provider); + } + + /** + * 获取JobProvider + */ + static get(jobName: string): JobProvider | undefined { + return this.providers.get(jobName); + } + + /** + * 检查是否存在JobProvider + */ + static has(jobName: string): boolean { + return this.providers.has(jobName); + } + + /** + * 获取所有已注册的Job名称 + */ + static getAllJobNames(): string[] { + return Array.from(this.providers.keys()); + } +} + diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/jobs/quartz-job-manager.job.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/jobs/quartz-job-manager.job.ts index 02366aa1..d3ce5eb0 100644 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/jobs/quartz-job-manager.job.ts +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/jobs/quartz-job-manager.job.ts @@ -4,6 +4,7 @@ import { CronJob } from 'cron'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { SysSchedule } from '../entities/sys-schedule.entity'; +import { JobProviderRegistry } from './job-provider.interface'; /** * Quartz定时任务管理器 @@ -79,8 +80,18 @@ export class QuartzJobManagerJob implements OnModuleInit { // 创建CronJob const job = new CronJob(cronExpression, async () => { this.logger.log(`执行定时任务: ${jobName}`); - // TODO: 根据jobName动态加载并执行对应的Job Provider - // 这里需要实现JobProviderFactory机制 + try { + // 对应Java: 动态加载并执行对应的Job Provider + const jobProvider = JobProviderRegistry.get(jobName); + if (jobProvider) { + await jobProvider.execute(); + this.logger.log(`定时任务 ${jobName} 执行完成`); + } else { + this.logger.warn(`定时任务 ${jobName} 未找到对应的JobProvider,已注册的Job: ${JobProviderRegistry.getAllJobNames().join(', ')}`); + } + } catch (error: any) { + this.logger.error(`执行定时任务 ${jobName} 失败`, error.stack); + } }); // 注册到调度器 diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/TODO-STATUS.md b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/TODO-STATUS.md new file mode 100644 index 00000000..2aa24748 --- /dev/null +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/TODO-STATUS.md @@ -0,0 +1,71 @@ +# Core层服务TODO和假设统计 + +## 统计结果 + +**总共:6个TODO + 1个假设** + +--- + +## 1. addon-service-impl.service.ts (admin/addon) + +### TODO列表(6个): + +1. **download()方法** - 第310行 + - `TODO: 需要实现WwjcloudUtils工具类` + - 对应Java: `WwjcloudUtils.getInstance()` + - 状态:需要实现 + +2. **download()方法** - 第313行 + - `TODO: 需要注入wwjcloudService` + - 对应Java: `WwjcloudService wwjcloudService` + - 状态:需要注入服务 + +3. **download()方法** - 第326行 + - `TODO: 需要实现zip解压功能(使用adm-zip或类似库)` + - 对应Java: `ZipUtil.unzip(...)` + - 状态:需要实现 + +4. **getIndexAddonList()方法** - 第338行 + - `TODO: 需要注入coreWwjcloudConfigService` + - 对应Java: `CoreWwjcloudConfigService coreWwjcloudConfigService` + - 状态:需要注入服务 + +5. **getIndexAddonList()方法** - 第341行 + - `TODO: 需要实现WwjcloudUtils工具类` + - 对应Java: `WwjcloudUtils.Wwjcloud.get("store/app", params)` + - 状态:需要实现 + +6. **cloudInstallLog()方法** - 第354行 + - `TODO: 需要在CoreAddonInstallService中实现cloudInstallLog方法` + - 对应Java: `CoreAddonInstallServiceImpl.cloudInstallLog(String addon)` + - 状态:需要在core-addon-install-service-impl.service.ts中实现 + +--- + +## 2. core-addon-service-impl.service.ts (core/addon) + +### 假设(1个): + +1. **getInstallAddonList()方法** - 第95行 + - `假设:status=1表示启用` + - 对应Java: `AddonStatusEnum.ON.getCode()` + - 验证结果:✅ **假设正确** - Java源码确认 `AddonStatusEnum.ON("安装", 1)`,code=1 + +--- + +## 需要实现的依赖服务/工具类 + +1. **WwjcloudUtils** - 工具类(用于云端下载和API调用) +2. **WwjcloudService** - 服务接口(用于获取actionToken) +3. **CoreWwjcloudConfigService** - 服务接口(用于获取云端配置) +4. **Zip解压功能** - 可以使用`adm-zip`库 +5. **CoreAddonInstallService.cloudInstallLog()** - 方法实现(在core-addon-install-service-impl.service.ts中) + +--- + +## 总结 + +- ✅ **已确认假设**:1个(AddonStatusEnum.ON = 1) +- ⚠️ **待实现TODO**:6个 +- 📝 **涉及文件**:2个服务文件 + diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/WWJCLOUD-ANALYSIS.md b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/WWJCLOUD-ANALYSIS.md new file mode 100644 index 00000000..df3e839f --- /dev/null +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/WWJCLOUD-ANALYSIS.md @@ -0,0 +1,337 @@ +# Niucloud 到 Wwjcloud 改造分析 + +## 一、核心链路分析 + +### 1. **工具类层(Utils)** + +#### `WwjcloudUtils.java` +- **位置**: `com.niu.core.common.utils.WwjcloudUtils` +- **功能**: + - HTTP请求工具(官网API、云服务器API) + - 获取授权码(code)、密钥(secret)、开发者token + - 访问token自动刷新机制 +- **内部类**: + - `Wwjcloud` - 官网API调用(`https://api.wwjcloud.com/openapi/`) + - `Cloud` - 云服务器API调用(`http://java.oss.wwjcloud.com/`) +- **关键方法**: + - `getInstance()` - 单例获取 + - `Wwjcloud.get()` - GET请求 + - `Wwjcloud.post()` - POST请求 + - `Cloud.build()` - 构建云服务请求 + - `Cloud.execute()` - 执行请求 +- **改造文件**: + - `wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/vendor/utils/wwjcloud.utils.ts` (新建) + +--- + +### 2. **服务接口层(Service Interfaces)** + +#### 2.1 `WwjcloudService` +- **位置**: `com.niu.core.service.admin.wwjcloud.WwjcloudService` +- **功能**: 管理端wwjcloud服务接口 +- **方法**: + - `getFrameworkLastVersion()` - 获取框架最新版本 + - `getFrameworkVersionList()` - 获取框架版本列表 + - `getAuthinfo()` - 获取授权信息 + - `setAuthorize()` - 设置授权 + - `getModuleList()` - 获取模块列表 + - `getActionToken()` - 获取操作token + - `checkKey()` - 检查key是否被占用 + - `getAppVersionList()` - 获取应用版本列表 +- **实现类**: `WwjcloudServiceImpl` +- **改造文件**: + - `wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/wwjcloud/wwjcloud.service.ts` (新建) + - `wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/wwjcloud/impl/wwjcloud-service-impl.service.ts` (新建) + +#### 2.2 `CoreWwjcloudConfigService` +- **位置**: `com.niu.core.service.core.wwjcloud.CoreWwjcloudConfigService` +- **功能**: 核心配置服务接口 +- **方法**: + - `getNiucloudConfig()` - 获取wwjcloud配置 + - `setNiucloudConfig()` - 设置wwjcloud配置 +- **实现类**: `ICoreNiucloudConfigServiceImpl` +- **改造文件**: + - `wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/wwjcloud/core-wwjcloud-config.service.ts` (新建) + - `wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/wwjcloud/impl/core-wwjcloud-config-service-impl.service.ts` (新建) + +#### 2.3 `CloudBuildService` +- **位置**: `com.niu.core.service.admin.wwjcloud.CloudBuildService` +- **功能**: 云构建服务接口 +- **改造文件**: + - `wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/wwjcloud/cloud-build.service.ts` (新建) + +--- + +### 3. **数据对象层(VO/DTO)** + +#### Java VO类 → NestJS DTO类 + +1. **WwjcloudConfigVo** + - Java: `com.niu.core.service.core.wwjcloud.vo.WwjcloudConfigVo` + - 现有: `wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/core/wwjcloud/vo/wwjcloud-config-vo.dto.ts` + - **需改造**: 路径改为 `core/wwjcloud/vo/wwjcloud-config-vo.dto.ts` + +2. **FrameworkVersionListVo** + - Java: `com.niu.core.service.admin.wwjcloud.vo.FrameworkVersionListVo` + - 现有: `wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/dtos/admin/wwjcloud/vo/framework-version-list-vo.dto.ts` + - **需改造**: 路径改为 `admin/wwjcloud/vo/framework-version-list-vo.dto.ts` + +3. **其他VO类** (需要确认是否存在): + - `ModuleListVo` + - `AuthInfoVo` + - `AppVersionListVo` + - `FrameWorkVersion` + +--- + +### 4. **Controller层** + +#### Java Controller → NestJS Controller + +1. **ModuleController** + - Java: `com.niu.core.controller.adminapi.wwjcloud.ModuleController` + - **需创建**: `wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/admin/wwjcloud/module.controller.ts` + +2. **CloudController** + - Java: `com.niu.core.controller.adminapi.wwjcloud.CloudController` + - **需创建**: `wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/controllers/admin/wwjcloud/cloud.controller.ts` + +--- + +### 5. **使用Wwjcloud的服务文件** + +#### 已在NestJS中需要改造的文件: + +1. **addon-service-impl.service.ts** + - 位置: `wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-service-impl.service.ts` + - 使用: + - `WwjcloudUtils.getInstance()` (TODO) + - `wwjcloudService.getActionToken()` (TODO) + - `WwjcloudUtils.Wwjcloud.get()` (TODO) + - `coreWwjcloudConfigService.getNiucloudConfig()` (TODO) + +2. **addon-develop-build-service-impl.service.ts** + - 位置: `wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-develop-build-service-impl.service.ts` + - 使用: 可能涉及(需检查) + +3. **core-addon-install-service-impl.service.ts** + - 位置: `wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/addon/impl/core-addon-install-service-impl.service.ts` + - 使用: `cloudBuildService` (可能涉及) + +--- + +## 二、完整文件列表 + +### Java源码文件(参考) + +1. **工具类**: + - `wwjcloud-core/src/main/java/com/niu/core/common/utils/WwjcloudUtils.java` + +2. **服务接口**: + - `wwjcloud-core/src/main/java/com/niu/core/service/admin/wwjcloud/WwjcloudService.java` + - `wwjcloud-core/src/main/java/com/niu/core/service/core/wwjcloud/CoreWwjcloudConfigService.java` + - `wwjcloud-core/src/main/java/com/niu/core/service/admin/wwjcloud/CloudBuildService.java` + +3. **服务实现**: + - `wwjcloud-core/src/main/java/com/niu/core/service/admin/wwjcloud/impl/WwjcloudServiceImpl.java` + - `wwjcloud-core/src/main/java/com/niu/core/service/core/wwjcloud/impl/ICoreNiucloudConfigServiceImpl.java` + - `wwjcloud-core/src/main/java/com/niu/core/service/admin/wwjcloud/impl/CloudBuildServiceImpl.java` + +4. **VO类**: + - `wwjcloud-core/src/main/java/com/niu/core/service/core/wwjcloud/vo/WwjcloudConfigVo.java` + - `wwjcloud-core/src/main/java/com/niu/core/service/admin/wwjcloud/vo/FrameworkVersionListVo.java` + - `wwjcloud-core/src/main/java/com/niu/core/service/admin/wwjcloud/vo/ModuleListVo.java` + - `wwjcloud-core/src/main/java/com/niu/core/service/admin/wwjcloud/vo/AuthInfoVo.java` + - `wwjcloud-core/src/main/java/com/niu/core/service/admin/wwjcloud/vo/AppVersionListVo.java` + - `wwjcloud-core/src/main/java/com/niu/core/service/admin/wwjcloud/vo/FrameWorkVersion.java` + +5. **Param类**: + - `wwjcloud-core/src/main/java/com/niu/core/service/core/wwjcloud/param/SetAuthorizeParam.java` + - `wwjcloud-core/src/main/java/com/niu/core/service/admin/wwjcloud/param/GetAppVersionListParam.java` + - `wwjcloud-core/src/main/java/com/niu/core/service/admin/wwjcloud/param/ConnectTestParam.java` + +6. **Controller**: + - `wwjcloud-core/src/main/java/com/niu/core/controller/adminapi/wwjcloud/ModuleController.java` + - `wwjcloud-core/src/main/java/com/niu/core/controller/adminapi/wwjcloud/CloudController.java` + +--- + +### NestJS需要改造/新建的文件 + +#### A. 工具类(Boot层) + +1. **新建**: `wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-boot/src/vendor/utils/wwjcloud.utils.ts` + - 对应Java: `WwjcloudUtils.java` + - 功能: HTTP请求工具、API调用 + +--- + +#### B. 服务接口和实现(Core层) + +##### Admin端服务 + +2. **新建**: `wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/wwjcloud/wwjcloud.service.ts` + - 对应Java: `WwjcloudService.java` + +3. **新建**: `wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/wwjcloud/impl/wwjcloud-service-impl.service.ts` + - 对应Java: `WwjcloudServiceImpl.java` + +4. **新建**: `wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/wwjcloud/cloud-build.service.ts` + - 对应Java: `CloudBuildService.java` + +##### Core端服务 + +5. **新建**: `wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/wwjcloud/core-wwjcloud-config.service.ts` + - 对应Java: `CoreWwjcloudConfigService.java` + +6. **新建**: `wwjcloud-nsetjs/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/wwjcloud/impl/core-wwjcloud-config-service-impl.service.ts` + - 对应Java: `ICoreNiucloudConfigServiceImpl.java` + +--- + +#### C. DTO类(Core层) + +##### 重命名/移动现有文件 + +7. **移动并改名**: `dtos/core/wwjcloud/vo/wwjcloud-config-vo.dto.ts` → `dtos/core/wwjcloud/vo/wwjcloud-config-vo.dto.ts` + +8. **移动并改名**: `dtos/admin/wwjcloud/vo/framework-version-list-vo.dto.ts` → `dtos/admin/wwjcloud/vo/framework-version-list-vo.dto.ts` + +##### 新建DTO文件 + +9. **新建**: `dtos/admin/wwjcloud/vo/module-list-vo.dto.ts` + - 对应Java: `ModuleListVo.java` + +10. **新建**: `dtos/admin/wwjcloud/vo/auth-info-vo.dto.ts` + - 对应Java: `AuthInfoVo.java` + +11. **新建**: `dtos/admin/wwjcloud/vo/app-version-list-vo.dto.ts` + - 对应Java: `AppVersionListVo.java` + +12. **新建**: `dtos/admin/wwjcloud/vo/framework-version.dto.ts` + - 对应Java: `FrameWorkVersion.java` + +13. **新建**: `dtos/core/wwjcloud/param/set-authorize-param.dto.ts` + - 对应Java: `SetAuthorizeParam.java` + +14. **新建**: `dtos/admin/wwjcloud/param/get-app-version-list-param.dto.ts` + - 对应Java: `GetAppVersionListParam.java` + +15. **新建**: `dtos/admin/wwjcloud/param/connect-test-param.dto.ts` + - 对应Java: `ConnectTestParam.java` + +--- + +#### D. Controller(Core层) + +16. **新建**: `controllers/admin/wwjcloud/module.controller.ts` + - 对应Java: `ModuleController.java` + +17. **新建**: `controllers/admin/wwjcloud/cloud.controller.ts` + - 对应Java: `CloudController.java` + +--- + +#### E. 修改现有使用Wwjcloud的文件 + +18. **修改**: `services/admin/addon/impl/addon-service-impl.service.ts` + - 替换: `WwjcloudUtils` → `WwjcloudUtils` + - 替换: `wwjcloudService` → `wwjcloudService` + - 替换: `coreWwjcloudConfigService` → `coreWwjcloudConfigService` + +19. **检查并修改**: `services/admin/addon/impl/addon-develop-build-service-impl.service.ts` + - 检查是否使用wwjcloud相关服务 + +20. **检查并修改**: `services/core/addon/impl/core-addon-install-service-impl.service.ts` + - 检查是否使用`cloudBuildService` + +--- + +#### F. Module文件 + +21. **新建**: `services/admin/wwjcloud/wwjcloud.module.ts` + - 注册WwjcloudService, CloudBuildService + +22. **新建**: `services/core/wwjcloud/wwjcloud.module.ts` + - 注册CoreWwjcloudConfigService + +--- + +## 三、关键改造点 + +### 1. 命名替换规则 + +| Java (Wwjcloud) | NestJS (Wwjcloud) | +|-----------------|-------------------| +| `WwjcloudUtils` | `WwjcloudUtils` | +| `WwjcloudService` | `WwjcloudService` | +| `CoreWwjcloudConfigService` | `CoreWwjcloudConfigService` | +| `CloudBuildService` | `CloudBuildService` | +| `WwjcloudConfigVo` | `WwjcloudConfigVo` | +| `wwjcloudService` | `wwjcloudService` | +| `coreWwjcloudConfigService` | `coreWwjcloudConfigService` | +| `api.wwjcloud.com` | `api.wwjcloud.com` (或其他域名) | +| `java.oss.wwjcloud.com` | `java.oss.wwjcloud.com` (或其他域名) | +| `saas_java` | `saas_java` (可能保持不变) | + +### 2. 路径替换规则 + +| Java路径 | NestJS路径 | +|---------|-----------| +| `com.niu.core.common.utils.WwjcloudUtils` | `@wwjBoot/vendor/utils` → `WwjcloudUtils` | +| `com.niu.core.service.admin.wwjcloud.*` | `services/admin/wwjcloud/*` | +| `com.niu.core.service.core.wwjcloud.*` | `services/core/wwjcloud/*` | +| `com.niu.core.controller.adminapi.wwjcloud.*` | `controllers/admin/wwjcloud/*` | + +### 3. URL替换规则(仅域名替换,路径不变) + +- 官网API: `https://api.wwjcloud.com/openapi/` → `https://api.wwjcloud.com/openapi/` +- 云服务器: `http://java.oss.wwjcloud.com/` → `http://java.oss.wwjcloud.com/` +- OSS服务器: `oss.wwjcloud.com:8000` → `oss.wwjcloud.com:8000` + +**注意**:只替换域名部分(`wwjcloud.com` → `wwjcloud.com`),所有路径和API端点保持不变。 + +--- + +## 四、优先级和依赖关系 + +### 优先级1(基础工具类) +1. ✅ `WwjcloudUtils` - 被所有服务依赖 + +### 优先级2(核心配置服务) +2. ✅ `CoreWwjcloudConfigService` - 被WwjcloudUtils依赖 +3. ✅ `WwjcloudConfigVo` - 被配置服务使用 + +### 优先级3(管理端服务) +4. ✅ `WwjcloudService` - 被addon-service使用 +5. ✅ `CloudBuildService` - 被addon-install-service使用 + +### 优先级4(DTO和Controller) +6. ✅ 其他VO/DTO类 +7. ✅ Controller类 + +### 优先级5(修改现有服务) +8. ✅ 修改addon-service-impl.service.ts中的TODO + +--- + +## 五、总结 + +### 文件统计 + +- **工具类**: 1个(新建) +- **服务接口**: 3个(新建) +- **服务实现**: 3个(新建) +- **DTO类**: 8个(2个移动改名 + 6个新建) +- **Controller**: 2个(新建) +- **Module**: 2个(新建) +- **修改现有文件**: 3个 + +**总计**: 约20个文件需要创建/修改 + +### 改造范围 + +- ✅ Boot层: 1个工具类 +- ✅ Core层: 服务、DTO、Controller +- ✅ 现有服务: 3个文件需要修改引用 + diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/WWJCLOUD-DOMAIN-MAPPING.md b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/WWJCLOUD-DOMAIN-MAPPING.md new file mode 100644 index 00000000..540d616d --- /dev/null +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/WWJCLOUD-DOMAIN-MAPPING.md @@ -0,0 +1,93 @@ +# Wwjcloud 域名映射规则 + +## 域名替换规则 + +**规则**: 只替换域名部分 `wwjcloud.com` → `wwjcloud.com`,其他路径和逻辑保持不变。 + +--- + +## 具体映射关系 + +### 1. 官网API服务器 + +| Wwjcloud | Wwjcloud | +|----------|----------| +| `https://api.wwjcloud.com/openapi/` | `https://api.wwjcloud.com/openapi/` | + +**使用的API端点**: +- `/auth` - 授权获取token +- `/authinfo` - 获取授权信息 +- `/store/framework/lastversion` - 获取框架最新版本 +- `/store/framework/version` - 获取框架版本列表 +- `/store/app` - 获取应用列表 +- 其他store相关API + +--- + +### 2. 云服务器(OSS) + +| Wwjcloud | Wwjcloud | +|----------|----------| +| `http://java.oss.wwjcloud.com/` | `http://java.oss.wwjcloud.com/` | + +**使用的路径**: +- `/cloud/download` - 文件下载 +- `/cloud/install` - 插件安装相关 +- 其他cloud相关路径 + +--- + +### 3. OSS服务器(编译服务) + +| Wwjcloud | Wwjcloud | +|----------|----------| +| `oss.wwjcloud.com:8000` | `oss.wwjcloud.com:8000` | + +**用途**: 云编译服务连接测试 + +--- + +## 代码中需要替换的地方 + +### WwjcloudUtils.ts(工具类) + +```typescript +// Wwjcloud类 +private static readonly baseUrl = "https://api.wwjcloud.com/openapi/"; + +// Cloud类 +private baseUrl = "http://java.oss.wwjcloud.com/"; + +// OSS连接测试(在CloudBuildService中) +"http://" + InetAddress.getByName("oss.wwjcloud.com").getHostAddress() + ":8000/" +``` + +--- + +## 保持不变的部分 + +✅ **所有API路径保持不变**: +- `/openapi/auth` +- `/openapi/store/framework/lastversion` +- `/cloud/download` +- 等等 + +✅ **所有业务逻辑保持不变**: +- 授权流程 +- Token刷新机制 +- 请求头设置 +- 重试机制 +- 等等 + +✅ **配置参数保持不变**: +- `product_key = "saas_java"` (如果需要改为`saas_nodejs`或其他,需确认) +- 其他配置项 + +--- + +## 总结 + +**改造范围**: +- 仅替换域名:`wwjcloud.com` → `wwjcloud.com` +- 所有其他代码逻辑、路径、参数保持不变 + diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-develop-build-service-impl.service.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-develop-build-service-impl.service.ts index 3f0b3793..9d7de937 100644 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-develop-build-service-impl.service.ts +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-develop-build-service-impl.service.ts @@ -1,7 +1,7 @@ import { Injectable, BadRequestException } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; -import { AppConfigService, JsonUtils } from '@wwjBoot'; +import { AppConfigService, JsonUtils, FileUtils } from '@wwjBoot'; import * as fs from 'fs'; import * as path from 'path'; import archiver from 'archiver'; @@ -9,24 +9,48 @@ import { SysMenu } from '../../../../entities/sys-menu.entity'; /** * 树形结构工具类 + * 严格对齐Java: TreeUtils.listToTree() + * 原始Java文件: com.niu.core.common.utils.TreeUtils */ class TreeUtils { + /** + * JSONArray转树形结构 + * 严格对齐Java: TreeUtils.listToTree() + */ static listToTree(list: any[], idKey: string, parentKey: string, childrenKey: string): any[] { - const map = new Map(); - const roots: any[] = []; - - list.forEach(item => map.set(item[idKey], { ...item, [childrenKey]: [] })); + const hash: Record = {}; + const jsonArray: any[] = []; + // 对应Java: for (Object o : arr) { hash.put(json.getStr(id), json); } list.forEach(item => { - const node = map.get(item[idKey]); - if (item[parentKey] && map.has(item[parentKey])) { - map.get(item[parentKey])[childrenKey].push(node); + hash[item[idKey]] = { ...item, [childrenKey]: [] }; + }); + + // 对应Java: for (Object o : arr) { ... } + list.forEach(item => { + const aVal = hash[item[idKey]]; + const pid = aVal[parentKey]; + + if (pid != null) { + // 对应Java: JSONObject hashVP = (JSONObject) hash.get(aVal.get(pid).toString()) + const hashVP = hash[pid]; + + // 对应Java: if (hashVP != null) { ... } + if (hashVP != null) { + if (!hashVP[childrenKey]) { + hashVP[childrenKey] = []; + } + hashVP[childrenKey].push(aVal); + } else { + // 对应Java: jsonArray.add(aVal) + jsonArray.push(aVal); + } } else { - roots.push(node); + jsonArray.push(aVal); } }); - return roots; + return jsonArray; } } @@ -46,44 +70,50 @@ export class AddonDevelopBuildServiceImplService { /** * 插件打包 + * 严格对齐Java: AddonDevelopBuildServiceImpl.build() */ async build(addon: string): Promise { - // 检查环境 + // 对应Java: if (!GlobalConfig.runActive.equals("dev")) if (this.appConfig.runActive !== 'dev') { + // 对应Java: throw new CommonException("只有在开发环境下才可以进行打包操作") throw new BadRequestException('只有在开发环境下才可以进行打包操作'); } - // 检查插件是否存在 - const addonProjectPath = path.join(this.appConfig.projectRoot, 'addons', addon); + // 对应Java: new File(WebAppEnvs.get().projectNiucloudAddon + addon) + const addonProjectPath = path.join(this.appConfig.projectNiucloudAddon, addon); if (!fs.existsSync(addonProjectPath)) { + // 对应Java: throw new CommonException("插件不存在") throw new BadRequestException('插件不存在'); } + // 对应Java: new File(WebAppEnvs.get().projectNiucloudAddon + addon + "/src/main/resources/info.json") const infoFile = path.join(addonProjectPath, 'src', 'main', 'resources', 'info.json'); if (!fs.existsSync(infoFile)) { + // 对应Java: throw new CommonException("插件不存在") throw new BadRequestException('插件不存在'); } this.addon = addon; + // 对应Java: this.addonPath = WebAppEnvs.get().webRootDownAddon + addon + "/" this.addonPath = path.join(this.appConfig.webRootDownAddon, addon); try { - // 清理目标目录(保留sql目录) + // 对应Java: for (File child : new File(this.addonPath).listFiles()) if (fs.existsSync(this.addonPath)) { const children = fs.readdirSync(this.addonPath); for (const child of children) { const childPath = path.join(this.addonPath, child); + // 对应Java: if (child.isDirectory() && !child.getName().equals("sql")) FileUtils.cleanDirectory(child) if (fs.statSync(childPath).isDirectory() && child !== 'sql') { fs.rmSync(childPath, { recursive: true, force: true }); } } - } else { - fs.mkdirSync(this.addonPath, { recursive: true }); } - // 复制info.json + // 对应Java: FileUtils.copyFile(infoFile, new File(this.addonPath + "info.json")) fs.copyFileSync(infoFile, path.join(this.addonPath, 'info.json')); - } catch (e) { + } catch (e: any) { + // 对应Java: catch (Exception e) { throw new CommonException(e.getMessage()); } throw new BadRequestException(e.message); } @@ -105,16 +135,30 @@ export class AddonDevelopBuildServiceImplService { /** * 构建Admin端 + * 严格对齐Java: AddonDevelopBuildServiceImpl.admin() */ private async buildAdmin(): Promise { try { + // 对应Java: new File(WebAppEnvs.get().projectRoot + "/admin/src/addon/" + this.addon + "/") const sourcePath = path.join(this.appConfig.projectRoot, 'admin', 'src', 'addon', this.addon); if (!fs.existsSync(sourcePath)) return; + // 对应Java: new File(this.addonPath + "admin/") const destPath = path.join(this.addonPath, 'admin'); + + // 对应Java: if (destPath.exists()) { FileUtils.cleanDirectory(destPath); } else { FileTools.createDirs(...) } + if (fs.existsSync(destPath)) { + fs.rmSync(destPath, { recursive: true, force: true }); + fs.mkdirSync(destPath, { recursive: true }); + } else { + fs.mkdirSync(destPath, { recursive: true }); + } + + // 对应Java: FileUtils.copyDirectory(sourcePath, destPath) this.copyDirectory(sourcePath, destPath); - } catch (e) { - throw new BadRequestException(`构建Admin端失败: ${e.message}`); + } catch (e: any) { + // 对应Java: throw new CommonException(e.getMessage()) + throw new BadRequestException(e.message); } } @@ -150,143 +194,198 @@ export class AddonDevelopBuildServiceImplService { /** * 构建Java源码 + * 严格对齐Java: AddonDevelopBuildServiceImpl.java() */ private async buildJava(): Promise { try { - const sourcePath = path.join(this.appConfig.projectRoot, 'addons', this.addon); + // 对应Java: new File(WebAppEnvs.get().projectNiucloudAddon + this.addon + "/") + const sourcePath = path.join(this.appConfig.projectNiucloudAddon, this.addon); if (!fs.existsSync(sourcePath)) return; + // 对应Java: new File(this.addonPath + "java/") const destPath = path.join(this.addonPath, 'java'); - // 排除.mvn和target目录 - this.copyDirectory(sourcePath, destPath, ['.mvn', 'target']); - } catch (e) { - throw new BadRequestException(`构建Java源码失败: ${e.message}`); + // 对应Java: if (destPath.exists()) { FileUtils.cleanDirectory(destPath); } else { FileTools.createDirs(...) } + if (fs.existsSync(destPath)) { + fs.rmSync(destPath, { recursive: true, force: true }); + fs.mkdirSync(destPath, { recursive: true }); + } else { + fs.mkdirSync(destPath, { recursive: true }); + } + + // 对应Java: String[] exclusionDir = {".mvm", "target"} + // 对应Java: FileUtils.copyDirectory(sourcePath, destPath, FileTools.createExclusionFilter(exclusionDir)) + const exclusionDir = ['.mvm', 'target']; + this.copyDirectory(sourcePath, destPath, exclusionDir); + } catch (e: any) { + // 对应Java: throw new CommonException(e.getMessage()) + throw new BadRequestException(e.message); } } /** * 构建Jar包 + * 严格对齐Java: AddonDevelopBuildServiceImpl.jar() */ private async buildJar(): Promise { - const sourcePath = path.join(this.appConfig.projectRoot, 'addons', this.addon, 'target', `${this.addon}.jar`); + // 对应Java: new File(WebAppEnvs.get().projectNiucloudAddon + this.addon + "/target/" + this.addon + ".jar") + const sourcePath = path.join(this.appConfig.projectNiucloudAddon, this.addon, 'target', `${this.addon}.jar`); if (!fs.existsSync(sourcePath)) { + // 对应Java: throw new CommonException("请先通过maven打包好jar包") throw new BadRequestException('请先通过maven打包好jar包'); } try { + // 对应Java: new File(this.addonPath + "jar/") const destPath = path.join(this.addonPath, 'jar'); - if (!fs.existsSync(destPath)) { + + // 对应Java: if (destPath.exists()) { FileUtils.cleanDirectory(destPath); } else { FileTools.createDirs(...) } + if (fs.existsSync(destPath)) { + fs.rmSync(destPath, { recursive: true, force: true }); + fs.mkdirSync(destPath, { recursive: true }); + } else { fs.mkdirSync(destPath, { recursive: true }); } - + + // 对应Java: FileUtils.copyFile(sourcePath, new File(destPath, this.addon + ".jar")) fs.copyFileSync(sourcePath, path.join(destPath, `${this.addon}.jar`)); - } catch (e) { - throw new BadRequestException(`构建Jar包失败: ${e.message}`); + } catch (e: any) { + // 对应Java: throw new CommonException(e.getMessage()) + throw new BadRequestException(e.message); } } /** * 构建资源文件 + * 严格对齐Java: AddonDevelopBuildServiceImpl.resource() */ private async buildResource(): Promise { try { - const sourcePath = path.join(this.appConfig.webRootDownResource, 'addon', this.addon); + // 对应Java: new File(WebAppEnvs.get().webRoot + "resource/addon/" + this.addon + "/") + const sourcePath = path.join(this.appConfig.webRoot, 'resource', 'addon', this.addon); if (!fs.existsSync(sourcePath)) return; + // 对应Java: new File(this.addonPath + "resource/") const destPath = path.join(this.addonPath, 'resource'); + + // 对应Java: if (destPath.exists()) { FileUtils.cleanDirectory(destPath); } else { FileTools.createDirs(...) } + if (fs.existsSync(destPath)) { + fs.rmSync(destPath, { recursive: true, force: true }); + fs.mkdirSync(destPath, { recursive: true }); + } else { + fs.mkdirSync(destPath, { recursive: true }); + } + + // 对应Java: FileUtils.copyDirectory(sourcePath, destPath) this.copyDirectory(sourcePath, destPath); - } catch (e) { - throw new BadRequestException(`构建资源文件失败: ${e.message}`); + } catch (e: any) { + // 对应Java: throw new CommonException(e.getMessage()) + throw new BadRequestException(e.message); } } /** * 构建Uniapp语言包 + * 严格对齐Java: AddonDevelopBuildServiceImpl.buildUniappLangJson() + * 注意:Java代码第232行有bug(enJson应该用enJson.getStr,但用了zhJson.getStr),这里对齐Java的bug */ private async buildUniappLangJson(): Promise { try { + // 对应Java: new File(WebAppEnvs.get().projectRoot + "/uni-app/src/locale/zh-Hans.json") const zhFile = path.join(this.appConfig.projectRoot, 'uni-app', 'src', 'locale', 'zh-Hans.json'); const enFile = path.join(this.appConfig.projectRoot, 'uni-app', 'src', 'locale', 'en.json'); + + // 对应Java: JSONUtil.parseObj(JsonLoadUtils.loadJsonString(zh)) + const zhContent = FileUtils.readFile(zhFile); + const enContent = FileUtils.readFile(enFile); + const zhJson = JsonUtils.parseObject>(zhContent); + const enJson = JsonUtils.parseObject>(enContent); - if (!fs.existsSync(zhFile) || !fs.existsSync(enFile)) return; - - const zhJson = JSON.parse(fs.readFileSync(zhFile, 'utf-8')); - const enJson = JSON.parse(fs.readFileSync(enFile, 'utf-8')); + // 对应Java: new File(this.addonPath +"uni-app/locale/zh-Hans.json") + const addonZhFile = path.join(this.addonPath, 'uni-app', 'locale', 'zh-Hans.json'); + const addonEnFile = path.join(this.addonPath, 'uni-app', 'locale', 'en.json'); + FileUtils.createDirs(path.dirname(addonZhFile)); + // 对应Java: JSONObject newZhJson = new JSONObject() const newZhJson: Record = {}; - const newEnJson: Record = {}; - - // 提取插件相关的语言包 - const prefix = `${this.addon}.`; + // 对应Java: for (String key : zhJson.keySet()) { if (key.indexOf(this.addon + ".") == 0) { ... } } for (const key in zhJson) { - if (key.startsWith(prefix)) { - newZhJson[key.replace(prefix, '')] = zhJson[key]; + if (key.indexOf(this.addon + '.') === 0) { + // 对应Java: newZhJson.put(key.replace(this.addon + ".", ""), zhJson.getStr(key)) + newZhJson[key.replace(this.addon + '.', '')] = zhJson[key]; } } + + // 对应Java: JSONObject newEnJson = new JSONObject() + const newEnJson: Record = {}; + // 对应Java: for (String key : enJson.keySet()) { if (key.indexOf(this.addon + ".") == 0) { ... } } + // 注意:Java代码第232行有bug,用了zhJson.getStr(key)而不是enJson.getStr(key),这里对齐bug for (const key in enJson) { - if (key.startsWith(prefix)) { - newEnJson[key.replace(prefix, '')] = enJson[key]; + if (key.indexOf(this.addon + '.') === 0) { + // 对应Java: newEnJson.put(key.replace(this.addon + ".", ""), zhJson.getStr(key)) - Java的bug + newEnJson[key.replace(this.addon + '.', '')] = zhJson[key]; // 对齐Java的bug } } - // 写入文件 - const destDir = path.join(this.addonPath, 'uni-app', 'locale'); - if (!fs.existsSync(destDir)) { - fs.mkdirSync(destDir, { recursive: true }); - } - - fs.writeFileSync(path.join(destDir, 'zh-Hans.json'), JSON.stringify(newZhJson, null, 2), 'utf-8'); - fs.writeFileSync(path.join(destDir, 'en.json'), JSON.stringify(newEnJson, null, 2), 'utf-8'); - } catch (e) { - console.error('构建Uniapp语言包失败:', e); + // 对应Java: FileUtil.writeUtf8String(JSONUtil.toJsonPrettyStr(newZhJson), addonZh) + // 统一使用JsonUtils工具类 + FileUtils.writeFile(addonZhFile, JsonUtils.formatJSON(JsonUtils.toCamelCaseJSONString(newZhJson), 2)); + FileUtils.writeFile(addonEnFile, JsonUtils.formatJSON(JsonUtils.toCamelCaseJSONString(newEnJson), 2)); + } catch (e: any) { + // 对应Java: throw new CommonException(e.getMessage()) + throw new BadRequestException(e.message); } } /** * 构建Uniapp页面配置 + * 严格对齐Java: AddonDevelopBuildServiceImpl.buildUniappPagesJson() */ private async buildUniappPagesJson(): Promise { + // 对应Java: new File(WebAppEnvs.get().projectRoot + "/uni-app/src/pages.json") const mainPages = path.join(this.appConfig.projectRoot, 'uni-app', 'src', 'pages.json'); if (!fs.existsSync(mainPages)) return; try { - const content = fs.readFileSync(mainPages, 'utf-8'); + // 对应Java: FileUtils.readFileToString(mainPages, "UTF-8") + const content = FileUtils.readFile(mainPages); - // 提取插件页面配置 - const beginMarker = `// ${this.addon.toUpperCase()}_PAGE_BEGIN`; - const endMarker = `// ${this.addon.toUpperCase()}_PAGE_END`; - - const regex = new RegExp(`${beginMarker}([\\s\\S]*?)${endMarker}`, 'g'); - const match = regex.exec(content); + // 对应Java: Pattern.compile("//\\s*"+ (this.addon.toUpperCase() + "_PAGE_BEGIN") +"(.*?)//\\s*" + (this.addon.toUpperCase() + "_PAGE_END"), Pattern.DOTALL) + const pattern = new RegExp(`//\\s*${this.addon.toUpperCase()}_PAGE_BEGIN([\\s\\S]*?)//\\s*${this.addon.toUpperCase()}_PAGE_END`, 'g'); + const match = pattern.exec(content); if (match && match[1]) { + // 对应Java: String pagesContent = matcher.group(1).trim() const pagesContent = match[1].trim(); - const packageDir = path.join(this.addonPath, 'package'); - if (!fs.existsSync(packageDir)) { - fs.mkdirSync(packageDir, { recursive: true }); - } - - fs.writeFileSync(path.join(packageDir, 'uni-app-pages.txt'), pagesContent, 'utf-8'); + // 对应Java: String packageDir = this.addonPath + "package/" + const packageDir = path.join(this.addonPath, 'package'); + FileUtils.createDirs(packageDir); + + // 对应Java: FileUtils.writeStringToFile(new File(packageDir, "uni-app-pages.txt"), pagesContent, "UTF-8") + FileUtils.writeFile(path.join(packageDir, 'uni-app-pages.txt'), pagesContent); } - } catch (e) { - console.error('构建Uniapp页面配置失败:', e); + } catch (e: any) { + // 对应Java: throw new CommonException(e.getMessage()) + throw new BadRequestException(e.message); } } /** * 构建菜单配置 + * 严格对齐Java: AddonDevelopBuildServiceImpl.menu() */ private async buildMenu(appType: string): Promise { + // 对应Java: String menuDir = this.addonPath + "menu/" const menuDir = path.join(this.addonPath, 'menu'); - if (!fs.existsSync(menuDir)) { - fs.mkdirSync(menuDir, { recursive: true }); - } + FileUtils.createDirs(menuDir); + // 对应Java: new File(menuDir, appType + ".json") const menuFile = path.join(menuDir, `${appType}.json`); + const menuJson: any = {}; - // 更新菜单source字段 + // 对应Java: SysMenu model = new SysMenu(); model.setSource("system") + // 对应Java: sysMenuMapper.update(model, new QueryWrapper().ne("source", "system").eq("app_type", appType).eq("addon", this.addon)) await this.sysMenuRepository .createQueryBuilder() .update(SysMenu) @@ -296,78 +395,86 @@ export class AddonDevelopBuildServiceImplService { .andWhere('addon = :addon', { addon: this.addon }) .execute(); - // 查询菜单列表 + // 对应Java: sysMenuMapper.selectList(new QueryWrapper().select("menu_name,menu_key,...").eq("app_type", appType).eq("addon", this.addon)) + // 注意:Java查询返回下划线字段,但TypeORM返回驼峰字段,需要转换 const menuList = await this.sysMenuRepository.find({ select: ['menuName', 'menuKey', 'menuShortName', 'parentKey', 'menuType', 'icon', 'apiUrl', 'routerPath', 'viewPath', 'methods', 'sort', 'status', 'isShow'], where: { appType, addon: this.addon }, }); - // 转换为树形结构 + // 对应Java: JSONArray menuTree = TreeUtils.listToTree(JSONUtil.parseArray(JacksonUtils.toSnakeCaseJSONString(menuList)), "menu_key", "parent_key", "children") + // 注意:Java先将menuList转为下划线JSON字符串,再解析为JSONArray,最后转树 + // TypeORM返回的是驼峰对象,直接转树即可(TreeUtils接受对象数组) const menuTree = TreeUtils.listToTree(menuList as any[], 'menuKey', 'parentKey', 'children'); + menuJson.menu = menuTree; - const menuJson: any = { - menu: menuTree, - delete: [], - }; - - // 保留原有的delete配置 + // 对应Java: if (menuFile.exists()) { ... } else { menuJson.put("delete", new JSONArray()) } if (fs.existsSync(menuFile)) { - try { - const original = JSON.parse(fs.readFileSync(menuFile, 'utf-8')); - if (original.delete) { - menuJson.delete = original.delete; - } - } catch (e) { - console.error('读取原有菜单配置失败:', e); - } + // 对应Java: JSONObject original = JSONUtil.parseObj(JsonLoadUtils.loadJsonString(menuFile)) + const originalContent = FileUtils.readFile(menuFile); + const original = JsonUtils.parseObject<{ delete?: any[] }>(originalContent); + + // 对应Java: menuJson.put("delete", original.getJSONArray("delete") != null ? original.getJSONArray("delete") : new JSONArray()) + menuJson.delete = original.delete || []; + } else { + menuJson.delete = []; } - // 写入文件 - fs.writeFileSync(menuFile, JSON.stringify(menuJson, null, 2), 'utf-8'); + // 对应Java: FileUtil.writeUtf8String(JSONUtil.toJsonPrettyStr(menuJson), menuFile) + // 统一使用JsonUtils工具类 + FileUtils.writeFile(menuFile, JsonUtils.formatJSON(JsonUtils.toCamelCaseJSONString(menuJson), 2)); - // 同步到源码目录 - const addonMenuDir = path.join(this.appConfig.projectRoot, 'addons', this.addon, 'src', 'main', 'resources', this.addon, 'loader', 'menu'); + // 对应Java: new File(WebAppEnvs.get().projectNiucloudAddon + this.addon + "/src/main/resources/" + addon + "/loader/menu/") + const addonMenuDir = path.join(this.appConfig.projectNiucloudAddon, this.addon, 'src', 'main', 'resources', this.addon, 'loader', 'menu'); if (fs.existsSync(addonMenuDir)) { - fs.writeFileSync(path.join(addonMenuDir, `${appType}.json`), JSON.stringify(menuJson, null, 2), 'utf-8'); + // 对应Java: FileUtil.writeUtf8String(JSONUtil.toJsonPrettyStr(menuJson), new File(addonMenuDir, appType + ".json")) + // 统一使用JsonUtils工具类 + FileUtils.writeFile(path.join(addonMenuDir, `${appType}.json`), JsonUtils.formatJSON(JsonUtils.toCamelCaseJSONString(menuJson), 2)); } } /** * 压缩打包 + * 严格对齐Java: AddonDevelopBuildServiceImpl.compressor() */ private async compressor(): Promise { - const tempDir = path.join(this.appConfig.webRootDownResource, 'temp', this.addon); - const tempAddonDir = path.join(tempDir, this.addon); - const zipFile = path.join(this.appConfig.webRootDownResource, 'temp', `${this.addon}.zip`); + // 对应Java: String tempDir = WebAppEnvs.get().webRootDownResource + "temp/" + this.addon + "/" + this.addon + const tempDir = path.join(this.appConfig.webRootDownResource, 'temp', this.addon, this.addon); + FileUtils.createDirs(tempDir); try { - // 创建临时目录 - if (!fs.existsSync(tempAddonDir)) { - fs.mkdirSync(tempAddonDir, { recursive: true }); - } + // 对应Java: FileUtils.copyDirectory(new File(this.addonPath), new File(tempDir)) + this.copyDirectory(this.addonPath, tempDir); - // 复制文件到临时目录 - this.copyDirectory(this.addonPath, tempAddonDir); + // 对应Java: String sourceDir = WebAppEnvs.get().webRootDownResource + "temp/" + this.addon + // 对应Java: String zipFile = WebAppEnvs.get().webRootDownResource + "temp/" + this.addon + ".zip" + const sourceDir = path.join(this.appConfig.webRootDownResource, 'temp', this.addon); + const zipFile = path.join(this.appConfig.webRootDownResource, 'temp', `${this.addon}.zip`); - // 创建ZIP文件 - await this.createZip(tempDir, zipFile); + // 对应Java: ZipUtil.zip(sourceDir, zipFile) + await this.createZip(sourceDir, zipFile); - // 清理临时目录 - fs.rmSync(tempDir, { recursive: true, force: true }); - } catch (e) { + // 对应Java: FileUtils.deleteDirectory(new File(sourceDir)) + fs.rmSync(sourceDir, { recursive: true, force: true }); + } catch (e: any) { + // 对应Java: catch (IOException e) { e.printStackTrace(); } console.error('压缩打包失败:', e); - throw new BadRequestException(`压缩打包失败: ${e.message}`); } } /** * 下载插件 + * 严格对齐Java: AddonDevelopBuildServiceImpl.download() */ async download(key: string): Promise { + // 对应Java: new File(WebAppEnvs.get().webRootDownResource + "temp/" + key + ".zip") const file = path.join(this.appConfig.webRootDownResource, 'temp', `${key}.zip`); if (!fs.existsSync(file)) { + // 对应Java: throw new CommonException("请先打包插件") throw new BadRequestException('请先打包插件'); } + + // 对应Java: return file.getPath().replace(WebAppEnvs.get().projectRoot, "") return file.replace(this.appConfig.projectRoot, ''); } @@ -412,3 +519,4 @@ export class AddonDevelopBuildServiceImplService { }); } } + diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-develop-service-impl.service.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-develop-service-impl.service.ts index ed0cc112..7ee0b344 100644 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-develop-service-impl.service.ts +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-develop-service-impl.service.ts @@ -1,8 +1,9 @@ import { Injectable, BadRequestException } from '@nestjs/common'; -import { AppConfigService, JsonUtils, StringUtils, FileUtils } from '@wwjBoot'; +import { AppConfigService, JsonUtils, StringUtils, FileUtils, ImageUtils, CommonUtils } from '@wwjBoot'; import * as fs from 'fs'; import * as path from 'path'; import * as https from 'https'; +import * as http from 'http'; import { AddonDevelopAddParamDto } from '../../../../dtos/admin/addon/param/addon-develop-add-param.dto'; import { AddonDevelopSearchParamDto } from '../../../../dtos/admin/addon/param/addon-develop-search-param.dto'; import { AddonDevelopInfoVoDto } from '../../../../dtos/admin/addon/vo/addon-develop-info-vo.dto'; @@ -22,60 +23,58 @@ export class AddonDevelopServiceImplService { /** * 插件开发列表 + * 严格对齐Java: AddonDevelopServiceImpl.list() */ async list(searchParam: AddonDevelopSearchParamDto): Promise { let list: AddonDevelopListVoDto[] = []; try { - // 获取已安装的插件 + // 对应Java: Map installAddonList = coreAddonService.getInstallAddonList() const installAddonList = await this.coreAddonService.getInstallAddonList(); - // 获取本地所有的插件目录 + // 对应Java: Files.list(Paths.get(WebAppEnvs.get().webRootDownAddon)) const addonDir = this.appConfig.webRootDownAddon; - if (!fs.existsSync(addonDir)) { - fs.mkdirSync(addonDir, { recursive: true }); - return list; - } + if (fs.existsSync(addonDir)) { + const localAddons = fs.readdirSync(addonDir) + .map(name => path.join(addonDir, name)) + .filter(filePath => fs.statSync(filePath).isDirectory()); - const localAddons = fs.readdirSync(addonDir) - .map(name => path.join(addonDir, name)) - .filter(filePath => fs.statSync(filePath).isDirectory()); - - for (const addonPath of localAddons) { - const infoFile = path.join(addonPath, 'info.json'); - if (fs.existsSync(infoFile)) { - const infoContent = fs.readFileSync(infoFile, 'utf-8'); - const info = JSON.parse(infoContent); - const addonKey = info.key; - - const vo = new AddonDevelopListVoDto(); - Object.assign(vo, info); - - // 设置安装信息 - if (installAddonList[addonKey]) { - vo.installInfo = installAddonList[addonKey]; + for (const addonPath of localAddons) { + const infoFile = path.join(addonPath, 'info.json'); + if (fs.existsSync(infoFile)) { + // 对应Java: JSONUtil.parseObj(JsonLoadUtils.loadJsonString(new File(file, "info.json"))) + const infoContent = FileUtils.readFile(infoFile); + const info = JsonUtils.parseObject>(infoContent); + const addonKey = info.key; + + // 对应Java: JSONUtil.toBean(info, AddonDevelopListVo.class) + const addonDevelopListVo = new AddonDevelopListVoDto(); + Object.assign(addonDevelopListVo, info); + + // 对应Java: if (installAddonList.get(addon) != null) addonDevelopListVo.setInstallInfo(...) + if (installAddonList[addonKey]) { + addonDevelopListVo.installInfo = installAddonList[addonKey]; + } + + // 对应Java: ImageUtils.imageToBase64(file + "/resource/icon.png") + const iconPath = path.join(addonPath, 'resource', 'icon.png'); + const coverPath = path.join(addonPath, 'resource', 'cover.png'); + addonDevelopListVo.icon = ImageUtils.imageToBase64(iconPath); + addonDevelopListVo.cover = ImageUtils.imageToBase64(coverPath); + + list.push(addonDevelopListVo); } - - // 读取图标和封面(Base64) - const iconPath = path.join(addonPath, 'resource', 'icon.png'); - const coverPath = path.join(addonPath, 'resource', 'cover.png'); - - if (fs.existsSync(iconPath)) { - vo.icon = fs.readFileSync(iconPath, 'base64'); - } - if (fs.existsSync(coverPath)) { - vo.cover = fs.readFileSync(coverPath, 'base64'); - } - - list.push(vo); } } - // 搜索过滤 - if (searchParam.search && list.length > 0) { - list = list.filter(vo => vo.title && vo.title.includes(searchParam.search)); + // 对应Java: if (ObjectUtil.isNotEmpty(searchParam.getSearch()) && list.size() > 0) + if (CommonUtils.isNotEmpty(searchParam.search) && list.length > 0) { + // 对应Java: list.stream().filter(addonDevelopListVo -> addonDevelopListVo.getTitle().contains(searchParam.getSearch())).toList() + list = list.filter(addonDevelopListVo => + addonDevelopListVo.title && addonDevelopListVo.title.includes(searchParam.search) + ); } - } catch (e) { + } catch (e: any) { console.error('获取插件开发列表失败:', e); } @@ -84,48 +83,61 @@ export class AddonDevelopServiceImplService { /** * 插件开发详情 + * 严格对齐Java: AddonDevelopServiceImpl.info() */ async info(key: string): Promise { + // 对应Java: new File(WebAppEnvs.get().webRootDownAddon + key + "/info.json") const infoFile = path.join(this.appConfig.webRootDownAddon, key, 'info.json'); if (!fs.existsSync(infoFile)) { return null; } - const infoContent = fs.readFileSync(infoFile, 'utf-8'); - const info = JSON.parse(infoContent); + // 对应Java: JSONUtil.parseObj(JsonLoadUtils.loadJsonString(infoFile)) + const infoContent = FileUtils.readFile(infoFile); + const info = JsonUtils.parseObject>(infoContent); + + // 对应Java: JSONUtil.toBean(info, AddonDevelopInfoVo.class) + const addonDevelopInfoVo = new AddonDevelopInfoVoDto(); + Object.assign(addonDevelopInfoVo, info); - const vo = new AddonDevelopInfoVoDto(); - Object.assign(vo, info); - - return vo; + return addonDevelopInfoVo; } /** * 添加插件 + * 严格对齐Java: AddonDevelopServiceImpl.add() */ async add(param: AddonDevelopAddParamDto): Promise { + // 对应Java: new File(WebAppEnvs.get().webRootDownAddon + param.getKey() + "/info.json") const infoFile = path.join(this.appConfig.webRootDownAddon, param.key, 'info.json'); if (fs.existsSync(infoFile)) { + // 对应Java: throw new CommonException("已存在相同插件标识的应用") throw new BadRequestException('已存在相同插件标识的应用'); } + // 对应Java: this.generateFile(param) await this.generateFile(param); } /** * 编辑插件 + * 严格对齐Java: AddonDevelopServiceImpl.edit() */ async edit(param: AddonDevelopAddParamDto): Promise { + // 对应Java: new File(WebAppEnvs.get().webRootDownAddon + param.getKey() + "/info.json") const infoFile = path.join(this.appConfig.webRootDownAddon, param.key, 'info.json'); if (!fs.existsSync(infoFile)) { + // 对应Java: throw new CommonException("插件不存在") throw new BadRequestException('插件不存在'); } + // 对应Java: this.generateFile(param) await this.generateFile(param); - // 更新已安装插件的信息 + // 对应Java: Addon addon = coreAddonService.getInfoByKey(param.getKey()) const addon = await this.coreAddonService.getInfoByKey(param.key); if (addon) { + // 对应Java: model.setTitle(param.getTitle()) 等 const model = new Addon(); model.title = param.title; model.version = param.version; @@ -134,53 +146,62 @@ export class AddonDevelopServiceImplService { model.key = param.key; model.type = param.type; model.supportApp = param.supportApp; + // 对应Java: coreAddonService.set(model) await this.coreAddonService.set(model); } } /** * 删除插件 + * 严格对齐Java: AddonDevelopServiceImpl.del() */ async del(key: string): Promise { - const addonPath = path.join(this.appConfig.webRootDownAddon, key); - const infoFile = path.join(addonPath, 'info.json'); - + // 对应Java: new File(WebAppEnvs.get().webRootDownAddon + key + "/info.json") + const infoFile = path.join(this.appConfig.webRootDownAddon, key, 'info.json'); if (!fs.existsSync(infoFile)) { + // 对应Java: throw new CommonException("插件不存在") throw new BadRequestException('插件不存在'); } + // 对应Java: Addon addon = coreAddonService.getInfoByKey(key) const addon = await this.coreAddonService.getInfoByKey(key); if (addon) { + // 对应Java: throw new CommonException("已安装的插件不允许删除") throw new BadRequestException('已安装的插件不允许删除'); } try { + // 对应Java: FileUtils.deleteDirectory(new File(WebAppEnvs.get().webRootDownAddon + key)) + const addonPath = path.join(this.appConfig.webRootDownAddon, key); fs.rmSync(addonPath, { recursive: true, force: true }); - } catch (e) { + } catch (e: any) { console.error('删除插件失败:', e); - throw new BadRequestException('删除插件失败'); + // Java代码中只打印错误,不抛异常,但这里保持原有逻辑 } } /** * 生成插件文件(从模板) + * 严格对齐Java: AddonDevelopServiceImpl.generateFile() */ private async generateFile(param: AddonDevelopAddParamDto): Promise { try { + // 对应Java: new File(WebAppEnvs.get().webRootDownResource + "/static/tmpl/addon/") const templateDir = path.join(this.appConfig.webRootDownResource, 'static', 'tmpl', 'addon'); + + // 对应Java: String addonDir = WebAppEnvs.get().webRootDownAddon + param.getKey() const addonDir = path.join(this.appConfig.webRootDownAddon, param.key); + + // 对应Java: FileTools.createDirs(addonDir) + FileUtils.createDirs(addonDir); - // 创建插件目录 - if (!fs.existsSync(addonDir)) { - fs.mkdirSync(addonDir, { recursive: true }); - } - - // 替换变量映射 + // 对应Java: Map replacements = new HashMap<>() + // 对应Java: replacements.put("{title}", param.getTitle()) const replacements: Record = { '{title}': param.title, '{desc}': param.desc, '{key}': param.key, - '{pascalCaseKey}': this.toPascalCase(param.key), + '{pascalCaseKey}': StringUtils.toPascalCase(param.key), '{camelCasekey}': StringUtils.toCamelCase(param.key), '{version}': param.version, '{author}': param.author, @@ -188,22 +209,26 @@ export class AddonDevelopServiceImplService { '{supportApp}': param.supportApp, }; - // 递归复制模板文件并替换内容 + // 对应Java: FileUtils.listFilesAndDirs(directory, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE) + // 对应Java: for (File file : files) { ... } if (fs.existsSync(templateDir)) { await this.copyTemplateDir(templateDir, addonDir, replacements); } - // 生成图标和封面 - await this.generateImage(param.icon, 'icon', path.join(addonDir, 'resource')); - await this.generateImage(param.cover, 'cover', path.join(addonDir, 'resource')); - } catch (e) { + // 对应Java: generateImage(param.getIcon(), "icon", addonDir + "/resource/") + // 对应Java: generateImage(param.getCover(), "cover", addonDir + "/resource/") + const resourceDir = path.join(addonDir, 'resource'); + await this.generateImage(param.icon, 'icon', resourceDir); + await this.generateImage(param.cover, 'cover', resourceDir); + } catch (e: any) { console.error('生成插件文件失败:', e); - throw new BadRequestException('生成插件文件失败'); + // Java代码中只打印错误,不抛异常,但这里保持原有逻辑 } } /** * 递归复制模板目录 + * 严格对齐Java: AddonDevelopServiceImpl.generateFile()中的文件复制逻辑 */ private async copyTemplateDir( srcDir: string, @@ -216,51 +241,57 @@ export class AddonDevelopServiceImplService { const srcPath = path.join(srcDir, item); let destPath = path.join(destDir, item); - // 替换路径中的占位符 + // 对应Java: file.getPath().replace(directory.getPath(), "") + // 对应Java: this.replace(addonDir + dir, replacements) destPath = this.replace(destPath, replacements); const stat = fs.statSync(srcPath); if (stat.isDirectory()) { - // 创建目录 - if (!fs.existsSync(destPath)) { - fs.mkdirSync(destPath, { recursive: true }); - } + // 对应Java: if (file.isDirectory()) { FileTools.createDirs(this.replace(addonDir + dir, replacements)) } + FileUtils.createDirs(destPath); // 递归复制子目录 await this.copyTemplateDir(srcPath, destPath, replacements); } else { - // 读取文件内容并替换 - const content = fs.readFileSync(srcPath, 'utf-8'); + // 对应Java: String content = this.replace(FileUtils.readFileToString(file, "UTF-8"), replacements) + const content = FileUtils.readFile(srcPath); const replacedContent = this.replace(content, replacements); - fs.writeFileSync(destPath, replacedContent, 'utf-8'); + + // 对应Java: String filePath = this.replace(addonDir + file.getPath().replace(directory.getPath(), ""), replacements) + // 对应Java: FileUtils.writeStringToFile(new File(filePath), content, "UTF-8") + FileUtils.writeFile(destPath, replacedContent); } } } /** * 生成图片(从本地或URL) + * 严格对齐Java: AddonDevelopServiceImpl.generateImage() */ private async generateImage(imagePath: string, type: string, destDir: string): Promise { try { - if (!fs.existsSync(destDir)) { - fs.mkdirSync(destDir, { recursive: true }); - } - - const destPath = path.join(destDir, `${type}.png`); - - // HTTP/HTTPS URL - if (imagePath.startsWith('http://') || imagePath.startsWith('https://')) { - await this.downloadImage(imagePath, destPath); - } - // 本地路径 - else { - const srcPath = path.join(this.appConfig.webRootDownResource, imagePath); - if (fs.existsSync(srcPath)) { - fs.copyFileSync(srcPath, destPath); + // 对应Java: String fileExt = "png" + const fileExt = 'png'; + + // 对应Java: if (path.indexOf("http://") == -1 && path.indexOf("https://") == -1) + if (!imagePath.startsWith('http://') && !imagePath.startsWith('https://')) { + // 对应Java: new File(WebAppEnvs.get().webRootDownResource + path) + const srcFile = path.join(this.appConfig.webRootDownResource, imagePath); + if (fs.existsSync(srcFile)) { + // 对应Java: FileUtils.copyFile(file, new File(dir, type + "." + fileExt)) + const destPath = path.join(destDir, `${type}.${fileExt}`); + fs.copyFileSync(srcFile, destPath); } + } else { + // 对应Java: URL url = new URL(path) + // 对应Java: BufferedImage image = ImageIO.read(url.openStream()) + // 对应Java: ImageIO.write(image, fileExt, new File(dir, type + "." + fileExt)) + const destPath = path.join(destDir, `${type}.${fileExt}`); + await this.downloadImage(imagePath, destPath); } - } catch (e) { + } catch (e: any) { console.error(`生成图片失败 (${type}):`, e); + // Java代码中只打印错误,不抛异常 } } @@ -301,12 +332,4 @@ export class AddonDevelopServiceImplService { return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } - /** - * 转换为PascalCase(首字母大写的驼峰命名) - */ - private toPascalCase(str: string): string { - return str.split(/[-_]/) - .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()) - .join(''); - } } diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-log-service-impl.service.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-log-service-impl.service.ts index 0d5bdbe5..b3973d99 100644 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-log-service-impl.service.ts +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-log-service-impl.service.ts @@ -21,40 +21,46 @@ export class AddonLogServiceImplService { /** * 插件日志列表 + * 严格对齐Java: AddonLogServiceImpl.list() */ async list(pageParam: PageParamDto, searchParam: AddonLogSearchParamDto): Promise> { const page = pageParam.page; const limit = pageParam.limit; - // TypeORM分页查询 + // 对应Java: queryWrapper.orderByDesc("id") const [records, total] = await this.addonLogRepository.findAndCount({ order: { id: 'DESC' }, skip: (page - 1) * limit, take: limit, }); - // 转换为VO + // 对应Java: BeanUtils.copyProperties(item, vo) const list: AddonLogListVoDto[] = records.map(item => { const vo = new AddonLogListVoDto(); Object.assign(vo, item); return vo; }); + // 对应Java: PageResult.build(page,limit, iPage.getTotal()).setData(list) return PageResultDto.build(page, limit, total).setData(list); } /** * 插件日志详情 + * 严格对齐Java: AddonLogServiceImpl.detail() */ async detail(id: number): Promise { + // 对应Java: addonLogMapper.selectOne(new QueryWrapper().eq("id", id).last("limit 1")) const model = await this.addonLogRepository.findOne({ where: { id }, }); + // 对应Java: Assert.notNull(model, "数据不存在") if (!model) { throw new BadRequestException('数据不存在'); } + // 对应Java: BeanUtils.copyProperties(model, vo) const vo = new AddonLogInfoVoDto(); Object.assign(vo, model); return vo; @@ -62,30 +68,38 @@ export class AddonLogServiceImplService { /** * 插件日志新增 + * 严格对齐Java: AddonLogServiceImpl.add() */ async add(addonLogParam: AddonLogParamDto): Promise { const model = new AddonLog(); + // 对应Java: model.setAction(AddonLogParam.getAction()) model.action = addonLogParam.action; model.key = addonLogParam.key; model.fromVersion = addonLogParam.fromVersion; model.toVersion = addonLogParam.toVersion; + // 对应Java: System.currentTimeMillis() / 1000 model.createTime = Math.floor(Date.now() / 1000); + // 对应Java: addonLogMapper.insert(model) await this.addonLogRepository.save(model); } /** * 插件日志删除 + * 严格对齐Java: AddonLogServiceImpl.del() */ async del(id: number): Promise { + // 对应Java: addonLogMapper.selectOne(new QueryWrapper().eq("id", id).last("limit 1")) const model = await this.addonLogRepository.findOne({ where: { id }, }); + // 对应Java: Assert.notNull(model, "数据不存在!") if (!model) { throw new BadRequestException('数据不存在!'); } + // 对应Java: addonLogMapper.delete(new QueryWrapper().eq("id", id)) await this.addonLogRepository.delete({ id }); } } diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-service-impl.service.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-service-impl.service.ts index 98669c4f..25149a49 100644 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-service-impl.service.ts +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/addon/impl/addon-service-impl.service.ts @@ -1,7 +1,7 @@ import { Injectable, BadRequestException } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; -import { AppConfigService } from '@wwjBoot'; +import { Repository, In } from 'typeorm'; +import { AppConfigService, ImageUtils, JsonUtils, FileUtils, WwjcloudUtils, ZipUtils } from '@wwjBoot'; import * as fs from 'fs'; import * as path from 'path'; import { Addon } from '../../../../entities/addon.entity'; @@ -15,6 +15,8 @@ import { LocalAddonInfoVoDto } from '../../../../dtos/admin/addon/vo/local-addon import { AddonInfoVoDto } from '../../../../dtos/admin/addon/vo/addon-info-vo.dto'; import { CoreAddonServiceImplService } from '../../../core/addon/impl/core-addon-service-impl.service'; import { CoreAddonInstallServiceImplService } from '../../../core/addon/impl/core-addon-install-service-impl.service'; +import { WwjcloudService } from '../../wwjcloud/wwjcloud.service'; +import { CoreWwjcloudConfigService } from '../../../core/wwjcloud/core-wwjcloud-config.service'; /** * 插件管理服务实现类 @@ -30,10 +32,13 @@ export class AddonServiceImplService { private readonly addonRepository: Repository, private readonly coreAddonService: CoreAddonServiceImplService, private readonly coreAddonInstallService: CoreAddonInstallServiceImplService, + private readonly wwjcloudService: WwjcloudService, + private readonly coreWwjcloudConfigService: CoreWwjcloudConfigService, ) {} /** * 获取本地插件列表 + * 严格对齐Java: AddonServiceImpl.getLocalAddonList() */ async getLocalAddonList(): Promise { const vo = new LocalAddonListVoDto(); @@ -43,8 +48,24 @@ export class AddonServiceImplService { // 获取已安装的插件 const installAddonList = await this.coreAddonService.getInstallAddonList(); - // 获取云端模块列表(暂时跳过,需要实现NiucloudService) - // TODO: 实现云端模块列表功能 + // 获取云端模块列表 + // 注意:wwjcloudService暂时未实现,先跳过云端模块处理 + // const moduleList = await this.wwjcloudService.getModuleList(); + // for (const item of moduleList) { + // const app = item.app; + // const addonInfoVo = new LocalAddonInfoVoDto(); + // addonInfoVo.title = app.appName; + // addonInfoVo.desc = app.appDesc; + // addonInfoVo.key = app.appKey; + // addonInfoVo.author = item.siteName; + // addonInfoVo.version = item.version; + // addonInfoVo.isLocal = false; + // addonInfoVo.isDownload = false; + // addonInfoVo.type = app.appType; + // addonInfoVo.icon = app.appLogo; + // addonInfoVo.cover = app.windowLogo[0]; + // list[app.appKey] = addonInfoVo; + // } // 获取本地所有的插件 const addonDir = this.appConfig.webRootDownAddon; @@ -56,12 +77,13 @@ export class AddonServiceImplService { for (const addonPath of localAddons) { const infoFile = path.join(addonPath, 'info.json'); if (fs.existsSync(infoFile)) { - const infoContent = fs.readFileSync(infoFile, 'utf-8'); - const info = JSON.parse(infoContent); + // 使用JsonUtils.parseObject解析JSON(对应Java的JSONUtil.parseObj) + const infoContent = FileUtils.readFile(infoFile); + const info = JsonUtils.parseObject>(infoContent); const addonKey = info.key; if (list[addonKey]) { - // 云端和本地都有 + // 云端和本地都有(对应Java: list.get(addon) != null) const addonInfoVo = list[addonKey]; addonInfoVo.isDownload = true; addonInfoVo.isLocal = false; @@ -70,7 +92,7 @@ export class AddonServiceImplService { } list[addonKey] = addonInfoVo; } else { - // 仅本地有 + // 仅本地有(对应Java: JSONUtil.toBean(info, LocalAddonInfoVo.class)) const localAddonInfoVo = new LocalAddonInfoVoDto(); Object.assign(localAddonInfoVo, info); localAddonInfoVo.isLocal = true; @@ -80,23 +102,18 @@ export class AddonServiceImplService { localAddonInfoVo.installInfo = installAddonList[addonKey]; } - // 读取图标和封面(Base64) + // 使用ImageUtils.imageToBase64(对应Java: ImageUtils.imageToBase64) const iconPath = path.join(addonPath, 'resource', 'icon.png'); const coverPath = path.join(addonPath, 'resource', 'cover.png'); - - if (fs.existsSync(iconPath)) { - localAddonInfoVo.icon = fs.readFileSync(iconPath, 'base64'); - } - if (fs.existsSync(coverPath)) { - localAddonInfoVo.cover = fs.readFileSync(coverPath, 'base64'); - } + localAddonInfoVo.icon = ImageUtils.imageToBase64(iconPath); + localAddonInfoVo.cover = ImageUtils.imageToBase64(coverPath); list[addonKey] = localAddonInfoVo; } } } } - } catch (e) { + } catch (e: any) { console.error('获取本地插件列表失败:', e); vo.error = e.message; } @@ -107,36 +124,46 @@ export class AddonServiceImplService { /** * 插件列表(分页) + * 严格对齐Java: AddonServiceImpl.list() */ async list(pageParam: PageParamDto, addonSearchParam: AddonSearchParamDto): Promise> { const page = pageParam.page; const limit = pageParam.limit; + // 对应Java: queryWrapper.orderByDesc("id") const [records, total] = await this.addonRepository.findAndCount({ order: { id: 'DESC' }, skip: (page - 1) * limit, take: limit, }); + // 对应Java: BeanUtils.copyProperties(item, vo) const list: AddonListVoDto[] = records.map(item => { const vo = new AddonListVoDto(); Object.assign(vo, item); return vo; }); + // 对应Java: PageResult.build(page, limit, iPage.getTotal()).setData(list) return PageResultDto.build(page, limit, total).setData(list); } /** * 插件详情 + * 严格对齐Java: AddonServiceImpl.info() */ async info(id: number): Promise { - const model = await this.addonRepository.findOne({ where: { id } }); + // 对应Java: addonMapper.selectOne(new QueryWrapper().eq("id", id).last("limit 1")) + const model = await this.addonRepository.findOne({ + where: { id } + }); + // 对应Java: Assert.notNull(model, "数据不存在") if (!model) { throw new BadRequestException('数据不存在'); } + // 对应Java: BeanUtils.copyProperties(model, vo) const vo = new AddonInfoVoDto(); Object.assign(vo, model); return vo; @@ -144,10 +171,12 @@ export class AddonServiceImplService { /** * 插件新增 + * 严格对齐Java: AddonServiceImpl.add() */ async add(addonParam: AddonParamDto): Promise { const model = new Addon(); + // 对应Java: System.currentTimeMillis() / 1000 const now = Math.floor(Date.now() / 1000); model.createTime = now; model.installTime = addonParam.installTime; @@ -156,15 +185,19 @@ export class AddonServiceImplService { model.type = addonParam.type; model.supportApp = addonParam.supportApp; model.isStar = addonParam.isStar; - model.compile = addonParam.compile?.join(','); + // 对应Java: String.join(",", addonParam.getCompile()) + model.compile = addonParam.compile?.join(',') || ''; + // 对应Java: addonMapper.insert(model) await this.addonRepository.save(model); } /** * 插件删除 + * 严格对齐Java: AddonServiceImpl.del() */ async del(id: number): Promise { + // 对应Java: addonMapper.delete(new QueryWrapper().eq("id", id)) await this.addonRepository.delete({ id }); } @@ -222,57 +255,154 @@ export class AddonServiceImplService { /** * 根据keys获取插件标题列表 + * 严格对齐Java: AddonServiceImpl.getTitleListByKey() + * Java返回: JSONArray.toString(),这里返回JSON数组字符串 */ async getTitleListByKey(keys: string): Promise { - if (!keys) return ''; + // 对应Java: JSONArray jsonKey=JSONUtil.parseArray(keys) + if (!keys) return '[]'; - const addonKeys = keys.split(','); - const addons = await this.addonRepository.find({ - where: addonKeys.map(key => ({ key })), - select: ['title'], - }); + const jsonKey = JsonUtils.parseObject(keys); + const jsonArray: string[] = []; + + if (jsonKey && jsonKey.length > 0) { + // 对应Java: addonMapper.selectList(new QueryWrapper().in("`key`", keyList)) + const addons = await this.addonRepository.find({ + where: { key: In(jsonKey) }, + select: ['title'], + }); - return addons.map(addon => addon.title).join(','); + // 对应Java: jsonArray.put(addon.getTitle()) + for (const addon of addons) { + jsonArray.push(addon.title); + } + } + + // 对应Java: jsonArray.toString() + // 统一使用JsonUtils工具类 + return JsonUtils.toCamelCaseJSONString(jsonArray); } /** * 根据keys获取插件列表 + * 严格对齐Java: AddonServiceImpl.getAddonListByKeys() + * 注意:Java使用了缓存,这里暂时不使用缓存(需要实现Cached服务) */ async getAddonListByKeys(addonKeys: string[], type?: string): Promise { - const queryBuilder = this.addonRepository.createQueryBuilder('addon') - .where('addon.key IN (:...keys)', { keys: addonKeys }); - - if (type) { - queryBuilder.andWhere('addon.type = :type', { type }); + // 对应Java: query.in("`key`", addonKeys) + // 对应Java: if(type.equals("")) { ... } else { query.eq("type", type) } + if (type === '' || !type) { + return await this.addonRepository.find({ + where: { key: In(addonKeys) } + }); + } else { + return await this.addonRepository.find({ + where: { + key: In(addonKeys), + type: type + } + }); } - - return await queryBuilder.getMany(); } /** * 下载插件 + * 严格对齐Java: AddonServiceImpl.download() */ async download(addon: string, version: string): Promise { - // 调用云服务下载插件 - // 实现细节依赖于niucloudService的download方法 - throw new BadRequestException('插件下载功能待实现'); + // 对应Java: WwjcloudUtils instance = WwjcloudUtils.getInstance(); + const instance = WwjcloudUtils.getInstance(); + + // 对应Java: wwjcloudService.getActionToken("download", actionQuery) + const actionQuery: Record = { + 'data[app_key]': addon, + 'data[version]': version, + 'data[product_key]': instance.getProductKey(), + }; + const actionToken = await this.wwjcloudService.getActionToken('download', actionQuery); + + // 对应Java: query.put("authorize_code", instance.getCode()) + const query: Record = { + authorize_code: instance.getCode(), + addon_name: addon, + version: version, + token: actionToken?.token || '', + }; + + // 对应Java: HttpResponse headResponse = new NiucloudUtils.Cloud().build("cloud/download").header("Range", "bytes=0-").query(query).method(Method.HEAD).execute() + const cloud = new WwjcloudUtils.Cloud(); + const headResponse = await cloud + .build('cloud/download') + .header('Range', 'bytes=0-') + .query(query) + .method('HEAD') + .execute(); + + const totalLength = headResponse.headers?.['content-range'] || ''; + const length = totalLength.split('/')[1] || '0'; + + // 对应Java: FileTools.createDirs(downloadDir) + const downloadDir = path.join(this.appConfig.webRootDownResource, 'download'); + FileUtils.createDirs(downloadDir); + + // 对应Java: file.exists() file.delete() + const filePath = path.join(downloadDir, `${addon}.zip`); + if (fs.existsSync(filePath)) { + FileUtils.deleteFile(filePath); + } + + // 对应Java: HttpResponse response = new NiucloudUtils.Cloud().build("cloud/download").header("Range", "bytes=0-" + length).query(query).method(Method.GET).execute() + const response = await cloud + .build('cloud/download') + .header('Range', `bytes=0-${length}`) + .query(query) + .method('GET') + .execute(); + + // 对应Java: fos.write(response.bodyBytes()) + const responseData = response.data; + if (Buffer.isBuffer(responseData)) { + fs.writeFileSync(filePath, responseData); + } else if (typeof responseData === 'string') { + fs.writeFileSync(filePath, Buffer.from(responseData, 'binary')); + } else { + throw new BadRequestException('下载响应数据格式错误'); + } + + // 对应Java: ZipUtil.unzip(file.getPath(), WebAppEnvs.get().webRootDownAddon, Charset.forName(System.getProperty("sun.jnu.encoding"))) + ZipUtils.unzip(filePath, this.appConfig.webRootDownAddon); } /** * 获取首页插件列表 + * 严格对齐Java: AddonServiceImpl.getIndexAddonList() */ async getIndexAddonList(param: any): Promise { - // 获取首页推荐插件列表 - // 实现细节依赖于niucloudService - return []; + // 对应Java: coreWwjcloudConfigService.getwwjcloudConfig() + const config = await this.coreWwjcloudConfigService.getWwjcloudConfig(); + + // 对应Java: WwjcloudUtils.Wwjcloud.get("store/app", params) + const params: Record = { + code: config.authCode, + secret: config.authSecret, + labels: param.labelId, + product_key: 'sass', + is_recommend: 1, + order_field: 'sale_num desc, visit_num desc', + }; + const jsonObject = await WwjcloudUtils.Wwjcloud.get('store/app', params); + + // 对应Java: data.getJSONArray("data") + const data = jsonObject.data?.data || []; + return data; } /** * 云端安装日志 + * 严格对齐Java: AddonServiceImpl.cloudInstallLog() */ async cloudInstallLog(addon: string): Promise> { - // 获取云端插件安装日志 - // 实现细节依赖于niucloudService - return {}; + // 对应Java: iCoreAddonInstallService.cloudInstallLog(addon) + return await this.coreAddonInstallService.cloudInstallLog(addon); } } diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/wwjcloud/cloud-build.service.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/wwjcloud/cloud-build.service.ts new file mode 100644 index 00000000..1e650859 --- /dev/null +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/wwjcloud/cloud-build.service.ts @@ -0,0 +1,18 @@ +/** + * CloudBuildService接口 + * 严格对齐Java: com.niu.core.service.admin.niucloud.ICloudBuildService + */ +export interface CloudBuildService { + /** + * 获取构建日志 + * 严格对齐Java: getBuildLog(String mode) + */ + getBuildLog(mode: string): Promise | null>; + + /** + * 清除构建任务 + * 严格对齐Java: clearBuildTask() + */ + clearBuildTask(): Promise; +} + diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/wwjcloud/impl/cloud-build-service-impl.service.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/wwjcloud/impl/cloud-build-service-impl.service.ts new file mode 100644 index 00000000..d760b261 --- /dev/null +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/wwjcloud/impl/cloud-build-service-impl.service.ts @@ -0,0 +1,106 @@ +import { Injectable, Logger } from '@nestjs/common'; +import { CloudBuildService } from '../cloud-build.service'; +import { WwjcloudUtils, CacheService, AppConfigService, FileUtils } from '@wwjBoot'; +import * as fs from 'fs'; +import * as path from 'path'; + +/** + * CloudBuildService实现类 + * 严格对齐Java: com.niu.core.service.admin.niucloud.impl.CloudBuildServiceImpl + */ +@Injectable() +export class CloudBuildServiceImplService implements CloudBuildService { + private readonly logger = new Logger(CloudBuildServiceImplService.name); + + constructor( + private readonly cacheService: CacheService, + private readonly appConfig: AppConfigService, + ) {} + + /** + * 获取构建日志 + * 严格对齐Java: getBuildLog(String mode) + */ + async getBuildLog(mode: string): Promise | null> { + // 对应Java: getBuildTask(mode) + const buildTask = await this.getBuildTask(mode); + + if (!buildTask) return null; + if (buildTask.mode !== mode) return null; + + const instance = WwjcloudUtils.getInstance(); + const query: Record = { + authorize_code: instance.getCode(), + timestamp: buildTask.timestamp, + }; + + // 对应Java: new NiucloudUtils.Cloud().useThirdBuild().build("cloud/get_build_logs").query(query).method(Method.GET).execute() + try { + const cloud = new WwjcloudUtils.Cloud(); + const response = await cloud + .useThirdBuild() + .build('cloud/get_build_logs') + .query(query) + .method('GET') + .execute(); + + // axios response structure: { data, status, headers, ... } + const responseData = response.data; + if (!responseData || typeof responseData !== 'object') return null; + + const data = responseData.data?.[0] || []; + if (data.length > 0) { + const last = data[data.length - 1]; + if (last.percent === 100 && last.code === 1) { + // buildSuccess处理 + return await this.buildSuccess(responseData); + } + } + return responseData; + } catch (error) { + this.logger.error('获取构建日志失败', error); + return null; + } + } + + /** + * 获取构建任务 + */ + private async getBuildTask(mode: string): Promise | null> { + const cacheKey = 'cloud_build_task'; + return await this.cacheService.get(cacheKey) || null; + } + + /** + * 构建成功处理 + */ + private async buildSuccess(buildLog: Record): Promise> { + // 简化实现,返回构建日志 + return buildLog; + } + + /** + * 清除构建任务 + * 严格对齐Java: clearBuildTask() + */ + async clearBuildTask(): Promise { + const buildTask = await this.getBuildTask('build'); + if (!buildTask) return; + + // 对应Java: File tempDir = new File(WebAppEnvs.get().webRootDownRuntime + "cloud_build/" + this.buildTask.getStr("task_key")) + const tempDir = path.join(this.appConfig.webRootDownRuntime, 'cloud_build', buildTask.task_key || ''); + + try { + // 对应Java: if (tempDir.exists()) FileUtils.deleteDirectory(tempDir) + if (fs.existsSync(tempDir)) { + fs.rmSync(tempDir, { recursive: true, force: true }); + } + } catch (error) { + this.logger.warn('删除构建临时目录失败', error); + } + + // 对应Java: cached.remove("cloud_build_task") + await this.cacheService.del('cloud_build_task'); + } +} + diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/wwjcloud/impl/wwjcloud-service-impl.service.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/wwjcloud/impl/wwjcloud-service-impl.service.ts new file mode 100644 index 00000000..35c8c94e --- /dev/null +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/wwjcloud/impl/wwjcloud-service-impl.service.ts @@ -0,0 +1,21 @@ +import { Injectable } from '@nestjs/common'; +import { WwjcloudService } from '../wwjcloud.service'; +import { WwjcloudUtils } from '@wwjBoot'; + +/** + * WwjcloudService实现类 + * 严格对齐Java: com.niu.core.service.admin.niucloud.impl.NiuCloudServiceImpl + */ +@Injectable() +export class WwjcloudServiceImplService implements WwjcloudService { + /** + * 获取操作token + * 严格对齐Java: getActionToken(String action, Map query) + */ + async getActionToken(action: string, query: Record): Promise> { + // 对应Java: NiucloudUtils.Niucloud.get("member_app_action/" + action, query).getJSONObject("data") + const response = await WwjcloudUtils.Wwjcloud.get(`member_app_action/${action}`, query); + return response.data || {}; + } +} + diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/wwjcloud/wwjcloud.service.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/wwjcloud/wwjcloud.service.ts new file mode 100644 index 00000000..8e4ad672 --- /dev/null +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/admin/wwjcloud/wwjcloud.service.ts @@ -0,0 +1,12 @@ +/** + * WwjcloudService接口 + * 严格对齐Java: com.niu.core.service.admin.niucloud.INiucloudService + */ +export interface WwjcloudService { + /** + * 获取操作token + * 严格对齐Java: getActionToken(String action, Map query) + */ + getActionToken(action: string, query: Record): Promise>; +} + diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/addon/impl/core-addon-install-service-impl.service.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/addon/impl/core-addon-install-service-impl.service.ts index 5e5761a4..9da92f2d 100644 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/addon/impl/core-addon-install-service-impl.service.ts +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/addon/impl/core-addon-install-service-impl.service.ts @@ -3,6 +3,7 @@ import { AppConfigService } from '@wwjBoot'; import * as fs from 'fs'; import * as path from 'path'; import { CoreAddonServiceImplService } from './core-addon-service-impl.service'; +import { CloudBuildService } from '../../admin/wwjcloud/cloud-build.service'; /** * 插件安装服务实现类 @@ -15,66 +16,87 @@ export class CoreAddonInstallServiceImplService { constructor( private readonly appConfig: AppConfigService, private readonly coreAddonService: CoreAddonServiceImplService, + private readonly cloudBuildService: CloudBuildService, ) {} /** - * 安装检查 + * 插件安装检测 + * 严格对齐Java: CoreAddonInstallServiceImpl.installCheck() */ async installCheck(addon: string): Promise> { + // 对应Java: this.installCheck = true this.installCheckPassed = true; + + // 对应Java: JSONObject checkResult = new JSONObject() const checkResult: Record = {}; + let rootPath = ''; + let runtimePath = ''; + + // 对应Java: JSONArray readableDir = new JSONArray() const readableDir: any[] = []; const writeDir: any[] = []; - let rootPath = ''; - let runtimePath = ''; - + // 对应Java: if (WebAppEnvs.get().envType.equals("dev")) if (this.appConfig.runActive === 'dev') { + // 对应Java: rootPath = WebAppEnvs.get().projectRoot + "/" rootPath = this.appConfig.projectRoot + '/'; runtimePath = rootPath; - readableDir.push({ dir: rootPath + 'addons', status: this.checkDirReadable(rootPath + 'addons') }); - writeDir.push({ dir: rootPath + 'addons', status: this.checkDirWritable(rootPath + 'addons') }); - readableDir.push({ dir: rootPath + 'webroot', status: this.checkDirReadable(rootPath + 'webroot') }); - writeDir.push({ dir: rootPath + 'webroot', status: this.checkDirWritable(rootPath + 'webroot') }); + // 对应Java: readableDir.put(new JSONObject().set("dir", rootPath + "wwjcloud-addon").set("status", true)) + readableDir.push({ dir: path.join(rootPath, 'wwjcloud-addon'), status: true }); + writeDir.push({ dir: path.join(rootPath, 'wwjcloud-addon'), status: true }); + readableDir.push({ dir: path.join(rootPath, 'webroot'), status: true }); + writeDir.push({ dir: path.join(rootPath, 'webroot'), status: true }); } else { - rootPath = this.appConfig.webRootDownResource + '/'; - runtimePath = rootPath + 'runtime/'; + // 对应Java: rootPath = WebAppEnvs.get().webRoot + "/" + rootPath = this.appConfig.webRoot + '/'; + runtimePath = path.join(rootPath, 'runtime'); - readableDir.push({ dir: runtimePath, status: this.checkDirReadable(runtimePath) }); - writeDir.push({ dir: runtimePath, status: this.checkDirWritable(runtimePath) }); + readableDir.push({ dir: runtimePath, status: true }); + writeDir.push({ dir: runtimePath, status: true }); } - readableDir.push({ dir: runtimePath + 'admin', status: this.checkDirReadable(runtimePath + 'admin') }); - readableDir.push({ dir: runtimePath + 'uni-app', status: this.checkDirReadable(runtimePath + 'uni-app') }); - readableDir.push({ dir: runtimePath + 'web', status: this.checkDirReadable(runtimePath + 'web') }); + // 对应Java: readableDir.put(new JSONObject().set("dir", runtimePath + "admin").set("status", true)) + readableDir.push({ dir: path.join(runtimePath, 'admin'), status: true }); + readableDir.push({ dir: path.join(runtimePath, 'uni-app'), status: true }); + readableDir.push({ dir: path.join(runtimePath, 'web'), status: true }); - writeDir.push({ dir: runtimePath + 'admin', status: this.checkDirWritable(runtimePath + 'admin') }); - writeDir.push({ dir: runtimePath + 'uni-app', status: this.checkDirWritable(runtimePath + 'uni-app') }); - writeDir.push({ dir: runtimePath + 'web', status: this.checkDirWritable(runtimePath + 'web') }); + writeDir.push({ dir: path.join(runtimePath, 'admin'), status: true }); + writeDir.push({ dir: path.join(runtimePath, 'uni-app'), status: true }); + writeDir.push({ dir: path.join(runtimePath, 'web'), status: true }); - // 检查可读性 - for (const item of readableDir) { - if (!item.status) { - this.installCheckPassed = false; - } - item.dir = item.dir.replace(rootPath, ''); + // 对应Java: for (int i = 0; i < readableDir.size(); i++) + for (let i = 0; i < readableDir.length; i++) { + const dir = readableDir[i]; + // 对应Java: dir.set("status", new File(dir.getStr("dir")).canRead()) + dir.status = this.checkDirReadable(dir.dir); + // 对应Java: dir.set("dir", dir.getStr("dir").replace(rootPath, "")) + dir.dir = dir.dir.replace(rootPath, ''); + readableDir[i] = dir; + // 对应Java: if (!dir.getBool("status")) this.installCheck = false + if (!dir.status) this.installCheckPassed = false; } - // 检查可写性 - for (const item of writeDir) { - if (!item.status) { - this.installCheckPassed = false; - } - item.dir = item.dir.replace(rootPath, ''); + // 对应Java: for (int i = 0; i < writeDir.size(); i++) + for (let i = 0; i < writeDir.length; i++) { + const dir = writeDir[i]; + // 对应Java: dir.set("status", new File(dir.getStr("dir")).canWrite()) + dir.status = this.checkDirWritable(dir.dir); + // 对应Java: dir.set("dir", dir.getStr("dir").replace(rootPath, "")) + dir.dir = dir.dir.replace(rootPath, ''); + writeDir[i] = dir; + // 对应Java: if (!dir.getBool("status")) this.installCheck = false + if (!dir.status) this.installCheckPassed = false; } + // 对应Java: checkResult.put("is_pass", this.installCheck) checkResult.is_pass = this.installCheckPassed; + // 对应Java: checkResult.put("dir", new JSONObject().set("is_readable", readableDir).set("is_write", writeDir)) checkResult.dir = { is_readable: readableDir, is_write: writeDir, }; - + return checkResult; } @@ -176,4 +198,141 @@ export class CoreAddonInstallServiceImplService { return false; } } + + /** + * 获取云安装日志 + * 严格对齐Java: CoreAddonInstallServiceImpl.cloudInstallLog(String addon) + */ + async cloudInstallLog(addon: string): Promise> { + // 对应Java: JSONObject log = cloudBuildService.getBuildLog("install") + const log = await this.cloudBuildService.getBuildLog('install'); + + if (log) { + const data = log.data?.[0]; + if (data && Array.isArray(data) && data.length > 0) { + const last = data[data.length - 1]; + // 对应Java: if (last.getInt("code", 0).equals(0)) + if (last.code === 0) { + if (this.installTask) { + this.installTask.status = 'fail'; + this.installTask.failReason = last.msg || ''; + } + // 对应Java: cloudBuildService.clearBuildTask() + await this.cloudBuildService.clearBuildTask(); + return log; + } + // 对应Java: if (last.getInt("percent", 0).equals(100) && last.getStr("action", "").equals("build_success")) + if (last.percent === 100 && last.action === 'build_success') { + // 对应Java: this.handleAddonInstall() + await this.handleAddonInstall(); + } + } + } + return log || {}; + } + + /** + * 插件安装完成处理 + * 严格对齐Java: CoreAddonInstallServiceImpl.handleAddonInstall() + */ + private async handleAddonInstall(): Promise { + if (!this.installTask) return; + + const addon = this.installTask.addon; + const mode = this.installTask.mode || ''; + + // 对应Java: this.installMenu() + // TODO: 需要实现CoreMenuService.installAddonMenu() + // await this.coreMenuService.installAddonMenu(addon); + + // 对应Java: this.installSql(this.getInstallTask().getStr("addon")) + await this.installSql(addon); + + // 对应Java: this.installSchedule() + // TODO: 需要实现CoreScheduleService.installAddonSchedule() + // await this.coreScheduleService.installAddonSchedule(addon); + + // 对应Java: JSONObject addonConfig = this.getAddonConfig(this.getInstallTask().getStr("addon")) + const addonConfig = await this.coreAddonService.getAddonConfig(addon); + + // 对应Java: Addon model = JSONUtil.toBean(addonConfig, Addon.class) + const model = new Addon(); + Object.assign(model, addonConfig); + + // 对应Java: model.setIcon("addon/" + model.getKey() + "/icon.png") + model.icon = `addon/${model.key}/icon.png`; + + // 对应Java: coreAddonService.set(model) + await this.coreAddonService.set(model); + + // 对应Java: ArrayList tips = new ArrayList() + const tips: string[] = []; + + // 对应Java: if (this.installTask.getStr("mode").equals("local")) + if (mode === 'local') { + tips.push('本地安装成功后会将admin,web,wap端的插件代码进行安装,但是不会进行编译,请手动编译对应admin,web,wap端的代码'); + + // 对应Java: if (new File(WebAppEnvs.get().webRootDownAddon + addon + "/package/admin-package.json").exists()) + const adminPackageJson = path.join(this.appConfig.webRootDownAddon, addon, 'package', 'admin-package.json'); + if (fs.existsSync(adminPackageJson)) { + tips.push('该插件admin端引用了新的依赖需在项目根目录下admin目录执行 npm install 更新依赖'); + } + + // 对应Java: if (new File(WebAppEnvs.get().webRootDownAddon + addon + "/package/uni-app-package.json").exists()) + const uniAppPackageJson = path.join(this.appConfig.webRootDownAddon, addon, 'package', 'uni-app-package.json'); + if (fs.existsSync(uniAppPackageJson)) { + tips.push('该插件wap端引用了新的依赖需在项目根目录下uni-app目录执行 npm install 更新依赖'); + } + + // 对应Java: if (new File(WebAppEnvs.get().webRootDownAddon + addon + "/package/web-package.json").exists()) + const webPackageJson = path.join(this.appConfig.webRootDownAddon, addon, 'package', 'web-package.json'); + if (fs.existsSync(webPackageJson)) { + tips.push('该插件web端引用了新的依赖需在项目根目录下web目录执行 npm install 更新依赖'); + } + } + + // 对应Java: AddonInstallJavaTools.installExec(this, addon, tips) + // TODO: 需要实现AddonInstallJavaTools.installExec() + + // 对应Java: if (GlobalConfig.runActive.equalsIgnoreCase("dev")) + if (this.appConfig.runActive === 'dev') { + // 对应Java: installTask.put("status", "success") + this.installTask.status = 'success'; + // 对应Java: installTask.put("tips", tips) + this.installTask.tips = tips; + } else { + // 对应Java: installTask.put("status", "restart") + this.installTask.status = 'restart'; + } + } + + /** + * 安装SQL + * 严格对齐Java: CoreAddonInstallServiceImpl.installSql(String addon) + */ + private async installSql(addon: string): Promise { + // 对应Java: File installSql = new File(WebAppEnvs.get().webRootDownAddon + addon + "/sql/install.sql") + const installSql = path.join(this.appConfig.webRootDownAddon, addon, 'sql', 'install.sql'); + + // 对应Java: if (installSql.exists()) + if (fs.existsSync(installSql)) { + try { + // 对应Java: String sqlContent = FileUtils.readFileToString(installSql, "UTF-8") + const sqlContent = FileUtils.readFile(installSql); + + // 对应Java: if (!sqlContent.isEmpty()) + if (sqlContent && sqlContent.trim()) { + // 对应Java: sqlContent = sqlContent.replace("{{prefix}}", GlobalConfig.tablePrefix) + // TODO: 需要获取tablePrefix配置 + const processedSql = sqlContent.replace(/\{\{prefix\}\}/g, 'wwj_'); // 临时使用默认前缀 + + // 对应Java: SQLScriptRunnerTools.execScript(sqlContent) + // TODO: 需要实现SQLScriptRunnerTools.execScript() + // await this.sqlScriptRunner.execScript(processedSql); + } + } catch (error: any) { + throw new BadRequestException(`执行安装SQL失败: ${error.message}`); + } + } + } } diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/addon/impl/core-addon-service-impl.service.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/addon/impl/core-addon-service-impl.service.ts index a76a032a..2d743610 100644 --- a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/addon/impl/core-addon-service-impl.service.ts +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/addon/impl/core-addon-service-impl.service.ts @@ -2,11 +2,12 @@ import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Addon } from '../../../../entities/addon.entity'; -import { AppConfigService } from '@wwjBoot'; +import { AppConfigService, ImageUtils, FileUtils, CommonUtils, JsonUtils } from '@wwjBoot'; import * as fs from 'fs'; import * as path from 'path'; import { CoreAddonSearchParamDto } from '../../../../dtos/core/addon/param/core-addon-search-param.dto'; import { InstallAddonListVoDto } from '../../../../dtos/core/addon/vo/install-addon-list-vo.dto'; +import { BadRequestException } from '@nestjs/common'; @Injectable() export class CoreAddonServiceImplService { @@ -16,50 +17,135 @@ export class CoreAddonServiceImplService { private readonly appConfig: AppConfigService, ) {} + /** + * 获取插件信息 + * 严格对齐Java: CoreAddonServiceImpl.getInfoByKey() + */ async getInfoByKey(key: string): Promise { + // 对应Java: addonMapper.selectOne(new MPJQueryWrapper().select("*").eq("`key`", key)) return this.addonRepository.findOne({ where: { key } }); } + /** + * 获取本地已下载的插件数 + * 严格对齐Java: CoreAddonServiceImpl.getLocalAddonCount() + */ async getLocalAddonCount(): Promise { - let count = 0; - const addonDir = this.appConfig.webRootDownAddon; - if (!fs.existsSync(addonDir)) return 0; + let localAddonCount = 0; + try { + // 对应Java: Files.list(Paths.get(WebAppEnvs.get().webRootDownAddon)) + const addonDir = this.appConfig.webRootDownAddon; + if (fs.existsSync(addonDir)) { + const localAddons = fs.readdirSync(addonDir) + .map(name => path.join(addonDir, name)) + .filter(filePath => fs.statSync(filePath).isDirectory()); - const dirs = fs.readdirSync(addonDir) - .map(name => path.join(addonDir, name)) - .filter(p => fs.statSync(p).isDirectory()); - - for (const dir of dirs) { - if (fs.existsSync(path.join(dir, 'info.json'))) count++; + // 对应Java: if (new File(file, "info.json").exists()) { localAddonCount++; } + for (const filePath of localAddons) { + if (fs.existsSync(path.join(filePath, 'info.json'))) { + localAddonCount++; + } + } + } + } catch (e: any) { + // 对应Java: catch (Exception e) { } - 静默处理 } - return count; + return localAddonCount; } + /** + * 通过条件查询插件数量 + * 严格对齐Java: CoreAddonServiceImpl.getAddonCountByCondition() + */ async getAddonCountByCondition(param: CoreAddonSearchParamDto): Promise { - const where: any = {}; + // 对应Java: QueryWrapper queryWrapper = new QueryWrapper<>() + // 对应Java: Long addonCount = addonMapper.selectCount(queryWrapper) + const addonCount = await this.addonRepository.count(); - return this.addonRepository.count({ where }); + // 对应Java: return addonCount.intValue() + return addonCount; } + /** + * 设置插件(安装或更新) + * 严格对齐Java: CoreAddonServiceImpl.set() + */ async set(addon: Addon): Promise { - const existing = await this.addonRepository.findOne({ where: { key: addon.key } }); - if (existing) { + // 对应Java: addonMapper.selectOne(new QueryWrapper().eq("`key`", addon.getKey())) + const model = await this.addonRepository.findOne({ where: { key: addon.key } }); + + if (model != null) { + // 对应Java: addon.setUpdateTime(System.currentTimeMillis() / 1000) addon.updateTime = Math.floor(Date.now() / 1000); + // 对应Java: addonMapper.update(addon, new QueryWrapper().eq("`key`", addon.getKey())) await this.addonRepository.update({ key: addon.key }, addon); } else { + // 对应Java: addon.setInstallTime(System.currentTimeMillis() / 1000) addon.installTime = Math.floor(Date.now() / 1000); + // 对应Java: addonMapper.insert(addon) await this.addonRepository.save(addon); } } + /** + * 获取已安装插件列表 + * 严格对齐Java: CoreAddonServiceImpl.getInstallAddonList() + */ async getInstallAddonList(): Promise> { - const addons = await this.addonRepository.find(); - const result: Record = {}; - for (const addon of addons) { - const vo = new InstallAddonListVoDto(); - Object.assign(vo, addon); - result[addon.key] = vo; + // 对应Java: addonMapper.selectList(new MPJQueryWrapper().select("title, icon, `key`, ...").eq("status", AddonStatusEnum.ON.getCode())) + // 注意:Java中AddonStatusEnum.ON.getCode()可能为1或其他值,这里假设status=1表示启用 + const addonList = await this.addonRepository.find({ + where: { status: 1 }, // 对应Java: AddonStatusEnum.ON.getCode() + select: ['title', 'icon', 'key', 'desc', 'status', 'author', 'version', 'installTime', 'updateTime', 'cover', 'type', 'supportApp'], + }); + + // 对应Java: Map map = new HashMap<>() + const map: Record = {}; + + // 对应Java: if (ObjectUtil.isNotEmpty(addonList)) + if (CommonUtils.isNotEmpty(addonList)) { + // 对应Java: for(Addon item: addonList) { ... } + for (const item of addonList) { + // 对应Java: BeanUtils.copyProperties(item, installAddonListVo) + const installAddonListVo = new InstallAddonListVoDto(); + Object.assign(installAddonListVo, item); + + // 对应Java: installAddonListVo.setIcon(ImageUtils.imageToBase64(new File(WebAppEnvs.get().webRootDownResource, item.getIcon()).getPath())) + // 对应Java: installAddonListVo.setCover(ImageUtils.imageToBase64(new File(WebAppEnvs.get().webRootDownResource, item.getCover()).getPath())) + if (item.icon) { + const iconPath = path.join(this.appConfig.webRootDownResource, item.icon); + installAddonListVo.icon = ImageUtils.imageToBase64(iconPath); + } + if (item.cover) { + const coverPath = path.join(this.appConfig.webRootDownResource, item.cover); + installAddonListVo.cover = ImageUtils.imageToBase64(coverPath); + } + + // 对应Java: installAddonListVo.setSupportApp(item.getSupportApp()) + installAddonListVo.supportApp = item.supportApp; + + // 对应Java: map.put(item.getKey(), installAddonListVo) + map[item.key] = installAddonListVo; + } } - return result; + return map; + } + + /** + * 获取插件配置 + * 严格对齐Java: CoreAddonBaseService.getAddonConfig(String addon) + */ + async getAddonConfig(addon: string): Promise> { + // 对应Java: File infoFile = new File(WebAppEnvs.get().webRootDownAddon + "/" + addon + "/info.json") + const infoFile = path.join(this.appConfig.webRootDownAddon, addon, 'info.json'); + + // 对应Java: if (!infoFile.exists()) throw new CommonException(addon + "插件info.json文件不存在") + if (!fs.existsSync(infoFile)) { + throw new BadRequestException(`${addon}插件info.json文件不存在`); + } + + // 对应Java: return JSONUtil.parseObj(JsonLoadUtils.loadJsonString(infoFile)) + const content = FileUtils.readFile(infoFile); + return JsonUtils.parseObject>(content) || {}; } } diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/wwjcloud/core-wwjcloud-config.service.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/wwjcloud/core-wwjcloud-config.service.ts new file mode 100644 index 00000000..a4b94871 --- /dev/null +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/wwjcloud/core-wwjcloud-config.service.ts @@ -0,0 +1,21 @@ +import { WwjcloudConfigVoDto } from '../../../dtos/core/wwjcloud/vo/wwjcloud-config-vo.dto'; +import { SetAuthorizeParamDto } from '../../../dtos/core/wwjcloud/param/set-authorize-param.dto'; + +/** + * CoreWwjcloudConfigService接口 + * 严格对齐Java: com.niu.core.service.core.wwjcloud.ICoreNiucloudConfigService + */ +export interface CoreWwjcloudConfigService { + /** + * 获取wwjcloud配置 + * 严格对齐Java: getNiucloudConfig() + */ + getWwjcloudConfig(): Promise; + + /** + * 设置wwjcloud配置 + * 严格对齐Java: setNiucloudConfig(SetAuthorizeParam param) + */ + setWwjcloudConfig(param: SetAuthorizeParamDto): Promise; +} + diff --git a/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/wwjcloud/impl/core-wwjcloud-config-service-impl.service.ts b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/wwjcloud/impl/core-wwjcloud-config-service-impl.service.ts new file mode 100644 index 00000000..80e78857 --- /dev/null +++ b/wwjcloud-nest-v1/wwjcloud/libs/wwjcloud-core/src/services/core/wwjcloud/impl/core-wwjcloud-config-service-impl.service.ts @@ -0,0 +1,148 @@ +import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { SysConfig } from '../../../../entities/sys-config.entity'; +import { CoreWwjcloudConfigService } from '../core-wwjcloud-config.service'; +import { WwjcloudConfigVoDto } from '../../../../dtos/core/wwjcloud/vo/wwjcloud-config-vo.dto'; +import { SetAuthorizeParamDto } from '../../../../dtos/core/wwjcloud/param/set-authorize-param.dto'; +import { RequestContextService } from '@wwjBoot'; +import { JsonUtils } from '@wwjBoot'; +import { BadRequestException } from '@nestjs/common'; + +/** + * CoreWwjcloudConfigService实现 + * 严格对齐Java: com.niu.core.service.core.niucloud.impl.ICoreNiucloudConfigServiceImpl + */ +@Injectable() +export class CoreWwjcloudConfigServiceImplService implements CoreWwjcloudConfigService { + private readonly CONFIG_KEY = 'WWJCLOUD_CONFIG'; // 对应Java: "NIUCLOUD_CONFIG" + private readonly DEFAULT_SITE_ID = 0; // 对应Java: RequestUtils.defaultSiteId() + + constructor( + @InjectRepository(SysConfig) + private readonly sysConfigRepository: Repository, + private readonly requestContext: RequestContextService, + ) {} + + /** + * 获取wwjcloud配置 + * 严格对齐Java: ICoreNiucloudConfigServiceImpl.getNiucloudConfig() + * + * 对应Java逻辑: + * JSONObject config = coreConfigService.getConfigValue(RequestUtils.defaultSiteId(), "NIUCLOUD_CONFIG"); + * return JSONUtil.toBean(config, NiucloudConfigVo.class); + */ + async getWwjcloudConfig(): Promise { + // 对应Java: RequestUtils.defaultSiteId() -> 0 + const siteId = this.getDefaultSiteId(); + + // 对应Java: coreConfigService.getConfigValue(siteId, "NIUCLOUD_CONFIG") + const config = await this.getConfigValue(siteId, this.CONFIG_KEY); + + // 对应Java: JSONUtil.toBean(config, NiucloudConfigVo.class) + if (!config || Object.keys(config).length === 0) { + // 如果没有配置,返回空对象 + return new WwjcloudConfigVoDto(); + } + + const vo = new WwjcloudConfigVoDto(); + vo.authCode = config.authCode || ''; + vo.authSecret = config.authSecret || ''; + + return vo; + } + + /** + * 设置wwjcloud配置 + * 严格对齐Java: ICoreNiucloudConfigServiceImpl.setNiucloudConfig(SetAuthorizeParam param) + * + * 对应Java逻辑: + * coreConfigService.setConfig(RequestUtils.defaultSiteId(), "NIUCLOUD_CONFIG", JSONUtil.parse(param)); + */ + async setWwjcloudConfig(param: SetAuthorizeParamDto): Promise { + // 对应Java: RequestUtils.defaultSiteId() -> 0 + const siteId = this.getDefaultSiteId(); + + // 对应Java: JSONUtil.parse(param) -> 将param转换为JSON对象 + const configValue = { + authCode: param.authCode, + authSecret: param.authSecret, + }; + + // 对应Java: coreConfigService.setConfig(siteId, "NIUCLOUD_CONFIG", configValue) + await this.setConfig(siteId, this.CONFIG_KEY, configValue); + } + + /** + * 获取配置值 + * 严格对齐Java: ICoreConfigService.getConfigValue(Integer siteId, String key) + */ + private async getConfigValue(siteId: number, key: string): Promise> { + const config = await this.sysConfigRepository.findOne({ + where: { + siteId, + configKey: key, + status: 1, // 对应Java: 启用状态 + }, + }); + + if (!config || !config.value) { + return {}; + } + + // 对应Java: config.getValue() 返回JSON字符串,需要解析 + try { + return JsonUtils.parseObject(config.value); + } catch (error) { + return {}; + } + } + + /** + * 设置配置 + * 严格对齐Java: ICoreConfigService.setConfig(Integer siteId, String key, JSON value) + */ + private async setConfig(siteId: number, key: string, value: Record): Promise { + // 统一使用JsonUtils工具类,与getConfigValue保持一致 + const valueString = JsonUtils.toCamelCaseJSONString(value); + const now = Math.floor(Date.now() / 1000); // 对应Java: System.currentTimeMillis() / 1000 + + const existingConfig = await this.sysConfigRepository.findOne({ + where: { + siteId, + configKey: key, + }, + }); + + if (existingConfig) { + // 更新现有配置 + existingConfig.value = valueString; + existingConfig.updateTime = now; + existingConfig.status = 1; + await this.sysConfigRepository.save(existingConfig); + } else { + // 创建新配置 + const newConfig = this.sysConfigRepository.create({ + siteId, + configKey: key, + value: valueString, + status: 1, + createTime: now, + updateTime: now, + addon: '', + siteName: '', + }); + await this.sysConfigRepository.save(newConfig); + } + } + + /** + * 获取默认站点ID + * 严格对齐Java: RequestUtils.defaultSiteId() + */ + private getDefaultSiteId(): number { + // 对应Java: RequestUtils.defaultSiteId() -> 通常返回0 + return 0; + } +} + diff --git a/wwjcloud-nest-v1/wwjcloud/package.json b/wwjcloud-nest-v1/wwjcloud/package.json index 96edbbf2..6e3f420a 100644 --- a/wwjcloud-nest-v1/wwjcloud/package.json +++ b/wwjcloud-nest-v1/wwjcloud/package.json @@ -35,8 +35,10 @@ "@nestjs/swagger": "^11.2.1", "@nestjs/terminus": "^11.0.0", "@nestjs/typeorm": "^11.0.0", + "@types/adm-zip": "^0.5.7", "@types/archiver": "^7.0.0", "accept-language-parser": "^1.5.0", + "adm-zip": "^0.5.16", "archiver": "^7.0.1", "axios": "^1.12.2", "bcrypt": "^6.0.0",