|
@@ -68,9 +68,197 @@ public class ManualProjectConsumer {
|
|
|
System.out.println("------- 消费成功:" + projectRecord.value());
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
- public void parseProject(String projectJson) throws IOException, ApiException {
|
|
|
+
|
|
|
+ public void parseProject(ConsumerRecord<String, String> projectRecord) throws IOException, ApiException {
|
|
|
+
|
|
|
+ System.out.println("------- 接收到消息为:" + projectRecord);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ {
|
|
|
+ "projectId": "sadfasdfs",
|
|
|
+ "algorithmId": "sadfasdfs",
|
|
|
+ "vehicleConfigId": "sadfasdfs",
|
|
|
+ "scenePackageId": "sadfasdfs",
|
|
|
+ "maxSimulationTime": 11111,
|
|
|
+ "parallelism": 30
|
|
|
+ }
|
|
|
+ */
|
|
|
+ String projectJson = projectRecord.value();
|
|
|
+ ProjectMessageDTO projectMessageDTO = JsonUtil.jsonToBean(projectJson, ProjectMessageDTO.class);
|
|
|
+ String projectId = projectMessageDTO.getProjectId();
|
|
|
+ projectMapper.updateProjectState(projectId, "20");
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ String packageId = projectMessageDTO.getScenePackageId();
|
|
|
+ List<IndexTemplatePO> leafIndexList = indexTemplateMapper.selectLeafIndexByPackageId(packageId);
|
|
|
+ List<String> naturalIdList = new ArrayList<>();
|
|
|
+ List<String> standardIdList = new ArrayList<>();
|
|
|
+ List<String> accidentIdList = new ArrayList<>();
|
|
|
+ for (IndexTemplatePO indexTemplatePO : leafIndexList) {
|
|
|
+ String naturalIds = indexTemplatePO.getSceneNaturalIds();
|
|
|
+ String standardIds = indexTemplatePO.getSceneStatueIds();
|
|
|
+ String accidentIds = indexTemplatePO.getSceneTrafficIds();
|
|
|
+ if (StringUtil.isNotEmpty(naturalIds)) {
|
|
|
+ String[] naturalIdArray = naturalIds.split(",");
|
|
|
+ naturalIdList.addAll(Arrays.asList(naturalIdArray));
|
|
|
+ }
|
|
|
+ if (StringUtil.isNotEmpty(standardIds)) {
|
|
|
+ String[] standardArray = standardIds.split(",");
|
|
|
+ standardIdList.addAll(Arrays.asList(standardArray));
|
|
|
+ }
|
|
|
+ if (StringUtil.isNotEmpty(accidentIds)) {
|
|
|
+ String[] accidentIdArray = accidentIds.split(",");
|
|
|
+ accidentIdList.addAll(Arrays.asList(accidentIdArray));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<ScenePO> sceneList = new ArrayList<>();
|
|
|
+ sceneList.addAll(sceneMapper.selectNaturalByIdList(naturalIdList));
|
|
|
+ sceneList.addAll(sceneMapper.selectStandardByIdList(standardIdList));
|
|
|
+ sceneList.addAll(sceneMapper.selectAccidentByIdList(accidentIdList));
|
|
|
+ projectMapper.updateTaskNumber(projectId, sceneList.size());
|
|
|
+
|
|
|
+
|
|
|
+ String vehicleConfigId = projectMessageDTO.getVehicleConfigId();
|
|
|
+ VehiclePO vehiclePO = vehicleMapper.selectByVehicleConfigId(vehicleConfigId);
|
|
|
+ List<CameraPO> cameraPOList = sensorCameraMapper.selectCameraByVehicleConfigId(vehicleConfigId);
|
|
|
+ List<OgtPO> ogtPOList = sensorOgtMapper.selectOgtByVehicleId(vehicleConfigId);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ int maxSimulationTime = projectMessageDTO.getMaxSimulationTime();
|
|
|
+
|
|
|
+ for (ScenePO scenePO : sceneList) {
|
|
|
+ String taskId = StringUtil.getRandomUUID();
|
|
|
+ String resultPath = linuxTempPath + projectId + "/" + taskId;
|
|
|
+
|
|
|
+ TaskPO taskPO = TaskPO.builder()
|
|
|
+ .id(taskId)
|
|
|
+ .pId(projectId)
|
|
|
+ .sceneId(scenePO.getId())
|
|
|
+ .sceneName(scenePO.getName())
|
|
|
+ .sceneType(scenePO.getType())
|
|
|
+ .runState(DictConstants.TASK_PENDING)
|
|
|
+ .runResult(resultPath)
|
|
|
+ .build();
|
|
|
+ taskPO.setCreateTime(TimeUtil.getNowForMysql());
|
|
|
+ taskPO.setCreateUserId(USER_ID);
|
|
|
+ taskPO.setModifyTime(TimeUtil.getNowForMysql());
|
|
|
+ taskPO.setModifyUserId(USER_ID);
|
|
|
+ taskPO.setModifyTime(TimeUtil.getNowForMysql());
|
|
|
+ taskPO.setIsDeleted("0");
|
|
|
+ taskMapper.insert(taskPO);
|
|
|
+
|
|
|
+ commonService.set(new RedisParameter(manualProjectTopic + ":" + projectId + ":" + taskId, TimeUtil.getNow() + "", 0));
|
|
|
+
|
|
|
+ TaskTO taskTO = TaskTO.builder()
|
|
|
+ .info(InfoTO.builder()
|
|
|
+ .project_id(projectId)
|
|
|
+ .task_id(taskId)
|
|
|
+ .task_path(resultPath)
|
|
|
+ .default_time(maxSimulationTime)
|
|
|
+ .build())
|
|
|
+ .scenario(ScenarioTO.builder()
|
|
|
+ .scenario_osc(scenePO.getScenarioOsc())
|
|
|
+ .scenario_odr(scenePO.getScenarioOdr())
|
|
|
+ .scenario_osgb(scenePO.getScenarioOsgb())
|
|
|
+ .build())
|
|
|
+ .vehicle(VehicleTO.builder()
|
|
|
+ .model(ModelTO.builder()
|
|
|
+ .model_label(vehiclePO.getModelLabel())
|
|
|
+ .build())
|
|
|
+ .dynamics(DynamicsTO.builder()
|
|
|
+ .dynamics_maxspeed(vehiclePO.getMaxSpeed())
|
|
|
+ .dynamics_enginepower(vehiclePO.getEnginePower())
|
|
|
+ .dynamics_maxdecel(vehiclePO.getMaxDeceleration())
|
|
|
+ .dynamics_maxsteering(vehiclePO.getMaxSteeringAngle())
|
|
|
+ .dynamics_mass(vehiclePO.getMass())
|
|
|
+ .dynamics_frontsurfaceeffective(vehiclePO.getFrontSurfaceEffective())
|
|
|
+ .dynamics_airdragcoefficient(vehiclePO.getAirDragCoefficient())
|
|
|
+ .dynamics_rollingresistance(vehiclePO.getRollingResistanceCoefficient())
|
|
|
+ .dynamics_wheeldiameter(vehiclePO.getWheelDiameter())
|
|
|
+ .dynamics_wheeldrive(vehiclePO.getWheelDrive())
|
|
|
+ .dynamics_overallefficiency(vehiclePO.getOverallEfficiency())
|
|
|
+ .dynamics_distfront(vehiclePO.getFrontDistance())
|
|
|
+ .dynamics_distrear(vehiclePO.getRearDistance())
|
|
|
+ .dynamics_distleft(vehiclePO.getLeftDistance())
|
|
|
+ .dynamics_distright(vehiclePO.getRightDistance())
|
|
|
+ .dynamics_distheight(vehiclePO.getHeightDistance())
|
|
|
+ .dynamics_wheelbase(vehiclePO.getWheelbase())
|
|
|
+ .build())
|
|
|
+ .sensors(SensorsTO.builder()
|
|
|
+ .camera(cameraPOList)
|
|
|
+ .OGT(ogtPOList)
|
|
|
+ .build())
|
|
|
+ .build())
|
|
|
+ .build();
|
|
|
+
|
|
|
+ String taskJson = JsonUtil.beanToJson(taskTO);
|
|
|
+
|
|
|
+ commonService.send(new KafkaParameter(projectId, taskJson));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ String algorithmId = projectMessageDTO.getAlgorithmId();
|
|
|
+
|
|
|
+ AlgorithmPO algorithmPO = algorithmMapper.selectById(algorithmId);
|
|
|
+ String minioPath = algorithmPO.getMinioPath();
|
|
|
+ String dockerImage;
|
|
|
+ if ("0".equals(algorithmPO.getDockerImport())) {
|
|
|
+ dockerImage = "algorithm_" + algorithmId + ":latest";
|
|
|
+ String algorithmTarLinuxTempPath = linuxTempPath + minioPath;
|
|
|
+
|
|
|
+ Response response = commonService.download(new MinioParameter(minioPath));
|
|
|
+ InputStream inputStream = response.body().asInputStream();
|
|
|
+ FileUtil.writeInputStreamToLocalFile(inputStream, algorithmTarLinuxTempPath);
|
|
|
+
|
|
|
+ LinuxUtil.execute("docker import " + algorithmTarLinuxTempPath + " " + dockerImage);
|
|
|
+ } else if ("1".equals(algorithmPO.getDockerImport()) && StringUtil.isNotEmpty(algorithmPO.getDockerImage())) {
|
|
|
+ dockerImage = algorithmPO.getDockerImage();
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("算法 " + algorithmId + "的 mysql 数据有误!");
|
|
|
+ }
|
|
|
+
|
|
|
+ int completions = sceneList.size();
|
|
|
+ int parallelism = projectMessageDTO.getParallelism();
|
|
|
+ BatchV1Api batchV1Api = new BatchV1Api(apiClient);
|
|
|
+ V1Job yaml = (V1Job) Yaml.load(ResourceUtils.getFile("classpath:kubernetes/template/job-template.yaml"));
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ V1ObjectMeta metadata = yaml.getMetadata();
|
|
|
+ metadata.setName("project_" + projectId);
|
|
|
+ yaml.setMetadata(metadata);
|
|
|
+
|
|
|
+ V1JobSpec job = yaml.getSpec();
|
|
|
+ job.setCompletions(completions);
|
|
|
+ job.setParallelism(parallelism);
|
|
|
+
|
|
|
+ V1PodSpec v1PodSpec = job.getTemplate().getSpec();
|
|
|
+
|
|
|
+ List<V1Container> containers = v1PodSpec.getContainers();
|
|
|
+ for (V1Container container : containers) {
|
|
|
+ String name = container.getName();
|
|
|
+ if ("vtd".equals(name)) {
|
|
|
+ container.setName("vtd_" + projectId);
|
|
|
+ }
|
|
|
+ if ("algorithm".equals(name)) {
|
|
|
+ container.setName("algorithm_" + projectId);
|
|
|
+ container.setImage(dockerImage);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ yaml.setSpec(job);
|
|
|
+ batchV1Api.createNamespacedJob("simulation-task", yaml, null, null, null);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ public void testParseProject(String projectJson) throws IOException, ApiException {
|
|
|
|
|
|
System.out.println("------- 接收到消息为:" + projectJson);
|
|
|
|
|
@@ -257,4 +445,5 @@ public class ManualProjectConsumer {
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
}
|