|
|
|
@@ -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<String, Object> converMap = JsonUtils.jsonToMap(convertRes); |
|
|
|
//得到dependendcy |
|
|
|
Map<String ,Object> dependendcy = (Map<String, Object>)converMap.get("model_dependency"); |
|
|
|
// 组装运行接口json |
|
|
|
Map<String, Object> runReqMap = new HashMap<>(); |
|
|
|
runReqMap.put("data", converMap.get("data")); |
|
|
|
@@ -238,6 +242,7 @@ public class ExperimentServiceImpl implements ExperimentService { |
|
|
|
Map<String ,Object> output = (Map<String, Object>) 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<String ,Object> dependendcy,Integer experimentInsId,String expermentName)throws Exception { |
|
|
|
Iterator<Map.Entry<String, Object>> dependendcyIterator = dependendcy.entrySet().iterator(); |
|
|
|
while (dependendcyIterator.hasNext()) { |
|
|
|
ModelDependency modelDependency = new ModelDependency(); |
|
|
|
|
|
|
|
Map.Entry<String, Object> entry = dependendcyIterator.next(); |
|
|
|
String key = entry.getKey(); |
|
|
|
Map<String, Object> modelDel = (Map<String, Object>) entry.getValue(); |
|
|
|
//处理project数据 |
|
|
|
Map<String, String> projectMap = (Map<String, String>) 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<String, Object> sourceMap = (Map<String, Object>) modelDel.get("source"); |
|
|
|
List<Map<String, Object>> modelsList = (List<Map<String, Object>>) sourceMap.get("models"); |
|
|
|
for(int i=0;i<modelsList.size();i++){ |
|
|
|
Map<String, Object> 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<Map<String, Object>> datasetsList = (List<Map<String, Object>>) sourceMap.get("datasets"); |
|
|
|
for(int i=0;i<datasetsList.size();i++){ |
|
|
|
Map<String, Object> 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<Map<String, Object>> testDatasetsList = (List<Map<String, Object>>) modelDel.get("test"); |
|
|
|
for(int i=0;i<testDatasetsList.size();i++){ |
|
|
|
Map<String, Object> 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<Map<String, Object>> modelTargetList = (List<Map<String, Object>>) modelDel.get("target"); |
|
|
|
if (modelTargetList==null||modelTargetList.size()==0){ |
|
|
|
modelDependency.setState(0); |
|
|
|
}else { |
|
|
|
modelDependency.setState(1); |
|
|
|
for(int i=0;i<modelTargetList.size();i++){ |
|
|
|
Map<String, Object> 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方法插入实验记录到数据库 |
|
|
|
|