Browse Source

删除资源时先判断是否被超参数自动寻优占用

dev-credits
chenzhihang 10 months ago
parent
commit
e982a49a78
7 changed files with 120 additions and 29 deletions
  1. +8
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/RayDao.java
  2. +14
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/CodeConfigServiceImpl.java
  3. +13
    -10
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ImageServiceImpl.java
  4. +21
    -10
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ImageVersionServiceImpl.java
  5. +20
    -5
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsServiceImpl.java
  6. +16
    -4
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/NewDatasetServiceImpl.java
  7. +28
    -0
      ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayDaoMapper.xml

+ 8
- 0
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/RayDao.java View File

@@ -18,4 +18,12 @@ public interface RayDao {
int save(@Param("ray") Ray ray);

int edit(@Param("ray") Ray ray);

List<Ray> queryByDatasetId(@Param("datasetId") String datasetId);

List<Ray> queryByModelId(@Param("modelId") String modelId);

List<Ray> queryByImageId(@Param("imageId") String imageId);

List<Ray> queryByCodeConfig(@Param("codeConfig") String codeConfig);
}

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

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

import com.alibaba.fastjson2.JSON;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.platform.constant.Constant;
import com.ruoyi.platform.domain.AssetWorkflow;
@@ -13,9 +14,12 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import com.ruoyi.platform.domain.Ray;
import com.ruoyi.platform.mapper.RayDao;

import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;

@@ -26,6 +30,8 @@ public class CodeConfigServiceImpl implements CodeConfigService {
private CodeConfigDao codeConfigDao;
@Resource
private AssetWorkflowDao assetWorkflowDao;
@Resource
private RayDao rayDao;

@Override
public Page<CodeConfig> queryByPage(CodeConfig codeConfig, PageRequest pageRequest) {
@@ -88,6 +94,14 @@ public class CodeConfigServiceImpl implements CodeConfigService {
throw new Exception("该代码配置被流水线:" + workflows + "使用,不能删除,请先删除流水线。");
}

HashMap<String, String> map = new HashMap<>();
map.put("code_path", codeConfig.getGitUrl());
List<Ray> rayList = rayDao.queryByCodeConfig(JSON.toJSONString(map));
if (rayList != null && !rayList.isEmpty()) {
String rays = String.join(",", rayList.stream().map(Ray::getName).collect(Collectors.toSet()));
throw new Exception("该代码配置被超参数自动寻优:" + rays + "使用,不能删除,请先删除超参数自动寻优。");
}

LoginUser loginUser = SecurityUtils.getLoginUser();
String username = loginUser.getUsername();
String createBy = codeConfig.getCreateBy();


+ 13
- 10
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ImageServiceImpl.java View File

@@ -1,16 +1,11 @@
package com.ruoyi.platform.service.impl;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.util.DateUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.platform.constant.Constant;
import com.ruoyi.platform.domain.AssetWorkflow;
import com.ruoyi.platform.domain.DevEnvironment;
import com.ruoyi.platform.domain.Image;
import com.ruoyi.platform.domain.ImageVersion;
import com.ruoyi.platform.mapper.AssetWorkflowDao;
import com.ruoyi.platform.mapper.DevEnvironmentDao;
import com.ruoyi.platform.mapper.ImageDao;
import com.ruoyi.platform.mapper.ImageVersionDao;
import com.ruoyi.platform.domain.*;
import com.ruoyi.platform.mapper.*;
import com.ruoyi.platform.service.ImageService;
import com.ruoyi.platform.service.ImageVersionService;
import com.ruoyi.platform.service.MinioService;
@@ -53,10 +48,10 @@ public class ImageServiceImpl implements ImageService {
private ImageVersionDao imageVersionDao;
@Resource
private DevEnvironmentDao devEnvironmentDao;

@Resource
private AssetWorkflowDao assetWorkflowDao;

@Resource
private RayDao rayDao;
@Resource
private ImageVersionService imageVersionService;

@@ -182,6 +177,14 @@ public class ImageServiceImpl implements ImageService {
throw new Exception("该镜像被流水线:" + workflows + "使用,不能删除,请先删除流水线。");
}

HashMap<String, String> map = new HashMap<>();
map.put("id", String.valueOf(id));
List<Ray> rayList = rayDao.queryByImageId(JSON.toJSONString(map));
if (rayList != null && !rayList.isEmpty()) {
String rays = String.join(",", rayList.stream().map(Ray::getName).collect(Collectors.toSet()));
throw new Exception("该镜像被超参数自动寻优:" + rays + "使用,不能删除,请先删除超参数自动寻优。");
}

//判断权限,只有admin和创建者本身可以删除该数据集
LoginUser loginUser = SecurityUtils.getLoginUser();
String username = loginUser.getUsername();


+ 21
- 10
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ImageVersionServiceImpl.java View File

@@ -1,23 +1,25 @@
package com.ruoyi.platform.service.impl;

import com.alibaba.fastjson2.JSON;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.platform.constant.Constant;
import com.ruoyi.platform.domain.AssetWorkflow;
import com.ruoyi.platform.domain.ImageVersion;
import com.ruoyi.platform.domain.Ray;
import com.ruoyi.platform.mapper.AssetWorkflowDao;
import com.ruoyi.platform.mapper.ImageDao;
import com.ruoyi.platform.mapper.ImageVersionDao;
import com.ruoyi.platform.domain.ModelsVersion;
import com.ruoyi.platform.mapper.RayDao;
import com.ruoyi.platform.service.ImageVersionService;
import com.ruoyi.system.api.model.LoginUser;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;

@@ -31,9 +33,10 @@ import java.util.stream.Collectors;
public class ImageVersionServiceImpl implements ImageVersionService {
@Resource
private ImageVersionDao imageVersionDao;

@Resource
private AssetWorkflowDao assetWorkflowDao;
@Resource
private RayDao rayDao;

/**
* 通过ID查询单条数据
@@ -50,7 +53,7 @@ public class ImageVersionServiceImpl implements ImageVersionService {
* 分页查询
*
* @param imageVersion 筛选条件
* @param pageRequest 分页对象
* @param pageRequest 分页对象
* @return 查询结果
*/
@Override
@@ -60,14 +63,14 @@ public class ImageVersionServiceImpl implements ImageVersionService {
}

@Override
public List<ImageVersion> queryByImageId(Integer imageId){
public List<ImageVersion> queryByImageId(Integer imageId) {
return imageVersionDao.queryByImageId(imageId);
}

@Override
public String removeById(Integer id) throws Exception {
ImageVersion imageVersion = this.imageVersionDao.queryById(id);
if (imageVersion == null){
if (imageVersion == null) {
return "该版本下模型文件信息不存在";
}

@@ -77,16 +80,24 @@ public class ImageVersionServiceImpl implements ImageVersionService {
throw new Exception("该镜像版本被流水线:" + workflows + "使用,不能删除,请先删除流水线。");
}

HashMap<String, String> map = new HashMap<>();
map.put("version", String.valueOf(id));
List<Ray> rayList = rayDao.queryByImageId(JSON.toJSONString(map));
if (rayList != null && !rayList.isEmpty()) {
String rays = String.join(",", rayList.stream().map(Ray::getName).collect(Collectors.toSet()));
throw new Exception("该镜像版本被超参数自动寻优:" + rays + "使用,不能删除,请先删除超参数自动寻优。");
}

//判断权限,只有admin和创建者本身可以删除该数据集
LoginUser loginUser = SecurityUtils.getLoginUser();
String username = loginUser.getUsername();
String createdBy = imageVersion.getCreateBy();
if (!(StringUtils.equals(username,"admin") || StringUtils.equals(username,createdBy))){
if (!(StringUtils.equals(username, "admin") || StringUtils.equals(username, createdBy))) {
return "无权限删除该版本下模型信息";
}

imageVersion.setState(0);
return this.imageVersionDao.update(imageVersion)>0?"删除成功":"删除失败";
return this.imageVersionDao.update(imageVersion) > 0 ? "删除成功" : "删除失败";

}

@@ -117,7 +128,7 @@ public class ImageVersionServiceImpl implements ImageVersionService {
@Override
public ImageVersion update(ImageVersion imageVersion) {
int currentState = imageVersion.getState();
if(currentState == 0){
if (currentState == 0) {
throw new RuntimeException("镜像版本已被删除,无法更新。");
}
LoginUser loginUser = SecurityUtils.getLoginUser();


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

@@ -9,10 +9,7 @@ import com.ruoyi.platform.annotations.CheckDuplicate;
import com.ruoyi.platform.constant.Constant;
import com.ruoyi.platform.domain.*;
import com.ruoyi.platform.domain.dependencydomain.TrainTaskDepency;
import com.ruoyi.platform.mapper.AssetWorkflowDao;
import com.ruoyi.platform.mapper.ModelDependency1Dao;
import com.ruoyi.platform.mapper.ModelsDao;
import com.ruoyi.platform.mapper.ModelsVersionDao;
import com.ruoyi.platform.mapper.*;
import com.ruoyi.platform.service.*;
import com.ruoyi.platform.utils.*;
import com.ruoyi.platform.vo.*;
@@ -67,7 +64,8 @@ public class ModelsServiceImpl implements ModelsService {
private ModelsDao modelsDao;
@Resource
private ModelsVersionDao modelsVersionDao;

@Resource
private RayDao rayDao;
@Resource
private ModelsVersionService modelsVersionService;

@@ -1154,6 +1152,14 @@ public class ModelsServiceImpl implements ModelsService {
throw new Exception("该模型被流水线:" + workflows + "使用,不能删除,请先删除流水线。");
}

HashMap<String, String> queryMap = new HashMap<>();
queryMap.put("id", String.valueOf(repoId));
List<Ray> rayList = rayDao.queryByModelId(JSON.toJSONString(queryMap));
if (rayList != null && !rayList.isEmpty()) {
String rays = String.join(",", rayList.stream().map(Ray::getName).collect(Collectors.toSet()));
throw new Exception("该模型被超参数自动寻优:" + rays + "使用,不能删除,请先删除超参数自动寻优。");
}

String token = gitService.checkoutToken();
gitService.deleteProject(token, owner, identifier);
//删除模型依赖
@@ -1177,6 +1183,15 @@ public class ModelsServiceImpl implements ModelsService {
throw new Exception("该模型版本被流水线:" + workflows + "使用,不能删除,请先删除流水线。");
}

HashMap<String, String> queryMap = new HashMap<>();
queryMap.put("id", String.valueOf(repoId));
queryMap.put("version", version);
List<Ray> rayList = rayDao.queryByModelId(JSON.toJSONString(queryMap));
if (rayList != null && !rayList.isEmpty()) {
String rays = String.join(",", rayList.stream().map(Ray::getName).collect(Collectors.toSet()));
throw new Exception("该数据集版本被超参数自动寻优:" + rays + "使用,不能删除,请先删除超参数自动寻优。");
}

String token = gitService.checkoutToken();
String rootPath = Paths.get(localPath + "/" + relativePath).getParent().toString();
gitService.deleteBranch(token, owner, identifier, version, rootPath);


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

@@ -4,12 +4,10 @@ import com.alibaba.fastjson2.JSON;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.platform.constant.Constant;
import com.ruoyi.platform.domain.AssetWorkflow;
import com.ruoyi.platform.domain.AutoMl;
import com.ruoyi.platform.domain.Dataset;
import com.ruoyi.platform.domain.DatasetTempStorage;
import com.ruoyi.platform.domain.*;
import com.ruoyi.platform.mapper.AssetWorkflowDao;
import com.ruoyi.platform.mapper.AutoMlDao;
import com.ruoyi.platform.mapper.RayDao;
import com.ruoyi.platform.service.DatasetTempStorageService;
import com.ruoyi.platform.service.GitService;
import com.ruoyi.platform.service.NewDatasetService;
@@ -56,6 +54,8 @@ public class NewDatasetServiceImpl implements NewDatasetService {
private AssetWorkflowDao assetWorkflowDao;
@Resource
private AutoMlDao autoMlDao;
@Resource
private RayDao rayDao;

@Value("${spring.redis.host}")
private String redisHost;
@@ -421,6 +421,12 @@ public class NewDatasetServiceImpl implements NewDatasetService {
throw new Exception("该数据集被自动机器学习:" + autoMls + "使用,不能删除,请先删除自动机器学习。");
}

List<Ray> rayList = rayDao.queryByDatasetId(JSON.toJSONString(map));
if (rayList != null && !rayList.isEmpty()) {
String rays = String.join(",", rayList.stream().map(Ray::getName).collect(Collectors.toSet()));
throw new Exception("该数据集被超参数自动寻优:" + rays + "使用,不能删除,请先删除超参数自动寻优。");
}

String token = gitService.checkoutToken();
gitService.deleteProject(token, owner, repo);

@@ -446,6 +452,12 @@ public class NewDatasetServiceImpl implements NewDatasetService {
throw new Exception("该数据集版本被自动机器学习:" + autoMls + "使用,不能删除,请先删除自动机器学习。");
}

List<Ray> rayList = rayDao.queryByDatasetId(JSON.toJSONString(map));
if (rayList != null && !rayList.isEmpty()) {
String rays = String.join(",", rayList.stream().map(Ray::getName).collect(Collectors.toSet()));
throw new Exception("该数据集版本被超参数自动寻优:" + rays + "使用,不能删除,请先删除超参数自动寻优。");
}

String token = gitService.checkoutToken();
String rootPath = Paths.get(localPathlocal + "/" + relativePath).getParent().toString();
gitService.deleteBranch(token, owner, repo, version, rootPath);


+ 28
- 0
ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/RayDaoMapper.xml View File

@@ -109,6 +109,34 @@
where id = #{id}
</select>

<select id="queryByDatasetId" resultType="com.ruoyi.platform.domain.Ray">
select *
from ray
where JSON_CONTAINS(dataset, #{datasetId})
and state = 1
</select>

<select id="queryByModelId" resultType="com.ruoyi.platform.domain.Ray">
select *
from ray
where JSON_CONTAINS(model, #{modelId})
and state = 1
</select>

<select id="queryByImageId" resultType="com.ruoyi.platform.domain.Ray">
select *
from ray
where JSON_CONTAINS(image, #{imageId})
and state = 1
</select>

<select id="queryByCodeConfig" resultType="com.ruoyi.platform.domain.Ray">
select *
from ray
where JSON_CONTAINS(code_config, #{codeConfig})
and state = 1
</select>

<sql id="common_condition">
<where>
state = 1


Loading…
Cancel
Save