提交代码

This commit is contained in:
jiang 2024-11-26 19:12:59 +08:00
parent bd7a787e55
commit 2716b02095
7 changed files with 131 additions and 52 deletions

View File

@ -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("更新任务失败");
}

View File

@ -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);
}
}

View File

@ -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);
/**
* 更新数据集标注状态

View File

@ -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;
}

View File

@ -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数据类型等信息

View File

@ -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);
}

View File

@ -8,14 +8,8 @@
<result property="datasetId" column="dataset_id" />
</resultMap>
<!-- &lt;!&ndash; 插入数据集文件映射关系 &ndash;&gt;-->
<!-- <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}