|
@@ -2,6 +2,7 @@ package com.css.simulation.resource.scheduler.app.service;
|
|
|
|
|
|
import api.common.pojo.constants.DictConstants;
|
|
|
import api.common.pojo.enums.MultiSimulationStatusEnum;
|
|
|
+import api.common.pojo.enums.MultiSimulationTaskStatusEnum;
|
|
|
import api.common.pojo.param.project.MultiCreateYamlRet;
|
|
|
import api.common.pojo.param.project.MultiSimulationProjectKafkaParam;
|
|
|
import api.common.pojo.param.project.MultiSimulationProjectParam;
|
|
@@ -52,6 +53,7 @@ import org.springframework.util.CollectionUtils;
|
|
|
import javax.annotation.Resource;
|
|
|
import java.io.File;
|
|
|
import java.io.InputStream;
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -121,9 +123,6 @@ public class ProjectApplicationService {
|
|
|
private AlgorithmExpandMapper algorithmExpandMapper;
|
|
|
@Resource
|
|
|
private SimulationMapMapper mapMapper;
|
|
|
- @Resource
|
|
|
- private MultiSimulationSceneCarMapper sceneCarMapper;
|
|
|
-
|
|
|
@Resource
|
|
|
private MultiSimulationProjectMapper multiSimulationProjectMapper;
|
|
|
|
|
@@ -617,7 +616,7 @@ public class ProjectApplicationService {
|
|
|
}
|
|
|
log.info("项目" + projectId + "已经启动" + yamlList.size());
|
|
|
for (MultiCreateYamlRet redisKey : yamlList) {
|
|
|
- taskRecordMapper.updateMultiSimulationProjectTaskRecordStatus(MultiSimulationStatusEnum.RUN_STATUS.getProjectStatus(), redisKey.getTaskId(), 0);
|
|
|
+ taskRecordMapper.updateMultiSimulationProjectTaskRecordStatus(MultiSimulationTaskStatusEnum.RUN_STATUS.getProjectStatus(), redisKey.getTaskId(), 0);
|
|
|
}
|
|
|
// 保存每个机器的并行度
|
|
|
projectDomainService.setMultiNodeMapUse(isChoiceGpu, multiNodeMapToUse);
|
|
@@ -1022,7 +1021,8 @@ public class ProjectApplicationService {
|
|
|
projectDomainService.checkAlgorithmIsExpand(projectType, projectId, DictConstants.ALGORITHM_EXPAND_STATUS_NOT_TESTED);
|
|
|
}
|
|
|
|
|
|
- @Async("pool1")
|
|
|
+ // TODO 暂时注释
|
|
|
+// @Async("pool1")
|
|
|
public void runMultiProject(MultiSimulationProjectKafkaParam projectStartMessageEntity) {
|
|
|
MultiProjectWaitQueueEntity multiTaskAndFixData = createMultiTaskAndFixData(projectStartMessageEntity);
|
|
|
checkIfCanRunMulti(multiTaskAndFixData);
|
|
@@ -1031,11 +1031,17 @@ public class ProjectApplicationService {
|
|
|
// @Transactional
|
|
|
public void stopMultiProject(MultiSimulationProjectKafkaParam projectKafkaParam) {
|
|
|
String projectId = projectKafkaParam.getProjectId();
|
|
|
- // 删除等待队列中的项目,,
|
|
|
+ // 删除等待队列中的项目
|
|
|
removeMulti(projectId);
|
|
|
String isChoiceGpu = DictConstants.USE_GPU;
|
|
|
-
|
|
|
MultiSimulationProjectVO projectVO = multiSimulationProjectMapper.selectMultiSimulationProjectById(projectId);
|
|
|
+ if (projectVO.getProjectStatus() == MultiSimulationStatusEnum.TERMINATED_STATUS.getProjectStatus() ||
|
|
|
+ projectVO.getProjectStatus() == MultiSimulationStatusEnum.COMPLETED_STATUS.getProjectStatus()){
|
|
|
+ // 已完成或者已经是终止状态,不再处理
|
|
|
+ log.info("目前该多模式仿真任务已经是结束状态,不再进行停止操作,projectId:{},目前状态:{}", projectId,
|
|
|
+ MultiSimulationStatusEnum.matchStatusEnumByStatus(projectVO.getProjectStatus()).getProjectStatusValue());
|
|
|
+ return;
|
|
|
+ }
|
|
|
Integer status = projectVO.getProjectStatus();
|
|
|
MultiSimulationProjectParam multiSimulationProjectParam = new MultiSimulationProjectParam();
|
|
|
multiSimulationProjectParam.setProjectId(projectId);
|
|
@@ -1048,8 +1054,8 @@ public class ProjectApplicationService {
|
|
|
if (!CollectionUtils.isEmpty(recordPOList)){
|
|
|
for (MultiSimulationProjectTaskRecordPO po: recordPOList) {
|
|
|
Integer recordStatus = po.getStatus();
|
|
|
- if (recordStatus == MultiSimulationStatusEnum.RUN_STATUS.getProjectStatus()){
|
|
|
- taskRecordMapper.updateMultiSimulationProjectTaskRecordStatus(MultiSimulationStatusEnum.TERMINATED_STATUS.getProjectStatus(), po.getId(), 1);
|
|
|
+ if (recordStatus == MultiSimulationTaskStatusEnum.RUN_STATUS.getProjectStatus()){
|
|
|
+ taskRecordMapper.updateMultiSimulationProjectTaskRecordStatus(MultiSimulationTaskStatusEnum.TERMINATED_STATUS.getProjectStatus(), po.getId(), 0);
|
|
|
// 删除pod
|
|
|
String nodeNameKey = "multi-taskId:" + po.getId();
|
|
|
String value = stringRedisTemplate.opsForValue().get(nodeNameKey);
|
|
@@ -1063,14 +1069,19 @@ public class ProjectApplicationService {
|
|
|
projectDomainService.incrementOneParallelism(isChoiceGpu, nodeName);
|
|
|
// 释放证书
|
|
|
projectDomainService.releaseLicense(clusterUserId, DictConstants.MODEL_TYPE_VTD, 1);
|
|
|
+
|
|
|
+ } else if (recordStatus == MultiSimulationTaskStatusEnum.INIT_STATUS.getProjectStatus()) {
|
|
|
+ // 初始状态时
|
|
|
+ taskRecordMapper.updateMultiSimulationProjectTaskRecordStatus(MultiSimulationTaskStatusEnum.TERMINATED_STATUS.getProjectStatus(), po.getId(), 0);
|
|
|
+ }else if (recordStatus == MultiSimulationTaskStatusEnum.NEED_ANALYSIS_STATUS.getProjectStatus() || recordStatus == MultiSimulationTaskStatusEnum.AUTO_TERMINATED_STATUS.getProjectStatus()) {
|
|
|
+ // 不作处理了
|
|
|
}
|
|
|
}
|
|
|
// 设置整个仿真项目
|
|
|
- if (status == MultiSimulationStatusEnum.RUN_STATUS.getProjectStatus()){
|
|
|
+ if (status == MultiSimulationTaskStatusEnum.RUN_STATUS.getProjectStatus()){
|
|
|
multiSimulationProjectParam.setProjectStatus(MultiSimulationStatusEnum.TERMINATED_STATUS.getProjectStatus());
|
|
|
multiSimulationProjectMapper.updateMultiSimulationProjectStatus(multiSimulationProjectParam);
|
|
|
}
|
|
|
-
|
|
|
// 删除kafka topic
|
|
|
KafkaUtil.deleteTopic(kafkaAdminClient, projectId);
|
|
|
//6 删除项目 pod 启动文件
|
|
@@ -1091,9 +1102,10 @@ public class ProjectApplicationService {
|
|
|
//* -------------------------------- 0 读取消息,创建临时目录 --------------------------------
|
|
|
String projectId = projectStartMessageEntity.getProjectId(); // 手动执行项目 id 或 自动执行子项目 id
|
|
|
try {
|
|
|
+ // 首先删掉历史的projectId记录
|
|
|
+ taskRecordMapper.deleteProjectByProjectId(projectId);
|
|
|
|
|
|
List<MultiSimulationSceneKafkaParam> kafkaParamList = projectStartMessageEntity.getKafkaParamList();
|
|
|
-
|
|
|
List<MultiTaskMessageEntity> entityList = new ArrayList<>();
|
|
|
for (MultiSimulationSceneKafkaParam kafkaParam: kafkaParamList) {
|
|
|
String taskId = StringUtil.getRandomUUID();
|
|
@@ -1152,7 +1164,11 @@ public class ProjectApplicationService {
|
|
|
if (vehicle == null){
|
|
|
String carId = sceneCar.getCarId();
|
|
|
//1 根据车辆配置id vehicleConfigId, 获取 模型信息和传感器信息
|
|
|
- com.css.simulation.resource.scheduler.infra.entity.VehicleEntity vehicleEntity = vehicleMapper.selectByVehicleConfigId(carId); // 车辆
|
|
|
+// com.css.simulation.resource.scheduler.infra.entity.VehicleEntity vehicleEntity = vehicleMapper.selectByVehicleConfigId(carId); // 车辆
|
|
|
+ // TODO 上线之前删掉
|
|
|
+ com.css.simulation.resource.scheduler.infra.entity.VehicleEntity vehicleEntity = com.css.simulation.resource.scheduler.infra.entity.VehicleEntity.builder()
|
|
|
+ .modelLabel("AudiA6_10").maxSpeed(new BigDecimal("67")).enginePower(new BigDecimal("150000"))
|
|
|
+ .build();
|
|
|
List<CameraEntity> cameraEntityList = sensorCameraMapper.selectCameraByVehicleConfigId(carId); // 摄像头
|
|
|
List<OgtEntity> ogtEntityList = sensorOgtMapper.selectOgtByVehicleId(carId); // 完美传感器
|
|
|
vehicle = VehicleEntity.builder().model(ModelEntity.builder().model_label(vehicleEntity.getModelLabel()).build())
|
|
@@ -1170,7 +1186,7 @@ public class ProjectApplicationService {
|
|
|
String mapXmlLinuxPath = linuxTempPath + "multiProject/" + projectId + "/" + taskId + "/" + taskId + ".xml";
|
|
|
String mapJsonLinuxPath = linuxTempPath + "multiProject/" + projectId + "/" + taskId + "/" + taskId + ".json";
|
|
|
FileUtil.writeStringToLocalFile(carJson.toJSONString(), mapJsonLinuxPath);
|
|
|
- String linuxComm = multiVtdXmlGenerator + " " + mapXmlLinuxPath + " " + mapXmlLinuxPath;
|
|
|
+ String linuxComm = multiVtdXmlGenerator + " " + mapJsonLinuxPath + " " + mapXmlLinuxPath;
|
|
|
LinuxUtil.execute(linuxComm);
|
|
|
String mapXmlPathOfMinio = projectResultPathOfMinio + minioUploadPath + taskId + ".xml";
|
|
|
MinioUtil.uploadFromFile(minioClient, mapXmlLinuxPath, bucketName, mapXmlPathOfMinio);
|
|
@@ -1181,13 +1197,13 @@ public class ProjectApplicationService {
|
|
|
.default_time(Long.valueOf(projectStartMessageEntity.getDefaultTime()))
|
|
|
.task_path(projectResultPathOfMinio + minioUploadPath).build())
|
|
|
.scenario(ScenarioEntity.builder().scenario_osc(mapXmlPathOfMinio).scenario_odr(mapDriverPathOfMinio).scenario_osgb(mapOsgPathOfMinio).build())
|
|
|
- .vehicleEntity(vehicle)
|
|
|
+ .vehicle(vehicle)
|
|
|
.build();
|
|
|
entityList.add(build);
|
|
|
}
|
|
|
int sort = 0;
|
|
|
for (MultiTaskMessageEntity entity: entityList) {
|
|
|
- taskRecordMapper.addMultiSimulationProjectTaskRecord(entity.getInfo().getTask_id(), entity.getInfo().getScene_id(), entity.getInfo().getProject_id(),
|
|
|
+ int i = taskRecordMapper.addMultiSimulationProjectTaskRecord(entity.getInfo().getTask_id(), entity.getInfo().getScene_id(), entity.getInfo().getProject_id(),
|
|
|
JSONObject.toJSONString(entity), sort);
|
|
|
sort ++;
|
|
|
}
|
|
@@ -1197,7 +1213,9 @@ public class ProjectApplicationService {
|
|
|
.projectId(projectId)
|
|
|
.waitingParallelism(entityList.size())
|
|
|
.kafkaParamList(kafkaParamList)
|
|
|
+ .runState(-1)
|
|
|
.build();
|
|
|
+ log.info("MultiProjectWaitQueueEntity返回结果:{}", JSONObject.toJSONString(build));
|
|
|
return build;
|
|
|
} catch (Exception e) {
|
|
|
log.error("项目报错。", e);
|