feat: 火山素材组、素材管理

This commit is contained in:
yys 2026-04-01 14:31:27 +08:00
parent c04c1e572b
commit afca767422
14 changed files with 62 additions and 26 deletions

View File

@ -1,5 +1,7 @@
package com.ruoyi.common.core.request.asset; package com.ruoyi.common.core.request.asset;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -20,9 +22,11 @@ public class CreateAssetGroupRequest {
@ApiModelProperty(value = "Asset Group素材资产组合的描述上限为 300 字符。") @ApiModelProperty(value = "Asset Group素材资产组合的描述上限为 300 字符。")
private String description; private String description;
@ApiModelProperty(value = "Asset Group素材资产组合的类型。可选值AIGC虚拟人像。当前仅支持 AIGC 类型。") @JsonProperty(access = JsonProperty.Access.READ_ONLY)
private String groupType; @ApiModelProperty(hidden = true, value = "Asset Group素材资产组合的类型。可选值AIGC虚拟人像。当前仅支持 AIGC 类型。")
private String groupType = "AIGC";
@ApiModelProperty(value = "资源所属的项目名称,默认值为 default。若资源不在默认项目中需填写正确的项目名称。") @JsonProperty(access = JsonProperty.Access.READ_ONLY)
@ApiModelProperty(hidden = true, value = "资源所属的项目名称,默认值为 default。若资源不在默认项目中需填写正确的项目名称。")
private String projectName; private String projectName;
} }

View File

@ -14,7 +14,7 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@ApiModel(description = "CreateAsset 第三方接口请求体") @ApiModel(description = "CreateAsset 第三方接口请求体")
public class CreateAssetOpenApiRequest { public class CreateAssetRequest {
@ApiModelProperty(value = "Asset素材资产所属的 Asset Group素材资产组合的 Id。", required = true) @ApiModelProperty(value = "Asset素材资产所属的 Asset Group素材资产组合的 Id。", required = true)
private String groupId; private String groupId;
@ -25,9 +25,10 @@ public class CreateAssetOpenApiRequest {
@ApiModelProperty(value = "Asset素材资产的名称上限为 64 个字符。仅用于 ListAssets 模糊搜索,不参与模型推理。") @ApiModelProperty(value = "Asset素材资产的名称上限为 64 个字符。仅用于 ListAssets 模糊搜索,不参与模型推理。")
private String name; private String name;
@ApiModelProperty(value = "Asset素材资产的类型。可选值Image、Video、Audio。", required = true) @ApiModelProperty(allowableValues = "Image,Video,Audio", value = "Asset素材资产的类型。可选值Image、Video、Audio。", required = true)
private String assetType; private String assetType;
@ApiModelProperty(value = "资源所属的项目名称,默认 default。需与所属 Asset Group 的 ProjectName 一致。") @JsonProperty(access = JsonProperty.Access.READ_ONLY)
@ApiModelProperty(hidden = true, value = "资源所属的项目名称,默认 default。需与所属 Asset Group 的 ProjectName 一致。")
private String projectName; private String projectName;
} }

View File

@ -1,5 +1,6 @@
package com.ruoyi.common.core.request.asset; package com.ruoyi.common.core.request.asset;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -17,6 +18,7 @@ public class DeleteAssetRequest {
@ApiModelProperty(value = "需要删除的 Asset素材资产的 Id。", required = true) @ApiModelProperty(value = "需要删除的 Asset素材资产的 Id。", required = true)
private String id; private String id;
@ApiModelProperty(value = "需要删除的 Asset素材资产所属的项目名称默认 default。") @JsonProperty(access = JsonProperty.Access.READ_ONLY)
@ApiModelProperty(hidden = true, value = "需要删除的 Asset素材资产所属的项目名称默认 default。")
private String projectName; private String projectName;
} }

View File

@ -1,5 +1,6 @@
package com.ruoyi.common.core.request.asset; package com.ruoyi.common.core.request.asset;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -17,6 +18,7 @@ public class GetAssetGroupRequest {
@ApiModelProperty(value = "Asset Group素材资产组合的 Id。", required = true) @ApiModelProperty(value = "Asset Group素材资产组合的 Id。", required = true)
private String id; private String id;
@ApiModelProperty(value = "需要查询的 Asset Group素材资产组合所属的项目名称默认值为 default。若资源不在默认项目中需填写正确的项目名称。") @JsonProperty(access = JsonProperty.Access.READ_ONLY)
@ApiModelProperty(hidden = true, value = "需要查询的 Asset Group素材资产组合所属的项目名称默认值为 default。若资源不在默认项目中需填写正确的项目名称。")
private String projectName; private String projectName;
} }

View File

@ -1,5 +1,6 @@
package com.ruoyi.common.core.request.asset; package com.ruoyi.common.core.request.asset;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -17,6 +18,7 @@ public class GetAssetRequest {
@ApiModelProperty(value = "Asset素材资产的 Id。", required = true) @ApiModelProperty(value = "Asset素材资产的 Id。", required = true)
private String id; private String id;
@ApiModelProperty(value = "需要查询的 Asset 所属的项目名称,默认 default。") @JsonProperty(access = JsonProperty.Access.READ_ONLY)
@ApiModelProperty(hidden = true, value = "需要查询的 Asset 所属的项目名称,默认 default。")
private String projectName; private String projectName;
} }

View File

@ -1,5 +1,6 @@
package com.ruoyi.common.core.request.asset; package com.ruoyi.common.core.request.asset;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.ruoyi.common.core.request.asset.dto.ListAssetsGroupFilter; import com.ruoyi.common.core.request.asset.dto.ListAssetsGroupFilter;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
@ -24,12 +25,13 @@ public class ListAssetsGroupRequest {
@ApiModelProperty(value = "每页搜索结果的数量,上限为 100。", required = true) @ApiModelProperty(value = "每页搜索结果的数量,上限为 100。", required = true)
private int pageSize; private int pageSize;
@ApiModelProperty(value = "用于排序的字段名称,默认值 createTime。支持CreateTime创建时间、UpdateTime更新时间") @ApiModelProperty(allowableValues = "CreateTime,UpdateTime", value = "用于排序的字段名称,默认值 createTime。支持CreateTime创建时间、UpdateTime更新时间")
private String sortBy; private String sortBy;
@ApiModelProperty(value = "排序顺序,默认值 Desc。可选值Desc降序、Asc升序") @ApiModelProperty(allowableValues = "Desc,Asc", value = "排序顺序,默认值 Desc。可选值Desc降序、Asc升序")
private String sortOrder; private String sortOrder;
@ApiModelProperty(value = "资源所属的项目名称,默认值为 default。若资源不在默认项目中需填写正确的项目名称。") @JsonProperty(access = JsonProperty.Access.READ_ONLY)
@ApiModelProperty(hidden = true, value = "资源所属的项目名称,默认值为 default。若资源不在默认项目中需填写正确的项目名称。")
private String projectName; private String projectName;
} }

View File

@ -1,5 +1,7 @@
package com.ruoyi.common.core.request.asset; package com.ruoyi.common.core.request.asset;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.ruoyi.common.core.request.asset.dto.ListAssetsFilter; import com.ruoyi.common.core.request.asset.dto.ListAssetsFilter;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
@ -30,6 +32,7 @@ public class ListAssetsRequest {
@ApiModelProperty(value = "排序顺序,默认 Desc。可选Desc、Asc。") @ApiModelProperty(value = "排序顺序,默认 Desc。可选Desc、Asc。")
private String sortOrder; private String sortOrder;
@ApiModelProperty(value = "资源所属的项目名称,默认 default。") @JsonProperty(access = JsonProperty.Access.READ_ONLY)
@ApiModelProperty(hidden = true, value = "资源所属的项目名称,默认 default。")
private String projectName; private String projectName;
} }

View File

@ -1,5 +1,6 @@
package com.ruoyi.common.core.request.asset; package com.ruoyi.common.core.request.asset;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -23,6 +24,7 @@ public class UpdateAssetGroupRequest {
@ApiModelProperty(value = "需要更新的 Asset Group素材资产组合的新描述上限为 300 字符。") @ApiModelProperty(value = "需要更新的 Asset Group素材资产组合的新描述上限为 300 字符。")
private String description; private String description;
@ApiModelProperty(value = "需要更新的 Asset Group素材资产组合所属的项目名称默认值为 default。若资源不在默认项目中需填写正确的项目名称。") @JsonProperty(access = JsonProperty.Access.READ_ONLY)
@ApiModelProperty(hidden = true, value = "需要更新的 Asset Group素材资产组合所属的项目名称默认值为 default。若资源不在默认项目中需填写正确的项目名称。")
private String projectName; private String projectName;
} }

View File

@ -1,5 +1,6 @@
package com.ruoyi.common.core.request.asset; package com.ruoyi.common.core.request.asset;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -20,6 +21,7 @@ public class UpdateAssetRequest {
@ApiModelProperty(value = "需要更新的 Asset素材资产的新名称上限为 64 个字符。") @ApiModelProperty(value = "需要更新的 Asset素材资产的新名称上限为 64 个字符。")
private String name; private String name;
@ApiModelProperty(value = "需要更新的 Asset素材资产所属的项目名称默认 default。") @JsonProperty(access = JsonProperty.Access.READ_ONLY)
@ApiModelProperty(hidden = true, value = "需要更新的 Asset素材资产所属的项目名称默认 default。")
private String projectName; private String projectName;
} }

View File

@ -1,5 +1,6 @@
package com.ruoyi.common.core.request.asset.dto; package com.ruoyi.common.core.request.asset.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -19,10 +20,11 @@ public class ListAssetsFilter {
@ApiModelProperty(value = "Asset素材资产所属的 Asset Group素材资产组合的 Id 列表。") @ApiModelProperty(value = "Asset素材资产所属的 Asset Group素材资产组合的 Id 列表。")
private List<String> groupIds; private List<String> groupIds;
@ApiModelProperty(value = "Asset Group素材资产组合的类型。可选值AIGC虚拟人像。", required = true) @JsonProperty(access = JsonProperty.Access.READ_ONLY)
private String groupType; @ApiModelProperty(hidden = true, value = "Asset Group素材资产组合的类型。可选值AIGC虚拟人像。", required = true)
private String groupType = "AIGC";
@ApiModelProperty(value = "任务状态列表Active已处理完毕、Processing预处理中、Failed处理失败") @ApiModelProperty(allowableValues = "Active,Processing,Failed", value = "任务状态列表Active已处理完毕、Processing预处理中、Failed处理失败")
private List<String> statuses; private List<String> statuses;
@ApiModelProperty(value = "Asset素材资产的名称上限为 64 个字符(模糊搜索)。") @ApiModelProperty(value = "Asset素材资产的名称上限为 64 个字符(模糊搜索)。")

View File

@ -1,5 +1,6 @@
package com.ruoyi.common.core.request.asset.dto; package com.ruoyi.common.core.request.asset.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -22,6 +23,7 @@ public class ListAssetsGroupFilter {
@ApiModelProperty(value = "Asset素材资产所属的 Asset Group素材资产组合的 Id 列表。") @ApiModelProperty(value = "Asset素材资产所属的 Asset Group素材资产组合的 Id 列表。")
private List<String> groupIds; private List<String> groupIds;
@ApiModelProperty(value = "Asset Group素材资产组合的类型。可选值AIGC虚拟人像。", required = true) @JsonProperty(access = JsonProperty.Access.READ_ONLY)
private String groupType; @ApiModelProperty(hidden = true, value = "Asset Group素材资产组合的类型。可选值AIGC虚拟人像。", required = true)
private String groupType = "AIGC";
} }

View File

@ -85,4 +85,13 @@ public class BaseByteApiService {
} }
} }
} }
/**
* 根据用户找到对应的project
*/
protected String getUserProject() {
// TODO
return "default";
}
} }

View File

@ -28,6 +28,9 @@ public class ByteAssetGroupService extends BaseByteApiService implements IByteAs
@Override @Override
public CreateAssetGroupResponse createAssetGroup(CreateAssetGroupRequest request) throws IOException { public CreateAssetGroupResponse createAssetGroup(CreateAssetGroupRequest request) throws IOException {
// 固定值
request.setGroupType("AIGC");
request.setProjectName(getUserProject());
return httpExecute(CREATE_ASSET_GROUP_URL, request, CreateAssetGroupResponse.class); return httpExecute(CREATE_ASSET_GROUP_URL, request, CreateAssetGroupResponse.class);
} }

View File

@ -1,7 +1,7 @@
package com.ruoyi.ai.service.impl; package com.ruoyi.ai.service.impl;
import com.ruoyi.ai.service.IByteAssetService; import com.ruoyi.ai.service.IByteAssetService;
import com.ruoyi.common.core.request.asset.CreateAssetOpenApiRequest; import com.ruoyi.common.core.request.asset.CreateAssetRequest;
import com.ruoyi.common.core.request.asset.DeleteAssetRequest; import com.ruoyi.common.core.request.asset.DeleteAssetRequest;
import com.ruoyi.common.core.request.asset.GetAssetRequest; import com.ruoyi.common.core.request.asset.GetAssetRequest;
import com.ruoyi.common.core.request.asset.ListAssetsRequest; import com.ruoyi.common.core.request.asset.ListAssetsRequest;
@ -10,8 +10,8 @@ import com.ruoyi.common.core.response.asset.CreateAssetResponse;
import com.ruoyi.common.core.response.asset.GetAssetResponse; import com.ruoyi.common.core.response.asset.GetAssetResponse;
import com.ruoyi.common.core.response.asset.ListAssetsResponse; import com.ruoyi.common.core.response.asset.ListAssetsResponse;
import com.ruoyi.common.core.response.asset.UpdateAssetResponse; import com.ruoyi.common.core.response.asset.UpdateAssetResponse;
import com.ruoyi.common.utils.AwsS3Util;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.TencentCosUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -22,7 +22,7 @@ import java.io.IOException;
@RequiredArgsConstructor @RequiredArgsConstructor
public class ByteAssetService extends BaseByteApiService implements IByteAssetService { public class ByteAssetService extends BaseByteApiService implements IByteAssetService {
private final AwsS3Util awsS3Util; private final TencentCosUtil tencentCosUtil;
private static final String CREATE_ASSET_URL = "/open/CreateAsset"; private static final String CREATE_ASSET_URL = "/open/CreateAsset";
private static final String LIST_ASSETS_URL = "/open/ListAssets"; private static final String LIST_ASSETS_URL = "/open/ListAssets";
@ -38,13 +38,13 @@ public class ByteAssetService extends BaseByteApiService implements IByteAssetSe
if (StringUtils.isBlank(groupId) || StringUtils.isBlank(assetType)) { if (StringUtils.isBlank(groupId) || StringUtils.isBlank(assetType)) {
throw new IllegalArgumentException("groupId、assetType 不能为空"); throw new IllegalArgumentException("groupId、assetType 不能为空");
} }
String publicUrl = awsS3Util.uploadMultipartFile(file, true); String publicUrl = tencentCosUtil.uploadMultipartFile(file, true);
CreateAssetOpenApiRequest body = new CreateAssetOpenApiRequest(); CreateAssetRequest body = new CreateAssetRequest();
body.setGroupId(groupId); body.setGroupId(groupId);
body.setUrl(publicUrl); body.setUrl(publicUrl);
body.setName(name); body.setName(name);
body.setAssetType(assetType); body.setAssetType(assetType);
body.setProjectName(projectName); body.setProjectName(getUserProject());
return httpExecute(CREATE_ASSET_URL, body, CreateAssetResponse.class); return httpExecute(CREATE_ASSET_URL, body, CreateAssetResponse.class);
} }