diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/AiSampleController.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/AiSampleController.java index 435e009..cd96dd9 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/AiSampleController.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/AiSampleController.java @@ -1,11 +1,16 @@ package com.tashow.cloud.ai.controller.admin.aisample; -import com.tashow.cloud.ai.controller.admin.aisample.vo.*; +import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleFileRespVO; +import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSamplePageReqVO; +import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleRelateModelVO; +import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleRelateTagVO; +import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleRespVO; +import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleSaveReqVO; +import com.tashow.cloud.ai.controller.admin.aisample.vo.FileUploadReqVO; import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleDO; import com.tashow.cloud.ai.service.aisample.AiSampleService; import com.tashow.cloud.common.pojo.CommonResult; import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.util.object.BeanUtils; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -14,7 +19,14 @@ import jakarta.annotation.security.PermitAll; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import java.io.IOException; import java.util.List; @@ -33,14 +45,12 @@ public class AiSampleController { @PostMapping("/create") @Operation(summary = "创建样本库-上传文件") @PermitAll -// @PreAuthorize("@ss.hasPermission('ai:sample:create')") public CommonResult> createAiSample(FileUploadReqVO uploadReqVO) { return success(aiSampleService.createAiSample(uploadReqVO)); } @PutMapping("/updates") - @Operation(summary = "更新样本库") -// @PreAuthorize("@ss.hasPermission('ai:sample:update')") + @Operation(summary = "批量更新样本") @PermitAll public CommonResult updateAiSample(@Valid @RequestBody List updateReqVO) { aiSampleService.updateAiSamples(updateReqVO); @@ -49,7 +59,6 @@ public class AiSampleController { @PutMapping("/relate") @Operation(summary = "添加关联标签") -// @PreAuthorize("@ss.hasPermission('ai:sample:update')") @PermitAll public CommonResult relate(@Valid @RequestBody AiSampleRelateTagVO relateTagVO) { aiSampleService.relate(relateTagVO); @@ -58,7 +67,6 @@ public class AiSampleController { @DeleteMapping("/deleteRelate") @Operation(summary = "删除关联标签") -// @PreAuthorize("@ss.hasPermission('ai:sample:delete')") @PermitAll public CommonResult deleteRelate(@Valid @RequestBody AiSampleRelateTagVO relateTagVO) { aiSampleService.deleteRelate(relateTagVO); @@ -66,9 +74,8 @@ public class AiSampleController { } @DeleteMapping("/delete") - @Operation(summary = "删除样本库") + @Operation(summary = "删除样本") @Parameter(name = "id", description = "编号", required = true) -// @PreAuthorize("@ss.hasPermission('ai:sample:delete')") @PermitAll public CommonResult deleteAiSample(@RequestParam("id") String ids) { aiSampleService.deleteAiSample(ids); @@ -76,30 +83,36 @@ public class AiSampleController { } @GetMapping("/get") - @Operation(summary = "获得样本库") + @Operation(summary = "获得样本") @Parameter(name = "id", description = "编号", required = true, example = "1024") -// @PreAuthorize("@ss.hasPermission('ai:sample:query')") @PermitAll public CommonResult getAiSample(@RequestParam("id") Long id) { - AiSampleDO aiSample = aiSampleService.getAiSample(id); - return success(BeanUtils.toBean(aiSample, AiSampleRespVO.class)); + return success(aiSampleService.buildSampleRespVO(aiSampleService.getAiSample(id))); } @GetMapping("/page") - @Operation(summary = "获得样本库分页") -// @PreAuthorize("@ss.hasPermission('ai:sample:query')") + @Operation(summary = "获得样本分页") @PermitAll public CommonResult> getAiSamplePage(@Valid AiSamplePageReqVO pageReqVO) { PageResult pageResult = aiSampleService.getAiSamplePage(pageReqVO); - return success(BeanUtils.toBean(pageResult, AiSampleRespVO.class)); + List list = pageResult.getList().stream().map(aiSampleService::buildSampleRespVO).toList(); + return success(new PageResult<>(list, pageResult.getTotal())); } @GetMapping("/download") @Operation(summary = "批量下载样本") - @Parameter(name = "ids", description = "样本ID列表(逗号分隔)", required = true, example = "1,2,3") + @Parameter(name = "ids", description = "样本ID列表,逗号分隔", required = true, example = "1,2,3") @PermitAll public void downloadSamples(@RequestParam("ids") String ids, HttpServletResponse response) throws IOException { aiSampleService.downloadSamples(ids, response); } -} \ No newline at end of file + @PutMapping("/relateModel") + @Operation(summary = "样本关联模型") + @PermitAll + public CommonResult relateModel(@Valid @RequestBody AiSampleRelateModelVO relateModelVO) { + aiSampleService.relateSamples(relateModelVO.getSampleIds(), relateModelVO.getModelIds()); + return success(true); + } +} + diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleFileRespVO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleFileRespVO.java index 0dc105f..5111ba7 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleFileRespVO.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleFileRespVO.java @@ -2,7 +2,6 @@ package com.tashow.cloud.ai.controller.admin.aisample.vo; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.fasterxml.jackson.databind.annotation.JsonSerialize; - import com.tashow.cloud.common.serializer.ImgJsonSerializer; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -18,4 +17,5 @@ public class AiSampleFileRespVO { @Schema(description = "文件名称") private String fileName; + } \ No newline at end of file diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleRelateModelVO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleRelateModelVO.java new file mode 100644 index 0000000..44f700f --- /dev/null +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleRelateModelVO.java @@ -0,0 +1,18 @@ +package com.tashow.cloud.ai.controller.admin.aisample.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Schema(description = "管理后台 - 样本关联模型 Request VO") +@Data +public class AiSampleRelateModelVO { + + @Schema(description = "样本ID列表", requiredMode = Schema.RequiredMode.REQUIRED) + private List sampleIds; + + @Schema(description = "模型ID列表", requiredMode = Schema.RequiredMode.REQUIRED) + private List modelIds; + +} diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleRespVO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleRespVO.java index 5c14363..ca07ebb 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleRespVO.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleRespVO.java @@ -5,22 +5,38 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleTagDO; import com.tashow.cloud.common.serializer.ImgJsonSerializer; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.time.LocalDateTime; import java.util.List; @Schema(description = "管理后台 - 样本库 Response VO") @Data +@Builder +@NoArgsConstructor +@AllArgsConstructor @ExcelIgnoreUnannotated public class AiSampleRespVO { @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "7701") private Long id; - @Schema(description = "标签列表") + @Schema(description = "标签列表(已废弃,使用enumTags和customTags代替)") + @Deprecated private List tags; + @Schema(description = "枚举标签列表(包含分组信息)") + private List enumTags; + +// @Schema(description = "个性标签列表") +// private List customTags; + + @Schema(description = "关联模型列表") + private List relatedModels; + @Schema(description = "样本文件地址") @JsonSerialize(using = ImgJsonSerializer.class) private String sampleFilePath; @@ -51,6 +67,42 @@ public class AiSampleRespVO { @Schema(description = "文件后缀") private String suffix; + @Schema(description = "标签信息") + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class TagInfo { + @Schema(description = "标签ID") + private Long id; + @Schema(description = "标签名称") + private String tagName; + + @Schema(description = "枚举值") + private String enumValue; + + @Schema(description = "分组ID") + private Long groupId; + + @Schema(description = "分组名称") + private String groupName; + } + + @Schema(description = "模型信息") + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ModelInfo { + @Schema(description = "模型ID") + private Long id; + + @Schema(description = "模型名称") + private String modelName; + + @Schema(description = "版本号") + private String version; + } } \ No newline at end of file diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleTagGroupRespVO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleTagGroupRespVO.java index 5b332fe..d336e5d 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleTagGroupRespVO.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleTagGroupRespVO.java @@ -6,7 +6,7 @@ import lombok.*; import java.time.LocalDateTime; import com.alibaba.excel.annotation.*; -@Schema(description = "管理后台 - 样本标签分组库 Response VO") +@Schema(description = "管理后台 - 样本标签") @Data @ExcelIgnoreUnannotated public class AiSampleTagGroupRespVO { @@ -19,6 +19,10 @@ public class AiSampleTagGroupRespVO { @ExcelProperty("分组名称") private String groupName; + @Schema(description = "1-枚举型, 2-个性型", example = "1") + @ExcelProperty("分组类型") + private Integer groupType; + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("创建时间") private LocalDateTime createTime; diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleTagGroupSaveReqVO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleTagGroupSaveReqVO.java index ef4da7a..6843c2d 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleTagGroupSaveReqVO.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleTagGroupSaveReqVO.java @@ -3,7 +3,7 @@ package com.tashow.cloud.ai.controller.admin.aisample.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -@Schema(description = "管理后台 - 样本标签分组库新增/修改 Request VO") +@Schema(description = "管理后台 - 样本标签分组库") @Data public class AiSampleTagGroupSaveReqVO { @@ -13,4 +13,10 @@ public class AiSampleTagGroupSaveReqVO { @Schema(description = "分组名称", example = "张三") private String groupName; + @Schema(description = "分组类型:1-枚举型, 2-个性型", example = "1") + private Integer groupType; + + @Schema(description = "枚举值(枚举分组专用)", example = "猫") + private String enumValue; + } \ No newline at end of file diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleTagListRespVO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleTagListRespVO.java index 47c452a..5da9d4b 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleTagListRespVO.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleTagListRespVO.java @@ -13,4 +13,8 @@ public class AiSampleTagListRespVO { private Long id; @Schema(description = "标签名称") private String tagName; + @Schema(description = "标签类型:1-枚举标签, 2-个性标签") + private Integer tagType; + @Schema(description = "枚举值") + private String enumValue; } \ No newline at end of file diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleTagSaveReqVO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleTagSaveReqVO.java index 4fba8a1..6cb5fe2 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleTagSaveReqVO.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/aisample/vo/AiSampleTagSaveReqVO.java @@ -18,4 +18,13 @@ public class AiSampleTagSaveReqVO { @Schema(description = "标签名称", example = "张三") private String tagName; + @Schema(description = "标签类型:1-枚举标签, 2-个性标签", example = "1") + private Integer tagType; + + @Schema(description = "枚举值", example = "猫") + private String enumValue; + + @Schema(description = "关联分组ID(单个ID或逗号分隔的多个ID)", example = "1") + private String groupId; + } \ No newline at end of file diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/AiModelController.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/AiModelController.java index 95a48ad..28a2334 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/AiModelController.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/AiModelController.java @@ -1,9 +1,17 @@ package com.tashow.cloud.ai.controller.admin.model; +import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleRespVO; +import com.tashow.cloud.ai.controller.admin.model.vo.AiModelAccuracyAnalysisReqVO; +import com.tashow.cloud.ai.controller.admin.model.vo.AiModelAnalysisResultVO; +import com.tashow.cloud.ai.controller.admin.model.vo.AiModelDifferenceVO; +import com.tashow.cloud.ai.controller.admin.model.vo.AiModelIterateReqVO; import com.tashow.cloud.ai.controller.admin.model.vo.AiModelPageReqVO; +import com.tashow.cloud.ai.controller.admin.model.vo.AiModelReferenceSamplesReqVO; import com.tashow.cloud.ai.controller.admin.model.vo.AiModelRespVO; import com.tashow.cloud.ai.controller.admin.model.vo.AiModelSaveReqVO; +import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleDO; import com.tashow.cloud.ai.dal.dataobject.model.AiModelDO; +import com.tashow.cloud.ai.service.aisample.AiSampleService; import com.tashow.cloud.ai.service.model.AiModelService; import com.tashow.cloud.common.pojo.CommonResult; import com.tashow.cloud.common.pojo.PageResult; @@ -15,7 +23,14 @@ import jakarta.annotation.Resource; import jakarta.annotation.security.PermitAll; import jakarta.validation.Valid; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import java.util.List; @@ -29,6 +44,8 @@ public class AiModelController { @Resource private AiModelService modelService; + @Resource + private AiSampleService aiSampleService; @PostMapping("/create") @Operation(summary = "创建模型") @@ -70,4 +87,42 @@ public class AiModelController { return success(BeanUtils.toBean(pageResult, AiModelRespVO.class)); } + @PostMapping("/reference-samples") + @Operation(summary = "模型引用样本") + @PermitAll + public CommonResult referenceSamples(@Valid @RequestBody AiModelReferenceSamplesReqVO reqVO) { + modelService.referenceSamples(reqVO.getModelId(), reqVO.getSampleIds()); + return success(true); + } + + @GetMapping("/samples") + @Operation(summary = "获取模型关联样本") + @Parameter(name = "modelId", description = "模型ID", required = true) + @PermitAll + public CommonResult> getModelSamples(@RequestParam Long modelId) { + List samples = modelService.getModelSamples(modelId); + return success(samples.stream().map(aiSampleService::buildSampleRespVO).toList()); + } + + @PostMapping("/accuracy-analysis") + @Operation(summary = "模型准确度分析") + @PermitAll + public CommonResult analyzeModel(@Valid @RequestBody AiModelAccuracyAnalysisReqVO reqVO) { + return success(modelService.analyzeModel(reqVO.getSampleIds(), reqVO.getModelIds())); + } + + @GetMapping("/difference") + @Operation(summary = "模型样本差异筛查") + @PermitAll + public CommonResult checkDifference(@RequestParam List modelIds) { + return success(modelService.checkDifference(modelIds)); + } + + @PostMapping("/iterate") + @Operation(summary = "模型迭代") + @PermitAll + public CommonResult iterateModel(@Valid @RequestBody AiModelIterateReqVO reqVO) { + return success(modelService.iterateModel(reqVO.getModelId(), reqVO.getNewVersion(), reqVO.getDescription())); + } } + diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelAccuracyAnalysisReqVO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelAccuracyAnalysisReqVO.java new file mode 100644 index 0000000..ae496f5 --- /dev/null +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelAccuracyAnalysisReqVO.java @@ -0,0 +1,21 @@ +package com.tashow.cloud.ai.controller.admin.model.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.List; + +@Schema(description = "管理后台 - 模型准确度分析 Request VO") +@Data +public class AiModelAccuracyAnalysisReqVO { + + @Schema(description = "样本ID列表", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "样本ID列表不能为空") + private List sampleIds; + + @Schema(description = "模型ID列表", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "模型ID列表不能为空") + private List modelIds; + +} diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelAnalysisResultVO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelAnalysisResultVO.java new file mode 100644 index 0000000..83cdf49 --- /dev/null +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelAnalysisResultVO.java @@ -0,0 +1,68 @@ +package com.tashow.cloud.ai.controller.admin.model.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.List; + +@Schema(description = "管理后台 - 模型准确度分析") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AiModelAnalysisResultVO { + + @Schema(description = "样本分析列表") + private List samples; + + @Schema(description = "样本分析") + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class SampleAnalysis { + @Schema(description = "样本ID") + private Long sampleId; + + @Schema(description = "样本名称", example = "") + private String sampleName; + + @Schema(description = "枚举标签", example = "猫") + private String enumTag; + + @Schema(description = "模型分析结果列表") + private List modelResults; + } + + @Schema(description = "模型分析结果") + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ModelAnalysisResult { + @Schema(description = "模型ID") + private Long modelId; + + @Schema(description = "模型名称", example = "A01 模型") + private String modelName; + + @Schema(description = "模型版本", example = "V1.0.0") + private String modelVersion; + + @Schema(description = "物种识别结果", example = "猫") + private String speciesResult; + + @Schema(description = "物种匹配度", example = "1.00") + private BigDecimal speciesMatchRate; + + @Schema(description = "情绪识别结果", example = "兴奋") + private String emotionResult; + + @Schema(description = "情绪匹配度", example = "0.95") + private BigDecimal emotionMatchRate; + } +} diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelDifferenceVO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelDifferenceVO.java new file mode 100644 index 0000000..8e76f76 --- /dev/null +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelDifferenceVO.java @@ -0,0 +1,24 @@ +package com.tashow.cloud.ai.controller.admin.model.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Schema(description = "管理后台 - 模型样本差异") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AiModelDifferenceVO { + + @Schema(description = "重复引用样本列表") + private List duplicatedSamples; + + @Schema(description = "未重复引用样本列表") + private List uniqueSamples; + +} diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelIterateReqVO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelIterateReqVO.java new file mode 100644 index 0000000..a237e42 --- /dev/null +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelIterateReqVO.java @@ -0,0 +1,23 @@ +package com.tashow.cloud.ai.controller.admin.model.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Schema(description = "管理后台 - 模型迭代 ") +@Data +public class AiModelIterateReqVO { + + @Schema(description = "模型ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "模型ID不能为空") + private Long modelId; + + @Schema(description = "新版本号", requiredMode = Schema.RequiredMode.REQUIRED, example = "v2.0") + @NotBlank(message = "新版本号不能为空") + private String newVersion; + + @Schema(description = "版本描述", example = "优化算法性能") + private String description; + +} diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelPageReqVO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelPageReqVO.java index f84b569..3d3f495 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelPageReqVO.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelPageReqVO.java @@ -6,19 +6,19 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; -@Schema(description = "管理后台 - AI模型分页 Request VO") +@Schema(description = "管理后台 - AI模型分") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) public class AiModelPageReqVO extends PageParam { - @Schema(description = "模型名称(模糊查询)", example = "宠物声音翻译") + @Schema(description = "模型名称", example = "宠物声音翻译") private String modelName; - @Schema(description = "版本号(精确查询)", example = "v1.0.0") + @Schema(description = "版本号", example = "v1.0.0") private String version; - @Schema(description = "状态(0-禁用 1-启用 2-测试中 3-已废弃)", example = "1") + @Schema(description = "状态(0-禁用 1-启用)", example = "1") private Integer status; } diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelReferenceSamplesReqVO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelReferenceSamplesReqVO.java new file mode 100644 index 0000000..641fd8f --- /dev/null +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelReferenceSamplesReqVO.java @@ -0,0 +1,22 @@ +package com.tashow.cloud.ai.controller.admin.model.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; + +@Schema(description = "管理后台 - 模型引用样") +@Data +public class AiModelReferenceSamplesReqVO { + + @Schema(description = "模型ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "模型ID不能为空") + private Long modelId; + + @Schema(description = "样本ID列表", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "样本ID列表不能为空") + private List sampleIds; + +} diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelRespVO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelRespVO.java index 9b1a44d..e51de97 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelRespVO.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelRespVO.java @@ -7,7 +7,7 @@ import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; -@Schema(description = "管理后台 - AI模型 Response VO") +@Schema(description = "管理后台 - AI模型") @Data public class AiModelRespVO { diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelSaveReqVO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelSaveReqVO.java index f5b5a82..132ce0c 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelSaveReqVO.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiModelSaveReqVO.java @@ -7,7 +7,7 @@ import lombok.Data; import java.math.BigDecimal; -@Schema(description = "管理后台 - AI模型新增/修改 Request VO") +@Schema(description = "管理后台 - AI模型") @Data public class AiModelSaveReqVO { diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiSampleDetailVO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiSampleDetailVO.java new file mode 100644 index 0000000..6428dbc --- /dev/null +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/controller/admin/model/vo/AiSampleDetailVO.java @@ -0,0 +1,80 @@ +package com.tashow.cloud.ai.controller.admin.model.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 样本详情VO - 用于模型分析和差异筛查 + */ +@Schema(description = "样本详情VO") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AiSampleDetailVO { + + @Schema(description = "样本ID") + private Long id; + + @Schema(description = "样本名称") + private String sampleName; + + @Schema(description = "样本文件地址") + private String sampleFilePath; + + @Schema(description = "枚举标签列表") + private List enumTags; + + @Schema(description = "个性标签列表") + private List customTags; + + @Schema(description = "关联模型列表") + private List relatedModels; + + /** + * 标签信息 + */ + @Schema(description = "标签信息") + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class TagInfo { + @Schema(description = "标签ID") + private Long id; + + @Schema(description = "标签名称") + private String tagName; + + + @Schema(description = "枚举值") + private String enumValue; + + @Schema(description = "分组名称") + private String groupName; + } + + /** + * 模型信息 + */ + @Schema(description = "模型信息") + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ModelInfo { + @Schema(description = "模型ID") + private Long id; + + @Schema(description = "模型名称") + private String modelName; + + @Schema(description = "版本号") + private String version; + } +} diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/dataobject/aisample/AiSampleTagDO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/dataobject/aisample/AiSampleTagDO.java index 721a716..eed5577 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/dataobject/aisample/AiSampleTagDO.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/dataobject/aisample/AiSampleTagDO.java @@ -1,8 +1,8 @@ package com.tashow.cloud.ai.dal.dataobject.aisample; -import lombok.*; import com.baomidou.mybatisplus.annotation.*; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; +import lombok.*; /** * 样本标签库 DO @@ -30,5 +30,19 @@ public class AiSampleTagDO extends BaseDO { */ private String tagName; + /** + * 枚举值 + */ + private String enumValue; + + /** + * 标签类型:1-枚举标签, 2-个性标签 + */ + private Integer tagType; + + /** + * 关联分组ID(单个ID或逗号分隔的多个ID) + */ + private String groupId; } \ No newline at end of file diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/dataobject/aisample/AiSampleTagGroupDO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/dataobject/aisample/AiSampleTagGroupDO.java index ecf0b47..240d35c 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/dataobject/aisample/AiSampleTagGroupDO.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/dataobject/aisample/AiSampleTagGroupDO.java @@ -31,4 +31,14 @@ public class AiSampleTagGroupDO extends BaseDO { */ private String groupName; + /** + * 分组类型:1-枚举型, 2-个性型 + */ + private Integer groupType; + + /** + * 枚举值 + */ + private String enumValue; + } \ No newline at end of file diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/dataobject/model/AiModelSampleRelateDO.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/dataobject/model/AiModelSampleRelateDO.java new file mode 100644 index 0000000..d90cd7b --- /dev/null +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/dataobject/model/AiModelSampleRelateDO.java @@ -0,0 +1,40 @@ +package com.tashow.cloud.ai.dal.dataobject.model; + +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; +import lombok.*; + +/** + * 模型样本关联 DO + * + * @author tashow + */ +@TableName("tz_ai_model_sample_relate") +@KeySequence("tz_ai_model_sample_relate_seq") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AiModelSampleRelateDO extends BaseDO { + + /** + * 主键 + */ + @TableId + private Long id; + + /** + * 模型ID + */ + private Long modelId; + + /** + * 样本ID + */ + private Long sampleId; + +} diff --git a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/mysql/aisample/AiSampleTagMapper.java b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/mysql/aisample/AiSampleTagMapper.java index 99aaa13..c2d09f7 100644 --- a/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/mysql/aisample/AiSampleTagMapper.java +++ b/tashow-module/tashow-module-ai/src/main/java/com/tashow/cloud/ai/dal/mysql/aisample/AiSampleTagMapper.java @@ -24,13 +24,12 @@ public interface AiSampleTagMapper extends BaseMapperX { } @Select("