From 8cfdc1f082a28c3629c5ba6cd3fceaff1b1b86b6 Mon Sep 17 00:00:00 2001 From: weiweiw <14335254+weiweiw22@user.noreply.gitee.com> Date: Thu, 12 Dec 2024 18:08:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=99=BA=E8=83=BD=E6=A0=87=E6=B3=A8=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E5=B1=82=E4=BB=A3=E7=A0=81=20=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AnnotationRequest.java | 33 +++++ .../AnnotationResult.java | 49 +++++++ .../IntelligentAnnotationServiceOkHttp.java | 62 +++++++++ .../IntelligentAnnotationController.java | 87 ++++++++++++ .../dataset/AnnotationTaskController.java | 11 -- .../domain/dataset/AnnotationTaskEntity.java | 3 + .../IntelligentAnnotationServiceEntity.java | 15 ++ .../mapper/IntelligentAnnotationMapper.java | 48 +++++++ .../IntelligentAnnotationServiceImpl.java | 128 ++++++++++++++++++ .../dataset/IntelligentAnnotationService.java | 21 +++ .../mapper/IntelligentAnnotationMapper.xml | 77 +++++++++++ sql/bonus_ai.sql | 38 ++++++ 12 files changed, 561 insertions(+), 11 deletions(-) create mode 100644 bonus-modules/bonus-ai/src/main/java/com/bonus/ai/client/intelligentAnnotation/AnnotationRequest.java create mode 100644 bonus-modules/bonus-ai/src/main/java/com/bonus/ai/client/intelligentAnnotation/AnnotationResult.java create mode 100644 bonus-modules/bonus-ai/src/main/java/com/bonus/ai/client/intelligentAnnotation/IntelligentAnnotationServiceOkHttp.java create mode 100644 bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/IntelligentAnnotationController.java create mode 100644 bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/dataset/IntelligentAnnotationServiceEntity.java create mode 100644 bonus-modules/bonus-ai/src/main/java/com/bonus/ai/mapper/IntelligentAnnotationMapper.java create mode 100644 bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/Impl/dataset/IntelligentAnnotationServiceImpl.java create mode 100644 bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/dataset/IntelligentAnnotationService.java create mode 100644 bonus-modules/bonus-ai/src/main/resources/mapper/IntelligentAnnotationMapper.xml diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/client/intelligentAnnotation/AnnotationRequest.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/client/intelligentAnnotation/AnnotationRequest.java new file mode 100644 index 0000000..eed6653 --- /dev/null +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/client/intelligentAnnotation/AnnotationRequest.java @@ -0,0 +1,33 @@ +package com.bonus.ai.client.intelligentAnnotation; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.Data; + +import java.util.List; + +/** + * @author wangvivi + */ +@Data +public class AnnotationRequest { + + @JsonProperty("image_urls") + private List imageUrls; + + @JsonProperty("target_labels") + private List targetLabels; + + @JsonProperty("conf_threshold") + private Double confThreshold; + + public static AnnotationRequest fromJson(String json) throws JsonProcessingException { + return new ObjectMapper().readValue(json, AnnotationRequest.class); + } + public String toJson() throws Exception { + ObjectMapper mapper = new ObjectMapper(); + return mapper.writeValueAsString(this); + } +} + diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/client/intelligentAnnotation/AnnotationResult.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/client/intelligentAnnotation/AnnotationResult.java new file mode 100644 index 0000000..da2f5fa --- /dev/null +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/client/intelligentAnnotation/AnnotationResult.java @@ -0,0 +1,49 @@ +package com.bonus.ai.client.intelligentAnnotation; + +import com.bonus.ai.client.ProjectParam; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + * @author wangvivi + */ +@Data +public class AnnotationResult { + + @JsonProperty("annotations") // 指定 JSON 属性名 + private Map> annotations; + + // 内部类:表示每个图片路径下的标注信息 + @Data + public static class Annotation { + + @JsonProperty("label") + private String label; + + @JsonProperty("x") + private double x; + + @JsonProperty("y") + private double y; + + @JsonProperty("width") + private double width; + + @JsonProperty("height") + private double height; + } + + public static AnnotationResult fromJson(String json) throws JsonProcessingException { + return new ObjectMapper().readValue(json, AnnotationResult.class); + } + public String toJson() throws Exception { + ObjectMapper mapper = new ObjectMapper(); + return mapper.writeValueAsString(this); + } +} + diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/client/intelligentAnnotation/IntelligentAnnotationServiceOkHttp.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/client/intelligentAnnotation/IntelligentAnnotationServiceOkHttp.java new file mode 100644 index 0000000..b0b7835 --- /dev/null +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/client/intelligentAnnotation/IntelligentAnnotationServiceOkHttp.java @@ -0,0 +1,62 @@ +package com.bonus.ai.client.intelligentAnnotation; + +import com.bonus.ai.client.ProjectInputParam; +import com.bonus.ai.client.ProjectParam; +import com.bonus.ai.client.TaskInputParam; +import com.bonus.ai.client.TaskParam; +import com.bonus.ai.config.OnlineAnnotateConfig; +import com.bonus.ai.domain.dataset.ReleaseVersionEntity; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import okhttp3.*; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +@Slf4j +@Service +public class IntelligentAnnotationServiceOkHttp { + + private static final OkHttpClient client = new OkHttpClient.Builder() + .connectTimeout(10, TimeUnit.SECONDS) + .readTimeout(60, TimeUnit.SECONDS) + .writeTimeout(60, TimeUnit.SECONDS).build(); + + private static final ObjectMapper objectMapper = new ObjectMapper(); // 用于JSON序列化和反序列化 + + /** + * 调用智能标注服务进行标注 + */ + // Create project + public AnnotationResult intelligentAnnotation(String serviceEndPoint, AnnotationRequest annotationParam) throws IOException { + String url = serviceEndPoint ; + String json = objectMapper.writeValueAsString(annotationParam); + + RequestBody body = RequestBody.create(json, MediaType.parse("application/json")); + + log.error("Request JSON: " + json); + Request request = new Request.Builder() + .url(url) + .post(body) + .build(); + + String response = executeRequest(request); + return AnnotationResult.fromJson(response); + } + + + private String executeRequest(Request request) throws IOException { + try (Response response = client.newCall(request).execute()) { + if (!response.isSuccessful()) { + throw new IOException("Unexpected code " + response); + } + return response.body() != null ? response.body().string() : null; + } + } + +} + + + diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/IntelligentAnnotationController.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/IntelligentAnnotationController.java new file mode 100644 index 0000000..98a4057 --- /dev/null +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/IntelligentAnnotationController.java @@ -0,0 +1,87 @@ +package com.bonus.ai.controller; + +import com.bonus.ai.client.intelligentAnnotation.AnnotationRequest; +import com.bonus.ai.client.intelligentAnnotation.AnnotationResult; +import com.bonus.ai.client.intelligentAnnotation.IntelligentAnnotationServiceOkHttp; +import com.bonus.ai.domain.DataSetBasicFileEntity; +import com.bonus.ai.domain.dataset.AnnotationTaskAnnotatorEntity; +import com.bonus.ai.domain.dataset.AnnotationTaskEntity; +import com.bonus.ai.domain.dataset.IntelligentAnnotationServiceEntity; +import com.bonus.ai.service.DataSetTeamMemberService; +import com.bonus.ai.service.dataset.AnnotationTaskService; +import com.bonus.ai.service.dataset.IntelligentAnnotationService; +import com.bonus.ai.utils.MinioUtil; +import com.bonus.common.core.web.domain.AjaxResult; +import com.bonus.common.security.annotation.RequiresPermissions; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.catalina.security.SecurityUtil; +import org.apache.commons.io.IOUtils; +import org.checkerframework.checker.units.qual.A; +import org.springframework.util.ObjectUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + + +@RestController +@RequestMapping("/intelligentAnnotation") +public class IntelligentAnnotationController { + + @Resource + private IntelligentAnnotationService intelligentAnnotationService; + + + @Resource + private AnnotationTaskService annotationTaskService; + + @RequiresPermissions("dataCenter:annotation:intelligentAnnotation:list") + @GetMapping("/service/list") + public AjaxResult getAIAnnotationServiceList() { + try { + List serviceList = intelligentAnnotationService.getAIAnnotationServiceList(); + return AjaxResult.success(serviceList); + }catch (Exception e){ + return AjaxResult.error("获取智能标注服务列表失败"); + } + } + + + /**智能标注,预留接口 + * @param task 标注文件的信息 + * @return 返回影响的行数或错误信,AnnotationTaskAnnotatorEntity + */ + @PostMapping("/annotate") + public AjaxResult aiAnnotate(@Validated @RequestBody AnnotationTaskEntity task) throws IOException { + try { + IntelligentAnnotationServiceEntity service = intelligentAnnotationService.getAIAnnotationServiceById(task.getIntelligentAnnotationServiceId()); + if (ObjectUtils.isEmpty(service)) { + return AjaxResult.error("未找到指定的AI服务"); + } + //获取标注任务id和标签信息 + AnnotationTaskEntity taskInfo = annotationTaskService.getTaskInfo(task.getTaskId()); + + //根据任务id,获取由我标注的未标注的文件列表 + List fileList = annotationTaskService.getMyAnnotaionTaskBasicFile(task.getTaskId(), "2"); + + //根据以上信息进行智能标注,并将标注结果保存数据库 + intelligentAnnotationService.aiAnnotate(taskInfo, fileList, service); + + return AjaxResult.success(); + }catch (Exception e){ + return AjaxResult.error(); + } + } + + +} diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/dataset/AnnotationTaskController.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/dataset/AnnotationTaskController.java index 1d91e23..d27829a 100644 --- a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/dataset/AnnotationTaskController.java +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/dataset/AnnotationTaskController.java @@ -203,17 +203,6 @@ public class AnnotationTaskController extends BaseController { } - /**智能标注,预留接口 - * @param subTask 标注文件的信息 - * @return 返回影响的行数或错误信 - */ - @PostMapping("/aiAnnotate") - public AjaxResult aiAnnotate(@Validated @RequestBody AnnotationTaskAnnotatorEntity subTask) { - - annotationTaskService.aiAnnotate(subTask); - return AjaxResult.success(); - } - /**获取由我标注的未完成标注的任务列表 * @return 标注任务列表 diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/dataset/AnnotationTaskEntity.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/dataset/AnnotationTaskEntity.java index 604c66f..97b42ca 100644 --- a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/dataset/AnnotationTaskEntity.java +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/dataset/AnnotationTaskEntity.java @@ -79,6 +79,9 @@ public class AnnotationTaskEntity extends BaseEntity { /**最新版本数*/ private String lastVersionName; + /**用于传入智能标注信息*/ + private Long intelligentAnnotationServiceId; + @Data public static class UserFileCount{ diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/dataset/IntelligentAnnotationServiceEntity.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/dataset/IntelligentAnnotationServiceEntity.java new file mode 100644 index 0000000..0f743d4 --- /dev/null +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/dataset/IntelligentAnnotationServiceEntity.java @@ -0,0 +1,15 @@ +package com.bonus.ai.domain.dataset; + +import com.bonus.common.core.web.domain.BaseEntity; +import lombok.Data; + +@Data +public class IntelligentAnnotationServiceEntity extends BaseEntity { + private Long serviceId; + private String serviceName; + private String serviceUrl; + private String annotationLabels; + /**删除标志(0代表存在 1代表删除) */ + private String delFlag; + +} diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/mapper/IntelligentAnnotationMapper.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/mapper/IntelligentAnnotationMapper.java new file mode 100644 index 0000000..691104d --- /dev/null +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/mapper/IntelligentAnnotationMapper.java @@ -0,0 +1,48 @@ +package com.bonus.ai.mapper; + +import com.bonus.ai.domain.dataset.IntelligentAnnotationServiceEntity; + +import java.util.List; + +/** + * 文件基础Mapper接口 + * + * @author bonus + * @date 2024-11-14 + */ +public interface IntelligentAnnotationMapper +{ + /** + * 插入智能标注服务信息 + * @param serviceInfo 智能标注服务信息 + * @return 影响的行数 + */ + int insertIntelligentAnnotationService(IntelligentAnnotationServiceEntity serviceInfo); + + int deleteIntelligentAnnotationService(Long serviceId); + + + /** + * 更新智能标注服务信息 + * @param serviceInfo 智能标注服务信息 + * @return 影响的行数 + */ + int updateIntelligentAnnotationService(IntelligentAnnotationServiceEntity serviceInfo); + + /** + * 获取所有未被删除的服务信息列表 + * @return 服务信息 + */ + List getIntelligentAnnotationService(); + + /** + * 获取所有未被删除的服务信息列表 + * @return 服务信息 + */ + IntelligentAnnotationServiceEntity getIntelligentAnnotationServiceById(Long serviceId); + + + + + +} diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/Impl/dataset/IntelligentAnnotationServiceImpl.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/Impl/dataset/IntelligentAnnotationServiceImpl.java new file mode 100644 index 0000000..4bb0732 --- /dev/null +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/Impl/dataset/IntelligentAnnotationServiceImpl.java @@ -0,0 +1,128 @@ +package com.bonus.ai.service.Impl.dataset; + +import com.bonus.ai.client.intelligentAnnotation.AnnotationRequest; +import com.bonus.ai.client.intelligentAnnotation.AnnotationResult; +import com.bonus.ai.client.intelligentAnnotation.IntelligentAnnotationServiceOkHttp; +import com.bonus.ai.config.MinioConfig; +import com.bonus.ai.domain.DataSetBasicFileEntity; +import com.bonus.ai.domain.dataset.AnnotationTaskAnnotatorEntity; +import com.bonus.ai.domain.dataset.AnnotationTaskEntity; +import com.bonus.ai.domain.dataset.IntelligentAnnotationServiceEntity; +import com.bonus.ai.mapper.AnnotationTaskMapper; +import com.bonus.ai.mapper.DatasetMapper; +import com.bonus.ai.mapper.IntelligentAnnotationMapper; +import com.bonus.ai.service.dataset.IntelligentAnnotationService; +import com.bonus.common.core.web.domain.AjaxResult; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.io.File; +import java.util.*; + +@Slf4j +@Service +public class IntelligentAnnotationServiceImpl implements IntelligentAnnotationService { + @Resource + private IntelligentAnnotationMapper intelligentAnnotationMapper; + + @Resource + IntelligentAnnotationServiceOkHttp intelligentAnnotationClient; + + @Resource + private AnnotationTaskMapper annotationTaskMapper; + + @Resource + private MinioConfig minioConfig; + + @Override + public List getAIAnnotationServiceList() { + return intelligentAnnotationMapper.getIntelligentAnnotationService(); + } + + @Override + public IntelligentAnnotationServiceEntity getAIAnnotationServiceById(Long serviceId) { + return intelligentAnnotationMapper.getIntelligentAnnotationServiceById(serviceId); + } + + @Override + public AjaxResult aiAnnotate(AnnotationTaskEntity taskInfo, List fileList, IntelligentAnnotationServiceEntity aiAnnotationServiceInfo) { + try { + if (ObjectUtils.isEmpty(taskInfo) || ObjectUtils.isEmpty(fileList) || fileList.isEmpty() || ObjectUtils.isEmpty(aiAnnotationServiceInfo)) + { + return AjaxResult.error("标注任务或智能标注服务不存在,或没有未标注文件"); + } + List imageUrls = new ArrayList<>(); + String minioUrl =minioConfig.getEndpoint() + File.separator + minioConfig.getBucketName()+File.separator; + for (DataSetBasicFileEntity file : fileList) { + imageUrls.add(minioUrl + file.getFileUrl()); + } + String serviceUrl = aiAnnotationServiceInfo.getServiceUrl(); + AnnotationRequest request = new AnnotationRequest(); + request.setConfThreshold(0.1); + request.setImageUrls(imageUrls); + request.setTargetLabels(ObjectUtils.isEmpty(taskInfo.getLabels()) ? new ArrayList<>() : Arrays.asList(taskInfo.getLabels().split(","))); + AnnotationResult result = intelligentAnnotationClient.intelligentAnnotation(serviceUrl, request); + if (ObjectUtils.isEmpty(result)){ + log.error("远程调用智能标注服务,没有返回标注结果"); + return AjaxResult.error("智能标注失败"); + } + + // 获取 annotations 的值 + Map> annotations = result.getAnnotations(); + + for (Map.Entry> entry : annotations.entrySet()) { + String imagePath = entry.getKey(); + List annotationList = entry.getValue(); + + // 创建 ObjectMapper 实例 + ObjectMapper objectMapper = new ObjectMapper(); + System.out.println("Image Path: " + imagePath); + + String jsonString = ""; + // 遍历每个图片路径下的标注信息列表 + if (annotationList != null) { + jsonString = objectMapper.writeValueAsString(annotationList); + log.info("智能标注结果:{} ", jsonString); + } else { + log.info("No annotations for image path, {}", imagePath); + } + + Long fileId = findFileIdByFileUrl(fileList, imagePath); + if (!ObjectUtils.isEmpty(fileId)) { + //TODO 将文件的标注信息存数据库 + AnnotationTaskAnnotatorEntity annotationTaskAnnotatorEntity = new AnnotationTaskAnnotatorEntity(); + annotationTaskAnnotatorEntity.setFileId(fileId); + annotationTaskAnnotatorEntity.setTaskId(taskInfo.getTaskId()); + annotationTaskAnnotatorEntity.setAnnotationResource("1"); + annotationTaskAnnotatorEntity.setAnnotationResult(jsonString); + annotationTaskMapper.updateAnnotationInfo(annotationTaskAnnotatorEntity); + } + } + }catch (Exception e) { + log.error("智能标注异常,异常原因:{}", e.getMessage()); + return AjaxResult.error("智能标注异常"); + + } + return null; + } + + + /** + * 从 fileList 中根据 fileUrl 查找对应的 fileId。 + * + * @param fileList 要查找的文件列表 + * @param targetFileUrl 目标文件的URL + * @return 如果找到则返回对应的 fileId,否则返回 null + */ + public Long findFileIdByFileUrl(List fileList, String targetFileUrl) { + return fileList.stream() + .filter(fileEntity -> targetFileUrl.contains(fileEntity.getFileUrl())) + .map(DataSetBasicFileEntity::getFileId) + .findFirst() + .orElse(null); + } + +} diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/dataset/IntelligentAnnotationService.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/dataset/IntelligentAnnotationService.java new file mode 100644 index 0000000..9f4d55e --- /dev/null +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/dataset/IntelligentAnnotationService.java @@ -0,0 +1,21 @@ +package com.bonus.ai.service.dataset; + +import com.bonus.ai.client.intelligentAnnotation.AnnotationRequest; +import com.bonus.ai.domain.DataSetBasicFileEntity; +import com.bonus.ai.domain.dataset.AnnotationTaskEntity; +import com.bonus.ai.domain.dataset.DataSetEntity; +import com.bonus.ai.domain.dataset.IntelligentAnnotationServiceEntity; +import com.bonus.common.core.web.domain.AjaxResult; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +public interface IntelligentAnnotationService { + + List getAIAnnotationServiceList(); + + IntelligentAnnotationServiceEntity getAIAnnotationServiceById(Long serviceId); + + AjaxResult aiAnnotate(AnnotationTaskEntity taskInfo,List filelist,IntelligentAnnotationServiceEntity aiAnnotationServiceInfo); +} \ No newline at end of file diff --git a/bonus-modules/bonus-ai/src/main/resources/mapper/IntelligentAnnotationMapper.xml b/bonus-modules/bonus-ai/src/main/resources/mapper/IntelligentAnnotationMapper.xml new file mode 100644 index 0000000..dd4cb1a --- /dev/null +++ b/bonus-modules/bonus-ai/src/main/resources/mapper/IntelligentAnnotationMapper.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + INSERT INTO ai_intelligent_annotation_service + + intelligent_annotation_service_name, + intelligent_annotation_service_url, + intelligent_annotation_service_labels, + del_flag, + create_by, + create_time, + update_by, + update_time, + + + #{serviceName}, + #{serviceUrl}, + #{annotationLabels}, + #{delFlag}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + + UPDATE ai_intelligent_annotation_service + SET intelligent_annotation_service_name = #{serviceName}, + intelligent_annotation_service_url = #{serviceUrl}, + intelligent_annotation_service_labels = #{annotationLabels}, + del_flag = #{delFlag}, + update_by = #{updateBy}, + update_time = #{updateTime} + WHERE intelligent_annotation_service_id = #{serviceId} + + + + UPDATE ai_intelligent_annotation_service + SET del_flag = '1' + WHERE intelligent_annotation_service_id = #{serviceId} + + + + + + + + + + diff --git a/sql/bonus_ai.sql b/sql/bonus_ai.sql index d50d029..a332416 100644 --- a/sql/bonus_ai.sql +++ b/sql/bonus_ai.sql @@ -233,3 +233,41 @@ create table ai_version_file_map )engine=innodb comment = '版本和文件关联表'; + +/*==============================================================*/ +/* Table: ai_intelligent_annotation_service */ +/*==============================================================*/ +drop table if exists ai_intelligent_annotation_service; +create table ai_intelligent_annotation_service +( + intelligent_annotation_service_id bigint(20) not null auto_increment, + intelligent_annotation_service_name varchar(128) default '' comment '智能标注服务名称', + intelligent_annotation_service_url varchar(128) default '' comment '智能标注服务url', + intelligent_annotation_service_labels varchar(128) default '' comment '智能标注服务标签', + del_flag char(1) default '0' comment '是否删除(0代表存在,1代表删除)', + create_by varchar(64) default '' comment '创建者', + update_by varchar(64) default '' comment '更新者', + update_time datetime default null comment '更新时间', + create_time datetime default null comment '创建时间', + primary key(intelligent_annotation_service_id) +)engine=innodb comment = '智能标注服务; + +INSERT INTO ai_intelligent_annotation_service ( + intelligent_annotation_service_name, + intelligent_annotation_service_url, + intelligent_annotation_service_labels, + del_flag, + create_by, + update_by, + update_time, + create_time +) VALUES ( + '丝束缺陷检测', -- 智能标注服务名称 + 'http://192.168.0.21:8081/annotate', -- 智能标注服务URL + 'tiaojuan,zhujiesi,yulinwen', -- 智能标注服务标签 + '0', -- 是否删除 (0代表存在) + 'admin', -- 创建者 + 'admin', -- 更新者 + NOW(), -- 更新时间 + NOW() -- 创建时间 +); \ No newline at end of file