Browse Source

王耀栋--工作台模块代码,添加仿真结果入库接口

wangyaodong 3 years ago
parent
commit
05512f747a

+ 3 - 0
api-common/src/main/java/api/common/pojo/param/project/SimulationManualProjectParam.java

@@ -102,5 +102,8 @@ public class SimulationManualProjectParam extends PageVO {
     //算法类型
     private String algorithmType;
 
+    //仿真结果地址
+    private String runResultFilePath;
+
 
 }

+ 5 - 2
api-common/src/main/java/api/common/pojo/po/project/ManualProjectTaskPo.java

@@ -64,13 +64,13 @@ public class ManualProjectTaskPo extends BasePo {
     private String maximumSwingSpeed;
 
     //自车速度方差
-    private Double speedVariance;
+    private String speedVariance;
 
     //舒适度
     private String speedComfortLevel;
 
     //自车横摆角速度均方根
-    private Double swingSpeedMeanSquareRoot;
+    private String swingSpeedMeanSquareRoot;
 
     //舒适度
     private String swingComfortLevel;
@@ -99,6 +99,9 @@ public class ManualProjectTaskPo extends BasePo {
     //其他
     private String otherCurve;
 
+    //时间轴
+    private String timerShaft;
+
 
 
 

+ 11 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/ctrl/SimulationProjectCtrl.java

@@ -190,6 +190,17 @@ public class SimulationProjectCtrl {
         return service.saveEvaluationLevel(param);
     }
 
+    /**
+     *保存仿真结果到数据库(任务结果返回时调用)
+     * @param param
+     * @return
+     */
+    @RequestMapping("saveTaskResult")
+    @ResponseBody
+    public ResponseBodyVO saveTaskResult(@RequestBody SimulationManualProjectParam param){
+        return service.saveTaskResult(param);
+    }
+
 
 
 

+ 340 - 13
simulation-resource-server/src/main/java/com/css/simulation/resource/project/impl/SimulationProjectServiceImpl.java

@@ -709,7 +709,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
         InputStream fileInputStream = null;
         InputStreamReader inputStreamReader = null;
         BufferedReader bufferedReader = null;
-        File file = null;
+//        File file = null;
         try {
             //2.解析仿真文件
             //time
@@ -762,58 +762,100 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
                 }
                 String[] split = line.split(",");
 
+                ////添加异常捕获,非正常数据默认为0
                 try {
-                    time_list.add(Double.valueOf(split[1]));
+                    Double aDouble = Double.valueOf(split[1]);
+                    if(aDouble.isNaN()){
+                        time_list.add(0D);
+                    }else{
+                        time_list.add(Double.valueOf(split[1]));
+                    }
                 }catch (NumberFormatException e){
                     time_list.add(0D);
                 }
 
 
                 try {
-                    lateral_velocity_list.add(Double.valueOf(split[6]));
+                    Double aDouble = Double.valueOf(split[6]);
+                    if(aDouble.isNaN()){
+                        lateral_velocity_list.add(0D);
+                    }else{
+                        lateral_velocity_list.add(Double.valueOf(split[6]));
+                    }
+
                 }catch (NumberFormatException e){
                     lateral_velocity_list.add(0D);
                 }
 
                 try {
-                    longitudinal_velocity_list.add(Double.valueOf(split[7]));
+                    Double aDouble = Double.valueOf(split[7]);
+                    if(aDouble.isNaN()){
+                        longitudinal_velocity_list.add(0D);
+                    }else{
+                        longitudinal_velocity_list.add(Double.valueOf(split[7]));
+                    }
                 }catch (NumberFormatException e){
                     longitudinal_velocity_list.add(0D);
                 }
 
 
                 try {
-                    lateral_acceleration.add(Double.valueOf(split[8]));
+                    Double aDouble = Double.valueOf(split[8]);
+                    if(aDouble.isNaN()){
+                        lateral_acceleration.add(0D);
+                    }else{
+                        lateral_acceleration.add(Double.valueOf(split[8]));
+                    }
                 }catch (NumberFormatException e){
                     lateral_acceleration.add(0D);
                 }
 
                 try {
-                    longitudinal_acceleration_list.add(Double.valueOf(split[9]));
+                    Double aDouble = Double.valueOf(split[9]);
+                    if(aDouble.isNaN()){
+                        longitudinal_acceleration_list.add(0D);
+                    }else{
+                        longitudinal_acceleration_list.add(Double.valueOf(split[9]));
+                    }
                 }catch (NumberFormatException e){
                     longitudinal_acceleration_list.add(0D);
                 }
 
                 try {
-                    steeting_wheel_list.add(Double.valueOf(split[12]));//steering_angle
+                    Double aDouble = Double.valueOf(split[12]);
+                    if(aDouble.isNaN()){
+                        steeting_wheel_list.add(0D);
+                    }else{
+                        steeting_wheel_list.add(Double.valueOf(split[12]));//steering_angle
+                    }
                 }catch (NumberFormatException e){
                     steeting_wheel_list.add(0D);
                 }
 
                 try {
-                    yawrate_list.add(Double.valueOf(split[13]));
+                    Double aDouble = Double.valueOf(split[13]);
+                    if(aDouble.isNaN()){
+                        yawrate_list.add(0D);
+                    }else{
+                        yawrate_list.add(Double.valueOf(split[13]));
+                    }
                 }catch (NumberFormatException e){
                     yawrate_list.add(0D);
                 }
 
                 try {
-                    lane_offset_list.add(Double.valueOf(split[27]));//lane_center_offset
+                    Double aDouble = Double.valueOf(split[27]);
+                    if(aDouble.isNaN()){
+                        lane_offset_list.add(0D);
+                    }else{
+                        lane_offset_list.add(Double.valueOf(split[27]));//lane_center_offset
+                    }
                 }catch (NumberFormatException e){
                     lane_offset_list.add(0D);
                 }
 
-//                brake_list.add(Double.valueOf(split[7])); ///TODO 没有
-//                throttle_list.add(Double.valueOf(split[7]));///TODO 没有
+//                brake_list.add(Double.valueOf(split[])); ///TODO 没有
+//                throttle_list.add(Double.valueOf(split[]));///TODO 没有
 
             }
             //里程
@@ -912,9 +954,9 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
                 if(bufferedReader != null){
                     bufferedReader.close();
                 }
-                if(file != null ){
+                /*if(file != null ){
                     file.delete();
-                }
+                }*/
             }catch (IOException e){
                 e.printStackTrace();
 
@@ -2869,6 +2911,291 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
         return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
     }
 
+    @Override
+    public ResponseBodyVO saveTaskResult(SimulationManualProjectParam param) {
+
+        String projectId = param.getProjectId();
+        String taskId = param.getTaskId();
+        String runResultFilePath = param.getRunResultFilePath();
+
+        if(StringUtil.isEmpty(projectId)){
+            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE,"工作id不能为空");
+        }
+        if(StringUtil.isEmpty(taskId)){
+            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE,"任务id不能为空");
+        }
+        if(StringUtil.isEmpty(runResultFilePath)){
+            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE,"地址不能为空");
+        }
+
+        InputStream fileInputStream = null;
+        InputStreamReader inputStreamReader = null;
+        BufferedReader bufferedReader = null;
+        File file = null;
+        try {
+            //time
+            List<Double> time_list = new ArrayList<>();
+            //velocity
+            List<String> velocity_list = new ArrayList<>();
+            List<Double> lateral_velocity_list = new ArrayList<>();
+            List<Double> longitudinal_velocity_list = new ArrayList<>();
+            //acceleration
+            List<String> acceleration_list = new ArrayList<>();
+            List<Double> lateral_acceleration = new ArrayList<>();
+            List<Double> longitudinal_acceleration_list = new ArrayList<>();
+            //lane_offset
+            List<String> lane_offset_list = new ArrayList<>();
+            ///TODO brake 暂无
+            List<String> brake_list = new ArrayList<>();
+            //steeting_wheel
+            List<String> steeting_wheel_list = new ArrayList<>();
+            ///TODO throttle 暂无
+            List<String> throttle_list = new ArrayList<>();
+            //摆角速度
+            List<Double> yawrate_list = new ArrayList<>();
+
+            MinioParameter minioParameter = new MinioParameter();
+            minioParameter.setObjectName(runResultFilePath+"/Ego.csv");
+            Response download = fileDownService.download(minioParameter);
+            Response.Body body = download.body();
+            fileInputStream = body.asInputStream();
+
+            /*file = new File("E:\\仿真云平台\\任务详情界面数据\\Ego(1).csv");
+            fileInputStream = new FileInputStream(file);
+            inputStreamReader = new InputStreamReader(fileInputStream,"utf-8");*/
+
+            inputStreamReader = new InputStreamReader(fileInputStream,"utf-8");
+            bufferedReader = new BufferedReader(inputStreamReader);
+            String line;
+            int lineIndex = 0;
+
+            while((line = bufferedReader.readLine()) != null){
+                lineIndex++;
+                if(lineIndex == 1){
+                    continue;
+                }
+                String[] split = line.split(",");
+
+                //添加异常捕获,非正常数据默认为0
+                try {
+                    Double aDouble = Double.valueOf(split[1]);
+                    if(aDouble.isNaN()){
+                        time_list.add(0D);
+                    }else{
+                        time_list.add(aDouble);
+                    }
+                }catch (NumberFormatException e){
+                    time_list.add(0D);
+                }
+
+                try {
+                    Double aDouble = Double.valueOf(split[6]);
+                    if(aDouble.isNaN()){
+                        lateral_velocity_list.add(0D);
+                    }else{
+                        lateral_velocity_list.add(aDouble);
+                    }
+
+                }catch (NumberFormatException e){
+                    lateral_velocity_list.add(0D);
+                }
+
+                try {
+                    Double aDouble = Double.valueOf(split[7]);
+                    if(aDouble.isNaN()){
+                        longitudinal_velocity_list.add(0D);
+                    }else{
+                        longitudinal_velocity_list.add(aDouble);
+                    }
+
+                }catch (NumberFormatException e){
+                    longitudinal_velocity_list.add(0D);
+                }
+
+
+                try {
+                    Double aDouble = Double.valueOf(split[8]);
+                    if(aDouble.isNaN()){
+                        lateral_acceleration.add(0D);
+                    }else{
+                        lateral_acceleration.add(aDouble);
+                    }
+
+                }catch (NumberFormatException e){
+                    lateral_acceleration.add(0D);
+                }
+
+                try {
+                    Double aDouble = Double.valueOf(split[9]);
+                    if(aDouble.isNaN()){
+                        longitudinal_acceleration_list.add(0D);
+                    }else{
+                        longitudinal_acceleration_list.add(aDouble);
+                    }
+
+                }catch (NumberFormatException e){
+                    longitudinal_acceleration_list.add(0D);
+                }
+
+                try {
+                    Double aDouble = Double.valueOf(split[12]);
+                    if(aDouble.isNaN()){
+                        steeting_wheel_list.add("0");
+                    }else{
+                        steeting_wheel_list.add(String.valueOf(aDouble));//steering_angle
+                    }
+                }catch (NumberFormatException e){
+                    steeting_wheel_list.add("0");
+                }
+
+                try {
+                    Double aDouble = Double.valueOf(split[13]);
+                    if(aDouble.isNaN()){
+                        yawrate_list.add(0D);
+                    }else{
+                        yawrate_list.add(aDouble);
+                    }
+                }catch (NumberFormatException e){
+                    yawrate_list.add(0D);
+                }
+
+                try {
+                    Double aDouble = Double.valueOf(split[27]);
+                    if(aDouble.isNaN()){
+                        lane_offset_list.add("0");
+                    }else{
+                        lane_offset_list.add(String.valueOf(aDouble));//lane_center_offset
+                    }
+                }catch (NumberFormatException e){
+                    lane_offset_list.add("0");
+                }
+
+            }
+
+            //里程
+            Double lc = 0D;
+            for(int i=0; i<time_list.size(); i++){
+                if(i == 0){
+                    continue;
+                }
+                lc += (time_list.get(i)-time_list.get(i-1))*longitudinal_velocity_list.get(i-1);
+
+            }
+
+            //平均速度
+            Double pjsd = lc/time_list.get(time_list.size()-1);
+
+            //最大速度
+            Double zdsd = Collections.max(longitudinal_velocity_list);
+
+            //最小速度
+            Double zxsd = Collections.min(longitudinal_velocity_list);
+
+            //最大加速度
+            Double zdjiasd = Collections.max(longitudinal_acceleration_list);
+
+            //最大减速度
+            Double zdjiansd = Collections.min(longitudinal_acceleration_list);
+
+            //最大摆角速度
+            Double zdbjsd = Collections.max(yawrate_list);
+
+            //自车速度方差
+            Double zcsdfc = 0D;
+            for(Double d :longitudinal_velocity_list){
+                zcsdfc +=Math.pow(d-pjsd,2);
+            }
+            zcsdfc = zcsdfc/longitudinal_velocity_list.size();
+
+            //自车横摆角速度均方根
+            Double zchbjsdjfg = 0D;
+            for(Double d :yawrate_list){
+                zchbjsdjfg += Math.pow(d-pjsd,2);
+            }
+            zchbjsdjfg = Math.sqrt(zchbjsdjfg/yawrate_list.size());
+
+            for(int i=0; i<lateral_acceleration.size(); i++){
+                Double aDouble = lateral_acceleration.get(i);
+                Double aDouble1 = longitudinal_acceleration_list.get(i);
+                Double d = Math.pow(aDouble,2)+Math.pow(aDouble1,2);
+                acceleration_list.add(String.valueOf(Math.sqrt(d)));
+            }
+
+            for(int i=0; i<lateral_velocity_list.size(); i++){
+                Double aDouble = lateral_velocity_list.get(i);
+                Double aDouble1 = longitudinal_velocity_list.get(i);
+                Double d = Math.pow(aDouble,2)+Math.pow(aDouble1,2);
+                velocity_list.add(String.valueOf(d));
+            }
+
+            //将数据保存到库
+            ManualProjectTaskPo manualProjectTaskPo = new ManualProjectTaskPo();
+            manualProjectTaskPo.setId(taskId);
+            manualProjectTaskPo.setPId(projectId);
+            manualProjectTaskPo.setMileage(lc.toString());
+            manualProjectTaskPo.setAverageVelocity(pjsd.toString());
+            manualProjectTaskPo.setMaximunSpeed(zdsd.toString());
+            manualProjectTaskPo.setMinimunVelocity(zxsd.toString());
+            manualProjectTaskPo.setMaximumAcceleration(zdjiasd.toString());
+            manualProjectTaskPo.setMaximumDeceleration(zdjiansd.toString());
+            manualProjectTaskPo.setMaximumSwingSpeed(zdbjsd.toString());
+            manualProjectTaskPo.setSpeedVariance(String.valueOf(zcsdfc));
+            manualProjectTaskPo.setSwingSpeedMeanSquareRoot(String.valueOf(zchbjsdjfg));
+            manualProjectTaskPo.setAcceleration(String.join(",",acceleration_list));
+            manualProjectTaskPo.setLaneOffset(String.join(",",lane_offset_list));
+            manualProjectTaskPo.setBrake(String.join(",",brake_list));
+            manualProjectTaskPo.setSteetingWheel(String.join(",",steeting_wheel_list));
+            manualProjectTaskPo.setThrottle(String.join(",",throttle_list));
+            if(!isEmpty(yawrate_list)){
+                StringBuffer sb = new StringBuffer();
+                for(Double d : yawrate_list){
+                    sb.append(d+",");
+                }
+                String s = sb.substring(0, sb.lastIndexOf(","));
+                manualProjectTaskPo.setYawRate(s);
+            }
+            manualProjectTaskPo.setVelocity(String.join(",",velocity_list));
+            manualProjectTaskPo.setOtherCurve("");///TODO 其他暂无
+
+            if(!isEmpty(time_list)){
+                StringBuffer sb = new StringBuffer();
+                for(Double d : time_list){
+                    sb.append(d+",");
+                }
+                String s = sb.substring(0, sb.lastIndexOf(","));
+                manualProjectTaskPo.setTimerShaft(s);
+            }
+
+            simulationProjectTaskMapper.updateTaksResult(manualProjectTaskPo);
+
+
+
+        } catch (Exception e){
+            e.printStackTrace();
+        } finally {
+            try {
+                if(fileInputStream != null){
+                    fileInputStream.close();
+                }
+                if(inputStreamReader != null){
+                    inputStreamReader.close();
+                }
+                if(bufferedReader != null){
+                    bufferedReader.close();
+                }
+                /*if(file != null ){
+                    file.delete();
+                }*/
+            }catch (IOException e){
+                e.printStackTrace();
+
+            }
+        }
+
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+
+    }
+
     /**
      * 换行
      * @param lineNum 换行数量

+ 3 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/mapper/SimulationProjectTaskMapper.java

@@ -34,6 +34,9 @@ public interface SimulationProjectTaskMapper {
 
     List<Map> selectRunTaskByState(Map map);
 
+    //更新仿真结果到数据库
+    int updateTaksResult(ManualProjectTaskPo po);
+
 
 
 

+ 5 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/project/service/SimulationProjectService.java

@@ -3,6 +3,7 @@ package com.css.simulation.resource.project.service;
 import api.common.pojo.common.ResponseBodyVO;
 import api.common.pojo.param.project.SimulationManualProjectParam;
 import com.itextpdf.text.DocumentException;
+import org.springframework.web.bind.annotation.RequestBody;
 
 import java.io.IOException;
 import java.util.Map;
@@ -52,5 +53,8 @@ public interface SimulationProjectService {
     String selectProjectReportIdByAlgorithmId(String algorithmId);
 
     //生成保存评价等级
-    public ResponseBodyVO saveEvaluationLevel(SimulationManualProjectParam param);
+    ResponseBodyVO saveEvaluationLevel(SimulationManualProjectParam param);
+
+    //仿真结果保存到数据库
+    ResponseBodyVO saveTaskResult(SimulationManualProjectParam param);
 }

+ 26 - 0
simulation-resource-server/src/main/resources/mapper/project/SimulationProjectTaskMapper.xml

@@ -97,5 +97,31 @@
         </foreach>
     </select>
 
+    <!--更新仿真结果到数据库-->
+    <update id="updateTaksResult" parameterType="api.common.pojo.po.project.ManualProjectTaskPo">
+        update simulation_manual_project_task
+        set
+        mileage = #{mileage, jdbcType=VARCHAR},
+        average_velocity = #{averageVelocity, jdbcType=VARCHAR},
+        maximun_speed = #{maximunSpeed, jdbcType=VARCHAR},
+        minimun_velocity = #{minimunVelocity, jdbcType=VARCHAR},
+        maximum_acceleration = #{maximumAcceleration, jdbcType=VARCHAR},
+        maximum_deceleration = #{maximumDeceleration, jdbcType=VARCHAR},
+        maximum_swingSpeed = #{maximumSwingSpeed, jdbcType=VARCHAR},
+        speed_variance = #{speedVariance, jdbcType=VARCHAR},
+        swing_speed_mean_square_root = #{swingSpeedMeanSquareRoot, jdbcType=VARCHAR},
+        acceleration = #{acceleration, jdbcType=LONGVARCHAR},
+        lane_offset = #{laneOffset, jdbcType=LONGVARCHAR},
+        brake = #{brake, jdbcType=LONGVARCHAR},
+        steeting_wheel = #{steetingWheel, jdbcType=LONGVARCHAR},
+        throttle =  #{throttle, jdbcType=LONGVARCHAR},
+        yaw_rate = #{yawRate, jdbcType=LONGVARCHAR},
+        velocity = #{velocity, jdbcType=LONGVARCHAR},
+        other_curve = #{otherCurve, jdbcType=LONGVARCHAR},
+        timer_shaft = #{timerShaft, jdbcType=LONGVARCHAR}
+        where id = #{id, jdbcType=VARCHAR} and p_id = #{pId, jdbcType=VARCHAR} and is_deleted = '0'
+
+    </update>
+
 
 </mapper>