martin 3 лет назад
Родитель
Сommit
be46982beb
26 измененных файлов с 419 добавлено и 284 удалено
  1. 11 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/configuration/parameter/MyParameter.java
  2. 84 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/configuration/redis/RedisTemplateConfiguration.java
  3. 93 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/consumer/ProjectConsumer.java
  4. 0 25
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/controller/PodController.java
  5. 12 2
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/controller/TaskController.java
  6. 0 28
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/JobMapper.java
  7. 20 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/ProjectMapper.java
  8. 16 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/SensorMapper.java
  9. 1 7
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/TaskMapper.java
  10. 0 25
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/dto/task/CameraDTO.java
  11. 43 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/dto/task/DynamicsDTO.java
  12. 2 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/dto/task/InfoDTO.java
  13. 3 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/dto/task/ModelDTO.java
  14. 0 29
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/dto/task/OgtDTO.java
  15. 2 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/dto/task/ScenarioDTO.java
  16. 6 2
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/dto/task/SensorsDTO.java
  17. 2 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/dto/task/TaskDTO.java
  18. 2 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/dto/task/VehicleDTO.java
  19. 43 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/po/CameraPO.java
  20. 0 25
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/po/JobPO.java
  21. 4 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/po/OgtPO.java
  22. 54 4
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/po/TaskPO.java
  23. 0 81
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/scheduler/JobScheduler.java
  24. 0 15
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/service/PodService.java
  25. 17 1
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/service/TaskService.java
  26. 4 40
      simulation-resource-scheduler/src/main/resources/bootstrap.yml

+ 11 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/configuration/parameter/MyParameter.java

@@ -0,0 +1,11 @@
+package com.css.simulation.resource.scheduler.configuration.parameter;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "parameter")
+public class MyParameter {
+}

+ 84 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/configuration/redis/RedisTemplateConfiguration.java

@@ -0,0 +1,84 @@
+package com.css.simulation.resource.scheduler.configuration.redis;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
+import org.springframework.cache.CacheManager;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.cache.RedisCacheConfiguration;
+import org.springframework.data.redis.cache.RedisCacheManager;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.RedisSerializationContext;
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+import java.time.Duration;
+import java.util.HashMap;
+import java.util.Map;
+
+@Configuration
+@EnableCaching
+public class RedisTemplateConfiguration {
+
+    @Bean
+    public RedisSerializer<Object> jackson2JsonRedisSerializer() {
+        // 使用 Jackson2JsonRedisSerializer 来序列化和反序列化 redis 的 value 值。
+        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
+        ObjectMapper mapper = new ObjectMapper();
+        // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
+        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        // 指定序列化输入的类型,类必须是非 final 修饰的,final修饰的类,比如 String, Integer 等会跑出异常
+        mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
+        serializer.setObjectMapper(mapper);
+        return serializer;
+    }
+
+    @Bean
+    public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
+        RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig();
+        configuration = configuration
+                // 设置 key 为 string 序列化
+                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
+                // 设置 value 为 json 序列化
+                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer()))
+                // 不缓存空值
+                .disableCachingNullValues()
+                // 设置缓存默认过期时间(30 分钟)
+                .entryTtl(Duration.ofMinutes(30L))
+        ;
+        // 特殊缓存空间应用不同的配置
+        Map<String, RedisCacheConfiguration> map = new HashMap<>();
+        map.put("miFirst", configuration.entryTtl(Duration.ofMinutes(30L)));
+        map.put("miSecond", configuration.entryTtl(Duration.ofHours(1L)));
+
+        return RedisCacheManager.builder(connectionFactory)
+                .cacheDefaults(configuration)           // 默认配置
+                .withInitialCacheConfigurations(map)    // 特殊缓存
+                .transactionAware()                     // 事务
+                .build();
+    }
+
+    @Bean
+    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
+        RedisTemplate<String, Object> template = new RedisTemplate<>();
+        template.setConnectionFactory(connectionFactory);
+        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
+        // key 采用 String 的序列化方式
+        template.setKeySerializer(stringRedisSerializer);
+        // hash 的 key 采用 String 的序列化方式
+        template.setHashKeySerializer(stringRedisSerializer);
+        // value 采用 jackson 的序列化方式
+        template.setValueSerializer(jackson2JsonRedisSerializer());
+        // hash 的 value 采用 jackson 的序列化方式
+        template.setHashValueSerializer(jackson2JsonRedisSerializer());
+        template.afterPropertiesSet();
+        return template;
+    }
+
+
+}

+ 93 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/consumer/ProjectConsumer.java

@@ -0,0 +1,93 @@
+package com.css.simulation.resource.scheduler.consumer;
+
+
+import api.common.util.JsonUtil;
+import com.css.simulation.resource.scheduler.mapper.ProjectMapper;
+import com.css.simulation.resource.scheduler.mapper.SensorMapper;
+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 org.apache.kafka.clients.consumer.ConsumerRecord;
+import org.springframework.boot.configurationprocessor.json.JSONException;
+import org.springframework.boot.configurationprocessor.json.JSONObject;
+import org.springframework.kafka.annotation.KafkaListener;
+import org.springframework.kafka.core.KafkaTemplate;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Component
+public class ProjectConsumer {
+
+    @Resource
+    ProjectMapper projectMapper;
+    @Resource
+    TaskMapper taskMapper;
+    @Resource
+    SensorMapper sensorMapper;
+    @Resource
+    private KafkaTemplate<String, String> kafkaTemplate;
+
+    @KafkaListener(topics = "project")
+    public void parseProject(ConsumerRecord<String, String> projectRecord) throws JsonProcessingException, JSONException {
+        //1 读取 kafka 的 project 信息
+        String projectJson = projectRecord.value();
+        JSONObject projectJsonObject = JsonUtil.jsonToJSONObject(projectJson);
+        String projectId = projectJsonObject.optString("projectId");        // 项目 id
+        String defaultTime = projectJsonObject.optString("defaultTime");    // 任务执行时间,一个工作里的所有任务公用
+        String parallelism = projectJsonObject.optString("parallelism");    // 并行度,创建 pod 时使用
+        //2 修改该 project 的状态为执行中
+        projectMapper.updateProjectState(projectId, "2");
+        //3 根据 project 信息获取 task 信息。task 信息包括算法、模型、场景数据包等
+        List<TaskPO> taskPOList = taskMapper.selectByProjectId(projectId);
+        //4 组装 task 消息
+        for (TaskPO taskPO : taskPOList) {
+            //4-1 组装 task 消息
+            TaskDTO taskDTO = TaskDTO.builder()
+                    .info(InfoDTO.builder()
+                            .project_id(projectId)
+                            .task_id(taskPO.getId())
+                            .task_path(taskPO.getResultPath())
+                            .build())
+                    .scenario(ScenarioDTO.builder()
+                            .scenario_osc(taskPO.getScenarioOsc())
+                            .scenario_odr(taskPO.getScenarioOdr())
+                            .scenario_osgb(taskPO.getScenarioOsgb())
+                            .build())
+                    .vehicle(VehicleDTO.builder()
+                            .model(ModelDTO.builder().model_label(taskPO.getModelLabel()).build())
+                            .dynamics(DynamicsDTO.builder()
+                                    .dynamics_maxspeed(taskPO.getMaxSpeed())
+                                    .dynamics_enginepower(taskPO.getEnginePower())
+                                    .dynamics_maxdecel(taskPO.getMaxDeceleration())
+                                    .dynamics_maxsteering(taskPO.getMaxSteeringAngle())
+                                    .dynamics_mass(taskPO.getMass())
+                                    .dynamics_frontsurfaceeffective(taskPO.getFrontSurfaceEffective())
+                                    .dynamics_airdragcoefficient(taskPO.getAirDragCoefficient())
+                                    .dynamics_rollingresistance(taskPO.getRollingResistanceCoefficient())
+                                    .dynamics_wheeldiameter(taskPO.getWheelDiameter())
+                                    .dynamics_wheeldrive(taskPO.getDrive())
+                                    .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())
+                                    .build())
+                            .sensors(SensorsDTO.builder()   // 根据 vehicleId 查询绑定的传感器列表
+                                    .camera(sensorMapper.selectCameraByVehicleId(taskPO.getVehicleId()))
+                                    .OGT(sensorMapper.selectOgtByVehicleId(taskPO.getVehicleId()))
+                                    .build())
+                            .build())
+                    .build();
+            //4-4 将对象转成 json
+            String taskJson = JsonUtil.beanToJson(taskDTO);
+            //4-5 将 projectId 作为 topic 名称,发送 task 信息到 kafka
+            kafkaTemplate.send(projectId, 0, taskPO.getId(), taskJson);
+        }
+        //4 创建 pod 开始执行。
+    }
+}

+ 0 - 25
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/controller/PodController.java

@@ -1,25 +0,0 @@
-package com.css.simulation.resource.scheduler.controller;
-
-
-import api.common.pojo.common.ResponseBodyVO;
-import com.css.simulation.resource.scheduler.service.PodService;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-
-@RestController
-public class PodController {
-
-    @Resource
-    private PodService podService;
-
-    /**
-     * Pod 的心跳接口
-     */
-    @PostMapping("/pod/tick/{taskId}")
-    public ResponseBodyVO<String> tickTaskPod(@PathVariable("taskId") String taskId) {
-        return podService.tickTaskPod(taskId);
-    }
-}

+ 12 - 2
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/controller/TaskController.java

@@ -15,12 +15,22 @@ public class TaskController {
     @Resource
     private TaskService taskService;
 
+    /**
+     * Pod 的心跳接口
+     */
+    @PostMapping("task/{taskId}/tick")
+    public ResponseBodyVO<String> taskTick(@PathVariable("taskId") String taskId) {
+        return taskService.taskTick(taskId);
+    }
+
     /**
      * 修改任务状态
      */
     @PostMapping("/task/{taskId}/state/{taskState}")
-    public ResponseBodyVO<String> modifyTaskState(@PathVariable("taskId") String taskId, @PathVariable("taskState") String taskState) {
-        return taskService.modifyTaskState(taskId, taskState);
+    public ResponseBodyVO<String> taskStateModify(@PathVariable("taskId") String taskId, @PathVariable("taskState") String taskState) {
+        return taskService.taskStateModify(taskId, taskState);
     }
 
+
+
 }

+ 0 - 28
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/JobMapper.java

@@ -1,28 +0,0 @@
-package com.css.simulation.resource.scheduler.mapper;
-
-
-import com.css.simulation.resource.scheduler.pojo.po.JobPO;
-import org.apache.ibatis.annotations.*;
-import org.apache.ibatis.type.JdbcType;
-
-@Mapper
-public interface JobMapper {
-
-
-    @Results(id = "job", value = {
-            @Result(property = "id", column = "id", jdbcType = JdbcType.VARCHAR)
-    })
-    @Select("select id\n" +
-            "from simulation_job\n" +
-            "where is_deleted = '0'\n" +
-            "  and state = '1'\n" +
-            "order by create_time\n" +
-            "limit 0,1\n")
-    JobPO selectWaitingJob();
-
-
-    @Update("update simulation_job\n" +
-            "set state = #{state}\n" +
-            "where id = #{id}")
-    void updateJobState(@Param("id") String id,@Param("state") String state);
-}

+ 20 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/ProjectMapper.java

@@ -0,0 +1,20 @@
+package com.css.simulation.resource.scheduler.mapper;
+
+
+import org.apache.ibatis.annotations.*;
+import org.apache.ibatis.type.JdbcType;
+
+@Mapper
+public interface ProjectMapper {
+
+
+    @Results(id = "job", value = {
+            @Result(property = "id", column = "id", jdbcType = JdbcType.VARCHAR)
+    })
+
+
+    @Update("update simulation_project\n" +
+            "set state = #{state}\n" +
+            "where id = #{id}")
+    void updateProjectState(@Param("id") String id,@Param("state") String state);
+}

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

@@ -0,0 +1,16 @@
+package com.css.simulation.resource.scheduler.mapper;
+
+import com.css.simulation.resource.scheduler.pojo.po.CameraPO;
+import com.css.simulation.resource.scheduler.pojo.po.OgtPO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface SensorMapper {
+
+    List<CameraPO> selectCameraByVehicleId(@Param("vehicleId") String vehicleId);
+
+    List<OgtPO> selectOgtByVehicleId(@Param("vehicleId") String vehicleId);
+}

+ 1 - 7
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/TaskMapper.java

@@ -13,11 +13,5 @@ public interface TaskMapper {
             @Result(property = "id", column = "id", jdbcType = JdbcType.VARCHAR)
     })
     @Select("")
-    List<TaskPO> selectByJobId(@Param("jobId") String jobId);
-
-
-    @Update("update simulation_job\n" +
-            "set state = #{state}\n" +
-            "where id = #{id}")
-    void updateJobState(@Param("id") String id, @Param("state") String state);
+    List<TaskPO> selectByProjectId(@Param("projectId") String projectId);
 }

+ 0 - 25
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/dto/task/CameraDTO.java

@@ -1,25 +0,0 @@
-package com.css.simulation.resource.scheduler.pojo.dto.task;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class CameraDTO {
-    private String sensor_name;
-    private Integer sensor_fovH;
-    private Integer sensor_fovV;
-    private Integer sensor_near;
-    private Integer sensor_far;
-    private String sensor_resolution;
-    private Integer sensor_frameRate;
-    private Integer sensor_x;
-    private Integer sensor_y;
-    private Integer sensor_z;
-    private Integer sensor_h;
-    private Integer sensor_p;
-    private Integer sensor_r;
-}

+ 43 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/dto/task/DynamicsDTO.java

@@ -1,11 +1,54 @@
 package com.css.simulation.resource.scheduler.pojo.dto.task;
 
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.math.BigDecimal;
+
 @Data
+@Builder
 @NoArgsConstructor
 @AllArgsConstructor
 public class DynamicsDTO {
+
+    /**
+     * 		"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 BigDecimal dynamics_maxspeed;
+    private BigDecimal dynamics_enginepower;
+    private BigDecimal dynamics_maxdecel;
+    private BigDecimal dynamics_maxsteering;
+    private BigDecimal dynamics_mass;
+    private BigDecimal dynamics_frontsurfaceeffective;
+    private BigDecimal dynamics_airdragcoefficient;
+    private BigDecimal dynamics_rollingresistance;
+    private BigDecimal dynamics_wheeldiameter;
+    private String dynamics_wheeldrive;
+    private BigDecimal dynamics_overallefficiency;
+    private BigDecimal dynamics_distfront;
+    private BigDecimal dynamics_distrear;
+    private BigDecimal dynamics_distleft;
+    private BigDecimal dynamics_distright;
+    private BigDecimal dynamics_distheight;
+    private BigDecimal dynamics_wheelbase;
 }

+ 2 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/dto/task/InfoDTO.java

@@ -1,10 +1,12 @@
 package com.css.simulation.resource.scheduler.pojo.dto.task;
 
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 @Data
+@Builder
 @NoArgsConstructor
 @AllArgsConstructor
 public class InfoDTO {

+ 3 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/dto/task/ModelDTO.java

@@ -1,11 +1,14 @@
 package com.css.simulation.resource.scheduler.pojo.dto.task;
 
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 @Data
+@Builder
 @NoArgsConstructor
 @AllArgsConstructor
 public class ModelDTO {
+    private String model_label;
 }

+ 0 - 29
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/dto/task/OgtDTO.java

@@ -1,29 +0,0 @@
-package com.css.simulation.resource.scheduler.pojo.dto.task;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.List;
-
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class OgtDTO {
-    private String sensor_name;
-    private Integer sensor_fovH;
-    private Integer sensor_fovV;
-    private Integer sensor_near;
-    private Integer sensor_far;
-    private Integer sensor_x;
-    private Integer sensor_y;
-    private Integer sensor_z;
-    private Integer sensor_h;
-    private Integer sensor_p;
-    private Integer sensor_r;
-    private List<Integer> sensor_filter;
-    private boolean sensor_display;
-    private Integer sensor_maxObjects;
-    private Integer sensor_port;
-
-}

+ 2 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/dto/task/ScenarioDTO.java

@@ -1,10 +1,12 @@
 package com.css.simulation.resource.scheduler.pojo.dto.task;
 
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 @Data
+@Builder
 @NoArgsConstructor
 @AllArgsConstructor
 public class ScenarioDTO {

+ 6 - 2
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/dto/task/SensorsDTO.java

@@ -1,15 +1,19 @@
 package com.css.simulation.resource.scheduler.pojo.dto.task;
 
+import com.css.simulation.resource.scheduler.pojo.po.CameraPO;
+import com.css.simulation.resource.scheduler.pojo.po.OgtPO;
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.util.List;
 
 @Data
+@Builder
 @NoArgsConstructor
 @AllArgsConstructor
 public class SensorsDTO {
-    private List<CameraDTO> camera;
-    private List<OgtDTO> OGT;
+    private List<CameraPO> camera;
+    private List<OgtPO> OGT;
 }

+ 2 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/dto/task/TaskDTO.java

@@ -1,6 +1,7 @@
 package com.css.simulation.resource.scheduler.pojo.dto.task;
 
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
@@ -113,6 +114,7 @@ import lombok.NoArgsConstructor;
  * }
  */
 @Data
+@Builder
 @NoArgsConstructor
 @AllArgsConstructor
 public class TaskDTO {

+ 2 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/dto/task/VehicleDTO.java

@@ -1,10 +1,12 @@
 package com.css.simulation.resource.scheduler.pojo.dto.task;
 
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 @Data
+@Builder
 @NoArgsConstructor
 @AllArgsConstructor
 public class VehicleDTO {

+ 43 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/po/CameraPO.java

@@ -0,0 +1,43 @@
+package com.css.simulation.resource.scheduler.pojo.po;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class CameraPO {
+
+    /**
+     * 					"sensor_name": "following_view_camera",
+     * 					"sensor_fovH": 45,
+     * 					"sensor_fovV": 27,
+     * 					"sensor_near": 1,
+     * 					"sensor_far": 1500,
+     * 					"sensor_resolution": "800x600",
+     * 					"sensor_frameRate": "60",
+     * 					"sensor_x": -15,
+     * 					"sensor_y": 0,
+     * 					"sensor_z": 5,
+     * 					"sensor_h": 0,
+     * 					"sensor_p": 10,
+     * 					"sensor_r": 0
+     */
+    private String sensor_name;
+    private BigDecimal sensor_fovH;
+    private BigDecimal sensor_fovV;
+    private BigDecimal sensor_near;
+    private BigDecimal sensor_far;
+    private BigDecimal sensor_resolution;
+    private BigDecimal sensor_frameRate;
+    private BigDecimal sensor_x;
+    private BigDecimal sensor_y;
+    private BigDecimal sensor_z;
+    private BigDecimal sensor_h;
+    private BigDecimal sensor_p;
+    private BigDecimal sensor_r;
+
+}

+ 0 - 25
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/po/JobPO.java

@@ -1,25 +0,0 @@
-package com.css.simulation.resource.scheduler.pojo.po;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class JobPO {
-    /**
-     * 工作 id 编号
-     */
-    private String id;
-
-    /**
-     * 最大时间
-     */
-    private String defaultTime;
-
-    /**
-     * 并行度
-     */
-    private String parallelism;
-}

+ 4 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/po/OgtPO.java

@@ -0,0 +1,4 @@
+package com.css.simulation.resource.scheduler.pojo.po;
+
+public class OgtPO {
+}

+ 54 - 4
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/po/TaskPO.java

@@ -4,16 +4,66 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.math.BigDecimal;
+
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
 public class TaskPO {
     private String id;
-    private String algorithm;
-    private String model;
-    private String scene;
+    private String vehicleId;
     /**
-     * 结果保存路径(MinIO形式
+     * 结果保存路径(minio 路径:/projects/[project_id]/[task_id])
      */
     private String resultPath;
+    /**
+     * 场景文件路径,minio 路径
+     */
+    private String scenarioOsc;
+    private String scenarioOdr;
+    private String scenarioOsgb;
+    /**
+     * 车辆模型
+     * 		"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
+     *                },
+     */
+    private String modelLabel;
+    private BigDecimal maxSpeed;
+    private BigDecimal enginePower;
+    private BigDecimal maxDeceleration;
+    private BigDecimal maxSteeringAngle;
+    private String drive;
+    private BigDecimal overallEfficiency;
+    private BigDecimal frontSurfaceEffective;
+    private BigDecimal airDragCoefficient;
+    private BigDecimal rollingResistanceCoefficient;
+    private BigDecimal wheelDiameter;
+    private BigDecimal frontDistance;
+    private BigDecimal rearDistance;
+    private BigDecimal leftDistance;
+    private BigDecimal rightDistance;
+    private BigDecimal height;
+    private BigDecimal dynamicsWheelbase;
+    private BigDecimal mass;
+
 }

+ 0 - 81
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/scheduler/JobScheduler.java

@@ -1,81 +0,0 @@
-package com.css.simulation.resource.scheduler.scheduler;
-
-
-import api.common.util.JsonUtil;
-import com.css.simulation.resource.scheduler.mapper.JobMapper;
-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.JobPO;
-import com.css.simulation.resource.scheduler.pojo.po.TaskPO;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import org.springframework.kafka.core.KafkaTemplate;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.List;
-
-@Component
-public class JobScheduler {
-
-    @Resource
-    JobMapper jobMapper;
-    @Resource
-    TaskMapper taskMapper;
-    @Resource
-    private KafkaTemplate<String, String> kafkaTemplate;
-
-    @Scheduled(cron = "*/5 * * * *")
-    public void parseJob() throws JsonProcessingException {
-        //1 读取 mysql 获取待执行的且创建时间最早的 job 信息
-        JobPO jobPO = jobMapper.selectWaitingJob();
-        String jobId = jobPO.getId();                   // 工作id
-        String defaultTime = jobPO.getDefaultTime();    // 任务执行时间,一个工作里的所有任务公用
-        String parallelism = jobPO.getParallelism();    // 并行度,创建 pod 时使用
-        //2 修改该 job 的状态为执行中,防止下一个定时读取到
-        jobMapper.updateJobState(jobId, "2");
-        //3 根据 job 信息获取 task 信息。task 信息包括算法、模型等
-        List<TaskPO> taskPOList = taskMapper.selectByJobId(jobId);
-        //4 组装 task 消息
-        for (TaskPO taskPO : taskPOList) {
-            String taskId = taskPO.getId();
-            //4-1 初始化所有对象
-            TaskDTO taskDTO = new TaskDTO();
-
-            InfoDTO infoDTO = new InfoDTO();
-            ScenarioDTO scenarioDTO = new ScenarioDTO();
-
-            VehicleDTO vehicleDTO = new VehicleDTO();
-            ModelDTO modelDTO = new ModelDTO();
-            DynamicsDTO dynamicsDTO = new DynamicsDTO();
-            SensorsDTO sensorsDTO = new SensorsDTO();
-
-            List<CameraDTO> cameraDTOList = new ArrayList<>();
-            List<OgtDTO> ogtDTOList = new ArrayList<>();
-
-            //4-2 将所有初始化对象赋值
-
-            //4-3 组装
-            sensorsDTO.setCamera(cameraDTOList);
-            sensorsDTO.setOGT(ogtDTOList);
-
-            vehicleDTO.setModel(modelDTO);
-            vehicleDTO.setDynamics(dynamicsDTO);
-            vehicleDTO.setSensors(sensorsDTO);
-
-            taskDTO.setInfo(infoDTO);
-            taskDTO.setScenario(scenarioDTO);
-            taskDTO.setVehicle(vehicleDTO);
-
-            //4-4 将对象转成 json
-            String taskJson = JsonUtil.beanToJson(taskDTO);
-
-            //4-5 发送到 kafka
-            kafkaTemplate.send(jobId, 0, taskId, taskJson);
-
-        }
-        //3 将 job 名称作为 topic 名称,发送 task 信息到 kafka
-        //4 创建 pod 开始执行。
-    }
-}

+ 0 - 15
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/service/PodService.java

@@ -1,15 +0,0 @@
-package com.css.simulation.resource.scheduler.service;
-
-import api.common.pojo.common.ResponseBodyVO;
-import org.springframework.stereotype.Service;
-
-@Service
-public class PodService {
-
-    /**
-     * Pod 的心跳接口
-     */
-    public ResponseBodyVO<String> tickTaskPod(String taskId) {
-        return null;
-    }
-}

+ 17 - 1
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/service/TaskService.java

@@ -1,15 +1,31 @@
 package com.css.simulation.resource.scheduler.service;
 
 import api.common.pojo.common.ResponseBodyVO;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+
 @Service
 public class TaskService {
 
+    @Resource
+    private RedisTemplate<String, String> redisTemplate;
+
+
+    /**
+     * Pod 的心跳接口
+     */
+    public ResponseBodyVO<String> taskTick(String taskId) {
+        //1 将 taskId 存储到 redis,并刷新过期时间
+        //2
+        return null;
+    }
+
     /**
      * 修改任务状态
      */
-    public ResponseBodyVO<String> modifyTaskState( String taskId,  String taskState) {
+    public ResponseBodyVO<String> taskStateModify(String taskId, String taskState) {
         //1 根据 taskId 修改任务状态 taskState。
         //2 如果 taskState 为完成状态,调用打分算法对该任务进行打分。
         return null;

+ 4 - 40
simulation-resource-scheduler/src/main/resources/bootstrap.yml

@@ -13,45 +13,9 @@ spring:
   cloud:
     nacos:
       discovery:
-        server-addr: localhost:8841
+        server-addr: 10.15.12.70:8848
+        namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
       config:
-        server-addr: localhost:8841
+        server-addr: 10.15.12.70:8848
         namespace: 3698bfc2-a612-487a-b2a2-aaad16cd9d9d
-        file-extension: yaml
-  #* -------------------------------- 数据源配置 --------------------------------
-  datasource:   # server-3_182.92.242.20_root_BMsATnte8uxs6Fr9
-    type: com.alibaba.druid.pool.DruidDataSource
-    driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://182.92.242.20:3306/simulation?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
-    username: root
-    password: BMsATnte8uxs6Fr9
-    dbcp2:
-      min-idle: 5         #数据库连接池的最小维持连接数
-      initial-size: 5     #初始化提供的连接数
-      max-total: 5          #最大的连接数
-      max-wait-millis: 200        #等待连接获取的最大超时时间
-  #* -------------------------------- kafka 消息队列 --------------------------------
-  kafka:
-    bootstrap-servers: 39.105.213.61:9091,39.105.213.61:9092,39.105.213.61:9093    # 指定连接的 kafka 集群。
-    listener:
-      missing-topics-fatal: false   # 消费端监听的topic不存在时,项目启动会报错(关掉)
-    producer: # 生产者配置
-      retries: 3                          # 重试次数。
-      acks: 1                             # 指定 ack 应答级别。0,1,-1
-      batch-size: 16384                   # 批次大小
-      buffer-memory: 33554432             # 缓冲区大小
-      key-serializer: org.apache.kafka.common.serialization.StringSerializer
-      value-serializer: org.apache.kafka.common.serialization.StringSerializer
-      properties:
-        linger:
-          ms: 0 # linger.ms为0表示每接收到一条消息就提交给kafka,这时候batch-size其实就没用了
-
-#  # -------------------------------- 缓存配置 --------------------------------
-#  cache:
-#    type: redis
-#  redis:
-#    host: localhost               # Redis 服务器地址
-#    port: 6379                    # Redis 服务器端口
-#    password: menglingxin0826     # Redis 服务器连接密码
-#    connect-timeout: 10000        # Redis 服务器连接超时时间
-#    timeout: 10000                # Redis 服务器读取数据超时时间
+        file-extension: yaml