martin %!s(int64=3) %!d(string=hai) anos
pai
achega
4c541f55ca

+ 0 - 5
api-common/src/main/java/api/common/pojo/param/MinioParameter.java

@@ -3,18 +3,13 @@ package api.common.pojo.param;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
 
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
 public class MinioParameter {
-
-    @NotNull(message = "文件不能")
-    private MultipartFile file;
     @NotBlank(message ="bucket 名称不能为空!")
     private String bucketName;
     @NotBlank(message ="object 名称不能为空!")

+ 2 - 0
pom.xml

@@ -60,6 +60,8 @@
     <dependencyManagement>
         <dependencies>
 
+
+
             <!-- 解决依赖冲突 -->
             <dependency>
                 <groupId>ch.qos.logback</groupId>

+ 7 - 9
simulation-resource-common/src/main/java/com/css/simulation/resource/common/controller/MinioController.java

@@ -6,11 +6,9 @@ import api.common.util.FileUtil;
 import com.css.simulation.resource.common.util.MinioUtil;
 import io.minio.MinioClient;
 import io.minio.errors.*;
+import org.springframework.http.MediaType;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
@@ -28,27 +26,27 @@ public class MinioController {
     private MinioClient minioClient;
 
 
-    @RequestMapping("/hello")
+    @PostMapping("/hello")
     public String hello() {
         return "hello minio!";
     }
 
-    @RequestMapping("/upload")
+    @PostMapping(value="/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
     public ResponseBodyVO<String> upload(
-            @RequestParam("file") MultipartFile multipartFile,
+            @RequestPart("file") MultipartFile file,
             @RequestParam("bucketName") String bucketName,
             @RequestParam("objectName") String objectName
     ) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
         MinioUtil.uploadFromMultipartFile(
                 minioClient,
-                multipartFile,
+                file,
                 bucketName,
                 objectName
         );
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
     }
 
-    @RequestMapping("/download")
+    @PostMapping("/download")
     public ResponseBodyVO<String> download(
             @RequestBody @Validated MinioParameter minioParameter,
             HttpServletResponse response

+ 22 - 0
simulation-resource-scheduler/pom.xml

@@ -18,6 +18,28 @@
 
     <dependencies>
 
+        <!-- https://mvnrepository.com/artifact/io.github.openfeign.form/feign-form -->
+        <dependency>
+            <groupId>io.github.openfeign.form</groupId>
+            <artifactId>feign-form</artifactId>
+            <version>3.8.0</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/io.github.openfeign.form/feign-form-spring -->
+        <dependency>
+            <groupId>io.github.openfeign.form</groupId>
+            <artifactId>feign-form-spring</artifactId>
+            <version>3.8.0</version>
+        </dependency>
+
+        <!-- https://mvnrepository.com/artifact/io.github.openfeign/feign-jackson -->
+        <dependency>
+            <groupId>io.github.openfeign</groupId>
+            <artifactId>feign-jackson</artifactId>
+            <version>11.8</version>
+        </dependency>
+
+
+
         <!-- kubernetes 客户端 -->
         <dependency>
             <groupId>io.kubernetes</groupId>

+ 11 - 1
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/configuration/feign/FeignConfiguration.java → simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/configuration/feign/OpenFeignConfiguration.java

@@ -1,10 +1,13 @@
 package com.css.simulation.resource.scheduler.configuration.feign;
 
+import feign.Logger;
 import feign.RequestInterceptor;
 import feign.RequestTemplate;
+import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -12,7 +15,14 @@ import javax.servlet.http.HttpServletRequest;
  * 转发 token
  */
 @Configuration
-public class FeignConfiguration implements RequestInterceptor {
+public class OpenFeignConfiguration implements RequestInterceptor, WebMvcConfigurer {
+
+
+    @Bean
+    public Logger.Level feignLoggerLevel() {
+        return Logger.Level.FULL;
+    }
+
     @Override
     public void apply(RequestTemplate requestTemplate) {
         ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

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

@@ -1,95 +1,95 @@
-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 = new JSONObject(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 开始执行。
-
-    }
-}
+//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 = new JSONObject(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 开始执行。
+//
+//    }
+//}

+ 11 - 13
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/feign/DemoController.java

@@ -1,25 +1,23 @@
 package com.css.simulation.resource.scheduler.feign;
 
 import api.common.pojo.common.ResponseBodyVO;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.annotation.Resource;
-
 @RestController
+@RequestMapping("/demo")
 public class DemoController {
 
-    @Resource
+    @Autowired
     private DemoService demoService;
 
-    @PostMapping("/upload")
-    public ResponseBodyVO<String> upload(
-            @RequestParam("file") MultipartFile multipartFile,
-            @RequestParam("bucketName") String bucketName,
-            @RequestParam("objectName") String objectName
-    ) {
-        return demoService.upload(multipartFile, bucketName, objectName);
+    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    public ResponseBodyVO<String> upload(@RequestPart("file") MultipartFile file,
+                                         @RequestParam("bucketName") String bucketName,
+                                         @RequestParam("objectName") String objectName) {
+
+        return demoService.upload(file,bucketName,objectName);
     }
 }

+ 13 - 5
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/feign/DemoService.java

@@ -1,17 +1,25 @@
 package com.css.simulation.resource.scheduler.feign;
 
 import api.common.pojo.common.ResponseBodyVO;
-import com.css.simulation.resource.scheduler.configuration.feign.FeignConfiguration;
+import com.css.simulation.resource.scheduler.configuration.feign.OpenFeignConfiguration;
 import com.css.simulation.resource.scheduler.feign.fallback.DemoServiceFallback;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.MediaType;
 import org.springframework.stereotype.Component;
-import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RequestPart;
 import org.springframework.web.multipart.MultipartFile;
 
 @Component
-@FeignClient(value = "simulation-resource-common", fallback = DemoServiceFallback.class, configuration = FeignConfiguration.class)
+@FeignClient(value = "http://10.15.12.74:8001", fallback = DemoServiceFallback.class, configuration = OpenFeignConfiguration.class)
+//@FeignClient(value = "simulation-common-resource", fallback = DemoServiceFallback.class, configuration = OpenFeignConfiguration.class)
 public interface DemoService {
 
-    @RequestMapping("/simulation/resource/common")
-    ResponseBodyVO<String> upload(MultipartFile multipartFile, String bucketName, String objectName);
+    @PostMapping(value="/simulation/resource/common/minio/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    ResponseBodyVO<String> upload(@RequestPart("file") MultipartFile file,
+                                  @RequestParam("bucketName") String bucketName,
+                                  @RequestParam("objectName") String objectName);
+
+
 }

+ 5 - 1
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/feign/fallback/DemoServiceFallback.java

@@ -3,13 +3,17 @@ package com.css.simulation.resource.scheduler.feign.fallback;
 import api.common.pojo.common.ResponseBodyVO;
 import com.css.simulation.resource.scheduler.feign.DemoService;
 import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RequestPart;
 import org.springframework.web.multipart.MultipartFile;
 
 @Service
 public class DemoServiceFallback implements DemoService {
 
     @Override
-    public ResponseBodyVO<String> upload(MultipartFile multipartFile, String bucketName, String objectName) {
+    public ResponseBodyVO<String> upload(@RequestPart("file") MultipartFile file,
+                                         @RequestParam("bucketName") String bucketName,
+                                         @RequestParam("objectName") String objectName) {
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE);
     }
 }