Browse Source

流水线,实验名字添加判重

pull/44/head
西大锐 1 year ago
parent
commit
c5a9b01abb
11 changed files with 88 additions and 5 deletions
  1. +2
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Experiment.java
  2. +2
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Image.java
  3. +2
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/Workflow.java
  4. +5
    -1
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ExperimentDao.java
  5. +7
    -3
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/ExperimentInstanceStatusTask.java
  6. +1
    -1
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/DatasetService.java
  7. +3
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ExperimentService.java
  8. +3
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/WorkflowService.java
  9. +24
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java
  10. +30
    -0
      ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/WorkflowServiceImpl.java
  11. +9
    -0
      ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/ExperimentDaoMapper.xml

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

@@ -8,6 +8,7 @@ import com.fasterxml.jackson.annotation.JsonRawValue;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import com.ruoyi.common.core.web.domain.BaseEntity;
import com.ruoyi.platform.annotations.CheckDuplicate;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

@@ -28,6 +29,7 @@ public class Experiment implements Serializable {
@ApiModelProperty(value = "主键")
private Integer id;
@ApiModelProperty(value = "名称")
@CheckDuplicate
private String name;

@ApiModelProperty(value = "工作流ID")


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

@@ -2,6 +2,7 @@ package com.ruoyi.platform.domain;

import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import com.ruoyi.platform.annotations.CheckDuplicate;
import io.swagger.annotations.ApiModelProperty;

import java.util.Date;
@@ -25,6 +26,7 @@ public class Image implements Serializable {
* 镜像名称
*/
@ApiModelProperty(value = "名称")
@CheckDuplicate
private String name;

@ApiModelProperty(value = "镜像描述")


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

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonRawValue;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import com.ruoyi.platform.annotations.CheckDuplicate;
import com.ruoyi.platform.handler.BaseMetaObjectHandler;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -33,6 +34,7 @@ public class Workflow extends BaseMetaObjectHandler implements Serializable {
private Long id;

@ApiModelProperty(value = "工作流名称")
@CheckDuplicate
private String name;

@ApiModelProperty(value = "流水线描述")


+ 5
- 1
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ExperimentDao.java View File

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

import com.ruoyi.platform.domain.Dataset;
import com.ruoyi.platform.domain.Experiment;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;
@@ -80,6 +81,9 @@ public interface ExperimentDao {
*/
int deleteById(Integer id);

List<Experiment> queryByExperiment(@Param("experiment")Experiment experiment);
List<Experiment> queryByExperiment(@Param("experiment") Experiment experiment);

Experiment findByName(@Param("name") String name);

}


+ 7
- 3
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/ExperimentInstanceStatusTask.java View File

@@ -30,6 +30,7 @@ public class ExperimentInstanceStatusTask {
private ExperimentInsDao experimentInsDao;

private List<Integer> experimentIds = new ArrayList<>();

@Scheduled(cron = "0/30 * * * * ?") // 每30S执行一次
public void executeExperimentInsStatus() throws IOException {
// 首先查到所有非终止态的实验实例
@@ -47,15 +48,16 @@ public class ExperimentInstanceStatusTask {
}
if (!StringUtils.equals(oldStatus,experimentIns.getStatus())){
experimentIns.setUpdateTime(new Date());
// 线程安全的添加操作
synchronized (experimentIds) {
experimentIds.add(experimentIns.getExperimentId()); // 线程安全的添加操作
experimentIds.add(experimentIns.getExperimentId());
}
updateList.add(experimentIns);


}
experimentInsDao.update(experimentIns);
}

}
if (updateList.size() > 0){
experimentInsDao.insertOrUpdateBatch(updateList);
@@ -85,11 +87,13 @@ public class ExperimentInstanceStatusTask {
updateExperiments.add(experiment);
}
}
if (!updateExperiments.isEmpty()) {
experimentDao.insertOrUpdateBatch(updateExperiments);
for (int index = 0; index < updateExperiments.size(); index++) {
// 线程安全的删除操作
synchronized (experimentIds) {
experimentIds.remove(index); // 线程安全的删除操作
experimentIds.remove(index);
}
}
}


+ 1
- 1
ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/DatasetService.java View File

@@ -79,7 +79,7 @@ DatasetService {
List<String> getDatasetVersions(Integer datasetId) throws Exception;

String insertDatasetAndVersion(DatasetVo datasetVo) throws Exception;
public void checkDeclaredName(Dataset insert) throws Exception;
void checkDeclaredName(Dataset insert) throws Exception;

ResponseEntity<InputStreamResource> downloadAllDatasetFiles(Integer datasetId, String version) throws Exception;



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

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

import com.ruoyi.platform.domain.Experiment;
import com.ruoyi.platform.domain.Workflow;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.http.ResponseEntity;
@@ -75,4 +76,6 @@ public interface ExperimentService {
ResponseEntity<Experiment> showExperimentConfig(Experiment experiment);

List<Experiment> queryByWorkflowId(Long id);

void checkDeclaredName(Experiment insert) throws Exception;
}

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

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

import com.fasterxml.jackson.core.JsonProcessingException;
import com.ruoyi.platform.domain.Dataset;
import com.ruoyi.platform.domain.Workflow;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
@@ -64,6 +65,8 @@ public interface WorkflowService {

Workflow duplicateWorkflow(Long id);

void checkDeclaredName(Workflow insert) throws Exception;

/**
* 按流水线id保存
*


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

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

import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.platform.annotations.CheckDuplicate;
import com.ruoyi.platform.domain.Experiment;
import com.ruoyi.platform.domain.ExperimentIns;
import com.ruoyi.platform.domain.Workflow;
@@ -25,6 +26,7 @@ import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.*;

/**
@@ -317,6 +319,28 @@ public class ExperimentServiceImpl implements ExperimentService {
return experimentDao.queryByExperiment(experiment);
}

public void checkDeclaredName(Experiment insert) throws Exception {
Experiment existingExperiment = experimentDao.findByName(insert.getName());

if (existingExperiment != null) {
// 检查找到的流水线是否与要插入的流水线相同
if (insert.getId() != null && insert.getId().equals(existingExperiment.getId())) {
// 这是相同的流水线,更新操作中没有重复名称问题
return;
}
// 现在我们知道还有另一个具有相同名称的流水线
Field[] fields = Experiment.class.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true); // 使私有字段可访问
if ("name".equals(field.getName()) && field.isAnnotationPresent(CheckDuplicate.class)) {
// 如果字段是“name”并且标记了CheckDuplicate注解
CheckDuplicate annotation = field.getAnnotation(CheckDuplicate.class);
throw new Exception("重复的实验名称: " + insert.getName() + ". " + annotation.message());
}
}
}
}






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

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

import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.platform.annotations.CheckDuplicate;
import com.ruoyi.platform.domain.Dataset;
import com.ruoyi.platform.domain.Experiment;
import com.ruoyi.platform.domain.Workflow;
import com.ruoyi.platform.mapper.WorkflowDao;
@@ -18,6 +20,7 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.lang.reflect.Field;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -191,7 +194,34 @@ public class WorkflowServiceImpl implements WorkflowService {
}
return null;



}

public void checkDeclaredName(Workflow insert) throws Exception {
List<Workflow> existingWorkflowList = workflowDao.queryByName(insert.getName());

Workflow existingWorkflow = existingWorkflowList.stream().findFirst().orElse(null);
if (existingWorkflow != null) {
// 检查找到的流水线是否与要插入的流水线相同
if (insert.getId() != null && insert.getId().equals(existingWorkflow.getId())) {
// 这是相同的流水线,更新操作中没有重复名称问题
return;
}
// 现在我们知道还有另一个具有相同名称的流水线
Field[] fields = Workflow.class.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true); // 使私有字段可访问
if ("name".equals(field.getName()) && field.isAnnotationPresent(CheckDuplicate.class)) {
// 如果字段是“name”并且标记了CheckDuplicate注解
CheckDuplicate annotation = field.getAnnotation(CheckDuplicate.class);
throw new Exception("重复的流水线名称: " + insert.getName() + ". " + annotation.message());
}
}
}
}




}

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

@@ -24,6 +24,14 @@
where id = #{id} and state = 1
</select>

<!--查询单个-->
<select id="findByName" resultMap="ExperimentMap">
select
id,name, workflow_id, global_param, status_list, description, create_by, create_time, update_by, update_time, state
from experiment
where name = #{name} and state = 1 limit 1
</select>

<!--根据experiment查询-->
<select id="queryByExperiment" resultMap="ExperimentMap">
select
@@ -145,6 +153,7 @@
</where>
</select>


<!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
insert into experiment(name,workflow_id, global_param, status_list, description, create_by, create_time, update_by, update_time, state)


Loading…
Cancel
Save