diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ModelDependency.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ModelDependency.java index 94798fcb..270889d7 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ModelDependency.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/ModelDependency.java @@ -2,6 +2,7 @@ package com.ruoyi.platform.domain; import com.fasterxml.jackson.databind.PropertyNamingStrategy; import com.fasterxml.jackson.databind.annotation.JsonNaming; +import lombok.Data; import java.util.Date; import java.io.Serializable; @@ -12,6 +13,7 @@ import java.io.Serializable; * @author Xidaray * @since 2024-05-29 13:51:23 */ +@Data @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) public class ModelDependency implements Serializable { private static final long serialVersionUID = -86753423714028539L; @@ -23,6 +25,8 @@ public class ModelDependency implements Serializable { * 当前模型id */ private Integer currentModelId; + + private String version; /** * 父模型 */ @@ -71,110 +75,5 @@ public class ModelDependency implements Serializable { */ private Integer state; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Integer getCurrentModelId() { - return currentModelId; - } - - public void setCurrentModelId(Integer currentModelId) { - this.currentModelId = currentModelId; - } - - public String getParentModels() { - return parentModels; - } - - public void setParentModels(String parentModels) { - this.parentModels = parentModels; - } - - public String getRefItem() { - return refItem; - } - - public void setRefItem(String refItem) { - this.refItem = refItem; - } - - public String getTrainTask() { - return trainTask; - } - - public void setTrainTask(String trainTask) { - this.trainTask = trainTask; - } - - public String getTrainDataset() { - return trainDataset; - } - - public void setTrainDataset(String trainDataset) { - this.trainDataset = trainDataset; - } - - public String getTestDataset() { - return testDataset; - } - - public void setTestDataset(String testDataset) { - this.testDataset = testDataset; - } - - public String getProjectDependency() { - return projectDependency; - } - - public void setProjectDependency(String projectDependency) { - this.projectDependency = projectDependency; - } - - public String getCreateBy() { - return createBy; - } - - public void setCreateBy(String createBy) { - this.createBy = createBy; - } - - public Date getCreateTime() { - return createTime; - } - - public void setCreateTime(Date createTime) { - this.createTime = createTime; - } - - public String getUpdateBy() { - return updateBy; - } - - public void setUpdateBy(String updateBy) { - this.updateBy = updateBy; - } - - public Date getUpdateTime() { - return updateTime; - } - - public void setUpdateTime(Date updateTime) { - this.updateTime = updateTime; - } - - public Integer getState() { - return state; - } - - public void setState(Integer state) { - this.state = state; - } - } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/dependencydomain/ProjectDepency.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/dependencydomain/ProjectDepency.java new file mode 100644 index 00000000..0fdce081 --- /dev/null +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/dependencydomain/ProjectDepency.java @@ -0,0 +1,11 @@ +package com.ruoyi.platform.domain.dependencydomain; + +import lombok.Data; + +import java.io.Serializable; +@Data +public class ProjectDepency implements Serializable { + private String url; + private String name; + private String branch; +} diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/dependencydomain/TrainTaskDepency.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/dependencydomain/TrainTaskDepency.java new file mode 100644 index 00000000..536894d9 --- /dev/null +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/domain/dependencydomain/TrainTaskDepency.java @@ -0,0 +1,14 @@ +package com.ruoyi.platform.domain.dependencydomain; + +import lombok.Data; + +import java.io.Serializable; +@Data +public class TrainTaskDepency implements Serializable { + //训练任务名 + private String name; + //实例id + private Integer insId; + //节点Id + private String taskId; +} diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java index 65171638..c0c02dd5 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java @@ -2,14 +2,12 @@ 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; +import com.ruoyi.platform.domain.*; +import com.ruoyi.platform.domain.dependencydomain.ProjectDepency; +import com.ruoyi.platform.domain.dependencydomain.TrainTaskDepency; import com.ruoyi.platform.mapper.ExperimentDao; import com.ruoyi.platform.mapper.ExperimentInsDao; -import com.ruoyi.platform.service.ExperimentInsService; -import com.ruoyi.platform.service.ExperimentService; -import com.ruoyi.platform.service.WorkflowService; +import com.ruoyi.platform.service.*; import com.ruoyi.platform.utils.HttpUtils; import com.ruoyi.platform.utils.JacksonUtil; import com.ruoyi.platform.utils.JsonUtils; @@ -42,8 +40,12 @@ public class ExperimentServiceImpl implements ExperimentService { @Resource private ExperimentInsDao experimentInsDao; - - + @Resource + private ModelsService modelsService; + @Resource + private DatasetService datasetService; + @Resource + private ModelDependencyService modelDependencyService; @Resource @Lazy @@ -224,6 +226,8 @@ public class ExperimentServiceImpl implements ExperimentService { throw new RuntimeException("转换流水线失败"); } Map converMap = JsonUtils.jsonToMap(convertRes); + //得到dependendcy + Map dependendcy = (Map)converMap.get("model_dependency"); // 组装运行接口json Map runReqMap = new HashMap<>(); runReqMap.put("data", converMap.get("data")); @@ -238,6 +242,7 @@ public class ExperimentServiceImpl implements ExperimentService { Map output = (Map) converMap.get("output"); // 调argo运行接口 String runRes = HttpUtils.sendPost(argoUrl + argoWorkflowRun, JsonUtils.mapToJson(runReqMap)); + if (runRes == null || StringUtils.isEmpty(runRes)) { throw new RuntimeException("Failed to run workflow."); } @@ -261,7 +266,11 @@ public class ExperimentServiceImpl implements ExperimentService { String outputString = JsonUtils.mapToJson(output); experimentIns.setNodesResult(outputString.replace("{{workflow.name}}", (String) metadata.get("name"))); //插入ExperimentIns表中 - experimentInsService.insert(experimentIns); + ExperimentIns insert = experimentInsService.insert(experimentIns); + + //插入到模型依赖关系表 + insertModelDependendcy(dependendcy,insert.getId(),experiment.getName()); + }catch (Exception e){ throw new RuntimeException(e); } @@ -270,6 +279,86 @@ public class ExperimentServiceImpl implements ExperimentService { return experiment; } + private void insertModelDependendcy(Map dependendcy,Integer experimentInsId,String expermentName)throws Exception { + Iterator> dependendcyIterator = dependendcy.entrySet().iterator(); + while (dependendcyIterator.hasNext()) { + ModelDependency modelDependency = new ModelDependency(); + + Map.Entry entry = dependendcyIterator.next(); + String key = entry.getKey(); + Map modelDel = (Map) entry.getValue(); + //处理project数据 + Map projectMap = (Map) modelDel.get("project"); + ProjectDepency projectDepency = new ProjectDepency(); + projectDepency.setBranch(projectMap.get("branch")); + String projectUrl = projectMap.get("url"); + projectDepency.setUrl(projectUrl); + projectDepency.setName(projectUrl.substring(projectUrl.lastIndexOf('/') + 1, projectUrl.length() - 4)); + //依赖项目 + modelDependency.setProjectDependency(JsonUtils.objectToJson(projectDepency)); + //处理source数据 + Map sourceMap = (Map) modelDel.get("source"); + List> modelsList = (List>) sourceMap.get("models"); + for(int i=0;i model = modelsList.get(i); + Models models = modelsService.queryById((Integer) model.get("model_id")); + if (models == null){ + throw new Exception("源模型不存在"); + } + model.put("model_name", models.getName()); + } + //父模型 + modelDependency.setParentModels(JsonUtils.objectToJson(modelsList)); + + List> datasetsList = (List>) sourceMap.get("datasets"); + for(int i=0;i datasets = datasetsList.get(i); + Dataset dataset = datasetService.queryById((Integer) datasets.get("dataset_id")); + if (dataset == null){ + throw new Exception("源数据集不存在"); + } + datasets.put("dataset_name", dataset.getName()); + } + //训练数据集 + modelDependency.setTrainDataset(JsonUtils.objectToJson(datasetsList)); + + TrainTaskDepency trainTaskDepency = new TrainTaskDepency(); + trainTaskDepency.setTaskId(key); + trainTaskDepency.setInsId(experimentInsId); + trainTaskDepency.setName(expermentName); + //训练任务 + modelDependency.setTrainTask(JsonUtils.objectToJson(trainTaskDepency)); + + //处理test数据 + List> testDatasetsList = (List>) modelDel.get("test"); + for(int i=0;i datasets = testDatasetsList.get(i); + Dataset dataset = datasetService.queryById((Integer) datasets.get("dataset_id")); + if (dataset == null){ + throw new Exception("源数据集不存在"); + } + datasets.put("dataset_name", dataset.getName()); + } + //测试数据集 + modelDependency.setTestDataset(JsonUtils.objectToJson(testDatasetsList)); + + //检查是否存在target,如果存在说明在流水线用了节点导入,如果没有说明没有导入,等待手动push + List> modelTargetList = (List>) modelDel.get("target"); + if (modelTargetList==null||modelTargetList.size()==0){ + modelDependency.setState(0); + }else { + modelDependency.setState(1); + for(int i=0;i model = modelTargetList.get(i); + modelDependency.setVersion((String) model.get("model_version")); + modelDependency.setCurrentModelId((Integer) model.get("model_id")); + //因为可能有多成果模型,多次插入 + modelDependencyService.insert(modelDependency); + } + } + } + } + @Override public Experiment addAndRunExperiment(Experiment experiment) throws Exception { // 第一步: 调用add方法插入实验记录到数据库 diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelDependencyServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelDependencyServiceImpl.java index 32b80519..87adc4c8 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelDependencyServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelDependencyServiceImpl.java @@ -64,7 +64,6 @@ public class ModelDependencyServiceImpl implements ModelDependencyService { modelDependency.setUpdateBy(loginUser.getUsername()); modelDependency.setUpdateTime(new Date()); modelDependency.setCreateTime(new Date()); - modelDependency.setState(1); this.modelDependencyDao.insert(modelDependency); return modelDependency; }