feat(controller): 添加上传本地技能压缩包V2接口

- 在SkillGenController中新增uploadSkillV4方法,支持上传zip或rar格式技能包
- 新增CmsContent uploadSkillV4接口实现技能包解析和内容生成
- 集成SevenZipJBinding库支持rar格式解压
- 实现压缩包目录树结构解析功能
- 添加YAML内容生成和技能信息提取功能
- 完善异常处理和错误信息返回机制
This commit is contained in:
wangzhiwei 2026-04-10 15:47:34 +08:00
parent b548bfbc14
commit a5631caab3
6 changed files with 900 additions and 163 deletions

View File

@ -128,4 +128,24 @@ public class SkillGenController {
return CommonResult.success(cmsContent);
}
/**
* 上传本地技能压缩包V2
*
* @param file 技能压缩包文件
* @return 生成的技能内容
*/
@PostMapping("/uploadSkillV4")
@Operation(summary = "上传本地技能压缩包V2", description = "上传本地zip或rar文件并生成技能")
public CommonResult<CmsContent> uploadSkillV4(
@RequestParam("file") MultipartFile file) {
try {
byte[] fileBytes = file.getBytes();
String fileName = file.getOriginalFilename();
CmsContent cmsContent = skillGenService.uploadSkillV4(fileBytes, fileName);
return CommonResult.success(cmsContent);
} catch (Exception e) {
return CommonResult.failed("上传失败:" + e.getMessage());
}
}
}

View File

@ -0,0 +1,53 @@
package com.kexue.skills.entity.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 技能包信息DTO
*
* @author AI技能生成助手
* @since 2026-04-10
*/
@Data
public class SkillPackageInfoDto implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 技能名称
*/
private String name;
/**
* 版本号
*/
private String version;
/**
* 技能描述
*/
private String description;
/**
* 作者
*/
private String author;
/**
* 创建日期
*/
private String created;
/**
* 标签列表
*/
private List<String> tags;
/**
* 目录结构
*/
private List<SkillStructureNodeDto> structure;
}

View File

@ -0,0 +1,53 @@
package com.kexue.skills.entity.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 技能包目录结构节点DTO
*
* @author AI技能生成助手
* @since 2026-04-10
*/
@Data
public class SkillStructureNodeDto implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 节点名称文件或目录名
*/
private String name;
/**
* 节点类型directory file
*/
private String type;
/**
* 父级路径
*/
private String path;
/**
* 格式dirmarkdownpython
*/
private String format;
/**
* 节点描述
*/
private String description;
/**
* 子节点列表目录类型使用
*/
private List<SkillStructureNodeDto> children;
/**
* 文件内容文件类型使用
*/
private String content;
}

View File

@ -69,5 +69,7 @@ public interface SkillGenService {
*/
CmsContent uploadSkillV2(byte[] fileBytes, String fileName);
CmsContent uploadSkillV4(byte[] fileBytes, String fileName);
CmsContent uploadSkillV3(String yamlContent);
}

View File

@ -0,0 +1,18 @@
package com.kexue.skills.utils;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml;
public class YamlUtil {
/**
* 对象转 YAML 字符串
*/
public static String toYaml(Object obj) {
DumperOptions options = new DumperOptions();
options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
options.setPrettyFlow(true);
Yaml yaml = new Yaml(options);
return yaml.dump(obj);
}
}