Browse Source

数据集、模型版本更新功能实现

tags/v20240126
西大锐 2 years ago
parent
commit
a513cc2138
4 changed files with 57 additions and 27 deletions
  1. +2
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ModelsVersionService.java
  2. +4
    -4
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DatasetServiceImpl.java
  3. +32
    -23
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsServiceImpl.java
  4. +19
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsVersionServiceImpl.java

+ 2
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ModelsVersionService.java View File

@@ -61,4 +61,6 @@ public interface ModelsVersionService {
String removeById(Integer id); String removeById(Integer id);


List<ModelsVersion> queryByModelsId(Integer modelsId); List<ModelsVersion> queryByModelsId(Integer modelsId);

ModelsVersion duplicateModelsVersion(ModelsVersion oldModelsVersion);
} }

+ 4
- 4
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DatasetServiceImpl.java View File

@@ -228,15 +228,15 @@ public class DatasetServiceImpl implements DatasetService {
} }


DatasetVersion datasetVersionToUse = currentDatasetVersion; DatasetVersion datasetVersionToUse = currentDatasetVersion;
//检查是否存在URL记录
if (!currentDatasetVersion.getUrl().isEmpty()) {
//检查版本下是否存在URL记录
String url = currentDatasetVersion.getUrl();
if (url != null && !url.isEmpty()) {
// 逻辑删除当前版本 // 逻辑删除当前版本
currentDatasetVersion.setState(0); currentDatasetVersion.setState(0);
datasetVersionDao.update(currentDatasetVersion); datasetVersionDao.update(currentDatasetVersion);

// 创建并插入新版本 // 创建并插入新版本
datasetVersionToUse = this.datasetVersionService.duplicateDatasetVersion(currentDatasetVersion); datasetVersionToUse = this.datasetVersionService.duplicateDatasetVersion(currentDatasetVersion);
datasetVersionDao.insert(datasetVersionToUse);
} }


//查询数据集名称 //查询数据集名称


+ 32
- 23
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsServiceImpl.java View File

@@ -1,6 +1,8 @@
package com.ruoyi.platform.service.impl; package com.ruoyi.platform.service.impl;


import com.ruoyi.common.security.utils.SecurityUtils; 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.Models;
import com.ruoyi.platform.domain.ModelsVersion; import com.ruoyi.platform.domain.ModelsVersion;
import com.ruoyi.platform.mapper.ModelsDao; import com.ruoyi.platform.mapper.ModelsDao;
@@ -201,53 +203,60 @@ public class ModelsServiceImpl implements ModelsService {
* @param id 注意是models_version表的主键 * @param id 注意是models_version表的主键
* @return 是否成功 * @return 是否成功
*/ */

@Override @Override
public String uploadModels(MultipartFile file, Integer id) throws Exception{
if(file.isEmpty()){
public String uploadModels(MultipartFile file, Integer id) throws Exception {
if (file.isEmpty()) {
throw new Exception("文件为空,无法上传"); throw new Exception("文件为空,无法上传");
} }
// 获取文件大小并转换为KB // 获取文件大小并转换为KB
long sizeInBytes = file.getSize(); long sizeInBytes = file.getSize();
double sizeInKB = sizeInBytes / 1024.0; double sizeInKB = sizeInBytes / 1024.0;


//拿到models表的id去查模型名字
ModelsVersion modelsVersion = this.modelsVersionDao.queryById(id);
if (modelsVersion == null){
// 检查并处理现有的数据集版本记录
ModelsVersion currentModelsVersion = this.modelsVersionDao.queryById(id);
if (currentModelsVersion == null) {
throw new Exception("未找到模型版本记录"); throw new Exception("未找到模型版本记录");
} }
Integer modelsId = modelsVersion.getModelsId();

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(modelsId);
if (models == null) { if (models == null) {
throw new Exception("未找到模型记录"); throw new Exception("未找到模型记录");
} }


//得到用户名
LoginUser loginUser = SecurityUtils.getLoginUser();
String version = modelsVersion.getVersion();
String username = loginUser.getUsername();
Date createTime = models.getCreateTime();
// 其余操作基于 datasetVersionToUse
String username = SecurityUtils.getLoginUser().getUsername();
String version = modelsVersionToUse.getVersion();
Date createTime = modelsVersionToUse.getCreateTime();
String fileName = file.getOriginalFilename(); String fileName = file.getOriginalFilename();
//格式化日期为时间戳字符串
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd-HHmmss");
String timestamp = sdf.format(createTime);
//拼接objectName
String objectName = "models/" + username + "/" + models.getName() + "-" + timestamp + "/" + version + "/" + fileName;
String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(createTime);
String objectName = "models/" + username + "/" + models.getName() + "-" + timestamp + "/" + version + "/" + fileName;


// 上传文件到MinIO // 上传文件到MinIO
try (InputStream inputStream = file.getInputStream()) { try (InputStream inputStream = file.getInputStream()) {
minioUtil.uploadObject(bucketName, objectName, inputStream); minioUtil.uploadObject(bucketName, objectName, inputStream);
// 更新数据库url
modelsVersion.setUrl(objectName);
modelsVersion.setFileName(fileName);
modelsVersion.setFileSize(String.valueOf(sizeInKB));
modelsVersionDao.update(modelsVersion);
modelsVersionToUse.setUrl(objectName);
modelsVersionToUse.setFileName(fileName);
modelsVersionToUse.setFileSize(String.valueOf(sizeInKB));
modelsVersionDao.update(modelsVersionToUse);
return "模型成功上传到: " + objectName; return "模型成功上传到: " + objectName;
} catch (Exception e) { } catch (Exception e) {
throw new Exception("上传到MinIO失败: " + e.getMessage(), e); throw new Exception("上传到MinIO失败: " + e.getMessage(), e);
} }
} }

private String extractFileName(String urlStr) { private String extractFileName(String urlStr) {
return urlStr.substring(urlStr.lastIndexOf('/') + 1); return urlStr.substring(urlStr.lastIndexOf('/') + 1);
} }


+ 19
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsVersionServiceImpl.java View File

@@ -1,6 +1,7 @@
package com.ruoyi.platform.service.impl; package com.ruoyi.platform.service.impl;


import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.platform.domain.DatasetVersion;
import com.ruoyi.platform.domain.ModelsVersion; import com.ruoyi.platform.domain.ModelsVersion;
import com.ruoyi.platform.mapper.ModelsDao; import com.ruoyi.platform.mapper.ModelsDao;
import com.ruoyi.platform.mapper.ModelsVersionDao; import com.ruoyi.platform.mapper.ModelsVersionDao;
@@ -128,4 +129,22 @@ public class ModelsVersionServiceImpl implements ModelsVersionService {
public List<ModelsVersion> queryByModelsId(Integer modelsId){ public List<ModelsVersion> queryByModelsId(Integer modelsId){
return modelsVersionDao.queryByModelsId(modelsId); return modelsVersionDao.queryByModelsId(modelsId);
} }


/**
* 复制模型版本
*
* @param oldModelsVersion 待更新的模型版本
* @return 新的模型版本记录
*/
public ModelsVersion duplicateModelsVersion(ModelsVersion oldModelsVersion) {
ModelsVersion newModelsVersion = new ModelsVersion();
newModelsVersion.setModelsId(oldModelsVersion.getModelsId());
newModelsVersion.setVersion(oldModelsVersion.getVersion());
newModelsVersion.setStatus(oldModelsVersion.getStatus());
return this.insert(newModelsVersion);
}



} }

Loading…
Cancel
Save