This commit is contained in:
YaHoo94 2024-03-02 09:17:40 +08:00
commit db18786419
18 changed files with 359 additions and 139 deletions

View File

@ -9,7 +9,9 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.core.io.InputStreamResource;
import org.springframework.data.domain.PageRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@ -106,26 +108,22 @@ public class DatasetController {
*/
@GetMapping("/download/{dataset_version_id}")
@ApiOperation(value = "下载数据集", notes = "根据数据集版本表id下载数据集文件")
public AjaxResult downloadDataset(@PathVariable("dataset_version_id") Integer dataset_version_id) {
return AjaxResult.success(datasetService.downloadDataset(dataset_version_id));
public ResponseEntity<InputStreamResource> downloadDataset(@PathVariable("dataset_version_id") Integer dataset_version_id) {
return datasetService.downloadDataset(dataset_version_id);
}
/**
* 上传数据集
*
* @param dataset_version_id ps:这里的id是dataset_version表的主键
* @param file 上传的数据集文件
* @param datasetId 数据集ID
* @param files 上传的数据集文件
* @param version 版本文件
* @return 上传结果
*/
@PostMapping("/upload/{dataset_version_id}")
@PostMapping("/upload")
@ApiOperation(value = "上传数据集", notes = "根据数据集版本表id上传数据集文件并将信息存入数据库。")
@ApiImplicitParams({
@ApiImplicitParam(name = "file", value = "要上传的数据集文件", required = true, dataType = "file", paramType = "form"),
@ApiImplicitParam(name = "dataset_version_id", value = "数据集版本表id", required = true, dataType = "integer", paramType = "path")
})
public AjaxResult uploadDataset(@RequestParam("file") MultipartFile file,
@PathVariable("dataset_version_id") Integer dataset_version_id) throws Exception {
return AjaxResult.success(this.datasetService.uploadDataset(file, dataset_version_id));
public AjaxResult uploadDataset(@RequestParam("files") MultipartFile[] files, @RequestParam("dataset_id") Integer datasetId, @RequestParam("version") String version) throws Exception {
return AjaxResult.success(this.datasetService.uploadDataset(files,datasetId,version ));
}
/**

View File

@ -53,6 +53,20 @@ public class DatasetVersionController {
return AjaxResult.success(this.datasetVersionService.queryById(id));
}
/**
* 通过数据集id和version查询版本列表
*
* @param datasetId 数据集ID
* @param version 数据集版本
* @return 匹配的数据集版本记录列表
*/
@GetMapping("/versions")
public AjaxResult queryByDatasetIdAndVersion(@RequestParam("dataset_id") Integer datasetId,
@RequestParam("version") String version) {
return AjaxResult.success(this.datasetVersionService.queryByDatasetIdAndVersion(datasetId, version));
}
/**
* 新增数据
*
@ -89,5 +103,19 @@ public class DatasetVersionController {
return AjaxResult.success(this.datasetVersionService.removeById(id));
}
/**
* 删除版本下的所有数据
*
* @param datasetId 模型主键
* @param version 版本
* @return 删除是否成功
*/
@DeleteMapping("/deleteVersion")
@ApiOperation(value = "逻辑删除模型版本", notes = "根据模型ID和版本逻辑删除模型版本记录。")
public AjaxResult deleteModelsVersion(@RequestParam("dataset_id") Integer datasetId,
@RequestParam("version") String version) {
return AjaxResult.success(this.datasetVersionService.deleteDatasetVersion(datasetId, version));
}
}

View File

@ -7,7 +7,9 @@ import com.ruoyi.platform.domain.ModelsVersion;
import com.ruoyi.platform.service.ModelsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.core.io.InputStreamResource;
import org.springframework.data.domain.PageRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@ -102,10 +104,10 @@ public class ModelsController {
* @return 上传结果
*/
@PostMapping("/upload/{models_version_id}")
@ApiOperation(value = "上传模型", notes = "根据模型版本表id上传模型文件,并将信息存入数据库。")
public AjaxResult uploadModels(@RequestParam("file") MultipartFile file, @PathVariable("models_version_id") Integer models_version_id) throws Exception {
return AjaxResult.success(this.modelsService.uploadModels(file,models_version_id));
@PostMapping("/upload")
@ApiOperation(value = "上传模型", notes = "根据模型id和版本号上传模型文件,并将信息存入数据库。")
public AjaxResult uploadModels(@RequestParam("files") MultipartFile[] files, @RequestParam("models_id") Integer modelsId, @RequestParam("version") String version) throws Exception {
return AjaxResult.success(this.modelsService.uploadModels(files,modelsId,version));
}
@ -120,16 +122,32 @@ public class ModelsController {
}
/**
* 模型下载
* 模型单个文件下载
*
*@param models_version_id 模型版本表主键
* @return 单条数据
*/
@GetMapping("/download/{models_version_id}")
@ApiOperation(value = "下载模型", notes = "根据模型版本表id下载模型文件。")
public AjaxResult downloadModels(@PathVariable("models_version_id") Integer models_version_id) {
return AjaxResult.success(modelsService.downloadModels(models_version_id));
public ResponseEntity<InputStreamResource> downloadModels(@PathVariable("models_version_id") Integer models_version_id) {
return modelsService.downloadModels(models_version_id);
}
/**
* 模型打包下载
*
* @param modelsId 模型版本表主键
* @param version 模型版本表主键
* @return 单条数据
*/
@GetMapping("/downloadAllFiles")
@ApiOperation(value = "下载模型压缩包", notes = "根据模型ID和版本下载所有模型文件并打包。")
public ResponseEntity<InputStreamResource> downloadAllModelFiles(@RequestParam("models_id") Integer modelsId, @RequestParam("version") String version) {
return modelsService.downloadAllModelFiles(modelsId, version);
}
}

View File

@ -52,6 +52,23 @@ public class ModelsVersionController {
return AjaxResult.success(this.modelsVersionService.queryById(id));
}
/**
* 通过模型id和version查询版本列表
*
* @param modelsId 模型ID
* @param version 模型版本
* @return 匹配的模型版本记录列表
*/
@GetMapping("/versions")
public AjaxResult queryByModelsIdAndVersion(@RequestParam("models_id") Integer modelsId,
@RequestParam("version") String version) {
return AjaxResult.success(this.modelsVersionService.queryByModelsIdAndVersion(modelsId, version));
}
/**
* 新增数据
*
@ -75,7 +92,7 @@ public class ModelsVersionController {
}
/**
* 删除数据
* 根据id删除单条数据
*
* @param id 主键
* @return 删除是否成功
@ -85,5 +102,21 @@ public class ModelsVersionController {
return AjaxResult.success(this.modelsVersionService.removeById(id));
}
/**
* 删除版本下的所有数据
*
* @param modelsId 模型主键
* @param version 版本
* @return 删除是否成功
*/
@DeleteMapping("/deleteVersion")
@ApiOperation(value = "逻辑删除模型版本", notes = "根据模型ID和版本逻辑删除模型版本记录。")
public AjaxResult deleteModelsVersion(@RequestParam("models_id") Integer modelsId,
@RequestParam("version") String version) {
return AjaxResult.success(this.modelsVersionService.deleteModelsVersion(modelsId, version));
}
}

View File

@ -86,6 +86,9 @@ public interface DatasetVersionDao {
DatasetVersion queryByDatasetVersion(DatasetVersion datasetVersion);
List<DatasetVersion> queryAllByDatasetVersion(@Param("datasetId") Integer datasetId, @Param("version") String version);
}

View File

@ -45,7 +45,7 @@ public interface ExperimentDao {
* @param experiment 实例对象
* @return 影响行数
*/
int insert(Experiment experiment);
int insert(@Param("experiment") Experiment experiment);
/**
* 批量新增数据MyBatis原生foreach方法
@ -70,7 +70,7 @@ public interface ExperimentDao {
* @param experiment 实例对象
* @return 影响行数
*/
int update(Experiment experiment);
int update(@Param("experiment") Experiment experiment);
/**
* 通过主键删除数据

View File

@ -82,6 +82,8 @@ public interface ModelsVersionDao {
List<ModelsVersion> queryByModelsId(Integer modelsId);
ModelsVersion queryByModelsVersion(ModelsVersion modelsVersion);
ModelsVersion queryByModelsVersion(@Param("modelsVersion") ModelsVersion modelsVersion);
List<ModelsVersion> queryAllByModelsVersion(@Param("modelsId") Integer modelsId, @Param("version") String version);
}

View File

@ -69,7 +69,7 @@ public interface DatasetService {
ResponseEntity<InputStreamResource> downloadDataset(Integer id);
Map uploadDataset(MultipartFile file, Integer id) throws Exception;
Map uploadDataset(MultipartFile[] files, Integer id, String version) throws Exception;
Map uploadDatasetPipeline(DatasetVersion datasetVersion) throws Exception;
}

View File

@ -8,6 +8,7 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import java.util.List;
import java.util.Map;
/**
* (DatasetVersion)表服务接口
@ -65,4 +66,8 @@ public interface DatasetVersionService {
DatasetVersion duplicateDatasetVersion(DatasetVersion oldDatasetVersion);
DatasetVersion queryByDatasetVersion(DatasetVersion datasetVersion);
List<DatasetVersion> queryByDatasetIdAndVersion(Integer datasetId, String version);
Map<Integer,String> deleteDatasetVersion(Integer datasetId, String version);
}

View File

@ -66,7 +66,11 @@ public interface ModelsService {
ResponseEntity<InputStreamResource> downloadModels(Integer id);
Map uploadModels(MultipartFile file, Integer id) throws Exception;
Map uploadModels(MultipartFile[] files, Integer id, String version) throws Exception;
Map uploadModelsPipeline(ModelsVersion modelsVersion) throws Exception;
ResponseEntity<InputStreamResource> downloadAllModelFiles(Integer modelsId, String version);
}

View File

@ -2,12 +2,12 @@ package com.ruoyi.platform.service;
import com.ruoyi.platform.domain.Models;
import com.ruoyi.platform.domain.ModelsVersion;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import java.util.List;
import java.util.Map;
/**
* (ModelsVersion)表服务接口
@ -65,4 +65,8 @@ public interface ModelsVersionService {
ModelsVersion duplicateModelsVersion(ModelsVersion oldModelsVersion);
ModelsVersion queryByModelsVersion(ModelsVersion modelsVersion);
List<ModelsVersion> queryByModelsIdAndVersion(Integer modelsId, String version);
Map<Integer, String> deleteModelsVersion(Integer modelsId, String version);
}

View File

@ -4,7 +4,8 @@ package com.ruoyi.platform.service.impl;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.platform.domain.Dataset;
import com.ruoyi.platform.domain.DatasetVersion;
import com.ruoyi.platform.domain.Workflow;
import com.ruoyi.platform.domain.Models;
import com.ruoyi.platform.domain.ModelsVersion;
import com.ruoyi.platform.mapper.DatasetDao;
import com.ruoyi.platform.mapper.DatasetVersionDao;
import com.ruoyi.platform.service.DatasetService;
@ -14,7 +15,6 @@ import com.ruoyi.platform.utils.MinioUtil;
import com.ruoyi.system.api.model.LoginUser;
import io.minio.MinioClient;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.InputStreamResource;
import org.springframework.data.domain.Page;
@ -34,7 +34,6 @@ import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@ -212,65 +211,56 @@ public class DatasetServiceImpl implements DatasetService {
/**
* 上传数据集
*
* @param file 文件
* @param id 注意是dataset_version表的主键
* @param files 文件
* @param id 注意是dataset_version表的主键
* @param version
* @return 是否成功
*/
@Override
public Map uploadDataset(MultipartFile file, Integer id) throws Exception {
if (file.isEmpty()) {
throw new Exception("文件为空,无法上传");
}
// 获取文件大小并转换为KB
long sizeInBytes = file.getSize();
double sizeInKB = sizeInBytes / 1024.0;
public Map uploadDataset(MultipartFile[] files, Integer id, String version) throws Exception {
Map<String, Object> results = new HashMap<String, Object>();
// 检查并处理现有的数据集版本记录
DatasetVersion currentDatasetVersion = this.datasetVersionDao.queryById(id);
if (currentDatasetVersion == null) {
throw new Exception("未找到数据集版本记录");
}
DatasetVersion datasetVersionToUse = currentDatasetVersion;
//检查版本下是否存在URL记录
String url = currentDatasetVersion.getUrl();
if (url != null && !url.isEmpty()) {
// 逻辑删除当前版本
currentDatasetVersion.setState(0);
datasetVersionDao.update(currentDatasetVersion);
// 创建并插入新版本
datasetVersionToUse = this.datasetVersionService.duplicateDatasetVersion(currentDatasetVersion);
}
//查询数据集名称
Integer datasetID = datasetVersionToUse.getDatasetId();
Dataset dataset = this.datasetDao.queryById(datasetID);
// 验证模型是否存在
Dataset dataset = this.datasetDao.queryById(id);
if (dataset == null) {
throw new Exception("未找到数据集记录");
throw new Exception("未找到模型记录");
}
// 其余操作基于 datasetVersionToUse
String username = SecurityUtils.getLoginUser().getUsername();
String version = datasetVersionToUse.getVersion();
Date createTime = datasetVersionToUse.getCreateTime();
String fileName = file.getOriginalFilename();
String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(createTime);
String objectName = "datasets/" + username + "/" + dataset.getName() + "-" + timestamp + "/" + version + "/" + fileName;
for (MultipartFile file:files){
if (file.isEmpty()) {
throw new Exception("文件为空,无法上传");
}
// 获取文件大小并转换为KB
long sizeInBytes = file.getSize();
double sizeInKB = sizeInBytes / 1024.0;
// 其余操作基于 modelsVersionToUse
String username = SecurityUtils.getLoginUser().getUsername();
String fileName = file.getOriginalFilename();
// String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(createTime);
String objectName = "datasets/" + username + "/" + dataset.getName() + "/" + version + "/" + fileName;
// 上传文件到MinIO并将记录新增到数据库中
try (InputStream inputStream = file.getInputStream()) {
minioUtil.uploadObject(bucketName, objectName, inputStream);
DatasetVersion datasetVersion = new DatasetVersion();
datasetVersion.setDatasetId(id);
datasetVersion.setVersion(version);
datasetVersion.setUrl(objectName);
datasetVersion.setFileName(fileName);
datasetVersion.setFileSize(String.valueOf(sizeInKB));
datasetVersionService.insert(datasetVersion);
} catch (Exception e) {
throw new Exception("上传数据集失败: " + e.getMessage(), e);
}
Map<String, String> fileResult = new HashMap<>();
fileResult.put("fileName", file.getOriginalFilename());
fileResult.put("url", objectName); // objectName根据实际情况定义
results.put(file.getOriginalFilename(), fileResult);
// 上传文件到MinIO
try (InputStream inputStream = file.getInputStream()) {
minioUtil.uploadObject(bucketName, objectName, inputStream);
datasetVersionToUse.setUrl(objectName);
datasetVersionToUse.setFileName(fileName);
datasetVersionToUse.setFileSize(String.valueOf(sizeInKB));
datasetVersionDao.update(datasetVersionToUse);
} catch (Exception e) {
throw new Exception("上传到数据集失败: " + e.getMessage(), e);
}
Map<String, String> result = new HashMap<String, String>();
result.put("url",objectName);
return result;
return results;
}
@Override

View File

@ -2,6 +2,7 @@ package com.ruoyi.platform.service.impl;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.platform.domain.DatasetVersion;
import com.ruoyi.platform.domain.ModelsVersion;
import com.ruoyi.platform.domain.Workflow;
import com.ruoyi.platform.mapper.DatasetVersionDao;
import com.ruoyi.platform.service.DatasetVersionService;
@ -14,7 +15,9 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* (DatasetVersion)表服务实现类
@ -145,4 +148,22 @@ public class DatasetVersionServiceImpl implements DatasetVersionService {
return datasetVersionDao.queryByDatasetVersion(datasetVersion);
}
@Override
public List<DatasetVersion> queryByDatasetIdAndVersion(Integer datasetId, String version) {
return this.datasetVersionDao.queryAllByDatasetVersion(datasetId, version);
}
@Override
public Map<Integer, String> deleteDatasetVersion(Integer datasetId, String version) {
Map<Integer, String> results = new HashMap<Integer,String>();
// 根据模型ID和版本查询所有模型版本
List<DatasetVersion> versions = this.datasetVersionDao.queryAllByDatasetVersion(datasetId, version);
//逻辑删除列表中的数据项
for(DatasetVersion datasetVersion:versions){
String result = this.removeById(datasetVersion.getId());
results.put(datasetVersion.getId(), result);
}
return results;
}
}

View File

@ -103,6 +103,8 @@ public class ExperimentServiceImpl implements ExperimentService {
/**
* 分页查询实验状态
*
*
*
* @param experiment 筛选条件
* @param pageRequest 分页对象
* @return 查询结果

View File

@ -1,8 +1,6 @@
package com.ruoyi.platform.service.impl;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.platform.domain.Dataset;
import com.ruoyi.platform.domain.DatasetVersion;
import com.ruoyi.platform.domain.Models;
import com.ruoyi.platform.domain.ModelsVersion;
import com.ruoyi.platform.mapper.ModelsDao;
@ -14,7 +12,6 @@ import com.ruoyi.platform.utils.MinioUtil;
import com.ruoyi.system.api.model.LoginUser;
import io.minio.MinioClient;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.InputStreamResource;
import org.springframework.data.domain.Page;
@ -31,10 +28,12 @@ import javax.annotation.Resource;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* (Models)表服务实现类
@ -153,6 +152,8 @@ public class ModelsServiceImpl implements ModelsService {
//判断权限只有admin和创建者本身可以删除该数据集
LoginUser loginUser = SecurityUtils.getLoginUser();
String username = loginUser.getUsername();
String createdBy = models.getCreateBy();
if (!(StringUtils.equals(username,"admin") || StringUtils.equals(username,createdBy))){
return "无权限删除该模型";
@ -203,65 +204,56 @@ public class ModelsServiceImpl implements ModelsService {
/**
* 上传模型
*
* @param file 文件
* @param id 注意是models_version表的主键
* @param files 文件
* @param id 模型id
* @param version 模型版本
* @return 是否成功
*/
@Override
public Map uploadModels(MultipartFile file, Integer id) throws Exception {
if (file.isEmpty()) {
throw new Exception("文件为空,无法上传");
}
// 获取文件大小并转换为KB
long sizeInBytes = file.getSize();
double sizeInKB = sizeInBytes / 1024.0;
public Map uploadModels(MultipartFile[] files, Integer id, String version) throws Exception {
// 检查并处理现有的数据集版本记录
ModelsVersion currentModelsVersion = this.modelsVersionDao.queryById(id);
if (currentModelsVersion == null) {
throw new Exception("未找到模型版本记录");
}
Map<String, Object> results = new HashMap<String, Object>();
ModelsVersion modelsVersionToUse = currentModelsVersion;
//检查是否存在URL记录
String url = currentModelsVersion.getUrl();
if (url != null && !url.isEmpty()) {
// 逻辑删除当前版本
currentModelsVersion.setState(0);
modelsVersionDao.update(currentModelsVersion);
// 复制原有版本并在数据库中插入新版本
modelsVersionToUse = this.modelsVersionService.duplicateModelsVersion(currentModelsVersion);
}
//查询模型名称
Integer modelsId = modelsVersionToUse.getModelsId();
Models models = this.modelsDao.queryById(modelsId);
// 验证模型是否存在
Models models = this.modelsDao.queryById(id);
if (models == null) {
throw new Exception("未找到模型记录");
}
// 其余操作基于 datasetVersionToUse
String username = SecurityUtils.getLoginUser().getUsername();
String version = modelsVersionToUse.getVersion();
Date createTime = modelsVersionToUse.getCreateTime();
String fileName = file.getOriginalFilename();
String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(createTime);
String objectName = "models/" + username + "/" + models.getName() + "-" + timestamp + "/" + version + "/" + fileName;
for (MultipartFile file:files){
if (file.isEmpty()) {
throw new Exception("文件为空,无法上传");
}
// 获取文件大小并转换为KB
long sizeInBytes = file.getSize();
double sizeInKB = sizeInBytes / 1024.0;
// 其余操作基于 modelsVersionToUse
String username = SecurityUtils.getLoginUser().getUsername();
String fileName = file.getOriginalFilename();
// String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(createTime);
String objectName = "models/" + username + "/" + models.getName() + "/" + version + "/" + fileName;
// 上传文件到MinIO并将记录新增到数据库中
try (InputStream inputStream = file.getInputStream()) {
minioUtil.uploadObject(bucketName, objectName, inputStream);
ModelsVersion modelsVersion = new ModelsVersion();
modelsVersion.setModelsId(id);
modelsVersion.setVersion(version);
modelsVersion.setUrl(objectName);
modelsVersion.setFileName(fileName);
modelsVersion.setFileSize(String.valueOf(sizeInKB));
modelsVersionService.insert(modelsVersion);
} catch (Exception e) {
throw new Exception("上传到模型失败: " + e.getMessage(), e);
}
Map<String, String> fileResult = new HashMap<>();
fileResult.put("fileName", file.getOriginalFilename());
fileResult.put("url", objectName); // objectName根据实际情况定义
results.put(file.getOriginalFilename(), fileResult);
// 上传文件到MinIO
try (InputStream inputStream = file.getInputStream()) {
minioUtil.uploadObject(bucketName, objectName, inputStream);
modelsVersionToUse.setUrl(objectName);
modelsVersionToUse.setFileName(fileName);
modelsVersionToUse.setFileSize(String.valueOf(sizeInKB));
modelsVersionDao.update(modelsVersionToUse);
} catch (Exception e) {
throw new Exception("上传到模型失败: " + e.getMessage(), e);
}
Map<String, String> result = new HashMap<String, String>();
result.put("url",objectName);
return result;
return results;
}
@ -270,17 +262,20 @@ public class ModelsServiceImpl implements ModelsService {
String username = SecurityUtils.getLoginUser().getUsername();
// 检查是否存在
Models models = this.queryById(modelsVersion.getModelsId());
if (models == null) {
throw new Exception("模型不存在请检查模型id");
}
ModelsVersion version = modelsVersionService.queryByModelsVersion(modelsVersion);
String url = "";
if (version == null) {
//插表,因为这里是一次直接插表所以这里定掉date然后用DAO插入
Date date = new Date();
String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(date);
url = "models/" + username + "/" + models.getName() + "-" + timestamp + "/" + modelsVersion.getVersion() + "/" + modelsVersion.getFileName();
//String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(date);
url = "models/" + username + "/" + models.getName() + "-" + "/" + modelsVersion.getVersion() + "/" + modelsVersion.getFileName();
modelsVersion.setUrl(url);
modelsVersion.setCreateBy(username);
modelsVersion.setUpdateBy(username);
@ -292,8 +287,8 @@ public class ModelsServiceImpl implements ModelsService {
//改表
BeansUtils.copyPropertiesIgnoreNull(modelsVersion, version);
Date createTime = version.getCreateTime();
String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(createTime);
url = "models/" + username + "/" + models.getName() + "-" + timestamp + "/" + modelsVersion.getVersion() + "/" + modelsVersion.getFileName();
// String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(createTime);
url = "models/" + username + "/" + models.getName() + "-" + "/" + modelsVersion.getVersion() + "/" + modelsVersion.getFileName();
version.setUrl(url);
modelsVersionService.update(version);
}
@ -302,6 +297,57 @@ public class ModelsServiceImpl implements ModelsService {
return result;
}
/**
* 下载所有模型文件用压缩包的方式返回
*
* @param modelsId 模型ID
* @param version 模型版本号
* @return 文件内容
*/
@Override
public ResponseEntity<InputStreamResource> downloadAllModelFiles(Integer modelsId, String version) {
// 根据模型id查模型名
Models model = this.modelsDao.queryById(modelsId);
String modelName = model.getName();
// 查询特定模型和版本对应的所有文件
List<ModelsVersion> modelsVersionList = this.modelsVersionDao.queryAllByModelsVersion(modelsId, version);
if (modelsVersionList == null || modelsVersionList.isEmpty()) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
}
// 创建ZIP文件准备打包下载
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (ZipOutputStream zos = new ZipOutputStream(baos)) {
//遍历每一个version数据项
for (ModelsVersion modelsVersion : modelsVersionList) {
String objectName = modelsVersion.getUrl();
if (objectName != null && !objectName.isEmpty()) {
// 使用ByteArrayOutputStream来捕获MinIO中的文件
ByteArrayOutputStream fileOutputStream = new ByteArrayOutputStream();
minioUtil.downloadObject(bucketName, objectName, fileOutputStream);
// 添加到ZIP文件
zos.putNextEntry(new ZipEntry(extractFileName(objectName)));
fileOutputStream.writeTo(zos);
zos.closeEntry();
}
}
// 转换为输入流
ByteArrayInputStream inputStream = new ByteArrayInputStream(baos.toByteArray());
InputStreamResource resource = new InputStreamResource(inputStream);
// 设置响应
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + modelName + "_" + version + ".zip\"")
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(resource);
} catch (Exception e) {
e.printStackTrace();
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
}
}
private String extractFileName(String urlStr) {
return urlStr.substring(urlStr.lastIndexOf('/') + 1);
}

View File

@ -1,7 +1,6 @@
package com.ruoyi.platform.service.impl;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.platform.domain.DatasetVersion;
import com.ruoyi.platform.domain.ModelsVersion;
import com.ruoyi.platform.mapper.ModelsDao;
import com.ruoyi.platform.mapper.ModelsVersionDao;
@ -15,7 +14,9 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* (ModelsVersion)表服务实现类
@ -110,7 +111,7 @@ public class ModelsVersionServiceImpl implements ModelsVersionService {
public String removeById(Integer id) {
ModelsVersion modelsVersion = this.modelsVersionDao.queryById(id);
if (modelsVersion == null){
return "模型版本信息不存在";
return "该版本下模型文件信息不存在";
}
//判断权限只有admin和创建者本身可以删除该数据集
@ -118,7 +119,7 @@ public class ModelsVersionServiceImpl implements ModelsVersionService {
String username = loginUser.getUsername();
String createdBy = modelsVersion.getCreateBy();
if (!(StringUtils.equals(username,"admin") || StringUtils.equals(username,createdBy))){
return "无权限删除该模型版本信息";
return "无权限删除该版本下模型信息";
}
modelsVersion.setState(0);
@ -146,7 +147,36 @@ public class ModelsVersionServiceImpl implements ModelsVersionService {
}
public ModelsVersion queryByModelsVersion(ModelsVersion modelsVersion){
return this.modelsVersionDao.queryByModelsVersion(modelsVersion);
}
/**
* 复制模型版本
*
* @param modelsId 模型的id
* @param version 模型版本号
* @return 新的模型版本记录列表
*/
@Override
public List<ModelsVersion> queryByModelsIdAndVersion(Integer modelsId, String version) {
return this.modelsVersionDao.queryAllByModelsVersion(modelsId, version) ;
}
@Override
public Map<Integer, String> deleteModelsVersion(Integer modelsId, String version) {
Map<Integer, String> results = new HashMap<Integer,String>();
// 根据模型ID和版本查询所有模型版本
List<ModelsVersion> versions = this.modelsVersionDao.queryAllByModelsVersion(modelsId, version);
//逻辑删除列表中的数据项
for(ModelsVersion modelsVersion:versions){
String result = this.removeById(modelsVersion.getId());
results.put(modelsVersion.getId(), result);
}
return results;
}
}

View File

@ -49,6 +49,24 @@
</where>
limit 1
</select>
<select id="queryAllByDatasetVersion" resultMap="DatasetVersionMap">
select
id,dataset_id,version,url,file_name,file_size,available_cluster,status,create_by,create_time,update_by,update_time,state
from dataset_version
<where>
state = 1
<if test="datasetId != null">
and dataset_id = #{datasetId}
</if>
<if test="version != null and version != ''">
and version = #{version}
</if>
</where>
</select>
<!--查询指定行数据-->
<select id="queryAllByLimit" resultMap="DatasetVersionMap">
select

View File

@ -31,6 +31,23 @@
</select>
<select id="queryByModelsVersion" resultMap="ModelsVersionMap">
select
id,models_id,version,url,file_name,file_size,status,create_by,create_time,update_by,update_time,state
from models_version
<where>
state = 1
<if test="modelsId != null">
and models_id = #{modelsVersion.modelsId}
</if>
<if test="version != null and version != ''">
and version = #{modelsVersion.version}
</if>
</where>
limit 1
</select>
<!-- 查询模型同一个版本下的所有文件 -->
<select id="queryAllByModelsVersion" resultMap="ModelsVersionMap">
select
id,models_id,version,url,file_name,file_size,status,create_by,create_time,update_by,update_time,state
from models_version
@ -43,9 +60,10 @@
and version = #{version}
</if>
</where>
limit 1
</select>
<!--查询指定行数据-->
<select id="queryAllByLimit" resultMap="ModelsVersionMap">
select