添加 ai模块

This commit is contained in:
2025-09-25 17:48:08 +08:00
parent ab85648edf
commit 98fc7be679
78 changed files with 1600 additions and 1194 deletions

View File

@@ -0,0 +1,75 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.tashow.cloud</groupId>
<artifactId>tashow-module</artifactId>
<version>${revision}</version>
</parent>
<artifactId>tashow-module-ai</artifactId>
<packaging>jar</packaging>
<dependencies>
<!-- Registry 注册中心相关 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- Config 配置中心相关 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--文件管理-->
<dependency>
<groupId>com.tashow.cloud</groupId>
<artifactId>tashow-infra-api</artifactId>
</dependency>
<!-- RPC 远程调用相关 -->
<dependency>
<groupId>com.tashow.cloud</groupId>
<artifactId>tashow-framework-rpc</artifactId>
</dependency>
<dependency>
<groupId>com.tashow.cloud</groupId>
<artifactId>tashow-data-mybatis</artifactId>
</dependency>
<dependency>
<groupId>com.tashow.cloud</groupId>
<artifactId>tashow-framework-web</artifactId>
</dependency>
<dependency>
<groupId>com.tashow.cloud</groupId>
<artifactId>tashow-framework-env</artifactId>
</dependency>
<dependency>
<groupId>com.tashow.cloud</groupId>
<artifactId>tashow-framework-websocket</artifactId>
</dependency>
<dependency>
<groupId>com.tashow.cloud</groupId>
<artifactId>tashow-data-redis</artifactId>
</dependency>
<dependency>
<groupId>com.tashow.cloud</groupId>
<artifactId>tashow-data-excel</artifactId>
</dependency>
<dependency>
<groupId>com.tashow.cloud</groupId>
<artifactId>tashow-framework-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.tashow.cloud</groupId>
<artifactId>tashow-sdk-file</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,17 @@
package com.tashow.cloud.ai;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* 应用服务启动类
*/
@SpringBootApplication
@EnableScheduling
public class TranslateServerApplication {
public static void main(String[] args) {
SpringApplication.run(TranslateServerApplication.class, args);
}
}

View File

@@ -0,0 +1,78 @@
package com.tashow.cloud.ai.controller.admin.aisample;
import com.tashow.cloud.ai.controller.admin.aisample.vo.*;
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;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import static com.tashow.cloud.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 样本库")
@RestController
@RequestMapping("/ai/sample")
@Validated
public class AiSampleController {
@Resource
private AiSampleService aiSampleService;
@PostMapping("/create")
@Operation(summary = "创建样本库-上传文件")
@PreAuthorize("@ss.hasPermission('ai:sample:create')")
public CommonResult<List<String>> createAiSample(FileUploadReqVO uploadReqVO) {
return success(aiSampleService.createAiSample(uploadReqVO));
}
@PutMapping("/updates")
@Operation(summary = "更新样本库")
@PreAuthorize("@ss.hasPermission('ai:sample:update')")
public CommonResult<Boolean> updateAiSample(@Valid @RequestBody List<AiSampleSaveReqVO> updateReqVO) {
aiSampleService.updateAiSamples(updateReqVO);
return success(true);
}
@PutMapping("/relate")
@Operation(summary = "添加关联标签")
@PreAuthorize("@ss.hasPermission('ai:sample:update')")
public CommonResult<Boolean> relate(@Valid @RequestBody AiSampleRelateTagVO relateTagVO) {
aiSampleService.relate(relateTagVO);
return success(true);
}
@DeleteMapping("/deleteRelate")
@Operation(summary = "删除关联标签")
@PreAuthorize("@ss.hasPermission('ai:sample:delete')")
public CommonResult<Boolean> deleteRelate(@Valid @RequestBody AiSampleRelateTagVO relateTagVO) {
aiSampleService.deleteRelate(relateTagVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除样本库")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('ai:sample:delete')")
public CommonResult<Boolean> deleteAiSample(@RequestParam("id") Long id) {
aiSampleService.deleteAiSample(id);
return success(true);
}
@GetMapping("/page")
@Operation(summary = "获得样本库分页")
@PreAuthorize("@ss.hasPermission('ai:sample:query')")
public CommonResult<PageResult<AiSampleRespVO>> getAiSamplePage(@Valid AiSamplePageReqVO pageReqVO) {
PageResult<AiSampleDO> pageResult = aiSampleService.getAiSamplePage(pageReqVO);
return success(BeanUtils.toBean(pageResult, AiSampleRespVO.class));
}
}

View File

@@ -0,0 +1,74 @@
package com.tashow.cloud.ai.controller.admin.aisample;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleTagListRespVO;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleTagPageReqVO;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleTagRespVO;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleTagSaveReqVO;
import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleTagDO;
import com.tashow.cloud.ai.service.aisample.AiSampleTagService;
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;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import static com.tashow.cloud.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 样本标签库")
@RestController
@RequestMapping("/ai/sampleTag")
@Validated
public class AiSampleTagController {
@Resource
private AiSampleTagService aiSampleTagService;
@PostMapping("/create")
@Operation(summary = "创建样本标签库")
@PreAuthorize("@ss.hasPermission('ai:sampleTag:create')")
public CommonResult<Long> createAiSampleTag(@Valid @RequestBody AiSampleTagSaveReqVO createReqVO) {
return success(aiSampleTagService.createAiSampleTag(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新样本标签库")
@PreAuthorize("@ss.hasPermission('ai:sampleTag:update')")
public CommonResult<Boolean> updateAiSampleTag(@Valid @RequestBody AiSampleTagSaveReqVO updateReqVO) {
aiSampleTagService.updateAiSampleTag(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除样本标签库")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('ai:sampleTag:delete')")
public CommonResult<Boolean> deleteAiSampleTag(@RequestParam("id") Long id) {
aiSampleTagService.deleteAiSampleTag(id);
return success(true);
}
@GetMapping("/list")
@Operation(summary = "获得样本标签库列表")
@PreAuthorize("@ss.hasPermission('ai:sampleTag:query')")
public CommonResult<List<AiSampleTagListRespVO>> getAiSampleTagList() {
return success(BeanUtils.toBean(aiSampleTagService.getAiSampleTagList(), AiSampleTagListRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得样本标签库分页")
@PreAuthorize("@ss.hasPermission('ai:sampleTag:query')")
public CommonResult<PageResult<AiSampleTagRespVO>> getAiSampleTagPage(@Valid AiSampleTagPageReqVO pageReqVO) {
PageResult<AiSampleTagDO> pageResult = aiSampleTagService.getAiSampleTagPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, AiSampleTagRespVO.class));
}
}

View File

@@ -0,0 +1,64 @@
package com.tashow.cloud.ai.controller.admin.aisample;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleTagGroupRespVO;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleTagGroupSaveReqVO;
import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleTagGroupDO;
import com.tashow.cloud.ai.service.aisample.AiSampleTagGroupService;
import com.tashow.cloud.common.pojo.CommonResult;
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;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import static com.tashow.cloud.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 样本标签分组库")
@RestController
@RequestMapping("/ai/sampleTagGroup")
@Validated
public class AiSampleTagGroupController {
@Resource
private AiSampleTagGroupService aiSampleTagGroupService;
@PostMapping("/create")
@Operation(summary = "创建样本标签分组库")
@PreAuthorize("@ss.hasPermission('ai:sampleTagGroup:create')")
public CommonResult<Long> createAiSampleTagGroup(@Valid @RequestBody AiSampleTagGroupSaveReqVO createReqVO) {
return success(aiSampleTagGroupService.createAiSampleTagGroup(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新样本标签分组库")
@PreAuthorize("@ss.hasPermission('ai:sampleTagGroup:update')")
public CommonResult<Boolean> updateAiSampleTagGroup(@Valid @RequestBody AiSampleTagGroupSaveReqVO updateReqVO) {
aiSampleTagGroupService.updateAiSampleTagGroup(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除样本标签分组库")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('ai:sampleTagGroup:delete')")
public CommonResult<Boolean> deleteAiSampleTagGroup(@RequestParam("id") Long id) {
aiSampleTagGroupService.deleteAiSampleTagGroup(id);
return success(true);
}
@GetMapping("/list")
@Operation(summary = "获得样本标签分组库列表")
@PreAuthorize("@ss.hasPermission('ai:sampleTagGroup:query')")
public CommonResult<List<AiSampleTagGroupRespVO>> getAiSampleTagGroupPage() {
List<AiSampleTagGroupDO> aiSampleTagGroupList = aiSampleTagGroupService.getAiSampleTagGroupList();
return success(BeanUtils.toBean(aiSampleTagGroupList, AiSampleTagGroupRespVO.class));
}
}

View File

@@ -0,0 +1,33 @@
package com.tashow.cloud.ai.controller.admin.aisample.vo;
import com.tashow.cloud.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 样本库分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class AiSamplePageReqVO extends PageParam {
@Schema(description = "标签id", example = "25839")
private Long tagId;
@Schema(description = "样本名称", example = "张三")
private String sampleName;
@Schema(description = "样本格式", example = "1")
private String sampleMineType;
@Schema(description = "排序", example = "正序asc倒序desc")
private String sort;
}

View File

@@ -0,0 +1,17 @@
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 AiSampleRelateTagVO {
@Schema(description = "标签id")
private Long tagId;
@Schema(description = "样本ids")
private List<Long> sampleIds;
}

View File

@@ -0,0 +1,45 @@
package com.tashow.cloud.ai.controller.admin.aisample.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleTagDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
@Schema(description = "管理后台 - 样本库 Response VO")
@Data
@ExcelIgnoreUnannotated
public class AiSampleRespVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "7701")
private Long id;
@Schema(description = "标签列表")
private List<AiSampleTagDO> tags;
@Schema(description = "样本文件地址")
private String sampleFilePath;
@Schema(description = "样本名称", example = "张三")
private String sampleName;
@Schema(description = "样本时长")
private String sampleTime;
@Schema(description = "样本格式", example = "1")
private String sampleMineType;
@Schema(description = "样本大小")
private String sampleSize;
@Schema(description = "样本注释", example = "随便")
private String remark;
@Schema(description = "创建时间")
private LocalDateTime createTime;
@Schema(description = "修改时间")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,19 @@
package com.tashow.cloud.ai.controller.admin.aisample.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 样本库新增/修改 Request VO")
@Data
public class AiSampleSaveReqVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "7701")
private Long id;
@Schema(description = "样本名称", example = "张三")
private String sampleName;
@Schema(description = "样本注释", example = "随便")
private String remark;
}

View File

@@ -0,0 +1,27 @@
package com.tashow.cloud.ai.controller.admin.aisample.vo;
import com.tashow.cloud.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 样本标签分组库分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class AiSampleTagGroupPageReqVO extends PageParam {
@Schema(description = "分组名称", example = "张三")
private String groupName;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@@ -0,0 +1,26 @@
package com.tashow.cloud.ai.controller.admin.aisample.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 样本标签分组库 Response VO")
@Data
@ExcelIgnoreUnannotated
public class AiSampleTagGroupRespVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "18784")
@ExcelProperty("主键")
private Long id;
@Schema(description = "分组名称", example = "张三")
@ExcelProperty("分组名称")
private String groupName;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

View File

@@ -0,0 +1,16 @@
package com.tashow.cloud.ai.controller.admin.aisample.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
@Schema(description = "管理后台 - 样本标签分组库新增/修改 Request VO")
@Data
public class AiSampleTagGroupSaveReqVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "18784")
private Long id;
@Schema(description = "分组名称", example = "张三")
private String groupName;
}

View File

@@ -0,0 +1,16 @@
package com.tashow.cloud.ai.controller.admin.aisample.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 样本标签库 Response VO")
@Data
@ExcelIgnoreUnannotated
public class AiSampleTagListRespVO {
@Schema(description = "标签id")
private Long id;
@Schema(description = "标签名称")
private String tagName;
}

View File

@@ -0,0 +1,18 @@
package com.tashow.cloud.ai.controller.admin.aisample.vo;
import com.tashow.cloud.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Schema(description = "管理后台 - 样本标签库分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class AiSampleTagPageReqVO extends PageParam {
@Schema(description = "分组id", example = "张三")
private Long groupId;
}

View File

@@ -0,0 +1,20 @@
package com.tashow.cloud.ai.controller.admin.aisample.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleTagDO;
import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleTagGroupDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Schema(description = "管理后台 - 样本标签库 Response VO")
@Data
@ExcelIgnoreUnannotated
public class AiSampleTagRespVO {
@Schema(description = "标签列表")
List<AiSampleTagDO> tags;
@Schema(description = "分组列表")
List<AiSampleTagGroupDO> tagGroupDOS;
}

View File

@@ -0,0 +1,21 @@
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 AiSampleTagSaveReqVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "32538")
private Long id;
@Schema(description = "分组ids")
private List<Long> groupIds;
@Schema(description = "标签名称", example = "张三")
private String tagName;
}

View File

@@ -0,0 +1,15 @@
package com.tashow.cloud.ai.controller.admin.aisample.vo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;
/** 管理后台 - 上传文件 Request VO */
@Data
public class FileUploadReqVO {
/** 文件附件 */
@NotNull(message = "文件附件不能为空")
private MultipartFile[] files;
}

View File

@@ -0,0 +1 @@
package com.tashow.cloud.ai.controller.admin;

View File

@@ -0,0 +1 @@
package com.tashow.cloud.ai.controller.app;

View File

@@ -0,0 +1,17 @@
package com.tashow.cloud.ai.controller.app.translate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/ai/sample")
@Validated
@Slf4j
public class TranslateController {
}

View File

@@ -0,0 +1 @@
package com.tashow.cloud.ai.controller;

View File

@@ -0,0 +1,61 @@
package com.tashow.cloud.ai.dal.dataobject.aisample;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO;
import lombok.*;
import java.util.List;
/**
* 样本库 DO
*
* @author 芋道源码
*/
@TableName("tz_ai_sample")
@KeySequence("tz_ai_sample_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AiSampleDO extends BaseDO {
/**
* 主键
*/
@TableId
private Long id;
@TableField(exist = false)
private List<AiSampleTagDO> tags;
/**
* 样本文件id
*/
private String sampleFilePath;
/**
* 样本名称
*/
private String sampleName;
/**
* 样本时长
*/
private String sampleTime;
/**
* 样本格式
*/
private String sampleMineType;
/**
* 样本大小
*/
private Long sampleSize;
/**
* 样本注释
*/
private String remark;
}

View File

@@ -0,0 +1,34 @@
package com.tashow.cloud.ai.dal.dataobject.aisample;
import lombok.*;
import com.baomidou.mybatisplus.annotation.*;
import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO;
/**
* 样本标签库 DO
*
* @author 芋道源码
*/
@TableName("tz_ai_sample_tag")
@KeySequence("tz_ai_sample_tag_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AiSampleTagDO extends BaseDO {
/**
* 主键
*/
@TableId
private Long id;
/**
* 标签名称
*/
private String tagName;
}

View File

@@ -0,0 +1,34 @@
package com.tashow.cloud.ai.dal.dataobject.aisample;
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 芋道源码
*/
@TableName("tz_ai_sample_tag_group")
@KeySequence("tz_ai_sample_tag_group_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AiSampleTagGroupDO extends BaseDO {
/**
* 主键
*/
@TableId
private Long id;
/**
* 分组名称
*/
private String groupName;
}

View File

@@ -0,0 +1,38 @@
package com.tashow.cloud.ai.dal.dataobject.aisample;
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 芋道源码
*/
@TableName("tz_ai_sample_tag_group_relate")
@KeySequence("tz_ai_sample_tag_group_relate_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AiSampleTagGroupRelateDO extends BaseDO {
/**
* 主键
*/
@TableId
private Long id;
/**
* 样本标签id
*/
private Long sampleTagId;
/**
* 样本标签分组id
*/
private Long sampleTagGroupId;
}

View File

@@ -0,0 +1,36 @@
package com.tashow.cloud.ai.dal.dataobject.aisample;
import lombok.*;
import com.baomidou.mybatisplus.annotation.*;
import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO;
/**
* 样本-标签关联 DO
*
* @author 芋道源码
*/
@TableName("tz_ai_sample_tag_relate")
@KeySequence("tz_ai_sample_tag_relate_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AiSampleTagRelateDO extends BaseDO {
/**
* 主键
*/
@TableId
private Long id;
/**
* 样本id
*/
private Long sampleId;
/**
* 样本标签id
*/
private Long sampleTagId;
}

View File

@@ -0,0 +1,2 @@
package com.tashow.cloud.ai.dal.dataobject;
// 数据库对象

View File

@@ -0,0 +1,29 @@
package com.tashow.cloud.ai.dal.mysql.aisample;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSamplePageReqVO;
import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleDO;
import com.tashow.cloud.common.pojo.PageResult;
import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX;
import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX;
import org.apache.ibatis.annotations.Mapper;
/**
* 样本库 Mapper
*
* @author 芋道源码
*/
@Mapper
public interface AiSampleMapper extends BaseMapperX<AiSampleDO> {
default PageResult<AiSampleDO> selectPage(AiSamplePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<AiSampleDO>()
.eqIfPresent(AiSampleDO::getSampleFilePath, reqVO.getSampleFilePath())
.likeIfPresent(AiSampleDO::getSampleName, reqVO.getSampleName())
.betweenIfPresent(AiSampleDO::getSampleTime, reqVO.getSampleTime())
.eqIfPresent(AiSampleDO::getSampleMineType, reqVO.getSampleMineType())
.eqIfPresent(AiSampleDO::getSampleSize, reqVO.getSampleSize())
.eqIfPresent(AiSampleDO::getRemark, reqVO.getRemark())
.betweenIfPresent(AiSampleDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(AiSampleDO::getId));
}
}

View File

@@ -0,0 +1,25 @@
package com.tashow.cloud.ai.dal.mysql.aisample;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleTagGroupPageReqVO;
import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleTagGroupDO;
import com.tashow.cloud.common.pojo.PageResult;
import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX;
import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX;
import org.apache.ibatis.annotations.Mapper;
/**
* 样本标签分组库 Mapper
*
* @author 芋道源码
*/
@Mapper
public interface AiSampleTagGroupMapper extends BaseMapperX<AiSampleTagGroupDO> {
default PageResult<AiSampleTagGroupDO> selectPage(AiSampleTagGroupPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<AiSampleTagGroupDO>()
.likeIfPresent(AiSampleTagGroupDO::getGroupName, reqVO.getGroupName())
.betweenIfPresent(AiSampleTagGroupDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(AiSampleTagGroupDO::getId));
}
}

View File

@@ -0,0 +1,15 @@
package com.tashow.cloud.ai.dal.mysql.aisample;
import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleTagGroupRelateDO;
import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;
/**
* 样本标签-分组关联 Mapper
*
* @author 芋道源码
*/
@Mapper
public interface AiSampleTagGroupRelateMapper extends BaseMapperX<AiSampleTagGroupRelateDO> {
}

View File

@@ -0,0 +1,32 @@
package com.tashow.cloud.ai.dal.mysql.aisample;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleTagPageReqVO;
import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleTagDO;
import com.tashow.cloud.common.pojo.PageResult;
import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX;
import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
/**
* 样本标签库 Mapper
*
* @author 芋道源码
*/
@Mapper
public interface AiSampleTagMapper extends BaseMapperX<AiSampleTagDO> {
default PageResult<AiSampleTagDO> selectPage(AiSampleTagPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<AiSampleTagDO>()
.likeIfPresent(AiSampleTagDO::getTagName, reqVO.getTagName())
.betweenIfPresent(AiSampleTagDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(AiSampleTagDO::getId));
}
@Select("SELECT t.* FROM tz_ai_sample_tag t INNER JOIN tz_ai_sample_tag_group_relate r ON t.id = r.sample_tag_id \n" +
" WHERE r.sample_tag_group_id = #{groupId} ")
IPage<AiSampleTagDO> getAiSampleTagPage(Page<AiSampleTagDO> page, AiSampleTagPageReqVO pageReqVO);
}

View File

@@ -0,0 +1,16 @@
package com.tashow.cloud.ai.dal.mysql.aisample;
import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleTagRelateDO;
import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;
/**
* 样本-标签关联 Mapper
*
* @author 芋道源码
*/
@Mapper
public interface AiSampleTagRelateMapper extends BaseMapperX<AiSampleTagRelateDO> {
}

View File

@@ -0,0 +1 @@
package com.tashow.cloud.ai.dal.mysql;

View File

@@ -0,0 +1 @@
package com.tashow.cloud.ai.dal;

View File

@@ -0,0 +1,44 @@
package com.tashow.cloud.ai.security.config;
import com.tashow.cloud.infraapi.enums.ApiConstants;
import com.tashow.cloud.security.security.config.AuthorizeRequestsCustomizer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configurers.AuthorizeHttpRequestsConfigurer;
/**
* Infra 模块的 Security 配置
*/
@Configuration(proxyBeanMethods = false, value = "infraSecurityConfiguration")
public class SecurityConfiguration {
@Value("${spring.boot.admin.context-path:''}")
private String adminSeverContextPath;
@Bean("infraAuthorizeRequestsCustomizer")
public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() {
return new AuthorizeRequestsCustomizer() {
@Override
public void customize(AuthorizeHttpRequestsConfigurer<HttpSecurity>.AuthorizationManagerRequestMatcherRegistry registry) {
// Spring Boot Actuator 的安全配置
registry.requestMatchers("/actuator").permitAll()
.requestMatchers("/actuator/**").permitAll();
// Druid 监控
registry.requestMatchers("/druid/**").permitAll();
// Spring Boot Admin Server 的安全配置
registry.requestMatchers(adminSeverContextPath).permitAll()
.requestMatchers(adminSeverContextPath + "/**").permitAll();
// 文件读取
registry.requestMatchers(buildAdminApi("/infra/file/*/get/**")).permitAll();
// TODO 芋艿:这个每个项目都需要重复配置,得捉摸有没通用的方案
// RPC 服务的安全配置
registry.requestMatchers(ApiConstants.PREFIX + "/**").permitAll();
}
};
}
}

View File

@@ -0,0 +1,4 @@
/**
* 占位
*/
package com.tashow.cloud.ai.security.core;

View File

@@ -0,0 +1,73 @@
package com.tashow.cloud.ai.service.aisample;
import com.tashow.cloud.ai.controller.admin.aisample.vo.*;
import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleDO;
import com.tashow.cloud.common.pojo.PageResult;
import jakarta.validation.Valid;
import java.util.List;
/**
* 样本库 Service 接口
*
* @author 芋道源码
*/
public interface AiSampleService {
/**
* 创建样本库
*
* @param createReqVO 创建信息
* @return 编号
*/
List<String> createAiSample(@Valid FileUploadReqVO createReqVO);
/**
* 更新样本库
*
* @param updateReqVO 更新信息
*/
void updateAiSample(@Valid AiSampleSaveReqVO updateReqVO);
/**
* 批量更新
* @param updateReqVO
*/
void updateAiSamples(@Valid List<AiSampleSaveReqVO> updateReqVO);
/**
* 关联标签
* @param relateTagVO
*/
void relate(@Valid AiSampleRelateTagVO relateTagVO);
/**
* 删除样本库
*
* @param id 编号
*/
void deleteAiSample(Long id);
/**
* 删除样本库
* @param relateTagVO 编号
*/
void deleteRelate(AiSampleRelateTagVO relateTagVO);
/**
* 获得样本库
*
* @param id 编号
* @return 样本库
*/
AiSampleDO getAiSample(Long id);
/**
* 获得样本库分页
*
* @param pageReqVO 分页查询
* @return 样本库分页
*/
PageResult<AiSampleDO> getAiSamplePage(AiSamplePageReqVO pageReqVO);
}

View File

@@ -0,0 +1,156 @@
package com.tashow.cloud.ai.service.aisample;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSamplePageReqVO;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleRelateTagVO;
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.dal.dataobject.aisample.AiSampleTagDO;
import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleTagRelateDO;
import com.tashow.cloud.ai.dal.mysql.aisample.AiSampleMapper;
import com.tashow.cloud.ai.dal.mysql.aisample.AiSampleTagMapper;
import com.tashow.cloud.ai.dal.mysql.aisample.AiSampleTagRelateMapper;
import com.tashow.cloud.common.pojo.PageResult;
import com.tashow.cloud.common.util.object.BeanUtils;
import com.tashow.cloud.infraapi.api.file.FileApi;
import jakarta.annotation.Resource;
import lombok.SneakyThrows;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List;
/**
* 样本库 Service 实现类
*
* @author 芋道源码
*/
@Service
@Validated
public class AiSampleServiceImpl implements AiSampleService {
@Resource
private AiSampleMapper aiSampleMapper;
@Resource
private AiSampleTagMapper aiSampleTagMapper;
@Resource
private AiSampleTagRelateMapper aiSampleTagRelateMapper;
@Resource
private FileApi fileApi;
@Override
@SneakyThrows
public List<String> createAiSample(FileUploadReqVO uploadReqVO) {
//返回图片路径
List<String> urls = new ArrayList<>();
/* 调用文件上传服务*/
for (MultipartFile file : uploadReqVO.getFiles()) {
//返回上传结果
String file1 ="http://192.168.1.231:48080"+ fileApi.createFile(file.getBytes());
//保存样本信息
AiSampleDO aiSampleDO = new AiSampleDO();
aiSampleDO.setSampleFilePath(file1);
aiSampleDO.setSampleName(file.getOriginalFilename());
aiSampleDO.setSampleMineType(file.getContentType());
aiSampleDO.setSampleSize(file.getSize());
aiSampleMapper.insert(aiSampleDO);
urls.add(file1);
}
// 返回
return urls;
}
@Override
public void updateAiSample(AiSampleSaveReqVO updateReqVO) {
// 校验存在
validateAiSampleExists(updateReqVO.getId());
// 更新
AiSampleDO updateObj = BeanUtils.toBean(updateReqVO, AiSampleDO.class);
aiSampleMapper.updateById(updateObj);
}
@Override
public void updateAiSamples(List<AiSampleSaveReqVO> updateReqVO) {
aiSampleMapper.updateBatch( BeanUtils.toBean(updateReqVO, AiSampleDO.class));
}
@Override
public void relate(AiSampleRelateTagVO relateTagVO) {
List<AiSampleTagRelateDO> tagRelateDOS = new ArrayList<>();
for (Long sampleId : relateTagVO.getSampleIds()) {
AiSampleTagRelateDO relateDO = new AiSampleTagRelateDO();
relateDO.setSampleId(sampleId);
relateDO.setSampleTagId(relateTagVO.getTagId());
tagRelateDOS.add(relateDO);
}
aiSampleTagRelateMapper.insertBatch(tagRelateDOS);
}
@Override
public void deleteRelate(AiSampleRelateTagVO relateTagVO) {
List<Long> tagRelateIds = new ArrayList<>();
for (Long sampleId : relateTagVO.getSampleIds()) {
AiSampleTagRelateDO relateDO = aiSampleTagRelateMapper.selectOne(
new LambdaQueryWrapper<AiSampleTagRelateDO>()
.eq(AiSampleTagRelateDO::getSampleId, sampleId)
.eq(AiSampleTagRelateDO::getSampleTagId, relateTagVO.getTagId())
);
tagRelateIds.add(relateDO.getId());
}
aiSampleTagRelateMapper.deleteBatchIds(tagRelateIds);
}
@Override
public void deleteAiSample(Long id) {
// 校验存在
validateAiSampleExists(id);
// 删除
aiSampleMapper.deleteById(id);
}
private void validateAiSampleExists(Long id) {
if (aiSampleMapper.selectById(id) == null) {
// throw exception(AI_SAMPLE_NOT_EXISTS);
}
}
@Override
public AiSampleDO getAiSample(Long id) {
AiSampleDO aiSampleDO = aiSampleMapper.selectById(id);
aiSampleDO.setSampleFilePath("http://192.168.1.231:48080"+aiSampleDO.getSampleFilePath());
//先获取关联的标签id
List<AiSampleTagRelateDO> tagRelateDOS = aiSampleTagRelateMapper.selectList(new LambdaQueryWrapper<AiSampleTagRelateDO>().eq(AiSampleTagRelateDO::getSampleId, id));
List<Long> tagIds = tagRelateDOS.stream().map(AiSampleTagRelateDO::getSampleTagId).toList();
aiSampleDO.setTags(aiSampleTagMapper.selectList(new LambdaQueryWrapper<AiSampleTagDO>().in(AiSampleTagDO::getId,tagIds)));
return aiSampleDO;
}
@Override
public PageResult<AiSampleDO> getAiSamplePage(AiSamplePageReqVO pageReqVO) {
PageResult<AiSampleDO> aiSampleDOPageResult = aiSampleMapper.selectPage(pageReqVO);
//根据样本id获取关联的标签id
List<Long> sampleIds = aiSampleDOPageResult.getList().stream().map(AiSampleDO::getId).toList();
List<AiSampleTagRelateDO> tagRelateDOS = aiSampleTagRelateMapper.selectList(new LambdaQueryWrapper<AiSampleTagRelateDO>().in(AiSampleTagRelateDO::getSampleId, sampleIds));
List<Long> tagIds = tagRelateDOS.stream().map(AiSampleTagRelateDO::getSampleTagId).toList();
//获取标签信息
List<AiSampleTagDO> aiSampleTagDOS = aiSampleTagMapper.selectList(new LambdaQueryWrapper<AiSampleTagDO>().in(AiSampleTagDO::getId, tagIds));
//封装标签信息
for (AiSampleDO aiSampleDO : aiSampleDOPageResult.getList()) {
List<AiSampleTagRelateDO> list = tagRelateDOS.stream()
.filter(a -> ObjectUtil.equals(aiSampleDO.getId(), a.getSampleId()))
.toList();
Object[] tagsId = list.stream().map(AiSampleTagRelateDO::getSampleTagId).toArray();
List<AiSampleTagDO> list1 = aiSampleTagDOS.stream().filter(a -> ArrayUtil.containsAny(tagsId, a.getId())).toList();
aiSampleDO.setTags(list1);
aiSampleDO.setSampleFilePath("http://192.168.1.231:48080"+aiSampleDO.getSampleFilePath());
}
return aiSampleDOPageResult;
}
}

View File

@@ -0,0 +1,11 @@
package com.tashow.cloud.ai.service.aisample;
/**
* 样本标签-分组关联 Service 接口
*
* @author 芋道源码
*/
public interface AiSampleTagGroupRelateService {
}

View File

@@ -0,0 +1,16 @@
package com.tashow.cloud.ai.service.aisample;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
/**
* 样本标签-分组关联 Service 实现类
*
* @author 芋道源码
*/
@Service
@Validated
public class AiSampleTagGroupRelateServiceImpl implements AiSampleTagGroupRelateService {
}

View File

@@ -0,0 +1,62 @@
package com.tashow.cloud.ai.service.aisample;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleTagGroupPageReqVO;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleTagGroupRespVO;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleTagGroupSaveReqVO;
import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleTagGroupDO;
import com.tashow.cloud.common.pojo.PageResult;
import jakarta.validation.Valid;
import java.util.List;
/**
* 样本标签分组库 Service 接口
*
* @author 芋道源码
*/
public interface AiSampleTagGroupService {
/**
* 创建样本标签分组库
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createAiSampleTagGroup(@Valid AiSampleTagGroupSaveReqVO createReqVO);
/**
* 更新样本标签分组库
*
* @param updateReqVO 更新信息
*/
void updateAiSampleTagGroup(@Valid AiSampleTagGroupSaveReqVO updateReqVO);
/**
* 删除样本标签分组库
*
* @param id 编号
*/
void deleteAiSampleTagGroup(Long id);
/**
* 获得样本标签分组库
*
* @param id 编号
* @return 样本标签分组库
*/
AiSampleTagGroupDO getAiSampleTagGroup(Long id);
/**
* 获得样本标签分组库分页
*
* @param pageReqVO 分页查询
* @return 样本标签分组库分页
*/
PageResult<AiSampleTagGroupDO> getAiSampleTagGroupPage(AiSampleTagGroupPageReqVO pageReqVO);
/**
* 获取标签分组列表
* @return
*/
List<AiSampleTagGroupDO> getAiSampleTagGroupList();
}

View File

@@ -0,0 +1,74 @@
package com.tashow.cloud.ai.service.aisample;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleTagGroupPageReqVO;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleTagGroupRespVO;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleTagGroupSaveReqVO;
import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleTagGroupDO;
import com.tashow.cloud.ai.dal.mysql.aisample.AiSampleTagGroupMapper;
import com.tashow.cloud.common.pojo.PageResult;
import com.tashow.cloud.common.util.object.BeanUtils;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import java.util.List;
/**
* 样本标签分组库 Service 实现类
*
* @author 芋道源码
*/
@Service
@Validated
public class AiSampleTagGroupServiceImpl implements AiSampleTagGroupService {
@Resource
private AiSampleTagGroupMapper aiSampleTagGroupMapper;
@Override
public Long createAiSampleTagGroup(AiSampleTagGroupSaveReqVO createReqVO) {
// 插入
AiSampleTagGroupDO aiSampleTagGroup = BeanUtils.toBean(createReqVO, AiSampleTagGroupDO.class);
aiSampleTagGroupMapper.insert(aiSampleTagGroup);
// 返回
return aiSampleTagGroup.getId();
}
@Override
public void updateAiSampleTagGroup(AiSampleTagGroupSaveReqVO updateReqVO) {
// 校验存在
validateAiSampleTagGroupExists(updateReqVO.getId());
// 更新
AiSampleTagGroupDO updateObj = BeanUtils.toBean(updateReqVO, AiSampleTagGroupDO.class);
aiSampleTagGroupMapper.updateById(updateObj);
}
@Override
public void deleteAiSampleTagGroup(Long id) {
// 校验存在
validateAiSampleTagGroupExists(id);
// 删除
aiSampleTagGroupMapper.deleteById(id);
}
private void validateAiSampleTagGroupExists(Long id) {
if (aiSampleTagGroupMapper.selectById(id) == null) {
// throw exception(AI_SAMPLE_TAG_GROUP_NOT_EXISTS);
}
}
@Override
public AiSampleTagGroupDO getAiSampleTagGroup(Long id) {
return aiSampleTagGroupMapper.selectById(id);
}
@Override
public PageResult<AiSampleTagGroupDO> getAiSampleTagGroupPage(AiSampleTagGroupPageReqVO pageReqVO) {
return aiSampleTagGroupMapper.selectPage(pageReqVO);
}
@Override
public List<AiSampleTagGroupDO> getAiSampleTagGroupList() {
return aiSampleTagGroupMapper.selectList();
}
}

View File

@@ -0,0 +1,11 @@
package com.tashow.cloud.ai.service.aisample;
/**
* 样本-标签关联 Service 接口
*
* @author 芋道源码
*/
public interface AiSampleTagRelateService {
}

View File

@@ -0,0 +1,16 @@
package com.tashow.cloud.ai.service.aisample;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
/**
* 样本-标签关联 Service 实现类
*
* @author 芋道源码
*/
@Service
@Validated
public class AiSampleTagRelateServiceImpl implements AiSampleTagRelateService {
}

View File

@@ -0,0 +1,61 @@
package com.tashow.cloud.ai.service.aisample;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleTagPageReqVO;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleTagSaveReqVO;
import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleTagDO;
import com.tashow.cloud.common.pojo.PageResult;
import jakarta.validation.Valid;
import java.util.List;
/**
* 样本标签库 Service 接口
*
* @author 芋道源码
*/
public interface AiSampleTagService {
/**
* 创建样本标签库
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createAiSampleTag(@Valid AiSampleTagSaveReqVO createReqVO);
/**
* 更新样本标签库
*
* @param updateReqVO 更新信息
*/
void updateAiSampleTag(@Valid AiSampleTagSaveReqVO updateReqVO);
/**
* 删除样本标签库
*
* @param id 编号
*/
void deleteAiSampleTag(Long id);
/**
* 获得样本标签库
*
* @param id 编号
* @return 样本标签库
*/
AiSampleTagDO getAiSampleTag(Long id);
/**
* 获得样本标签库分页
*
* @param pageReqVO 分页查询
* @return 样本标签库分页
*/
PageResult<AiSampleTagDO> getAiSampleTagPage(AiSampleTagPageReqVO pageReqVO);
/**
* 获取样本标签列表
* @return
*/
List<AiSampleTagDO> getAiSampleTagList();
}

View File

@@ -0,0 +1,102 @@
package com.tashow.cloud.ai.service.aisample;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleTagPageReqVO;
import com.tashow.cloud.ai.controller.admin.aisample.vo.AiSampleTagSaveReqVO;
import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleTagDO;
import com.tashow.cloud.ai.dal.dataobject.aisample.AiSampleTagGroupRelateDO;
import com.tashow.cloud.ai.dal.mysql.aisample.AiSampleTagGroupRelateMapper;
import com.tashow.cloud.ai.dal.mysql.aisample.AiSampleTagMapper;
import com.tashow.cloud.common.pojo.PageResult;
import com.tashow.cloud.common.util.object.BeanUtils;
import com.tashow.cloud.mybatis.mybatis.core.util.MyBatisUtils;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import java.util.ArrayList;
import java.util.List;
/**
* 样本标签库 Service 实现类
*
* @author 芋道源码
*/
@Service
@Validated
public class AiSampleTagServiceImpl implements AiSampleTagService {
@Resource
private AiSampleTagMapper aiSampleTagMapper;
@Resource
private AiSampleTagGroupRelateMapper tagGroupRelateMapper;
@Override
public Long createAiSampleTag(AiSampleTagSaveReqVO createReqVO) {
// 插入
AiSampleTagDO aiSampleTag = BeanUtils.toBean(createReqVO, AiSampleTagDO.class);
aiSampleTagMapper.insert(aiSampleTag);
//插入关联
List<AiSampleTagGroupRelateDO> tagGroupRelateDOS = new ArrayList<>();
for (Long groupId : createReqVO.getGroupIds()) {
AiSampleTagGroupRelateDO tagGroupRelateDO = new AiSampleTagGroupRelateDO();
tagGroupRelateDO.setSampleTagId(createReqVO.getId());
tagGroupRelateDO.setSampleTagGroupId(groupId);
tagGroupRelateDOS.add(tagGroupRelateDO);
}
tagGroupRelateMapper.insertBatch(tagGroupRelateDOS);
// 返回
return aiSampleTag.getId();
}
@Override
public void updateAiSampleTag(AiSampleTagSaveReqVO updateReqVO) {
// 校验存在
validateAiSampleTagExists(updateReqVO.getId());
// 更新
AiSampleTagDO updateObj = BeanUtils.toBean(updateReqVO, AiSampleTagDO.class);
aiSampleTagMapper.updateById(updateObj);
//删除所有关联
tagGroupRelateMapper.delete(new LambdaQueryWrapper<AiSampleTagGroupRelateDO>().eq(AiSampleTagGroupRelateDO::getSampleTagId, updateReqVO.getId()));
//插入关联
List<AiSampleTagGroupRelateDO> tagGroupRelateDOS = new ArrayList<>();
for (Long groupId : updateReqVO.getGroupIds()) {
AiSampleTagGroupRelateDO tagGroupRelateDO = new AiSampleTagGroupRelateDO();
tagGroupRelateDO.setSampleTagId(updateReqVO.getId());
tagGroupRelateDO.setSampleTagGroupId(groupId);
tagGroupRelateDOS.add(tagGroupRelateDO);
}
tagGroupRelateMapper.insertBatch(tagGroupRelateDOS);
}
@Override
public void deleteAiSampleTag(Long id) {
// 校验存在
validateAiSampleTagExists(id);
// 删除
aiSampleTagMapper.deleteById(id);
}
private void validateAiSampleTagExists(Long id) {
if (aiSampleTagMapper.selectById(id) == null) {
// throw exception(AI_SAMPLE_TAG_NOT_EXISTS);
}
}
@Override
public AiSampleTagDO getAiSampleTag(Long id) {
return aiSampleTagMapper.selectById(id);
}
@Override
public PageResult<AiSampleTagDO> getAiSampleTagPage(AiSampleTagPageReqVO pageReqVO) {
IPage<AiSampleTagDO> prodPageList = aiSampleTagMapper.getAiSampleTagPage(MyBatisUtils.buildPage(pageReqVO),pageReqVO);
return new PageResult<>(prodPageList.getRecords(), prodPageList.getTotal());
}
@Override
public List<AiSampleTagDO> getAiSampleTagList() {
return aiSampleTagMapper.selectList();
}
}

View File

@@ -0,0 +1 @@
package com.tashow.cloud.ai.service;

View File

@@ -0,0 +1,20 @@
--- #################### 注册中心 + 配置中心相关配置 ####################
spring:
cloud:
nacos:
server-addr: 43.139.42.137:8848 # Nacos 服务器地址
username: nacos # Nacos 账号
password: nacos # Nacos 密码
discovery: # 【配置中心】配置项
namespace: dev # 命名空间。这里使用 dev 开发环境
group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
metadata:
version: 1.0.0 # 服务实例的版本号,可用于灰度发布
config: # 【注册中心】配置项
namespace: dev # 命名空间。这里使用 dev 开发环境
group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
ufop:
storage-type: 0
local-storage-path: D://test

View File

@@ -0,0 +1,12 @@
server:
port: 48086
spring:
application:
name: translate-server
profiles:
active: local
config:
import:
- optional:classpath:application-${spring.profiles.active}.yaml # 加载【本地】配置
- optional:nacos:application.yaml # 加载【Nacos】的配置
- optional:nacos:${spring.application.name}-${spring.profiles.active}.yaml # 加载【Nacos】的配置