diff --git a/bonus-modules/bonus-ai/pom.xml b/bonus-modules/bonus-ai/pom.xml index 228b4a6..cf27ca9 100644 --- a/bonus-modules/bonus-ai/pom.xml +++ b/bonus-modules/bonus-ai/pom.xml @@ -5,7 +5,7 @@ com.bonus bonus-modules - 24.9.0-SNAPSHOT + 24.10.0-SNAPSHOT 4.0.0 diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/AnnotationTaskController.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/AnnotationTaskController.java index a017512..bd1b27b 100644 --- a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/AnnotationTaskController.java +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/AnnotationTaskController.java @@ -15,30 +15,13 @@ import java.util.List; public class AnnotationTaskController { /** - * 获取所有的任务列表 - * @return 返回所有的任务列表 + * 查看由我创建的任务列表和我参与的或全部任务列表 + * 统一获取文件列表 + * @param type 参数类型:myCreated - 由我创建的任务列表, myParticipated - 由我参与的任务列表, all - 用户创建和公共文件 + * @return 返回满足条件的任务列表 */ - @GetMapping("/list/") - public AjaxResult list() { - return AjaxResult.success(); - } - - /** - * 查看由我创建的任务 - * @return 返回我创建的任务列表 - */ - @GetMapping("/list/created") - public AjaxResult getTasksCreatedByMe() { - return AjaxResult.success(); - } - - /** - * 查看由我参与的任务 - * @return 返回我参与的任务列表 - */ - - @GetMapping("/list/participated") - public AjaxResult getTasksParticipatedByMe() { + @GetMapping("/list") + public AjaxResult list(@RequestParam String type) { return AjaxResult.success(); } @@ -71,7 +54,7 @@ public class AnnotationTaskController { return AjaxResult.success(); } - /**新增数据集 + /**创建标注任务 * @param task 新增的数据集信息 * @return 返回影响的行数或错误信 */ diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/BasicFileController.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/BasicFileController.java index a3b5fcb..0a9d1a5 100644 --- a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/BasicFileController.java +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/BasicFileController.java @@ -1,11 +1,16 @@ package com.bonus.ai.controller; +import com.bonus.ai.domain.AiDataSet; +import com.bonus.ai.domain.BasicFile; import com.bonus.common.core.web.domain.AjaxResult; -import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + /** * 基础文件管理控制层,获取指定存储方式的文件列表等 * @author wangvivi @@ -16,41 +21,54 @@ import org.springframework.web.multipart.MultipartFile; public class BasicFileController { - /** - * 获取由我创建和公共文件的列表 - * @return 返回所有的文件列表 - */ - @GetMapping("/list/") - public AjaxResult list() { - return AjaxResult.success(); - } /** - * 获取由我创建和公共文件树 + * 统一获取文件列表 + * @param type 参数类型:my - 当前用户创建的文件, public - 公共文件, all - 用户创建和公共文件 + * @return 符合条件的文件列表 + */ + @GetMapping("/list/") + public AjaxResult getFilesList(@RequestParam String type) { + return AjaxResult.success(); + } + /** + * 统一获取文件列表树 + * @param type 文件类型:my - 当前用户创建的文件, public - 公共文件, all - 用户创建和公共文件 * @return 返回所有的文件树 */ @GetMapping("/tree/") - public AjaxResult tree() { + public AjaxResult tree(@RequestParam String type) { return AjaxResult.success(); } /** - * 获取公共文件的列表 - * @return 返回所有的文件列表 + * 根据文件编号获取文件详情 + * @param fileId 文件编号 + * @return 返回文件详情 */ - @GetMapping("/list/public") - public AjaxResult listPublic() { - return AjaxResult.success(); + @GetMapping(value = "/{fileId}") + public AjaxResult getInfo(@PathVariable Long fileId) { + return AjaxResult.success(new BasicFile()); } + /** + * 设置或取消文件的公共状态,如果是文件夹则同时设置整个文件夹里所有文件夹的属性 + * @param fileId 文件的ID + * @param isPublic 是否设置为公共文件:true - 设置为公共文件, false - 取消公共状态 + * @return 操作结果 + */ + @PostMapping("/set-public") + public AjaxResult setFilePublicStatus(@RequestParam Long fileId, @RequestParam Boolean isPublic){ + return AjaxResult.success(); + } + /** * 创建文件夹 * @param folderName 单个文件 * @return 文件夹网络路径 */ @PostMapping("/createFolder") - @ApiOperation("创建文件夹") public AjaxResult createFolder(@RequestParam("folderName") String folderName) { return AjaxResult.success("创建文件夹"); @@ -87,4 +105,13 @@ public class BasicFileController { return AjaxResult.success("文件上传成功"); } + /** + * 多文件下载 + * @param response 请求响应,按照文件目录结构打包下载,如果是文件夹则打包下载文件夹下的所有文件 + * @param objectKeys,除mongodb 存fileid之外,其他均存上传文件的网络路径 + */ + @GetMapping("/downloadFiles") + public void downloadFile(HttpServletResponse response, @RequestParam List objectKeys) throws IOException {} + + } diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/DatasetController.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/DatasetController.java index 2e5932e..1dc7f23 100644 --- a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/DatasetController.java +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/DatasetController.java @@ -17,10 +17,12 @@ import org.springframework.web.bind.annotation.*; public class DatasetController { /** * 查看由我创建的数据集和公共数据集 + * 统一获取文件列表 + * @param type 参数类型:my - 当前用户创建的文件, public - 公共文件, all - 用户创建和公共文件 * @return 返回满足条件的数据集列表 */ @GetMapping("/list") - public AjaxResult list() { + public AjaxResult list(@RequestParam String type) { return AjaxResult.success(); } @@ -34,6 +36,16 @@ public class DatasetController { return AjaxResult.success(new AiDataSet()); } + /** + * 设置或取消数据集的公共状态 + * @param datasetId 数据集的ID + * @param isPublic 是否设置为公共文件:true - 设置为公共文件, false - 取消公共状态 + * @return 操作结果 + */ + @PostMapping("/set-public") + public AjaxResult setDatasetPublicStatus(@RequestParam Long datasetId, @RequestParam Boolean isPublic){ + return AjaxResult.success(); + } /**发布数据集 * @param version 发布数据集的版本信息 diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/AiDataSet.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/AiDataSet.java index 3209a8f..1308f1a 100644 --- a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/AiDataSet.java +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/AiDataSet.java @@ -13,6 +13,8 @@ public class AiDataSet extends BaseEntity { /**数据集ID*/ private Long datasetId; + /**数据集UUID*/ + private String datasetUuid; /**数据集名称*/ private String datasetName; /**数据集描述*/ diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/AnnotationFile.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/AnnotationFile.java index b9b6713..eb6e1f3 100644 --- a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/AnnotationFile.java +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/AnnotationFile.java @@ -30,6 +30,9 @@ public class AnnotationFile { /**标注来源,0人工标注,1智能标注*/ private String annotationSource; + /**审核驳回原因*/ + private String auditFailedReason; + /**标注时间*/ private java.util.Date annotationTime; /**审核时间*/ @@ -114,4 +117,12 @@ public class AnnotationFile { public void setDatasetId(Long datasetId) { this.datasetId = datasetId; } + + public String getAuditFailedReason() { + return auditFailedReason; + } + + public void setAuditFailedReason(String auditFailedReason) { + this.auditFailedReason = auditFailedReason; + } } diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/AnnotationTask.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/AnnotationTask.java index efe5148..ead28c3 100644 --- a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/AnnotationTask.java +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/domain/AnnotationTask.java @@ -6,6 +6,7 @@ import com.bonus.common.core.web.domain.BaseEntity; import java.util.Date; import java.util.List; +import java.util.Map; public class AnnotationTask extends BaseEntity { @@ -13,6 +14,8 @@ public class AnnotationTask extends BaseEntity { private Long taskId; /**数据集id*/ private Long datasetId; + /**任务uuid*/ + private String taskUuid ; /**标注团队id,为0表示未启用标注团队,否则启用标注团队的关联id*/ private Long annotationTeamId; /**任务名称*/ @@ -31,28 +34,20 @@ public class AnnotationTask extends BaseEntity { /**删除标志(0代表存在 1代表删除) */ private String delFlag; - /**标注人员列表*/ - private List annotators; + /**分配前标注人员列表和每人分配的文件数*/ + private Map annotators; - /**审核人员列表*/ - private List reviewers; + /**分配前审核人员列表和每人分配的文件数*/ + private Map reviewers; /**分配后子任务*/ private List subAnnotationTasks; - public List getReviewers() { - return reviewers; + public AnnotationTaskStatus getAnnotationTaskStatus() { + return annotateTaskStatus; } - public void setReviewers(List reviewers) { - this.reviewers = reviewers; - } - - public List getAnnotators() { - return annotators; - } - - public void setAnnotators(List annotators) { - this.annotators = annotators; + public void setAnnotationTaskStatus(AnnotationTaskStatus annotateTaskStatus) { + this.annotateTaskStatus = annotateTaskStatus; } public List getSubAnnotationTasks() { @@ -136,7 +131,24 @@ public class AnnotationTask extends BaseEntity { this.delFlag = delFlag; } - /**自动分配任务*/ +// /**自动分配任务*/ +// public void assignFilesToSubTasks(List fileIds){ +// int annotatorSize = annotators.size(); +// int reviewerSize = reviewers.size(); +// +// for (int i = 0; i < fileIds.size(); i++) { +// Long fileId = fileIds.get(i); +// +// // 通过轮询分配标注人和审核人 +// Long annotatorId = annotators.get(i % annotatorSize); +// Long reviewerId = reviewers.get(i % reviewerSize); +// +// // 创建子任务 +// AnnotationFile subTask = new AnnotationFile(taskId,datasetId, annotatorId, reviewerId, fileId); +// subAnnotationTasks.add(subTask); +// } +// } + public void assignFilesToSubTasks(List fileIds){ int annotatorSize = annotators.size(); int reviewerSize = reviewers.size(); @@ -145,8 +157,8 @@ public class AnnotationTask extends BaseEntity { Long fileId = fileIds.get(i); // 通过轮询分配标注人和审核人 - Long annotatorId = annotators.get(i % annotatorSize); - Long reviewerId = reviewers.get(i % reviewerSize); + Long annotatorId = Long.valueOf(annotators.get(i % annotatorSize)); + Long reviewerId = Long.valueOf(reviewers.get(i % reviewerSize)); // 创建子任务 AnnotationFile subTask = new AnnotationFile(taskId,datasetId, annotatorId, reviewerId, fileId); @@ -155,13 +167,13 @@ public class AnnotationTask extends BaseEntity { } /**添加标注人*/ - public void addAnnotator(Long userId){ - annotators.add(userId); + public void addAnnotator(Long userId, Integer fileCount){ + annotators.put(userId, fileCount); } /**添加审核人*/ - public void addReviewer(Long userId){ - reviewers.add(userId); + public void addReviewer(Long userId, Integer fileCount){ + reviewers.put(userId, fileCount); } /**删除标注人*/ @@ -173,4 +185,29 @@ public class AnnotationTask extends BaseEntity { public void removeReviewer(Long userId){ reviewers.remove(userId); } + + public String getTaskUuid() { + return taskUuid; + } + + public void setTaskUuid(String taskUuid) { + this.taskUuid = taskUuid; + } + + public void setAnnotators(Map annotators) { + this.annotators = annotators; + } + + public Map getAnnotators() { + return this.annotators; + } + + public void setReviewers(Map reviewers) { + this.reviewers = reviewers; + } + + + public Map getReviewers() { + return this.reviewers; + } } diff --git a/sql/bonus_ai.sql b/sql/bonus_ai.sql index 0448b59..7404431 100644 --- a/sql/bonus_ai.sql +++ b/sql/bonus_ai.sql @@ -7,7 +7,8 @@ create table ai_annotation_task task_id bigint(20) not null auto_increment comment '任务id', dataset_id bigint(20) not null comment '数据集id', task_name varchar(64) comment '任务名称', - description varchar(500) comment '描述', + task_uuid varchar(64) comment '任务唯一标识id', + description varchar(500) default '' comment '描述', annotation_scene char(1) comment '标注场景(对应数据集的数据类型)', annotation_type char(2) comment '标注类型(不同数据类型有不同的标注类型,如图片:图像分类,物体检测等)', labels varchar(200) comment '允许的标签集', @@ -31,13 +32,14 @@ create table ai_annotation_task_annotator_map reviewer_id bigint(20) not null comment '审核人员', task_id bigint(20) not null comment '任务id', file_id bigint(20) not null comment '文件id', - description varchar(500) comment '描述', + description varchar(500) default '' comment '描述', annotation_status char(1) comment '0未标注,1正在标注,2已标注,3正在审核,4 审核驳回,5已审核', annotation_result text comment '标注结果(json串)', annotation_resource char(1) comment '0人工标注,1智能标注', del_flag char(1) default '0' comment '是否删除(0代表存在,1代表删除)', annotation_time datetime default null comment '标注时间', review_time datetime default null comment '审核时间', + audit_failed_reason varchar(200) default '' comment '审核驳回原因', create_by varchar(64) default '' comment '创建者', update_by varchar(64) default '' comment '更新者', update_time datetime default null comment '更新时间', @@ -94,8 +96,9 @@ drop table if exists ai_dataset; create table ai_dataset ( dataset_id bigint(20) not null auto_increment comment '数据集id', + dataset_uuid varchar(64) comment '数据集唯一标识id', dataset_name varchar(200) comment '数据集名称', - description varchar(500) comment '描述', + description varchar(500) default '' comment '描述', data_type char(1) comment '数据类型', data_source char(1) comment '数据来源(0:local,1:obs)', input_path varchar(200) comment '输入路径',