提交代码
This commit is contained in:
parent
bd7a787e55
commit
2716b02095
|
|
@ -45,7 +45,6 @@ public class AnnotationTaskController extends BaseController {
|
|||
*/
|
||||
@PostMapping("/edit")
|
||||
public AjaxResult edit(@Validated @RequestBody AnnotationTaskEntity task) {
|
||||
|
||||
int status = annotationTaskService.updateTask(task);
|
||||
return status == 1 ? AjaxResult.success() : AjaxResult.error("更新任务失败");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,12 +6,15 @@ import com.bonus.common.core.web.controller.BaseController;
|
|||
import com.bonus.ai.service.dataset.DatasetService;
|
||||
import com.bonus.common.core.web.domain.AjaxResult;
|
||||
import com.bonus.common.core.web.page.TableDataInfo;
|
||||
import com.bonus.common.security.annotation.RequiresPermissions;
|
||||
import com.bonus.common.security.utils.SecurityUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
|
@ -86,6 +89,17 @@ public class DatasetController extends BaseController {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看由我创建的数据集
|
||||
* 统一获取文件列表
|
||||
* @param
|
||||
* @return 返回满足条件的数据集列表
|
||||
*/
|
||||
@GetMapping("/datasetList")
|
||||
public AjaxResult datasetList(DataSetEntity dataSet) {
|
||||
return AjaxResult.success(datasetService.getDatasetList(dataSet));
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据数据集编号获取数据集详情
|
||||
* @param datasetId 数据集编号
|
||||
|
|
@ -136,8 +150,8 @@ public class DatasetController extends BaseController {
|
|||
* @param isPublic 是否设置为公共文件:true - 设置为公共文件, false - 取消公共状态
|
||||
* @return 操作结果
|
||||
*/
|
||||
@PostMapping("/set-public")
|
||||
public AjaxResult setDatasetPublicStatus(@RequestParam Long datasetId, @RequestParam Boolean isPublic){
|
||||
@PostMapping("/setPublic")
|
||||
public AjaxResult setDatasetPublicStatus(@RequestParam String datasetId, @RequestParam String isPublic){
|
||||
datasetService.setPublicStatus(datasetId, isPublic);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
|
@ -147,16 +161,17 @@ public class DatasetController extends BaseController {
|
|||
* @return 返回满足条件的版本列表
|
||||
*/
|
||||
@PostMapping("/import")
|
||||
public AjaxResult importDataset() {
|
||||
return null;
|
||||
public AjaxResult importDataset(@RequestBody DataSetEntity entity) {
|
||||
return datasetService.importDataset(entity);
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据集导出
|
||||
* @return 返回满足条件的版本列表
|
||||
*/
|
||||
@PostMapping("/export")
|
||||
public AjaxResult exportDataset() {
|
||||
return null;
|
||||
@PostMapping("/export/{datasetId}")
|
||||
public void exportDataset(HttpServletResponse response, HttpServletRequest request, @PathVariable Long datasetId) {
|
||||
datasetService.exportDataset(request,response,datasetId);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ public interface DatasetMapper {
|
|||
/**
|
||||
* 更新数据集公开状态
|
||||
*/
|
||||
int updatePublicStatus(@Param("datasetId") Long datasetId, @Param("isPublic") String isPublic);
|
||||
int updatePublicStatus(@Param("datasetId") String datasetId, @Param("isPublic") String isPublic);
|
||||
|
||||
/**
|
||||
* 更新数据集标注状态
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
|
@ -55,21 +56,20 @@ public class AnnotationTaskServiceImpl implements AnnotationTaskService {
|
|||
* 创建标注任务
|
||||
*/
|
||||
@Override
|
||||
public int createTask(AnnotationTaskEntity task){
|
||||
|
||||
int status =0;
|
||||
public int createTask(AnnotationTaskEntity task) {
|
||||
task.setCreateBy(SecurityUtils.getUserId().toString());
|
||||
int status = 0;
|
||||
//1.调用label studio 接口创建project,将projectid 关联到标注任务里
|
||||
//2.插入标注任务表
|
||||
String uuid = UUID.randomUUID().toString().replace("-", "");
|
||||
task.setTaskUuid(uuid);
|
||||
status= annotationTaskMapper.insertAnnotationTask(task);
|
||||
|
||||
status = annotationTaskMapper.insertAnnotationTask(task);
|
||||
AnnotationTaskEntity tempTask = new AnnotationTaskEntity();
|
||||
tempTask.setTaskUuid(uuid);
|
||||
List<AnnotationTaskEntity> tempTasks = annotationTaskMapper.selectAnnotationTaskList(task);
|
||||
List<AnnotationTaskEntity> tempTasks = annotationTaskMapper.selectAnnotationTaskList(task);
|
||||
|
||||
Long annotationTaskid = 0L;
|
||||
if (!tempTasks.isEmpty()){
|
||||
if (!tempTasks.isEmpty()) {
|
||||
annotationTaskid = tempTasks.get(0).getTaskId();
|
||||
}
|
||||
|
||||
|
|
@ -86,12 +86,12 @@ public class AnnotationTaskServiceImpl implements AnnotationTaskService {
|
|||
//4. 文件分配后需要调用label studio 接口创建task,将taskid与 文件和标注人表进行关联(因为文件较多启用异步调用)
|
||||
|
||||
// 5. 将文件和标注人等信息 插入文件和标注人关联表
|
||||
if(status == 1){
|
||||
if (status == 1) {
|
||||
try {
|
||||
for(AnnotationTaskAnnotatorEntity entity:annotationTaskAnnotatorEntities){
|
||||
for (AnnotationTaskAnnotatorEntity entity : annotationTaskAnnotatorEntities) {
|
||||
status = annotationTaskMapper.insertAnnotTaskannotator(entity);
|
||||
}
|
||||
}catch (Exception e){
|
||||
} catch (Exception e) {
|
||||
log.error("Error updating task: ", e);
|
||||
throw e; // 抛出异常以触发回滚
|
||||
}
|
||||
|
|
@ -101,10 +101,10 @@ public class AnnotationTaskServiceImpl implements AnnotationTaskService {
|
|||
|
||||
|
||||
/**
|
||||
* 获取任务列表,分配给我的标注任务,我创建的标注任务
|
||||
*/
|
||||
* 获取任务列表,分配给我的标注任务,我创建的标注任务
|
||||
*/
|
||||
@Override
|
||||
public List<AnnotationTaskEntity> getTaskList(AnnotationTaskEntity task){
|
||||
public List<AnnotationTaskEntity> getTaskList(AnnotationTaskEntity task) {
|
||||
try {
|
||||
//这样设置不合适,设置后会改变真实用户的意图
|
||||
// String userId = SecurityUtils.getUserId().toString();
|
||||
|
|
@ -122,15 +122,14 @@ public class AnnotationTaskServiceImpl implements AnnotationTaskService {
|
|||
|
||||
|
||||
/**
|
||||
* 更新任务
|
||||
*/
|
||||
* 更新任务
|
||||
*/
|
||||
@Override
|
||||
public int updateTask(AnnotationTaskEntity task){
|
||||
public int updateTask(AnnotationTaskEntity task) {
|
||||
int result = 0;
|
||||
try {
|
||||
result = annotationTaskMapper.updateAnnotationTaskById(task);
|
||||
}catch(Exception e)
|
||||
{
|
||||
result = annotationTaskMapper.updateAnnotationTaskById(task);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return result;
|
||||
|
|
@ -139,6 +138,7 @@ public class AnnotationTaskServiceImpl implements AnnotationTaskService {
|
|||
|
||||
/**
|
||||
* 根据taskid 删除任务
|
||||
*
|
||||
* @param taskId
|
||||
* @return
|
||||
*/
|
||||
|
|
@ -146,13 +146,13 @@ public class AnnotationTaskServiceImpl implements AnnotationTaskService {
|
|||
public int deleteTaskById(Long taskId) {
|
||||
//删除任务需要删除两个个表 对应两个个表删除状态修改成1
|
||||
int status = 0;
|
||||
try{
|
||||
try {
|
||||
//删除主表任务信息
|
||||
status = annotationTaskMapper.deleteTaskById(taskId);
|
||||
//删除团队成员表信息
|
||||
status = annotationTaskMapper.deleteAnnotator(taskId);
|
||||
|
||||
}catch (Exception e){
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return status;
|
||||
|
|
@ -160,6 +160,7 @@ public class AnnotationTaskServiceImpl implements AnnotationTaskService {
|
|||
|
||||
/**
|
||||
* 获取任务详情
|
||||
*
|
||||
* @param taskId
|
||||
* @return
|
||||
*/
|
||||
|
|
@ -171,18 +172,18 @@ public class AnnotationTaskServiceImpl implements AnnotationTaskService {
|
|||
task.setTaskId(taskId);
|
||||
//查询对应的label studio project id , 从label studio这个标注任务对应的label studio project
|
||||
List<AnnotationTaskEntity> resultTasks = annotationTaskMapper.selectAnnotationTaskList(task);
|
||||
if (!resultTasks.isEmpty()) {
|
||||
return resultTasks.get(0);
|
||||
if (!resultTasks.isEmpty()) {
|
||||
return resultTasks.get(0);
|
||||
}
|
||||
|
||||
} catch (Exception e){
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DataSetBasicFileEntity> getMyAnnotaionTaskBasicFile(Long taskId, String annotationStatus){
|
||||
public List<DataSetBasicFileEntity> getMyAnnotaionTaskBasicFile(Long taskId, String annotationStatus) {
|
||||
try {
|
||||
Long userId = SecurityUtils.getUserId();
|
||||
AnnotationTaskEntity task = new AnnotationTaskEntity();
|
||||
|
|
@ -196,14 +197,14 @@ public class AnnotationTaskServiceImpl implements AnnotationTaskService {
|
|||
}
|
||||
task.setFileAnnotationStatus(annotationStatus);
|
||||
return annotationTaskMapper.getTaskBasicFile(task);
|
||||
}catch(Exception e){
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DataSetBasicFileEntity> getMyAuditTaskBasicFile(Long taskId, String annotationStatus){
|
||||
public List<DataSetBasicFileEntity> getMyAuditTaskBasicFile(Long taskId, String annotationStatus) {
|
||||
Long userId = SecurityUtils.getUserId();
|
||||
AnnotationTaskEntity task = new AnnotationTaskEntity();
|
||||
task.setTaskId(taskId);
|
||||
|
|
@ -211,8 +212,7 @@ public class AnnotationTaskServiceImpl implements AnnotationTaskService {
|
|||
Long intAnnotationStatus = Long.valueOf(annotationStatus);
|
||||
if (intAnnotationStatus < 4 && intAnnotationStatus >= 0) {
|
||||
task.setFileAnnotationStatus(annotationStatus);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
task.setFileAnnotationStatus("5");
|
||||
}
|
||||
return annotationTaskMapper.getTaskBasicFile(task);
|
||||
|
|
@ -220,10 +220,10 @@ public class AnnotationTaskServiceImpl implements AnnotationTaskService {
|
|||
|
||||
|
||||
@Override
|
||||
public String getAuditFailReasonByFileId(Long taskId, Long fileId){
|
||||
public String getAuditFailReasonByFileId(Long taskId, Long fileId) {
|
||||
try {
|
||||
return annotationTaskMapper.getAuditFailReasonByFileId(taskId, fileId);
|
||||
}catch(Exception e){
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return "";
|
||||
}
|
||||
|
|
@ -231,11 +231,12 @@ public class AnnotationTaskServiceImpl implements AnnotationTaskService {
|
|||
|
||||
/**
|
||||
* 检查任务名称是否重复
|
||||
*
|
||||
* @param task
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean checkTaskNameUnique(AnnotationTaskEntity task){
|
||||
public boolean checkTaskNameUnique(AnnotationTaskEntity task) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,9 +8,15 @@ import com.bonus.ai.mapper.DataSetBasicFileMapper;
|
|||
import com.bonus.ai.mapper.DatasetFileMapper;
|
||||
import com.bonus.ai.mapper.DatasetMapper;
|
||||
import com.bonus.ai.service.dataset.DatasetService;
|
||||
import com.bonus.ai.utils.MinioUtil;
|
||||
import com.bonus.common.core.constant.UserConstants;
|
||||
import com.bonus.common.core.utils.StringUtils;
|
||||
import com.bonus.common.core.web.domain.AjaxResult;
|
||||
import com.bonus.common.security.utils.SecurityUtils;
|
||||
import io.minio.Result;
|
||||
import io.minio.errors.MinioException;
|
||||
import io.minio.messages.Item;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
|
@ -19,11 +25,18 @@ import org.springframework.transaction.annotation.Transactional;
|
|||
import com.bonus.common.security.utils.SecurityUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
@Service
|
||||
public class DatasetServiceImpl implements DatasetService {
|
||||
|
|
@ -44,6 +57,9 @@ public class DatasetServiceImpl implements DatasetService {
|
|||
@Resource
|
||||
private DataSetBasicFileMapper dataSetBasicFileMapper;
|
||||
|
||||
@Resource
|
||||
private MinioUtil minioUtil;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public int createDataset(DataSetEntity dataSet) {
|
||||
|
|
@ -113,9 +129,9 @@ public class DatasetServiceImpl implements DatasetService {
|
|||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public boolean setPublicStatus(Long datasetId, Boolean isPublic) {
|
||||
public boolean setPublicStatus(String datasetId, String isPublic) {
|
||||
try {
|
||||
datasetMapper.updatePublicStatus(datasetId, String.valueOf(isPublic ?'1':'0'));
|
||||
datasetMapper.updatePublicStatus(datasetId, isPublic);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
log.error("设置数据集公共状态失败", e);
|
||||
|
|
@ -157,6 +173,53 @@ public class DatasetServiceImpl implements DatasetService {
|
|||
return datasetMapper.removeDataSetBasicFile(dataSetId,fileIds);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param entity
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public AjaxResult importDataset(DataSetEntity entity) {
|
||||
insertDatasetFileMap(entity);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param request
|
||||
* @param response
|
||||
* @param datasetId
|
||||
*/
|
||||
@Override
|
||||
public void exportDataset(HttpServletRequest request, HttpServletResponse response, Long datasetId) {
|
||||
List<DataSetBasicFileEntity> list = datasetFileMapper.selectFilesByDatasetId(datasetId);
|
||||
try {
|
||||
downloadMultipleFiles(response,list);
|
||||
}catch (Exception e){
|
||||
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 下载多个文件(可以选择压缩成 ZIP)
|
||||
private void downloadMultipleFiles(HttpServletResponse response, List<DataSetBasicFileEntity> list) throws IOException, MinioException {
|
||||
// 示例:将多个文件打包成一个 ZIP 文件
|
||||
response.setContentType("application/zip");
|
||||
response.setHeader("Content-Disposition", "attachment; filename=files.zip");
|
||||
try (ZipOutputStream zos = new ZipOutputStream(response.getOutputStream())) {
|
||||
for (DataSetBasicFileEntity entity : list) {
|
||||
InputStream fileStream = minioUtil.downloadFile(entity.getFileUrl());
|
||||
// 创建 ZIP 条目
|
||||
ZipEntry zipEntry = new ZipEntry(entity.getFileName());
|
||||
zos.putNextEntry(zipEntry);
|
||||
// 使用 IOUtils.copy 直接复制文件流
|
||||
IOUtils.copy(fileStream, zos);
|
||||
zos.closeEntry();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 插入数据集文件映射关系
|
||||
* @param dataSet 数据集实体,包含数据集ID、输入ID、数据类型等信息
|
||||
|
|
|
|||
|
|
@ -2,7 +2,10 @@ package com.bonus.ai.service.dataset;
|
|||
|
||||
import com.bonus.ai.domain.DataSetBasicFileEntity;
|
||||
import com.bonus.ai.domain.dataset.DataSetEntity;
|
||||
import com.bonus.common.core.web.domain.AjaxResult;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
|
||||
public interface DatasetService {
|
||||
|
|
@ -47,7 +50,7 @@ public interface DatasetService {
|
|||
* @param isPublic 是否公共
|
||||
* @return 设置结果
|
||||
*/
|
||||
boolean setPublicStatus(Long datasetId, Boolean isPublic);
|
||||
boolean setPublicStatus(String datasetId, String isPublic);
|
||||
|
||||
/**验证数据集名称的唯一性*/
|
||||
boolean checkDatasetNameUnique(DataSetEntity dataSet);
|
||||
|
|
@ -65,4 +68,8 @@ public interface DatasetService {
|
|||
* @return
|
||||
*/
|
||||
int removeDataSetBasicFile(String dataSetId, long[] fileIds);
|
||||
|
||||
AjaxResult importDataset(DataSetEntity entity);
|
||||
|
||||
void exportDataset(HttpServletRequest request, HttpServletResponse response, Long datasetId);
|
||||
}
|
||||
|
|
@ -8,14 +8,8 @@
|
|||
<result property="datasetId" column="dataset_id" />
|
||||
</resultMap>
|
||||
|
||||
<!-- <!– 插入数据集文件映射关系 –>-->
|
||||
<!-- <insert id="insertDatasetFile" parameterType="com.bonus.ai.domain.dataset.DatasetFile">-->
|
||||
<!-- INSERT INTO ai_dataset_file_map (file_id, dataset_id, is_annotated)-->
|
||||
<!-- VALUES (#{fileId}, #{datasetId}, #{isAnnotated})-->
|
||||
<!-- </insert>-->
|
||||
|
||||
<insert id="batchDatasetFile">
|
||||
insert into ai_dataset_file_map(file_id, dataset_id) values
|
||||
replace into ai_dataset_file_map(file_id, dataset_id) values
|
||||
<foreach item="item" index="index" collection="list" separator=",">
|
||||
(#{item.fileId},#{item.datasetId})
|
||||
</foreach>
|
||||
|
|
@ -44,7 +38,7 @@
|
|||
|
||||
<!-- 根据数据集ID查询文件列表 -->
|
||||
<select id="selectFilesByDatasetId" parameterType="Long" resultType="com.bonus.ai.domain.DataSetBasicFileEntity">
|
||||
SELECT bf.file_id AS fileId, bf.file_url AS fileUrl
|
||||
SELECT bf.file_id AS fileId, bf.file_url AS fileUrl,bf.file_name AS fileName
|
||||
FROM ai_dataset_file_map df
|
||||
left join ai_basic_file bf on bf.file_id = df.file_id
|
||||
WHERE df.dataset_id = #{datasetId}
|
||||
|
|
|
|||
Loading…
Reference in New Issue