martin 3 anos atrás
pai
commit
969c0e73aa

+ 1 - 3
api-common/src/main/java/api/common/pojo/dto/ProjectMessageDTO.java

@@ -12,9 +12,7 @@ import lombok.NoArgsConstructor;
 public class ProjectMessageDTO {
 
     private String projectId;// 项目 id
-    private String vehicleId;// 车辆 id
-    private String algorithmId;// 算法 id
-    private String defaultTime;// 任务执行时间,一个工作里的所有任务公用
+    private String taskMaxExecuteTime;// 任务执行时间,一个工作里的所有任务公用
     private String parallelism;// 并行度,创建 pod 时使用
 
 }

+ 37 - 13
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/consumer/ProjectConsumer.java

@@ -1,6 +1,7 @@
 package com.css.simulation.resource.scheduler.consumer;
 
 
+import api.common.pojo.constants.DictConstants;
 import api.common.pojo.dto.ProjectMessageDTO;
 import api.common.util.JsonUtil;
 import com.css.simulation.resource.scheduler.mapper.ProjectMapper;
@@ -9,9 +10,9 @@ import com.css.simulation.resource.scheduler.mapper.TaskMapper;
 import com.css.simulation.resource.scheduler.pojo.dto.task.*;
 import com.css.simulation.resource.scheduler.pojo.po.TaskPO;
 import com.fasterxml.jackson.core.JsonProcessingException;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.configurationprocessor.json.JSONException;
 import org.springframework.kafka.annotation.KafkaListener;
 import org.springframework.kafka.core.KafkaTemplate;
 import org.springframework.stereotype.Component;
@@ -19,6 +20,7 @@ import org.springframework.stereotype.Component;
 import java.util.List;
 
 @Component
+@Slf4j
 public class ProjectConsumer {
 
     @Autowired
@@ -35,32 +37,54 @@ public class ProjectConsumer {
         System.out.println("------- 消费成功:" + projectRecord.value());
     }
 
-    @KafkaListener(groupId = "simulation-resource-scheduler", topics = "project")
-    public void parseProject(ConsumerRecord<String, String> projectRecord) throws JsonProcessingException, JSONException {
+    @KafkaListener(groupId = "simulation-resource-scheduler", topics = "manualProject")
+    public void parseProject(ConsumerRecord<String, String> projectRecord) throws JsonProcessingException {
         //1 读取 kafka 的 project 信息
         String projectJson = projectRecord.value();
 
         ProjectMessageDTO projectMessageDTO = JsonUtil.jsonToBean(projectJson, ProjectMessageDTO.class);
-        String projectId = projectMessageDTO.getProjectId();
-        String defaultTime = projectMessageDTO.getDefaultTime();
-        String parallelism = projectMessageDTO.getParallelism();
+        String projectId = projectMessageDTO.getProjectId();    // 项目 id
+        String taskMaxExecuteTime = projectMessageDTO.getTaskMaxExecuteTime();  // 任务最大执行时间
+        String parallelism = projectMessageDTO.getParallelism();    // 并行度
         //2 修改该 project 的状态为执行中
         projectMapper.updateProjectState(projectId, "2");
         //3 根据 project 信息获取 task 信息。task 信息包括算法、模型、场景数据包等
         List<TaskPO> taskPOList = taskMapper.selectByProjectId(projectId);
         //4 组装 task 消息
         for (TaskPO taskPO : taskPOList) {
+            String resultPath = "/project/manual-project/" + projectId + "/" + taskPO.getId();
+            String scenarioOsc;
+            String scenarioOdr;
+            String scenarioOsgb;
+            if (DictConstants.SCENE_NATURAL.equals(taskPO.getSceneType())) {
+                scenarioOsc = taskPO.getSnScenarioOsc();
+                scenarioOdr = taskPO.getSnScenarioOsc();
+                scenarioOsgb = taskPO.getSnScenarioOsgb();
+            } else if (DictConstants.SCENE_STANDARD.equals(taskPO.getSceneType())) {
+                scenarioOsc = taskPO.getScrScenarioOsc();
+                scenarioOdr = taskPO.getScrScenarioOsc();
+                scenarioOsgb = taskPO.getScrScenarioOsgb();
+            } else if (DictConstants.SCENE_ACCIDENT.equals(taskPO.getSceneType())) {
+                scenarioOsc = taskPO.getSaScenarioOsc();
+                scenarioOdr = taskPO.getSaScenarioOsc();
+                scenarioOsgb = taskPO.getSaScenarioOsgb();
+            } else {
+                log.error("------- 不存在场景类型:" + taskPO.getSceneType());
+                return;
+            }
+            String vehicleId = taskPO.getVehicleId();
+
             //4-1 组装 task 消息
             TaskDTO taskDTO = TaskDTO.builder()
                     .info(InfoDTO.builder()
                             .project_id(projectId)
                             .task_id(taskPO.getId())
-                            .task_path(taskPO.getResultPath())
+                            .task_path(resultPath)
                             .build())
                     .scenario(ScenarioDTO.builder()
-                            .scenario_osc(taskPO.getScenarioOsc())
-                            .scenario_odr(taskPO.getScenarioOdr())
-                            .scenario_osgb(taskPO.getScenarioOsgb())
+                            .scenario_osc(scenarioOsc)
+                            .scenario_odr(scenarioOdr)
+                            .scenario_osgb(scenarioOsgb)
                             .build())
                     .vehicle(VehicleDTO.builder()
                             .model(ModelDTO.builder()
@@ -76,14 +100,14 @@ public class ProjectConsumer {
                                     .dynamics_airdragcoefficient(taskPO.getAirDragCoefficient())
                                     .dynamics_rollingresistance(taskPO.getRollingResistanceCoefficient())
                                     .dynamics_wheeldiameter(taskPO.getWheelDiameter())
-                                    .dynamics_wheeldrive(taskPO.getDrive())
+                                    .dynamics_wheeldrive(taskPO.getWheelDrive())
                                     .dynamics_overallefficiency(taskPO.getOverallEfficiency())
                                     .dynamics_distfront(taskPO.getFrontDistance())
                                     .dynamics_distrear(taskPO.getRearDistance())
                                     .dynamics_distleft(taskPO.getLeftDistance())
                                     .dynamics_distright(taskPO.getRightDistance())
-                                    .dynamics_distheight(taskPO.getHeight())
-                                    .dynamics_wheelbase(taskPO.getDynamicsWheelbase())
+                                    .dynamics_distheight(taskPO.getHeightDistance())
+                                    .dynamics_wheelbase(taskPO.getWheelbase())
                                     .build())
                             .sensors(SensorsDTO.builder()   // 根据 vehicleId 查询绑定的传感器列表
                                     .camera(sensorMapper.selectCameraByVehicleId(taskPO.getVehicleId()))

+ 3 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/SensorMapper.java

@@ -10,6 +10,9 @@ import java.util.List;
 @Mapper
 public interface SensorMapper {
 
+
+
+
     List<CameraPO> selectCameraByVehicleId(@Param("vehicleId") String vehicleId);
 
     List<OgtPO> selectOgtByVehicleId(@Param("vehicleId") String vehicleId);

+ 67 - 2
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/TaskMapper.java

@@ -10,8 +10,73 @@ import java.util.List;
 public interface TaskMapper {
 
     @Results(id = "task", value = {
-            @Result(property = "id", column = "id", jdbcType = JdbcType.VARCHAR)
+            @Result(column = "id", property = "id", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "scene_type", property = "sceneType", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "sn_scenario_osc", property = "snScenarioOsc", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "sn_scenario_odr", property = "snScenarioOdr", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "sn_scenario_osgb", property = "snScenarioOsgb", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "scr_scenario_osc", property = "scrScenarioOsc", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "scr_scenario_odr", property = "scrScenarioOdr", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "scr_scenario_osgb", property = "scrScenarioOsgb", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "sa_scenario_osc", property = "saScenarioOsc", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "sa_scenario_odr", property = "saScenarioOdr", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "sa_scenario_osgb", property = "saScenarioOsgb", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "vehicle_id", property = "vehicleId", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "max_speed", property = "maxSpeed", jdbcType = JdbcType.DECIMAL),
+            @Result(column = "engine_power", property = "enginePower", jdbcType = JdbcType.DECIMAL),
+            @Result(column = "max_deceleration", property = "maxDeceleration", jdbcType = JdbcType.DECIMAL),
+            @Result(column = "max_steering_angle", property = "maxSteeringAngle", jdbcType = JdbcType.DECIMAL),
+            @Result(column = "mass", property = "mass", jdbcType = JdbcType.DECIMAL),
+            @Result(column = "front_surface_effective", property = "frontSurfaceEffective", jdbcType = JdbcType.DECIMAL),
+            @Result(column = "air_drag_coefficient", property = "airDragCoefficient", jdbcType = JdbcType.DECIMAL),
+            @Result(column = "rolling_resistance_coefficient", property = "rollingResistanceCoefficient", jdbcType = JdbcType.DECIMAL),
+            @Result(column = "wheel_diameter", property = "wheelDiameter", jdbcType = JdbcType.DECIMAL),
+            @Result(column = "wheel_drive", property = "wheelDrive", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "overall_efficiency", property = "overallEfficiency", jdbcType = JdbcType.DECIMAL),
+            @Result(column = "front_distance", property = "frontDistance", jdbcType = JdbcType.DECIMAL),
+            @Result(column = "rear_distance", property = "rearDistance", jdbcType = JdbcType.DECIMAL),
+            @Result(column = "left_distance", property = "leftDistance", jdbcType = JdbcType.DECIMAL),
+            @Result(column = "right_distance", property = "rightDistance", jdbcType = JdbcType.DECIMAL),
+            @Result(column = "height_distance", property = "heightDistance", jdbcType = JdbcType.DECIMAL),
+            @Result(column = "wheelbase", property = "wheelbase", jdbcType = JdbcType.DECIMAL),
     })
-    @Select("")
+    @Select("select smpt.id,\n" +
+            "       smpt.scene_type,\n" +
+            "       sn.xosc_address sn_scenario_osc,\n" +
+            "       sn.xodr_address sn_scenario_odr,\n" +
+            "       sn.osgb_address sn_scenario_osgb,\n" +
+            "       scr.xml_address scr_scenario_osc,\n" +
+            "       scr.xodr_address scr_scenario_odr,\n" +
+            "       scr.osgb_address scr_scenario_osgb,\n" +
+            "       sa.xml_address sa_scenario_osc,\n" +
+            "       sa.xodr_address sa_scenario_odr,\n" +
+            "       sa.osgb_address sa_scenario_osgb,\n" +
+            "       mv.id vehicle_id,\n" +
+            "       mv.model_label,\n" +
+            "       mv.max_speed,\n" +
+            "       mv.engine_power,\n" +
+            "       mv.max_deceleration,\n" +
+            "       mv.max_steering_angle,\n" +
+            "       mv.mass,\n" +
+            "       mv.overall_efficiency,\n" +
+            "       mv.front_surface_effective,\n" +
+            "       mv.air_drag_coefficient,\n" +
+            "       mv.rolling_resistance_coefficient,\n" +
+            "       mv.wheel_diameter,\n" +
+            "       mv.wheel_drive,\n" +
+            "       mv.front_distance,\n" +
+            "       mv.rear_distance,\n" +
+            "       mv.left_distance,\n" +
+            "       mv.right_distance,\n" +
+            "       mv.height_distance,\n" +
+            "       mv.wheelbase\n" +
+            "from simulation_manual_project_task smpt\n" +
+            "         left join simulation_manual_project smp on smpt.p_id = smp.id\n" +
+            "         left join scene_natural sn on smpt.scene_id = sn.natural_id\n" +
+            "         left join scene_standards_regulations scr on smpt.scene_id = scr.regulations_id\n" +
+            "         left join scene_accident sa on smpt.scene_id = sa.accident_id\n" +
+            "         left join model_vehicle mv on smp.vehicle = mv.id\n" +
+            "         left join algorithm a on smp.algorithm = a.id\n" +
+            "where smpt.p_id = #{projectId}\n")
     List<TaskPO> selectByProjectId(@Param("projectId") String projectId);
 }

+ 35 - 32
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/po/TaskPO.java

@@ -11,59 +11,62 @@ import java.math.BigDecimal;
 @AllArgsConstructor
 public class TaskPO {
     private String id;
-    private String vehicleId;
-    /**
-     * 结果保存路径(minio 路径:/projects/[project_id]/[task_id])
-     */
-    private String resultPath;
+    private String sceneType;  // 场景类型
     /**
      * 场景文件路径,minio 路径
      */
-    private String scenarioOsc;
-    private String scenarioOdr;
-    private String scenarioOsgb;
+    private String snScenarioOsc;
+    private String snScenarioOdr;
+    private String snScenarioOsgb;
+    private String scrScenarioOsc;
+    private String scrScenarioOdr;
+    private String scrScenarioOsgb;
+    private String saScenarioOsc;
+    private String saScenarioOdr;
+    private String saScenarioOsgb;
     /**
      * 车辆模型
      * 		"model": {
      * 			"model_label": "AudiA6_10"
      *                },
-     * 		"dynamics": {
-     * 			"dynamics_maxspeed": 67,
-     * 			"dynamics_enginepower": 150000,
-     * 			"dynamics_maxdecel": 9.5,
-     * 			"dynamics_maxsteering": 0.48,
-     * 			"dynamics_mass": 1700,
-     * 			"dynamics_frontsurfaceeffective": 2.2,
-     * 			"dynamics_airdragcoefficient": 0.31,
-     * 			"dynamics_rollingresistance": 0,
-     * 			"dynamics_wheeldiameter": 0.684,
-     * 			"dynamics_wheeldrive": "wheel_drive_front",
-     * 			"dynamics_overallefficiency": 0.75,
-     * 			"dynamics_distfront": 3.838,
-     * 			"dynamics_distrear": 1.086,
-     * 			"dynamics_distleft": 0.94,
-     * 			"dynamics_distright": 0.94,
-     * 			"dynamics_distheight": 1.444,
-     * 			"dynamics_wheelbase": 2.91
-     *                },
+     "dynamics": {
+     "dynamics_maxspeed": 67,
+     "dynamics_enginepower": 150000,
+     "dynamics_maxdecel": 9.5,
+     "dynamics_maxsteering": 0.48,
+     "dynamics_mass": 1700,
+     "dynamics_frontsurfaceeffective": 2.2,
+     "dynamics_airdragcoefficient": 0.31,
+     "dynamics_rollingresistance": 0,
+     "dynamics_wheeldiameter": 0.684,
+     "dynamics_wheeldrive": "wheel_drive_front",
+     "dynamics_overallefficiency": 0.75,
+     "dynamics_distfront": 3.838,
+     "dynamics_distrear": 1.086,
+     "dynamics_distleft": 0.94,
+     "dynamics_distright": 0.94,
+     "dynamics_distheight": 1.444,
+     "dynamics_wheelbase": 2.91
+     },
      */
+    private String vehicleId;
     private String modelLabel;
     private BigDecimal maxSpeed;
     private BigDecimal enginePower;
     private BigDecimal maxDeceleration;
     private BigDecimal maxSteeringAngle;
-    private String drive;
-    private BigDecimal overallEfficiency;
+    private BigDecimal mass;
     private BigDecimal frontSurfaceEffective;
     private BigDecimal airDragCoefficient;
     private BigDecimal rollingResistanceCoefficient;
     private BigDecimal wheelDiameter;
+    private String wheelDrive;
+    private BigDecimal overallEfficiency;
     private BigDecimal frontDistance;
     private BigDecimal rearDistance;
     private BigDecimal leftDistance;
     private BigDecimal rightDistance;
-    private BigDecimal height;
-    private BigDecimal dynamicsWheelbase;
-    private BigDecimal mass;
+    private BigDecimal heightDistance;
+    private BigDecimal wheelbase;
 
 }