root преди 2 години
родител
ревизия
ae61e4933e

+ 237 - 124
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/consumer/ProjectConsumer.java

@@ -112,6 +112,7 @@ public class ProjectConsumer {
         log.info("createTaskAndFixData() 接收到项目开始消息为:" + initialProjectJson);
         ProjectMessageDTO projectMessageDTO = JsonUtil.jsonToBean(initialProjectJson, ProjectMessageDTO.class);
         String projectId = projectMessageDTO.getProjectId();                // 手动执行项目 id 或 自动执行子项目 id
+        String modelType = projectMessageDTO.getModelType();                // 手动执行项目 id 或 自动执行子项目 id
         String packageId = projectMessageDTO.getScenePackageId();           // 场景测试包 id
         String vehicleConfigId = projectMessageDTO.getVehicleConfigId();    // 模型配置 id
         String algorithmId = projectMessageDTO.getAlgorithmId();            // 模型配置 id
@@ -139,136 +140,248 @@ public class ProjectConsumer {
         //去重,之后发送消息的时候会补全指标,如果不去重的话会出现多个场景重复关联多个指标
         Set<ScenePO> scenePOSet = new HashSet<>(scenePOList);
         log.info("createTaskAndFixData() 项目 " + projectId + " 场景包括:" + scenePOSet);
-        // -------------------------------- 2 查询模型 --------------------------------
-        log.info("createTaskAndFixData() 项目 " + projectId + " 开始查询模型。");
-        //2-1 根据车辆配置id vehicleConfigId, 获取 模型信息和传感器信息
-        VehiclePO vehiclePO = vehicleMapper.selectByVehicleConfigId(vehicleConfigId);   // 车辆
-        List<CameraPO> cameraPOList = sensorCameraMapper.selectCameraByVehicleConfigId(vehicleConfigId);    // 摄像头
-        List<OgtPO> ogtPOList = sensorOgtMapper.selectOgtByVehicleId(vehicleConfigId); // 完美传感器
-        // -------------------------------- 3 算法导入 --------------------------------
+        // -------------------------------- 2 算法导入 --------------------------------
         log.info("createTaskAndFixData() 项目 " + projectId + " 开始算法导入。");
         String algorithmDockerImage = projectService.handleAlgorithm(projectId, algorithmId);
         log.info("createTaskAndFixData() 项目 " + projectId + " 算法已导入:" + algorithmDockerImage);
-        // -------------------------------- 4 保存任务消息 --------------------------------
-        log.info("createTaskAndFixData() 项目 " + projectId + " 开始保存任务消息。");
-        List<TaskPO> taskList = new ArrayList<>();
-        for (ScenePO scenePO : scenePOSet) {
-            String sceneId = scenePO.getId();
-            //3-1 可能会存在多个指标下有同样的场景,所以会查出多个指标,多个指标的场景需要发送多次
-            List<String> lastTargetIdList = null;
-            if (DictConstants.PROJECT_TYPE_MANUAL.equals(projectType)) {
-                lastTargetIdList = indexMapper.selectLeafIndexIdByManualProjectIdAndSceneId(projectId, "%" + sceneId + "%");
-            } else if (DictConstants.PROJECT_TYPE_AUTO_SUB.equals(projectType)) {
-                lastTargetIdList = indexMapper.selectLeafIndexIdByAutoSubProjectIdAndSceneId(projectId, "%" + sceneId + "%");
-            }
-            if (CollectionUtil.isEmpty(lastTargetIdList)) {
-                throw new RuntimeException("createTaskAndFixData() 项目 " + projectId + " 使用的场景测试包 " + sceneId + " 不存在指标。");
+        // -------------------------------- 3 查询模型 --------------------------------
+        if ("1".equals(modelType)) {
+            log.info("createTaskAndFixData() 项目 " + projectId + " 开始查询模型。");
+            //2-1 根据车辆配置id vehicleConfigId, 获取 模型信息和传感器信息
+            VehiclePO vehiclePO = vehicleMapper.selectByVehicleConfigId(vehicleConfigId);   // 车辆
+            List<CameraPO> cameraPOList = sensorCameraMapper.selectCameraByVehicleConfigId(vehicleConfigId);    // 摄像头
+            List<OgtPO> ogtPOList = sensorOgtMapper.selectOgtByVehicleId(vehicleConfigId); // 完美传感器
+            // -------------------------------- 4 保存任务消息 --------------------------------
+            log.info("createTaskAndFixData() 项目 " + projectId + " 开始保存任务消息。");
+            List<TaskPO> taskList = new ArrayList<>();
+            for (ScenePO scenePO : scenePOSet) {
+                String sceneId = scenePO.getId();
+                //3-1 可能会存在多个指标下有同样的场景,所以会查出多个指标,多个指标的场景需要发送多次
+                List<String> lastTargetIdList = null;
+                if (DictConstants.PROJECT_TYPE_MANUAL.equals(projectType)) {
+                    lastTargetIdList = indexMapper.selectLeafIndexIdByManualProjectIdAndSceneId(projectId, "%" + sceneId + "%");
+                } else if (DictConstants.PROJECT_TYPE_AUTO_SUB.equals(projectType)) {
+                    lastTargetIdList = indexMapper.selectLeafIndexIdByAutoSubProjectIdAndSceneId(projectId, "%" + sceneId + "%");
+                }
+                if (CollectionUtil.isEmpty(lastTargetIdList)) {
+                    throw new RuntimeException("createTaskAndFixData() 项目 " + projectId + " 使用的场景测试包 " + sceneId + " 不存在指标。");
+                }
+                for (String lastTargetId : lastTargetIdList) {
+                    String taskId = StringUtil.getRandomUUID();
+                    // 保存任务信息
+                    TaskPO taskPO = TaskPO.builder() // run_start_time 和 run_end_time 不填
+                            .id(taskId)
+                            .pId(projectId)
+                            .sceneId(sceneId)
+                            .lastTargetId(lastTargetId)
+                            .sceneName(scenePO.getName())
+                            .sceneType(scenePO.getType())
+                            .runState(DictConstants.TASK_PENDING)
+                            .runResultFilePath(projectResultPathOfMinio + projectId + "/" + taskId)
+                            .build();
+                    taskPO.setCreateTime(TimeUtil.getNowForMysql());
+                    taskPO.setCreateUserId(userId);
+                    taskPO.setModifyTime(TimeUtil.getNowForMysql());
+                    taskPO.setModifyUserId(userId);
+                    taskPO.setModifyTime(TimeUtil.getNowForMysql());
+                    taskPO.setIsDeleted("0");
+                    taskList.add(taskPO);
+                    // 将 xosc、xodr、osgb 全部上传到仿真结果路径
+                    String scenarioOsc = scenePO.getScenarioOsc();
+                    String[] splitXosc = scenarioOsc.split("/");
+                    String xoscName = splitXosc[splitXosc.length - 1];
+                    String[] xoscNameSplit = xoscName.split("\\.");
+                    String xoscSuffix = xoscNameSplit[xoscNameSplit.length - 1];
+                    String xoscPathOfLinux = linuxTempPath + "video/" + projectId + "/" + taskId + "/" + xoscName;
+                    String xoscPathOfMinio = projectResultPathOfMinio + projectId + "/" + taskId + "/" + taskId + "." + xoscSuffix;
+                    MinioUtil.downloadToFile(minioClient, bucketName, scenarioOsc, xoscPathOfLinux);
+                    MinioUtil.uploadFromFile(minioClient, xoscPathOfLinux, bucketName, xoscPathOfMinio);
+                    log.info("cacheManualProject() 已经将 xosc 上传到 minio 的结果文件目录:" + xoscPathOfMinio);
+
+                    String scenarioOdr = scenePO.getScenarioOdr();
+                    String[] splitXodr = scenarioOdr.split("/");
+                    String xodrName = splitXodr[splitXodr.length - 1];
+                    String[] xodrNameSplit = xodrName.split("\\.");
+                    String xodrSuffix = xodrNameSplit[xodrNameSplit.length - 1];
+                    String xodrPathOfLinux = linuxTempPath + "video/" + projectId + "/" + taskId + "/" + xodrName;
+                    String xodrPathOfMinio = projectResultPathOfMinio + projectId + "/" + taskId + "/" + taskId + "." + xodrSuffix;
+                    MinioUtil.downloadToFile(minioClient, bucketName, scenarioOdr, xodrPathOfLinux);
+                    MinioUtil.uploadFromFile(minioClient, xodrPathOfLinux, bucketName, xodrPathOfMinio);
+                    log.info("cacheManualProject() 已经将 xodr 上传到 minio 的结果文件目录:" + xodrPathOfMinio);
+
+                    String scenarioOsgb = scenePO.getScenarioOsgb();
+                    String[] splitOsgb = scenarioOsgb.split("/");
+                    String osgbName = splitOsgb[splitOsgb.length - 1];
+                    String[] osgbNameSplit = osgbName.split("\\.");
+                    String osgbSuffix = osgbNameSplit[osgbNameSplit.length - 1];
+                    String osgbPathOfLinux = linuxTempPath + "video/" + projectId + "/" + taskId + "/" + osgbName;
+                    String osgbPathOfMinio = projectResultPathOfMinio + projectId + "/" + taskId + "/" + taskId + "." + osgbSuffix;
+                    MinioUtil.downloadToFile(minioClient, bucketName, scenarioOsgb, osgbPathOfLinux);
+                    MinioUtil.uploadFromFile(minioClient, osgbPathOfLinux, bucketName, osgbPathOfMinio);
+                    log.info("cacheManualProject() 已经将 osgb 上传到 minio 的结果文件目录:" + osgbPathOfMinio);
+
+                    // 组装 task 消息
+                    TaskTO taskTO = TaskTO.builder()
+                            .info(InfoTO.builder()
+                                    .project_id(taskPO.getPId())
+                                    .task_id(taskPO.getId())
+                                    .task_path(taskPO.getRunResultFilePath())
+                                    .default_time(videoTime)
+                                    .build())
+                            .scenario(ScenarioTO.builder()
+                                    .scenario_osc(xoscPathOfMinio)
+                                    .scenario_odr(xodrPathOfMinio)
+                                    .scenario_osgb(osgbPathOfMinio)
+                                    .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()   // 根据 vehicleId 查询绑定的传感器列表
+                                            .camera(cameraPOList)
+                                            .OGT(ogtPOList)
+                                            .build())
+                                    .build())
+                            .build();
+
+                    log.info("createTaskAndFixData() 项目 " + projectId + " 将对象转成 json 保存到临时目录等待资源分配后执行:" + taskTO);
+                    FileUtil.writeStringToLocalFile(JsonUtil.beanToJson(taskTO), projectPath + taskId + ".json");
+                    log.info("createTaskAndFixData() 项目 " + projectId + " 将对象转成 json 保存到临时目录成功。");
+                }
             }
-            for (String lastTargetId : lastTargetIdList) {
-                String taskId = StringUtil.getRandomUUID();
-                // 保存任务信息
-                TaskPO taskPO = TaskPO.builder() // run_start_time 和 run_end_time 不填
-                        .id(taskId)
-                        .pId(projectId)
-                        .sceneId(sceneId)
-                        .lastTargetId(lastTargetId)
-                        .sceneName(scenePO.getName())
-                        .sceneType(scenePO.getType())
-                        .runState(DictConstants.TASK_PENDING)
-                        .runResultFilePath(projectResultPathOfMinio + projectId + "/" + taskId)
-                        .build();
-                taskPO.setCreateTime(TimeUtil.getNowForMysql());
-                taskPO.setCreateUserId(userId);
-                taskPO.setModifyTime(TimeUtil.getNowForMysql());
-                taskPO.setModifyUserId(userId);
-                taskPO.setModifyTime(TimeUtil.getNowForMysql());
-                taskPO.setIsDeleted("0");
-                taskList.add(taskPO);
-                // 将 xosc、xodr、osgb 全部上传到仿真结果路径
-                String scenarioOsc = scenePO.getScenarioOsc();
-                String[] splitXosc = scenarioOsc.split("/");
-                String xoscName = splitXosc[splitXosc.length - 1];
-                String[] xoscNameSplit = xoscName.split("\\.");
-                String xoscSuffix = xoscNameSplit[xoscNameSplit.length - 1];
-                String xoscPathOfLinux = linuxTempPath + "video/" + projectId + "/" + taskId + "/" + xoscName;
-                String xoscPathOfMinio = projectResultPathOfMinio + projectId + "/" + taskId + "/" + taskId + "." + xoscSuffix;
-                MinioUtil.downloadToFile(minioClient, bucketName, scenarioOsc, xoscPathOfLinux);
-                MinioUtil.uploadFromFile(minioClient, xoscPathOfLinux, bucketName, xoscPathOfMinio);
-                log.info("cacheManualProject() 已经将 xosc 上传到 minio 的结果文件目录:" + xoscPathOfMinio);
-
-                String scenarioOdr = scenePO.getScenarioOdr();
-                String[] splitXodr = scenarioOdr.split("/");
-                String xodrName = splitXodr[splitXodr.length - 1];
-                String[] xodrNameSplit = xodrName.split("\\.");
-                String xodrSuffix = xodrNameSplit[xodrNameSplit.length - 1];
-                String xodrPathOfLinux = linuxTempPath + "video/" + projectId + "/" + taskId + "/" + xodrName;
-                String xodrPathOfMinio = projectResultPathOfMinio + projectId + "/" + taskId + "/" + taskId + "." + xodrSuffix;
-                MinioUtil.downloadToFile(minioClient, bucketName, scenarioOdr, xodrPathOfLinux);
-                MinioUtil.uploadFromFile(minioClient, xodrPathOfLinux, bucketName, xodrPathOfMinio);
-                log.info("cacheManualProject() 已经将 xodr 上传到 minio 的结果文件目录:" + xodrPathOfMinio);
-
-                String scenarioOsgb = scenePO.getScenarioOsgb();
-                String[] splitOsgb = scenarioOsgb.split("/");
-                String osgbName = splitOsgb[splitOsgb.length - 1];
-                String[] osgbNameSplit = osgbName.split("\\.");
-                String osgbSuffix = osgbNameSplit[osgbNameSplit.length - 1];
-                String osgbPathOfLinux = linuxTempPath + "video/" + projectId + "/" + taskId + "/" + osgbName;
-                String osgbPathOfMinio = projectResultPathOfMinio + projectId + "/" + taskId + "/" + taskId + "." + osgbSuffix;
-                MinioUtil.downloadToFile(minioClient, bucketName, scenarioOsgb, osgbPathOfLinux);
-                MinioUtil.uploadFromFile(minioClient, osgbPathOfLinux, bucketName, osgbPathOfMinio);
-                log.info("cacheManualProject() 已经将 osgb 上传到 minio 的结果文件目录:" + osgbPathOfMinio);
-
-                // 组装 task 消息
-                TaskTO taskTO = TaskTO.builder()
-                        .info(InfoTO.builder()
-                                .project_id(taskPO.getPId())
-                                .task_id(taskPO.getId())
-                                .task_path(taskPO.getRunResultFilePath())
-                                .default_time(videoTime)
-                                .build())
-                        .scenario(ScenarioTO.builder()
-                                .scenario_osc(xoscPathOfMinio)
-                                .scenario_odr(xodrPathOfMinio)
-                                .scenario_osgb(osgbPathOfMinio)
-                                .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()   // 根据 vehicleId 查询绑定的传感器列表
-                                        .camera(cameraPOList)
-                                        .OGT(ogtPOList)
-                                        .build())
-                                .build())
-                        .build();
-
-                log.info("createTaskAndFixData() 项目 " + projectId + " 将对象转成 json 保存到临时目录等待资源分配后执行:" + taskTO);
-                FileUtil.writeStringToLocalFile(JsonUtil.beanToJson(taskTO), projectPath + taskId + ".json");
-                log.info("createTaskAndFixData() 项目 " + projectId + " 将对象转成 json 保存到临时目录成功。");
+            log.info("createTaskAndFixData() 项目 " + projectId + " 创建任务:" + taskList);
+            taskManager.batchInsertTask(taskList);
+            log.info("createTaskAndFixData() 项目 " + projectId + " 任务保存成功。");
+        } else if ("2".equals(modelType)) {
+            log.info("createTaskAndFixData() 项目 " + projectId + " 开始查询模型。");
+
+            VehiclePO vehiclePO = vehicleMapper.selectByVehicleConfigId(vehicleConfigId);   // 车辆
+            List<CameraPO> cameraPOList = sensorCameraMapper.selectCameraByVehicleConfigId(vehicleConfigId);    // 摄像头
+            List<OgtPO> ogtPOList = sensorOgtMapper.selectOgtByVehicleId(vehicleConfigId); // 完美传感器
+            // -------------------------------- 4 保存任务消息 --------------------------------
+            log.info("createTaskAndFixData() 项目 " + projectId + " 开始保存任务消息。");
+            List<TaskPO> taskList = new ArrayList<>();
+            for (ScenePO scenePO : scenePOSet) {
+                String sceneId = scenePO.getId();
+                //3-1 可能会存在多个指标下有同样的场景,所以会查出多个指标,多个指标的场景需要发送多次
+                List<String> lastTargetIdList = null;
+                if (DictConstants.PROJECT_TYPE_MANUAL.equals(projectType)) {
+                    lastTargetIdList = indexMapper.selectLeafIndexIdByManualProjectIdAndSceneId(projectId, "%" + sceneId + "%");
+                } else if (DictConstants.PROJECT_TYPE_AUTO_SUB.equals(projectType)) {
+                    lastTargetIdList = indexMapper.selectLeafIndexIdByAutoSubProjectIdAndSceneId(projectId, "%" + sceneId + "%");
+                }
+                if (CollectionUtil.isEmpty(lastTargetIdList)) {
+                    throw new RuntimeException("createTaskAndFixData() 项目 " + projectId + " 使用的场景测试包 " + sceneId + " 不存在指标。");
+                }
+                for (String lastTargetId : lastTargetIdList) {
+                    String taskId = StringUtil.getRandomUUID();
+                    // 保存任务信息
+                    TaskPO taskPO = TaskPO.builder() // run_start_time 和 run_end_time 不填
+                            .id(taskId)
+                            .pId(projectId)
+                            .sceneId(sceneId)
+                            .lastTargetId(lastTargetId)
+                            .sceneName(scenePO.getName())
+                            .sceneType(scenePO.getType())
+                            .runState(DictConstants.TASK_PENDING)
+                            .runResultFilePath(projectResultPathOfMinio + projectId + "/" + taskId)
+                            .build();
+                    taskPO.setCreateTime(TimeUtil.getNowForMysql());
+                    taskPO.setCreateUserId(userId);
+                    taskPO.setModifyTime(TimeUtil.getNowForMysql());
+                    taskPO.setModifyUserId(userId);
+                    taskPO.setModifyTime(TimeUtil.getNowForMysql());
+                    taskPO.setIsDeleted("0");
+                    taskList.add(taskPO);
+                    // 将 xosc、xodr、osgb 全部上传到仿真结果路径
+                    String scenarioOsc = scenePO.getScenarioOsc();
+                    String[] splitXosc = scenarioOsc.split("/");
+                    String xoscName = splitXosc[splitXosc.length - 1];
+                    String[] xoscNameSplit = xoscName.split("\\.");
+                    String xoscSuffix = xoscNameSplit[xoscNameSplit.length - 1];
+                    String xoscPathOfLinux = linuxTempPath + "video/" + projectId + "/" + taskId + "/" + xoscName;
+                    String xoscPathOfMinio = projectResultPathOfMinio + projectId + "/" + taskId + "/" + taskId + "." + xoscSuffix;
+                    MinioUtil.downloadToFile(minioClient, bucketName, scenarioOsc, xoscPathOfLinux);
+                    MinioUtil.uploadFromFile(minioClient, xoscPathOfLinux, bucketName, xoscPathOfMinio);
+                    log.info("cacheManualProject() 已经将 xosc 上传到 minio 的结果文件目录:" + xoscPathOfMinio);
+
+                    String scenarioOdr = scenePO.getScenarioOdr();
+                    String[] splitXodr = scenarioOdr.split("/");
+                    String xodrName = splitXodr[splitXodr.length - 1];
+                    String[] xodrNameSplit = xodrName.split("\\.");
+                    String xodrSuffix = xodrNameSplit[xodrNameSplit.length - 1];
+                    String xodrPathOfLinux = linuxTempPath + "video/" + projectId + "/" + taskId + "/" + xodrName;
+                    String xodrPathOfMinio = projectResultPathOfMinio + projectId + "/" + taskId + "/" + taskId + "." + xodrSuffix;
+                    MinioUtil.downloadToFile(minioClient, bucketName, scenarioOdr, xodrPathOfLinux);
+                    MinioUtil.uploadFromFile(minioClient, xodrPathOfLinux, bucketName, xodrPathOfMinio);
+                    log.info("cacheManualProject() 已经将 xodr 上传到 minio 的结果文件目录:" + xodrPathOfMinio);
+
+                    String scenarioOsgb = scenePO.getScenarioOsgb();
+                    String[] splitOsgb = scenarioOsgb.split("/");
+                    String osgbName = splitOsgb[splitOsgb.length - 1];
+                    String[] osgbNameSplit = osgbName.split("\\.");
+                    String osgbSuffix = osgbNameSplit[osgbNameSplit.length - 1];
+                    String osgbPathOfLinux = linuxTempPath + "video/" + projectId + "/" + taskId + "/" + osgbName;
+                    String osgbPathOfMinio = projectResultPathOfMinio + projectId + "/" + taskId + "/" + taskId + "." + osgbSuffix;
+                    MinioUtil.downloadToFile(minioClient, bucketName, scenarioOsgb, osgbPathOfLinux);
+                    MinioUtil.uploadFromFile(minioClient, osgbPathOfLinux, bucketName, osgbPathOfMinio);
+                    log.info("cacheManualProject() 已经将 osgb 上传到 minio 的结果文件目录:" + osgbPathOfMinio);
+
+                    // 组装 task 消息
+                    // carsim 不需要查询模型参数
+                    TaskTO taskTO = TaskTO.builder()
+                            .info(InfoTO.builder()
+                                    .project_id(taskPO.getPId())
+                                    .task_id(taskPO.getId())
+                                    .task_path(taskPO.getRunResultFilePath())
+                                    .default_time(videoTime)
+                                    .build())
+                            .scenario(ScenarioTO.builder()
+                                    .scenario_osc(xoscPathOfMinio)
+                                    .scenario_odr(xodrPathOfMinio)
+                                    .scenario_osgb(osgbPathOfMinio)
+                                    .build())
+                            .vehicle(VehicleTO.builder()
+                                    .model(ModelTO.builder()
+                                            .model_label(vehiclePO.getModelLabel())
+                                            .build())
+                                    .dynamics(null)
+                                    .sensors(SensorsTO.builder()   // 根据 vehicleId 查询绑定的传感器列表
+                                            .camera(cameraPOList)
+                                            .OGT(ogtPOList)
+                                            .build())
+                                    .build())
+                            .build();
+
+                    log.info("createTaskAndFixData() 项目 " + projectId + " 将对象转成 json 保存到临时目录等待资源分配后执行:" + taskTO);
+                    FileUtil.writeStringToLocalFile(JsonUtil.beanToJson(taskTO), projectPath + taskId + ".json");
+                    log.info("createTaskAndFixData() 项目 " + projectId + " 将对象转成 json 保存到临时目录成功。");
+                }
             }
+            log.info("createTaskAndFixData() 项目 " + projectId + " 创建任务:" + taskList);
+            taskManager.batchInsertTask(taskList);
+            log.info("createTaskAndFixData() 项目 " + projectId + " 任务保存成功。");
         }
-        log.info("createTaskAndFixData() 项目 " + projectId + " 创建任务:" + taskList);
-        taskManager.batchInsertTask(taskList);
-        log.info("createTaskAndFixData() 项目 " + projectId + " 任务保存成功。");
+
         //* -------------------------------- 4 开始排队 --------------------------------
         cacheProject(projectRecord);
 

+ 57 - 250
simulation-resource-server/src/main/java/com/css/simulation/resource/project/impl/SimulationProjectServiceImpl.java

@@ -336,7 +336,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
             kafkaParameter.setTopic(ProjectConstants.RUN_TASK_TOPIC);
             String data = JsonUtil.beanToJson(kafkaParam);
             kafkaParameter.setData(data);
-            log.info("推送项目运行消息到kafka:" + data);
+            log.info("推送项目运行消息到kafka" + data);
             kafkaTemplate.send(kafkaParameter.getTopic(), kafkaParameter.getData()).addCallback(success -> {
                 // 消息发送到的topic
                 String topic = success.getRecordMetadata().topic();
@@ -357,59 +357,67 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
         }
     }
 
-    private void projectStopToKafka(SimulationManualProjectPo po) throws JsonProcessingException {
-        SimulationManualProjectKafkaParam kafkaParam = new SimulationManualProjectKafkaParam();
-        kafkaParam.setProjectId(po.getId());
-        kafkaParam.setType(DictConstants.PROJECT_TYPE_MANUAL);
-        KafkaParameter kafkaParameter = new KafkaParameter();
-        kafkaParameter.setTopic(ProjectConstants.STOP_TASK_TOPIC);
-        String data = JsonUtil.beanToJson(kafkaParam);
-        kafkaParameter.setData(data);
-        log.info("推送项目中止消息到kafka:" + data);
+    private void projectStopToKafka(SimulationManualProjectPo po) {
+        try {
+            SimulationManualProjectKafkaParam kafkaParam = new SimulationManualProjectKafkaParam();
+            kafkaParam.setProjectId(po.getId());
+            kafkaParam.setType(DictConstants.PROJECT_TYPE_MANUAL);
+            KafkaParameter kafkaParameter = new KafkaParameter();
+            kafkaParameter.setTopic(ProjectConstants.STOP_TASK_TOPIC);
+            String data = JsonUtil.beanToJson(kafkaParam);
+            kafkaParameter.setData(data);
+            log.info("推送项目中止消息到kafka:" + data);
 //        kafkaService.send(kafkaParameter);
-        kafkaTemplate.send(kafkaParameter.getTopic(), kafkaParameter.getData()).addCallback(success -> {
-            // 消息发送到的topic
-            String topic = success.getRecordMetadata().topic();
-            // 消息发送到的分区
-            int partition = success.getRecordMetadata().partition();
-            // 消息在分区内的offset
-            long offset = success.getRecordMetadata().offset();
-            log.info("------- 发送消息成功:\n"
-                    + "主题 topic 为:" + topic + "\n"
-                    + "分区 partition 为:" + partition + "\n"
-                    + "偏移量为:" + offset + "\n"
-                    + "消息体为:" + kafkaParameter.getData());
-        }, failure -> {
-            log.error("发送消息失败:" + failure.getMessage());
-        });
+            kafkaTemplate.send(kafkaParameter.getTopic(), kafkaParameter.getData()).addCallback(success -> {
+                // 消息发送到的topic
+                String topic = success.getRecordMetadata().topic();
+                // 消息发送到的分区
+                int partition = success.getRecordMetadata().partition();
+                // 消息在分区内的offset
+                long offset = success.getRecordMetadata().offset();
+                log.info("------- 发送消息成功:\n"
+                        + "主题 topic 为:" + topic + "\n"
+                        + "分区 partition 为:" + partition + "\n"
+                        + "偏移量为:" + offset + "\n"
+                        + "消息体为:" + kafkaParameter.getData());
+            }, failure -> {
+                log.error("发送消息失败:" + failure.getMessage());
+            });
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
 
     }
 
-    private void autoProjectStopToKafka(SimulationAutomaticSubProjectPo po) throws JsonProcessingException {
-        SimulationManualProjectKafkaParam kafkaParam = new SimulationManualProjectKafkaParam();
-        kafkaParam.setProjectId(po.getId());
-        kafkaParam.setType(DictConstants.PROJECT_TYPE_AUTO_SUB);
-        KafkaParameter kafkaParameter = new KafkaParameter();
-        kafkaParameter.setTopic(ProjectConstants.STOP_TASK_TOPIC);
-        String data = JsonUtil.beanToJson(kafkaParam);
-        kafkaParameter.setData(data);
-        log.info("推送自动项目中止消息到kafka:" + data);
+    private void autoProjectStopToKafka(SimulationAutomaticSubProjectPo po) {
+        try {
+            SimulationManualProjectKafkaParam kafkaParam = new SimulationManualProjectKafkaParam();
+            kafkaParam.setProjectId(po.getId());
+            kafkaParam.setType(DictConstants.PROJECT_TYPE_AUTO_SUB);
+            KafkaParameter kafkaParameter = new KafkaParameter();
+            kafkaParameter.setTopic(ProjectConstants.STOP_TASK_TOPIC);
+            String data = JsonUtil.beanToJson(kafkaParam);
+            kafkaParameter.setData(data);
+            log.info("推送自动项目中止消息到kafka:" + data);
 //        kafkaService.send(kafkaParameter);
-        kafkaTemplate.send(kafkaParameter.getTopic(), kafkaParameter.getData()).addCallback(success -> {
-            // 消息发送到的topic
-            String topic = success.getRecordMetadata().topic();
-            // 消息发送到的分区
-            int partition = success.getRecordMetadata().partition();
-            // 消息在分区内的offset
-            long offset = success.getRecordMetadata().offset();
-            log.info("------- 发送消息成功:\n"
-                    + "主题 topic 为:" + topic + "\n"
-                    + "分区 partition 为:" + partition + "\n"
-                    + "偏移量为:" + offset + "\n"
-                    + "消息体为:" + kafkaParameter.getData());
-        }, failure -> {
-            log.error("发送消息失败:" + failure.getMessage());
-        });
+            kafkaTemplate.send(kafkaParameter.getTopic(), kafkaParameter.getData()).addCallback(success -> {
+                // 消息发送到的topic
+                String topic = success.getRecordMetadata().topic();
+                // 消息发送到的分区
+                int partition = success.getRecordMetadata().partition();
+                // 消息在分区内的offset
+                long offset = success.getRecordMetadata().offset();
+                log.info("------- 发送消息成功:\n"
+                        + "主题 topic 为:" + topic + "\n"
+                        + "分区 partition 为:" + partition + "\n"
+                        + "偏移量为:" + offset + "\n"
+                        + "消息体为:" + kafkaParameter.getData());
+            }, failure -> {
+                log.error("发送消息失败:" + failure.getMessage());
+            });
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
 
     }
 
@@ -473,204 +481,6 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
 
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, projectDetailsVo);
     }
-//    @Override
-//    public ResponseBodyVO<ProjectDetailsVo> selectProjectDetailsById(SimulationManualProjectParam param) {
-//
-//        if (isEmpty(param.getId())) {
-//            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE);
-//        }
-//
-//        if (isEmpty(param.getProjectType())) {
-//            param.setProjectType("1");//默认
-//        }
-//
-//        ProjectDetailsVo projectDetailsVo = new ProjectDetailsVo();
-//
-//        //封装要使用到的数据
-//        SimulationManualProjectPo poParam = new SimulationManualProjectPo();
-//
-//        if ("1".equals(param.getProjectType())) {   // 手动运行任务
-//            //项目基本信息
-//            SimulationManualProjectPo po = simulationProjectMapper.selectProjectById(param);
-//            if (po == null) {
-//                return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE, "没有获取到数据");
-//            }
-//            poParam = po;
-//
-//        } else if ("2".equals(param.getProjectType())) {
-//            SimulationManualProjectVo po = simulationAutomaticSubProjectMapper.selectProjectInfo(param);
-//            if (po == null) {
-//                return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE, "没有获取到数据");
-//            }
-//
-//            BeanUtils.copyProperties(po, poParam);
-//
-//        }
-//
-//        //获取场景包信息
-//        ScenePackagePO scenePackagePO = simulationProjectMapper.selectScenePackageInfoById(poParam.getScene());
-//
-//        projectDetailsVo.setPackageName(scenePackagePO.getPackageName());
-//
-//        //评测等级
-////        String s = getEvaluationLevel(poParam);
-//
-//        //算法配置
-//        AlgorithmPO algorithmBaseInfoVo = getAlgorithmInfo(poParam);
-//
-//
-//        //获取测试得分列表
-//        List<AlgorithmScoreVo> firstTargetScore = getFirstTargetScore(param.getId());
-//        projectDetailsVo.setAlgorithmScoreList(firstTargetScore);
-//
-//        //车辆配置
-//        VehiclePO vehicleBaseInfoVo = null;
-//        String vehicleConfigId = poParam.getVehicle();
-//
-//        ConfigPO configPO = new ConfigPO();
-//        configPO.setId(vehicleConfigId);
-//        List<ConfigPO> configVehicleVOS = simulationProjectMapper.selectConfigVehicle(configPO);
-//        if (!isEmpty(configVehicleVOS)) {
-//            ConfigPO configVehicleVO = configVehicleVOS.get(0);
-//            List<VehiclePO> vehiclePOS = simulationProjectMapper.selectVehicleBaseInfoById(configVehicleVO.getVehicleId());
-//            if (!isEmpty(vehiclePOS)) {
-//                vehicleBaseInfoVo = vehiclePOS.get(0);
-//            }
-//
-//        }
-//        /*String vehicleImage = vehicleBaseInfoVo.getVehicleImage();
-//        if(!isEmpty(vehicleImage)){
-//            vehicleBaseInfoVo.setVehicleImage(vehicleImage.replaceFirst("Front side","Top"));
-//        }*/
-//
-//        List<ConfigSensorPO> vehicleSensorVos = simulationProjectMapper.selectVehicleSensor(vehicleConfigId);
-//
-//        List<SensorBaseInfoVo> sensorCameraList = new ArrayList<>();
-//        List<SensorBaseInfoVo> sensorOgtList = new ArrayList<>();
-//        List<SensorBaseInfoVo> sensorLidarList = new ArrayList<>();
-//        List<SensorBaseInfoVo> sensorRadarList = new ArrayList<>();
-//        List<SensorBaseInfoVo> sensorGpsList = new ArrayList<>();
-//        for (ConfigSensorPO vs : vehicleSensorVos) {
-//            String sensorType = vs.getSensorType();
-//            String sensorId = vs.getSensorId();
-//            if (DictConstants.SENSOR_CAMERA.equals(sensorType)) {
-//                //摄像头
-//                SensorBaseInfoVo sensorBaseInfoVo = simulationProjectMapper.selectSensorCamera(sensorId);
-//                setVehicleConfig(sensorBaseInfoVo, vs);
-//                sensorCameraList.add(sensorBaseInfoVo);
-//            } else if (DictConstants.SENSOR_OGT.equals(sensorType)) {
-//                //完美传感器
-//                SensorBaseInfoVo sensorBaseInfoVo = simulationProjectMapper.selectSensorOgt(sensorId);
-//                setVehicleConfig(sensorBaseInfoVo, vs);
-//                sensorOgtList.add(sensorBaseInfoVo);
-//            } else if (DictConstants.SENSOR_LIDAR.equals(sensorType)) {
-//                //激光雷达
-//                SensorBaseInfoVo sensorBaseInfoVo = simulationProjectMapper.selectSensorLidar(sensorId);
-//                setVehicleConfig(sensorBaseInfoVo, vs);
-//                sensorLidarList.add(sensorBaseInfoVo);
-//            } else if (DictConstants.SENSOR_RADAR.equals(sensorType)) {
-//                //毫米波雷达
-//                SensorBaseInfoVo sensorBaseInfoVo = simulationProjectMapper.selectSensorRadar(sensorId);
-//                setVehicleConfig(sensorBaseInfoVo, vs);
-//                sensorRadarList.add(sensorBaseInfoVo);
-//            } else if (DictConstants.SENSOR_GPS.equals(sensorType)) {
-//                //gps
-//                SensorBaseInfoVo sensorBaseInfoVo = simulationProjectMapper.selectSensorGps(sensorId);
-//                setVehicleConfig(sensorBaseInfoVo, vs);
-//                sensorGpsList.add(sensorBaseInfoVo);
-//            }
-//        }
-//
-//        //任务信息
-//        ProjectTaskParam projectTaskParam = new ProjectTaskParam();
-//        projectTaskParam.setPId(poParam.getId());
-//        List<ProjectRunResultRatioNumVo> projectRunResultRatioNumVos = null;
-//
-//        //任务运行状态统计
-//        List<ProjectRunStateNumVo> projectRunStateNumVos = null;
-//
-//        //任务运行结果统计
-//        List<ProjectRunResultRatioNumVo> resultScoreList = null;
-//
-//        Integer size = simulationProjectTaskMapper.selectProjectTaskNumByProjectId(projectTaskParam);
-//        if (size > 0) {
-//            projectRunStateNumVos = simulationProjectTaskMapper.selectRunStateCount(poParam.getId());
-//            taskRunState(projectRunStateNumVos, size);
-//
-//            projectRunResultRatioNumVos = simulationProjectTaskMapper.selectRunResultCount(poParam.getId());
-//            taskResultState(projectRunResultRatioNumVos, size);
-//
-//            resultScoreList = simulationProjectTaskMapper.selectScoreCount(poParam.getId());
-//
-//            //未完成得分为”“的改为0
-//            if (!isEmpty(resultScoreList) && resultScoreList.size() == 1 && isEmpty(resultScoreList.get(0).getResultName())) {
-//                ProjectRunResultRatioNumVo projectRunResultRatioNumVo = resultScoreList.get(0);
-//                projectRunResultRatioNumVo.setResultName("0");
-//            }
-//            taskScore(resultScoreList, size);
-//
-//        }
-//
-//        projectDetailsVo.setProjectId(poParam.getProjectId());
-//        projectDetailsVo.setProjectName(poParam.getProjectName());
-//        projectDetailsVo.setProjectDescribe(poParam.getProjectDescribe());
-//        projectDetailsVo.setStartTime(getRqStr(poParam.getStartTime(), 1));
-//        projectDetailsVo.setFinishTime(getRqStr(poParam.getFinishTime(), 1));
-//        projectDetailsVo.setNowRunState(poParam.getNowRunState());
-//        projectDetailsVo.setNowRunStateName(getDictName(DictConstants.PROJECT_RUN_STATE, poParam.getNowRunState()));
-//        projectDetailsVo.setEvaluationLevel(getDictName(DictConstants.EVALUATION_LEVEL, poParam.getEvaluationLevel()));
-////        projectDetailsVo.setEvaluationLevel(s);
-//        if (algorithmBaseInfoVo != null) {
-//            projectDetailsVo.setAlgorithmName(algorithmBaseInfoVo.getAlgorithmName());
-//            projectDetailsVo.setAlgorithmDescribe(algorithmBaseInfoVo.getDescription());
-//        }
-//        if (vehicleBaseInfoVo != null) {
-//            projectDetailsVo.setVehicleName(vehicleBaseInfoVo.getVehicleName());
-//            projectDetailsVo.setVehicleDescribe(vehicleBaseInfoVo.getDescription());
-//            projectDetailsVo.setVehicleTopView(vehicleBaseInfoVo.getVehicleFrontView());
-//
-//        }
-//        projectDetailsVo.setSensorCameraList(sensorCameraList);
-//        projectDetailsVo.setSensorOgtList(sensorOgtList);
-//        projectDetailsVo.setSensorLidarList(sensorLidarList);
-//        projectDetailsVo.setSensorRadarList(sensorRadarList);
-//        projectDetailsVo.setSensorGpsList(sensorGpsList);
-//        projectDetailsVo.setStateList(projectRunStateNumVos);
-//        projectDetailsVo.setResultList(projectRunResultRatioNumVos);
-//        projectDetailsVo.setResultScoreList(resultScoreList);
-//
-//        projectDetailsVo.setParallelism(poParam.getParallelism());
-//        projectDetailsVo.setMaxSimulationTime(poParam.getMaxSimulationTime());
-//        String isChoiceGpu = poParam.getIsChoiceGpu();
-//        String g = "";
-//        if ("0".equals(isChoiceGpu)) {
-//            g = "是";
-//        } else if ("1".equals(isChoiceGpu)) {
-//            g = "否";
-//        }
-//        projectDetailsVo.setIsChoiceGpu(g);
-//
-///*
-//        //是否生成报告
-//        boolean isCreateReport = true;
-//        String nowRunState = projectDetailsVo.getNowRunState();
-//        if(!ProjectRunStateEnum.FINISH.getCode().equals(nowRunState)){
-//            isCreateReport = false;
-//        }else{
-//            //查询任务是否存在aborted
-//            SimulationMptSceneScorePo sPo = new SimulationMptSceneScorePo();
-//            sPo.setPId(param.getId());
-//            SceneScoreVo sceneScoreVo = simulationProjectTaskMapper.selectRunStateByAborted(sPo);
-//            if(sceneScoreVo != null && sceneScoreVo.getNum() > 0){
-//                isCreateReport = false;
-//            }
-//        }
-//
-//        projectDetailsVo.setCreateReport(isCreateReport);
-//*/
-//
-//        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, projectDetailsVo);
-//    }
 
     private ResponseBodyVO<ProjectDetailsVo> selectProjectDetailsByIdBackUp(SimulationManualProjectParam param) {
 
@@ -708,9 +518,6 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
 
         projectDetailsVo.setPackageName(scenePackagePO.getPackageName());
 
-        //评测等级
-//        String s = getEvaluationLevel(poParam);
-
         //算法配置
         AlgorithmPO algorithmBaseInfoVo = getAlgorithmInfo(poParam);
         //获取测试得分列表