Sfoglia il codice sorgente

Merge branch 'master' of http://10.15.12.70:3000/CSS/simulation-cloud

martin 3 anni fa
parent
commit
4d3799d8e5
100 ha cambiato i file con 3724 aggiunte e 95 eliminazioni
  1. 1 1
      api-common/src/main/java/api/common/pojo/common/PageVO.java
  2. 9 6
      api-common/src/main/java/api/common/pojo/constants/DictConstants.java
  3. 31 0
      api-common/src/main/java/api/common/pojo/param/model/ConfigPageParam.java
  4. 17 0
      api-common/src/main/java/api/common/pojo/param/model/GpsParam.java
  5. 16 0
      api-common/src/main/java/api/common/pojo/param/project/PageParam.java
  6. 18 0
      api-common/src/main/java/api/common/pojo/param/project/ProjectTaskParam.java
  7. 24 0
      api-common/src/main/java/api/common/pojo/param/project/SceneScoreParam.java
  8. 24 0
      api-common/src/main/java/api/common/pojo/param/project/SimulationManualProjectKafkaParam.java
  9. 100 0
      api-common/src/main/java/api/common/pojo/param/project/SimulationManualProjectParam.java
  10. 1 2
      api-common/src/main/java/api/common/pojo/param/scene/SceneAccidentParam.java
  11. 27 0
      api-common/src/main/java/api/common/pojo/param/scene/SceneNaturalNewParam.java
  12. 38 36
      api-common/src/main/java/api/common/pojo/param/scene/SceneNaturalParam.java
  13. 30 0
      api-common/src/main/java/api/common/pojo/param/scene/ScenePackageNewParam.java
  14. 2 2
      api-common/src/main/java/api/common/pojo/param/scene/ScenePackageParam.java
  15. 38 0
      api-common/src/main/java/api/common/pojo/param/scene/ScenePackageSublistParam.java
  16. 2 1
      api-common/src/main/java/api/common/pojo/param/scene/ScoringRulesParam.java
  17. 1 1
      api-common/src/main/java/api/common/pojo/param/scene/StandardsRegulationsParam.java
  18. 2 2
      api-common/src/main/java/api/common/pojo/po/model/CameraPO.java
  19. 21 0
      api-common/src/main/java/api/common/pojo/po/model/ConfigPO.java
  20. 34 0
      api-common/src/main/java/api/common/pojo/po/model/ConfigSensorPO.java
  21. 27 0
      api-common/src/main/java/api/common/pojo/po/model/GpsPO.java
  22. 2 2
      api-common/src/main/java/api/common/pojo/po/model/LidarPO.java
  23. 2 2
      api-common/src/main/java/api/common/pojo/po/model/OgtPO.java
  24. 3 3
      api-common/src/main/java/api/common/pojo/po/model/VehiclePO.java
  25. 54 0
      api-common/src/main/java/api/common/pojo/po/project/BasePo.java
  26. 102 0
      api-common/src/main/java/api/common/pojo/po/project/ManualProjectTaskPo.java
  27. 80 0
      api-common/src/main/java/api/common/pojo/po/project/SimulationManualProjectPo.java
  28. 22 0
      api-common/src/main/java/api/common/pojo/po/project/SimulationMptFirstTargetScorePo.java
  29. 27 0
      api-common/src/main/java/api/common/pojo/po/project/SimulationMptLastTargetScorePo.java
  30. 33 0
      api-common/src/main/java/api/common/pojo/po/project/SimulationMptSceneScorePo.java
  31. 1 0
      api-common/src/main/java/api/common/pojo/po/scene/SceneAccidentPO.java
  32. 1 0
      api-common/src/main/java/api/common/pojo/po/scene/SceneNaturalPO.java
  33. 1 0
      api-common/src/main/java/api/common/pojo/po/scene/ScenePackagePO.java
  34. 1 0
      api-common/src/main/java/api/common/pojo/po/scene/ScoringRulesPO.java
  35. 1 0
      api-common/src/main/java/api/common/pojo/po/scene/StandardsRegulationsPO.java
  36. 2 2
      api-common/src/main/java/api/common/pojo/vo/model/CameraVO.java
  37. 36 0
      api-common/src/main/java/api/common/pojo/vo/model/ConfigSensorVO.java
  38. 33 0
      api-common/src/main/java/api/common/pojo/vo/model/ConfigVO.java
  39. 26 0
      api-common/src/main/java/api/common/pojo/vo/model/GpsVO.java
  40. 2 2
      api-common/src/main/java/api/common/pojo/vo/model/LidarVO.java
  41. 2 2
      api-common/src/main/java/api/common/pojo/vo/model/OgtVO.java
  42. 3 3
      api-common/src/main/java/api/common/pojo/vo/model/VehicleVO.java
  43. 23 0
      api-common/src/main/java/api/common/pojo/vo/project/AlgorithmBaseInfoVo.java
  44. 30 0
      api-common/src/main/java/api/common/pojo/vo/project/AlgorithmScoreVo.java
  45. 15 0
      api-common/src/main/java/api/common/pojo/vo/project/ConfigSensorVo.java
  46. 21 0
      api-common/src/main/java/api/common/pojo/vo/project/ConfigVehicleVO.java
  47. 18 0
      api-common/src/main/java/api/common/pojo/vo/project/DropDownTypeVo.java
  48. 22 0
      api-common/src/main/java/api/common/pojo/vo/project/DropDownVo.java
  49. 40 0
      api-common/src/main/java/api/common/pojo/vo/project/ManualProjectTaskVo.java
  50. 15 0
      api-common/src/main/java/api/common/pojo/vo/project/PageInfoVo.java
  51. 73 0
      api-common/src/main/java/api/common/pojo/vo/project/ProjectDetailsVo.java
  52. 47 0
      api-common/src/main/java/api/common/pojo/vo/project/ProjectReportVo.java
  53. 21 0
      api-common/src/main/java/api/common/pojo/vo/project/ProjectRunResultRatioNumVo.java
  54. 21 0
      api-common/src/main/java/api/common/pojo/vo/project/ProjectRunStateNumVo.java
  55. 89 0
      api-common/src/main/java/api/common/pojo/vo/project/ProjectTaskDetailsVo.java
  56. 35 0
      api-common/src/main/java/api/common/pojo/vo/project/SceneBaseInfoVo.java
  57. 18 0
      api-common/src/main/java/api/common/pojo/vo/project/ScenePackageBaseVo.java
  58. 61 0
      api-common/src/main/java/api/common/pojo/vo/project/ScenePackageSubListVO.java
  59. 27 0
      api-common/src/main/java/api/common/pojo/vo/project/SceneScoreInfoVo.java
  60. 39 0
      api-common/src/main/java/api/common/pojo/vo/project/SceneScoreVo.java
  61. 14 0
      api-common/src/main/java/api/common/pojo/vo/project/SensorBaseInfoVo.java
  62. 38 0
      api-common/src/main/java/api/common/pojo/vo/project/SimulationManualProjectSingleVo.java
  63. 39 0
      api-common/src/main/java/api/common/pojo/vo/project/SimulationManualProjectVo.java
  64. 16 0
      api-common/src/main/java/api/common/pojo/vo/project/SystemUserVo.java
  65. 22 0
      api-common/src/main/java/api/common/pojo/vo/project/VehicleBaseInfoVo.java
  66. 19 0
      api-common/src/main/java/api/common/pojo/vo/project/VehicleSensorVo.java
  67. 1 0
      api-common/src/main/java/api/common/pojo/vo/scene/SceneAccidentVO.java
  68. 1 0
      api-common/src/main/java/api/common/pojo/vo/scene/SceneNaturalVO.java
  69. 28 0
      api-common/src/main/java/api/common/pojo/vo/scene/ScenePackageNewVO.java
  70. 8 3
      api-common/src/main/java/api/common/pojo/vo/scene/ScenePackageSublistVO.java
  71. 1 0
      api-common/src/main/java/api/common/pojo/vo/scene/ScenePackageVO.java
  72. 1 0
      api-common/src/main/java/api/common/pojo/vo/scene/ScoringRulesVO.java
  73. 1 0
      api-common/src/main/java/api/common/pojo/vo/scene/StandardsRegulationsVO.java
  74. 5 0
      api-common/src/main/java/api/common/util/ObjectUtil.java
  75. 2 2
      api-common/src/main/java/api/common/util/ParamUtil.java
  76. 4 0
      api-common/src/main/java/api/common/util/StringUtil.java
  77. 2 2
      simulation-resource-server/src/main/java/com/css/simulation/resource/feign/FileDownService.java
  78. 5 1
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/CameraCtrl.java
  79. 115 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/ConfigCtrl.java
  80. 107 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/GpsCtrl.java
  81. 5 1
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/LidarCtrl.java
  82. 5 1
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/OgtCtrl.java
  83. 5 1
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/VehicleCtrl.java
  84. 36 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/mapper/ConfigMapper.java
  85. 27 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/mapper/GpsMapper.java
  86. 13 5
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/CameraService.java
  87. 191 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/ConfigService.java
  88. 101 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/GpsService.java
  89. 13 5
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/LidarService.java
  90. 13 5
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/OgtService.java
  91. 13 2
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/VehicleService.java
  92. 11 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/constants/ProjectConstants.java
  93. 132 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/ctrl/SimulationProjectCtrl.java
  94. 36 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/enums/EvaluationLevelEnum.java
  95. 37 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/enums/ProjectRunStateEnum.java
  96. 36 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/enums/SceneTypeEnum.java
  97. 34 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/enums/WhetherEnum.java
  98. 25 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/feign/KafkaService.java
  99. 18 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/feign/fallback/KafkaServiceFallback.java
  100. 1032 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/impl/SimulationProjectServiceImpl.java

+ 1 - 1
api-common/src/main/java/api/common/pojo/common/PageVO.java

@@ -12,6 +12,6 @@ public class PageVO {
     @JsonInclude(JsonInclude.Include.NON_NULL)
     private Integer currentPage=1;
     @JsonInclude(JsonInclude.Include.NON_NULL)
-    private Integer pageSize=3;
+    private Integer pageSize=10;
 
 }

+ 9 - 6
api-common/src/main/java/api/common/pojo/constants/DictConstants.java

@@ -3,7 +3,7 @@ package api.common.pojo.constants;
 public class DictConstants {
 
     //字典缓存目录key
-    public static final String BASE_KEY = "GQ-DICT:";
+    public static final String BASE_KEY = "DICT:";
     public static final String LIST_KEY = "LIST:";
     public static final String MAP_KEY = "MAP:";
 
@@ -12,12 +12,15 @@ public class DictConstants {
     public static final String VEHICLE_TYPE = "vehicleType";//车辆类型
     public static final String DRIVE_TYPE = "driveType";//驱动方式
     public static final String COORDINATE = "coordinate";//坐标系
+    public static final String TARGET_FILTER = "targetFilter";//目标物筛选
     public static final String REGULATION_TYPE = "regulationType"; // 法规类型
     public static final String SELF_DRIVING = "selfDriving"; // 自车驾驶行为
     public static final String TARGET_DRIVING = "targetDriving"; // 目标驾驶行为
     public static final String SELF_REACTION = "selfReaction"; // 自车反应行为
     public static final String CONFLICT_BEHAVIOR = "conflictBehavior"; // 冲突行为
     public static final String CONFLICT_TYPE = "conflictType"; // 冲突类型
+    public static final String EVALUATION_LEVEL = "evaluationLevel";//项目评测等级
+    public static final String PROJECT_RUN_STATE = "projectRunState";//项目运行状态
 
 
 
@@ -30,11 +33,11 @@ public class DictConstants {
     public static final String SCENE_ACCIDENT = "3";    // 交通事故
     public static final String SCENE_GENERAL = "4";    // 泛化场景
 
-    public static final String SENSOR_CAMERA = "1"; // 摄像头
-    public static final String SENSOR_OGT = "2"; // 完美传感器
-    public static final String SENSOR_LIDAR = "3"; // 激光雷达表
-    public static final String SENSOR_RADAR = "4"; // 毫米波雷达表
-    public static final String SENSOR_GPS = "5"; // GPS 传感器表
+    public static final String SENSOR_CAMERA = "camera"; // 摄像头
+    public static final String SENSOR_OGT = "ogt"; // 完美传感器
+    public static final String SENSOR_LIDAR = "lidar"; // 激光雷达表
+    public static final String SENSOR_RADAR = "radar"; // 毫米波雷达表
+    public static final String SENSOR_GPS = "gps"; // GPS 传感器表
 
     public static final String TASK_PENDING = "Pending"; // 任务执行状态,待执行
     public static final String TASK_RUNNING = "Running"; // 任务执行状态,运行中

+ 31 - 0
api-common/src/main/java/api/common/pojo/param/model/ConfigPageParam.java

@@ -0,0 +1,31 @@
+package api.common.pojo.param.model;
+
+import api.common.pojo.common.PageVO;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+public class ConfigPageParam extends PageVO {
+
+    //主键id
+    private String id;
+    //配置编码
+    private String configCode;
+    //配置名称
+    private String configName;
+    //配置描述
+    private String configDescription;
+    //车辆id
+    private String vehicleId;
+    //车辆名称
+    private String vehicleName;
+    //车辆描述
+    private String vehicleDescription;
+    //创建人id
+    private String createUserId;
+    //是否分享
+    @NotBlank(message = "share参数必传")
+    private String share;
+
+}

+ 17 - 0
api-common/src/main/java/api/common/pojo/param/model/GpsParam.java

@@ -0,0 +1,17 @@
+package api.common.pojo.param.model;
+
+
+import lombok.Data;
+
+@Data
+public class GpsParam {
+
+    //主键id
+    private String id;
+    //车辆名称
+    private String sensorName;
+    //创建人id
+    private String createUserId;
+    //是否分享
+    private String share;
+}

+ 16 - 0
api-common/src/main/java/api/common/pojo/param/project/PageParam.java

@@ -0,0 +1,16 @@
+package api.common.pojo.param.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class PageParam {
+
+    private Integer currentPage;
+
+    private Integer pageSize;
+
+    private boolean isLimit;
+
+}

+ 18 - 0
api-common/src/main/java/api/common/pojo/param/project/ProjectTaskParam.java

@@ -0,0 +1,18 @@
+package api.common.pojo.param.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目任务查询参数
+ */
+@Getter
+@Setter
+public class ProjectTaskParam {
+
+    private String id;
+
+    private String pId;
+
+    private String sceneId;
+}

+ 24 - 0
api-common/src/main/java/api/common/pojo/param/project/SceneScoreParam.java

@@ -0,0 +1,24 @@
+package api.common.pojo.param.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 场景得分传参
+ */
+@Getter
+@Setter
+public class SceneScoreParam {
+
+    private String pId;
+
+    private String lastTargerId;
+
+    private String sceneId;
+
+    private String sceneType;
+
+    private List<String> sceneIds;
+}

+ 24 - 0
api-common/src/main/java/api/common/pojo/param/project/SimulationManualProjectKafkaParam.java

@@ -0,0 +1,24 @@
+package api.common.pojo.param.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * kafka让推送需要的参数
+ */
+@Getter
+@Setter
+public class SimulationManualProjectKafkaParam {
+
+    private String projectId;
+
+    private String algorithmId;
+
+    private String vehicleConfigId;
+
+    private String scenePackageId;
+
+    private Long maxSimulationTime;
+
+    private Integer parallelism;
+}

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

@@ -0,0 +1,100 @@
+package api.common.pojo.param.project;
+
+import api.common.pojo.common.PageVO;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+@Getter
+@Setter
+public class SimulationManualProjectParam extends PageVO {
+
+    //id
+    private String id;
+
+    //项目日期
+    private Integer projectDate;
+
+    //项目序号
+    private Integer projectNum;
+
+    //项目id
+    private String projectId;
+
+    //项目名称
+    private String projectName;
+
+    //项目描述
+    private String projectDescribe;
+
+    //算法
+    private String algorithm;
+
+    //车辆
+    private String vehicle;
+
+    //场景
+    private String scene;
+
+    //运行周期
+    private String operationCycle;
+
+    //并行度
+    private String parallelism;
+
+    //规则查看
+    private String ruleView;
+
+    //是否选择gpu(0:是,1:否)
+    private String isChoiceGpu;
+
+    //创建开始日期yyyy-MM-dd
+    private String createStartDate;
+
+    //创建结束日期yyyy-MM-dd
+    private String createEndDate;
+
+    //当前运行状态
+    private String nowRunState;
+
+    //评测等级
+    private String evaluationLevel;
+
+    //开始时间
+    private Date startTime;
+
+    //完成时间
+    private Date finishTime;
+
+    //最大仿真时间
+    private Long maxSimulationTime;
+
+    private String isDeleted;
+
+    private Date createTimeStart;
+
+    private Date createTimeEnd;
+
+    private Date finishTimeStart;
+
+    private Date finishTimeEnd;
+
+    private String finishDateStart;
+
+    private String finishDateEnd;
+
+
+    private String ids;
+
+    //条件参数
+    private String finishTimeFmt;
+
+    //下拉类型1、算法2、车辆、3、场景
+    private String dropDownType;
+
+    //任务id
+    private String taskId;
+
+
+}

+ 1 - 2
api-common/src/main/java/api/common/pojo/param/scene/SceneAccidentParam.java

@@ -23,13 +23,12 @@ public class SceneAccidentParam extends PageVO implements Serializable {
     private String[] conflictBehavior ; //冲突行为
     private String[] conflictType ; //冲突类型
 
-    private String path ; //文件所在文件夹路径
-
     private String videoAddress ; //视频地址
     private String osgbAddress  ;//
     private String xmlAddress ; //
     private String xodrAddress ; //
     private String jsonAddress ; //
+    private String videoPreview;//视频预览地址
 
 
 }

+ 27 - 0
api-common/src/main/java/api/common/pojo/param/scene/SceneNaturalNewParam.java

@@ -0,0 +1,27 @@
+package api.common.pojo.param.scene;
+
+import api.common.pojo.common.PageVO;
+import lombok.*;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 自然驾驶场景
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneNaturalNewParam extends PageVO implements Serializable {
+
+    private String naturalName;              // 场景编号
+    private String[][] naturalEnvironment ; //自然环境
+    private String[][] road ; //道路
+    private String[][] infrastructure ; //基础设施
+    private String[][] temporaryOperation ; //临时性操作
+    private String[][] trafficCondition ; //交通状况
+    private String[][] selfBehavior  ;//自车行为
+    private String[][] targetBehavior ; //目标行为
+}

+ 38 - 36
api-common/src/main/java/api/common/pojo/param/scene/SceneNaturalParam.java

@@ -4,6 +4,7 @@ import api.common.pojo.common.PageVO;
 import lombok.*;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * 自然驾驶场景
@@ -17,48 +18,49 @@ public class SceneNaturalParam extends PageVO implements Serializable {
 
     private String naturalId;              // (唯一)
     private String naturalName;  //场景编号
-    private String[] weather;  //天气
-    private String[] backlight;  //逆光
-    private String[] lightChange;  //隧道光纤变化
-    private String[] roadType ; //道路类型
-    private String[] roadMatrrial ; //路面材质
-    private String[] drivewayNum ; //车道数量
-    private String[] drivewayType ; //车道类型
-    private String[] roadFlatness  ;//道路平坦程度
-    private String[] roadCurvature ; //道路弯曲程度
-    private String[] ramp ; //匝道
-    private String[] intersectionType; //路口类型
-    private String[] planeIntersection ; //道路与铁路平面交叉
-    private String[] bridge  ;//桥梁
-    private String[] tunnel  ;//隧道
-    private String[] speedLimit ; //速度标志
-    private String[] minSpeedLimit ; //最低速度标志
-    private String[] noEntry  ;//禁止通行
-    private String[] noStopping ; //禁止停车
-    private String[] leftLaneLine ; //左侧车道线
-    private String[] rightLaneLine ; //右侧车道线
-    private String[] conductorMarking ; //导线标线及标志
-    private String[] pedestrianCrossing ; //人行横道
-    private String[] trafficLight ; //交通信号灯
-    private String[] decelerationMarking ; //减速标线
-    private String[] pavementCondition ; //路面状况
-    private String[] naturalDisaster ; //自然灾害
-    private String[] roadSafetySigns  ;//道路施工安全标识
-    private String[] safetyWarningBoard  ;//三角安全警示牌
-    private String[] trafficAccident ; //交通事故
-    private String[] patency ; //通畅情况
-    private String[] specialVehicleYield  ;//特种车辆让行
-    private String[] violation ; //违规
-    private String[] doubleFlashingCar ; //双闪车辆
-    private String[] selfBehavior  ;//自车行为
-    private String[] targetBehavior ; //目标行为
+    private List<String> weather;  //天气
+    private List<String> backlight;  //逆光
+    private List<String> lightChange;  //隧道光纤变化
+    private List<String> roadType ; //道路类型
+    private List<String> roadMatrrial ; //路面材质
+    private List<String> drivewayNum ; //车道数量
+    private List<String> drivewayType ; //车道类型
+    private List<String> roadFlatness  ;//道路平坦程度
+    private List<String> roadCurvature ; //道路弯曲程度
+    private List<String> ramp ; //匝道
+    private List<String> intersectionType; //路口类型
+    private List<String> planeIntersection ; //道路与铁路平面交叉
+    private List<String> bridge  ;//桥梁
+    private List<String> tunnel  ;//隧道
+    private List<String> speedLimit ; //速度标志
+    private List<String> minSpeedLimit ; //最低速度标志
+    private List<String> noEntry  ;//禁止通行
+    private List<String> noStopping ; //禁止停车
+    private List<String> leftLaneLine ; //左侧车道线
+    private List<String> rightLaneLine ; //右侧车道线
+    private List<String> conductorMarking ; //导线标线及标志
+    private List<String> pedestrianCrossing ; //人行横道
+    private List<String> trafficLight ; //交通信号灯
+    private List<String> decelerationMarking ; //减速标线
+    private List<String> pavementCondition ; //路面状况
+    private List<String> naturalDisaster ; //自然灾害
+    private List<String> roadSafetySigns  ;//道路施工安全标识
+    private List<String> safetyWarningBoard  ;//三角安全警示牌
+    private List<String> trafficAccident ; //交通事故
+    private List<String> patency ; //通畅情况
+    private List<String> specialVehicleYield  ;//特种车辆让行
+    private List<String> violation ; //违规
+    private List<String> doubleFlashingCar ; //双闪车辆
+    private List<String> selfBehavior  ;//自车行为
+    private List<String> targetBehavior ; //目标行为
     private String share ; //是否分析  1为分享
 
-    private String path ; //文件所在文件夹路径
+    // private String path ; //文件所在文件夹路径
     private String videoAddress ; //视频地址
     private String osgbAddress  ;//
     private String xodrAddress ; //
     private String xoscAddress ; //
     private String jsonAddress ; //
+    private String videoPreview;//视频预览地址
 
 }

+ 30 - 0
api-common/src/main/java/api/common/pojo/param/scene/ScenePackageNewParam.java

@@ -0,0 +1,30 @@
+package api.common.pojo.param.scene;
+
+import api.common.pojo.common.PageVO;
+import api.common.pojo.vo.scene.ScenePackageSublistVO;
+import lombok.*;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 测试场景包
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ScenePackageNewParam extends PageVO implements Serializable {
+
+    private String packageId  ;//主键Id
+    private String packageName ; //指标名称
+    private String weight;//权重
+    private String rulesName ; //规则名称
+    private String packageAndRules;//关联打分规则Id
+    private Integer sceneNum;//场景数量
+    private String remarks;//备注
+    private String share ; //是否分析  1为分享
+    private List<ScenePackageSublistVO> list;  //指标集合
+
+}

+ 2 - 2
api-common/src/main/java/api/common/pojo/param/scene/ScenePackageParam.java

@@ -16,10 +16,10 @@ import java.io.Serializable;
 public class ScenePackageParam extends PageVO implements Serializable {
 
     private String packageId  ;//主键Id
+    private String packageCode  ;//测试包指标Id
     private String packageName ; //指标名称
     private String share ; //是否分析  1为分享
     public String yearMax;//结束时间
     public String yearMin;//开始时间
-
-
+    public String createUserId;//创建人Id
 }

+ 38 - 0
api-common/src/main/java/api/common/pojo/param/scene/ScenePackageSublistParam.java

@@ -0,0 +1,38 @@
+package api.common.pojo.param.scene;
+
+import lombok.*;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+import java.util.List;
+
+/**
+ * 测试场景包
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ScenePackageSublistParam implements Serializable {
+
+    private String sublistId  ;//主键Id
+    private String sublistName ; //指标名称
+    private String weight;//权重
+    private String ruleName ; //规则名称
+    private String packageAndRules;//关联打分规则Id
+    private String sceneNaturalIds;//关联自然场景ids
+    private String sceneTrafficIds;//关联交通事故场景ids
+    private String sceneStatueIds;//关联标准法规ids
+    private String sceneGeneralizationIds;//关联泛化场景ids
+    private Integer sceneNum;//场景数量
+    private String parentId;//父节点id
+    private String rootId;//根id
+    private int seq;//在当前层级下的顺序,由小到大
+    private int packageLevel;//级别
+    private String remarks;//备注
+    private String share ; //是否分析  1为分享
+    private List<ScenePackageSublistParam> list;
+
+
+}

+ 2 - 1
api-common/src/main/java/api/common/pojo/param/scene/ScoringRulesParam.java

@@ -16,10 +16,11 @@ import java.io.Serializable;
 public class ScoringRulesParam extends PageVO implements Serializable {
 
     private String rulesId  ;//打分规则Id
+    private String rulesCode  ;//打分规则code
     private String ruleName ; //规则名称
     private String ruleDescription ; //打分规则描述
     private String share ; //是否分析  1为分享
-
+    private String createUserId ; //用户id
     public String yearMax;//结束时间
 
     public String yearMin;//开始时间

+ 1 - 1
api-common/src/main/java/api/common/pojo/param/scene/StandardsRegulationsParam.java

@@ -20,13 +20,13 @@ public class StandardsRegulationsParam extends PageVO implements Serializable {
     private String[]  regulationType;  //法规类型
     private String standardType;  //标准类型
     private String share ; //是否分析  1为分享
-    private String path ; //文件所在文件夹路径
 
     private String videoAddress ; //视频地址
     private String osgbAddress  ;//
     private String xmlAddress ; //
     private String xodrAddress ; //
     private String jsonAddress ; //
+    private String videoPreview;//视频预览地址
 
 
 }

+ 2 - 2
api-common/src/main/java/api/common/pojo/po/model/CameraPO.java

@@ -10,8 +10,8 @@ public class CameraPO extends CommonPO {
 
     //主键id
     private String id;
-    //传感器id
-    private String sensorId;
+    //传感器编码
+    private String sensorCode;
     //传感器名称
     private String sensorName;
     //传感器描述

+ 21 - 0
api-common/src/main/java/api/common/pojo/po/model/ConfigPO.java

@@ -0,0 +1,21 @@
+package api.common.pojo.po.model;
+
+import api.common.pojo.common.CommonPO;
+import lombok.Data;
+
+@Data
+public class ConfigPO extends CommonPO {
+
+    //主键id
+    private String id;
+    //配置编码
+    private String configCode;
+    //配置名称
+    private String configName;
+    //车辆描述
+    private String description;
+    //车辆id
+    private String vehicleId;
+    //是否分享
+    private String share;
+}

+ 34 - 0
api-common/src/main/java/api/common/pojo/po/model/ConfigSensorPO.java

@@ -0,0 +1,34 @@
+package api.common.pojo.po.model;
+
+import api.common.pojo.common.CommonPO;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class ConfigSensorPO extends CommonPO {
+
+    //主键id
+    private String id;
+    //配置id
+    private String configId;
+    //传感器id
+    private String sensorId;
+    //传感器类型
+    private String sensorType;
+    //传感器横向偏移量(x轴)
+    private BigDecimal sensorX;
+    //传感器纵向偏移量(y轴)
+    private BigDecimal sensorY;
+    //传感器安装高度(z轴)
+    private BigDecimal sensorZ;
+    //传感器横摆角
+    private BigDecimal sensorH;
+    //传感器俯仰角
+    private BigDecimal sensorP;
+    //传感器横滚角
+    private BigDecimal sensorR;
+    //传感器端口
+    private int sensorPort;
+
+}

+ 27 - 0
api-common/src/main/java/api/common/pojo/po/model/GpsPO.java

@@ -0,0 +1,27 @@
+package api.common.pojo.po.model;
+
+import api.common.pojo.common.CommonPO;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class GpsPO extends CommonPO {
+
+    //主键id
+    private String id;
+    //传感器编码
+    private String sensorCode;
+    //传感器名称
+    private String sensorName;
+    //传感器描述
+    private String description;
+    //经度偏移量
+    private BigDecimal longitudeOffset;
+    //维度偏移量
+    private BigDecimal latitudeOffset;
+    //帧率
+    private BigDecimal frameRate;
+    //是否分享
+    private String share;
+}

+ 2 - 2
api-common/src/main/java/api/common/pojo/po/model/LidarPO.java

@@ -11,8 +11,8 @@ public class LidarPO extends CommonPO {
 
     //主键id
     private String id;
-    //传感器id
-    private String sensorId;
+    //传感器编码
+    private String sensorCode;
     //传感器名称
     private String sensorName;
     //传感器描述

+ 2 - 2
api-common/src/main/java/api/common/pojo/po/model/OgtPO.java

@@ -10,8 +10,8 @@ public class OgtPO extends CommonPO {
 
     //主键id
     private String id;
-    //传感器id
-    private String sensorId;
+    //传感器编码
+    private String sensorCode;
     //传感器名称
     private String sensorName;
     //传感器描述

+ 3 - 3
api-common/src/main/java/api/common/pojo/po/model/VehiclePO.java

@@ -10,8 +10,8 @@ public class VehiclePO extends CommonPO {
 
     //主键id
     private String id;
-    //车辆id
-    private String vehicleId;
+    //车辆编码
+    private String vehicleCode;
     //车辆名称
     private String vehicleName;
     //车辆描述
@@ -41,7 +41,7 @@ public class VehiclePO extends CommonPO {
     //车轮直径(米)
     private BigDecimal wheelDiameter;
     //驱动方式
-    private BigDecimal wheelDrive;
+    private String wheelDrive;
     //总效率
     private BigDecimal overallEfficiency;
     //车前距(米)

+ 54 - 0
api-common/src/main/java/api/common/pojo/po/project/BasePo.java

@@ -0,0 +1,54 @@
+package api.common.pojo.po.project;
+
+import api.common.util.StringUtil;
+import api.common.util.TimeUtil;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.sql.Timestamp;
+import java.util.Date;
+
+/**
+ * 数据表公共字段
+ */
+@Getter
+@Setter
+public class BasePo {
+
+    //id
+    private String id;
+
+    //创建时间
+    private Timestamp createTime;
+
+    //创建人
+    private String createUserId;
+
+    //修改时间
+    private Timestamp modifyTime;
+
+    //修改人
+    private String modifyUserId;
+
+    //是否删除
+    private String isDeleted;
+
+    public void createPo(String userId){
+        id = createId();
+        Timestamp nowForMysql = TimeUtil.getNowForMysql();
+        createTime = nowForMysql;
+        modifyTime = nowForMysql;
+        isDeleted = "0";
+        createUserId = userId;
+    }
+
+    public void updatePo(String userId){
+        modifyTime = TimeUtil.getNowForMysql();
+        modifyUserId = userId;
+    }
+
+    private String createId(){
+        return StringUtil.getRandomUUID();
+    }
+
+}

+ 102 - 0
api-common/src/main/java/api/common/pojo/po/project/ManualProjectTaskPo.java

@@ -0,0 +1,102 @@
+package api.common.pojo.po.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+@Getter
+@Setter
+public class ManualProjectTaskPo extends BasePo {
+
+    //项目主表id
+    private String pId;
+
+    //场景id
+    private String sceneId;
+
+    //场景名称
+    private String sceneName;
+
+    //场景类型
+    private String sceneType;
+
+    //运行开始时间
+    private Date runStartTime;
+
+    //运行结束时间
+    private Date runEndTime;
+
+    //运行状态
+    private String runState;
+
+    //运行结果
+    private String runResult;
+
+    //运行结果文件minio路径
+    private String runResultFilePath;
+
+    //得分
+    private String score;
+
+    //指标评价
+    private String targetEvaluate;
+
+    //里程
+    private String mileage;
+
+    //平均速度
+    private String averageVelocity;
+
+    //最大速度
+    private String maximunSpeed;
+
+    //最小速度
+    private String minimunVelocity;
+
+    //最大减速度
+    private String maximumDeceleration;
+
+    //最大摆角速度
+    private String maximumSwingSpeed;
+
+    //自车速度方差
+    private Double speedVariance;
+
+    //舒适度
+    private String speedComfortLevel;
+
+    //自车横摆角速度均方根
+    private Double swingSpeedMeanSquareRoot;
+
+    //舒适度
+    private String swingComfortLevel;
+
+    //acceleration变化曲线
+    private String acceleration;
+
+    //lane_offset变化曲线
+    private String laneOffset;
+
+    //brake变化曲线
+    private String brake;
+
+    //steeting_wheel变化曲线
+    private String steetingWheel;
+
+    //throttle变化曲线
+    private String throttle;
+
+    //yaw_rate变化曲线
+    private String yawRate;
+
+    //velocity变化曲线
+    private String velocity;
+
+    //其他
+    private String otherCurve;
+
+
+
+
+}

+ 80 - 0
api-common/src/main/java/api/common/pojo/po/project/SimulationManualProjectPo.java

@@ -0,0 +1,80 @@
+package api.common.pojo.po.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 运行项目数据
+ */
+@Getter
+@Setter
+public class SimulationManualProjectPo extends BasePo {
+
+    //项目日期
+    private Integer projectDate;
+
+    //项目序号
+    private Integer projectNum;
+
+    //项目id
+    private String projectId;
+
+    //项目名称
+    private String projectName;
+
+    //项目描述
+    private String projectDescribe;
+
+    //算法
+    private String algorithm;
+
+    //车辆
+    private String vehicle;
+
+    //场景(包)
+    private String scene;
+
+    //运行周期
+    private String operationCycle;
+
+    //并行度
+    private String parallelism;
+
+    //规则查看
+    private String ruleView;
+
+    //是否选择gpu(0:是,1:否)
+    private String isChoiceGpu;
+
+    //自动运行次数
+    private Long automaticRunTimes;
+
+    //最近运行时间
+    private Date lastRunTime;
+
+    //自动运行状态(0:开启,1:关闭)
+    private String automaticRunState;
+
+    //当前运行状态
+    private String nowRunState;
+
+    //评测等级
+    private String evaluationLevel;
+
+    //开始时间
+    private Date startTime;
+
+    //完成时间
+    private Date finishTime;
+
+    //最大仿真时间
+    private Long maxSimulationTime;
+
+    //算法得分
+    private Double algorithmScore;
+
+
+
+}

+ 22 - 0
api-common/src/main/java/api/common/pojo/po/project/SimulationMptFirstTargetScorePo.java

@@ -0,0 +1,22 @@
+package api.common.pojo.po.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目第一级指标得分信息
+ */
+@Getter
+@Setter
+public class SimulationMptFirstTargetScorePo extends BasePo {
+
+    //项目id(id)
+    private String pId;
+
+    //指标
+    private String target;
+
+    //得分
+    private Double score;
+
+}

+ 27 - 0
api-common/src/main/java/api/common/pojo/po/project/SimulationMptLastTargetScorePo.java

@@ -0,0 +1,27 @@
+package api.common.pojo.po.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目下最后一级指标得分表
+ */
+@Getter
+@Setter
+public class SimulationMptLastTargetScorePo extends BasePo {
+
+
+    //项目id(id)
+    private String pId;
+
+    //最后一级指标
+    private String target;
+
+    //得分
+    private Double score;
+
+    //未达标场景个数
+    private Integer notStandardSceneNum;
+
+
+}

+ 33 - 0
api-common/src/main/java/api/common/pojo/po/project/SimulationMptSceneScorePo.java

@@ -0,0 +1,33 @@
+package api.common.pojo.po.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目下所有场景的分表
+ */
+@Getter
+@Setter
+public class SimulationMptSceneScorePo extends BasePo {
+
+    //id
+    private String id;
+
+    //项目id(id字段)
+    private String pId;
+
+    //最后一级指标id
+    private String lastTargerId;
+
+    //场景id
+    private String sceneId;
+
+    //场景类型
+    private String sceneType;
+
+    //得分
+    private Double score;
+
+    //指标评价
+    private String targetEvaluate;
+}

+ 1 - 0
api-common/src/main/java/api/common/pojo/po/scene/SceneAccidentPO.java

@@ -28,6 +28,7 @@ public class SceneAccidentPO implements Serializable {
     private String xmlAddress ; //
     private String xodrAddress ; //
     private String jsonAddress ; //
+    private String videoPreview;//视频预览地址
     /**
      * 记录创建时间
      */

+ 1 - 0
api-common/src/main/java/api/common/pojo/po/scene/SceneNaturalPO.java

@@ -59,6 +59,7 @@ public class SceneNaturalPO  implements Serializable {
     private String xodrAddress ; //
     private String xoscAddress ; //
     private String jsonAddress ; //
+    private String videoPreview;//视频预览地址
     /**
      * 记录创建时间
      */

+ 1 - 0
api-common/src/main/java/api/common/pojo/po/scene/ScenePackagePO.java

@@ -16,6 +16,7 @@ import java.sql.Timestamp;
 public class ScenePackagePO implements Serializable {
 
     private String packageId  ;//主键Id
+    private String packageCode  ;//测试包指标Id
     private String packageName ; //指标名称
     private String weight;//权重
     private String rulesName ; //规则名称

+ 1 - 0
api-common/src/main/java/api/common/pojo/po/scene/ScoringRulesPO.java

@@ -16,6 +16,7 @@ import java.sql.Timestamp;
 public class ScoringRulesPO implements Serializable {
 
     private String rulesId  ;//打分规则Id
+    private String rulesCode  ;//打分规则code
     private String ruleName ; //规则名称
     private String ruleDescription ; //打分规则描述
     private String ruleDetails;//打分规则详情

+ 1 - 0
api-common/src/main/java/api/common/pojo/po/scene/StandardsRegulationsPO.java

@@ -25,6 +25,7 @@ public class StandardsRegulationsPO implements Serializable {
     private String xmlAddress ; //
     private String xodrAddress ; //
     private String jsonAddress ; //
+    private String videoPreview;//视频预览地址
     /**
      * 记录创建时间
      */

+ 2 - 2
api-common/src/main/java/api/common/pojo/vo/model/CameraVO.java

@@ -9,8 +9,8 @@ public class CameraVO {
 
     //主键id
     private String id;
-    //传感器id
-    private String sensorId;
+    //传感器编码
+    private String sensorCode;
     //传感器名称
     private String sensorName;
     //传感器描述

+ 36 - 0
api-common/src/main/java/api/common/pojo/vo/model/ConfigSensorVO.java

@@ -0,0 +1,36 @@
+package api.common.pojo.vo.model;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class ConfigSensorVO {
+
+    //主键id
+    private String id;
+    //配置id
+    private String configId;
+    //传感器id
+    private String sensorId;
+    //传感器名称
+    private String sensorName;
+    //传感器描述
+    private String sensorDescription;
+    //传感器类型
+    private String sensorType;
+    //传感器横向偏移量(x轴)
+    private BigDecimal sensorX;
+    //传感器纵向偏移量(y轴)
+    private BigDecimal sensorY;
+    //传感器安装高度(z轴)
+    private BigDecimal sensorZ;
+    //传感器横摆角
+    private BigDecimal sensorH;
+    //传感器俯仰角
+    private BigDecimal sensorP;
+    //传感器横滚角
+    private BigDecimal sensorR;
+    //传感器端口
+    private int sensorPort;
+}

+ 33 - 0
api-common/src/main/java/api/common/pojo/vo/model/ConfigVO.java

@@ -0,0 +1,33 @@
+package api.common.pojo.vo.model;
+
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class ConfigVO {
+
+    //主键id
+    private String id;
+    //配置编码
+    private String configCode;
+    //配置名称
+    private String configName;
+    //配置描述
+    private String configDescription;
+    //车辆id
+    private String vehicleId;
+    //车辆名称
+    private String vehicleName;
+    //车辆描述
+    private String vehicleDescription;
+    //是否分享
+    private String share;
+
+    //传感器数量
+    private Map<String,String> sensorCount;
+    //传感器配置列表
+    private Map<String,List<ConfigSensorVO>> configSensors;
+
+}

+ 26 - 0
api-common/src/main/java/api/common/pojo/vo/model/GpsVO.java

@@ -0,0 +1,26 @@
+package api.common.pojo.vo.model;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class GpsVO {
+
+    //主键id
+    private String id;
+    //传感器编码
+    private String sensorCode;
+    //传感器名称
+    private String sensorName;
+    //传感器描述
+    private String description;
+    //经度偏移量
+    private BigDecimal longitudeOffset;
+    //维度偏移量
+    private BigDecimal latitudeOffset;
+    //帧率
+    private BigDecimal frameRate;
+    //是否分享
+    private String share;
+}

+ 2 - 2
api-common/src/main/java/api/common/pojo/vo/model/LidarVO.java

@@ -10,8 +10,8 @@ public class LidarVO {
 
     //主键id
     private String id;
-    //传感器id
-    private String sensorId;
+    //传感器编码
+    private String sensorCode;
     //传感器名称
     private String sensorName;
     //传感器描述

+ 2 - 2
api-common/src/main/java/api/common/pojo/vo/model/OgtVO.java

@@ -9,8 +9,8 @@ public class OgtVO {
 
     //主键id
     private String id;
-    //传感器id
-    private String sensorId;
+    //传感器编码
+    private String sensorCode;
     //传感器名称
     private String sensorName;
     //传感器描述

+ 3 - 3
api-common/src/main/java/api/common/pojo/vo/model/VehicleVO.java

@@ -9,8 +9,8 @@ public class VehicleVO {
 
     //主键id
     private String id;
-    //车辆id
-    private String vehicleId;
+    //车辆编码
+    private String vehicleCode;
     //车辆名称
     private String vehicleName;
     //车辆描述
@@ -40,7 +40,7 @@ public class VehicleVO {
     //车轮直径(米)
     private BigDecimal wheelDiameter;
     //驱动方式
-    private BigDecimal wheelDrive;
+    private String wheelDrive;
     //总效率
     private BigDecimal overallEfficiency;
     //车前距(米)

+ 23 - 0
api-common/src/main/java/api/common/pojo/vo/project/AlgorithmBaseInfoVo.java

@@ -0,0 +1,23 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 算法基本信息
+ */
+@Getter
+@Setter
+public class AlgorithmBaseInfoVo {
+
+    ///TODO 一下参数有待确认
+
+    //id
+    private String id;
+
+    //算法名称
+    private String algorithmName;
+
+    //算法描述
+    private String description;
+}

+ 30 - 0
api-common/src/main/java/api/common/pojo/vo/project/AlgorithmScoreVo.java

@@ -0,0 +1,30 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 算法测试得分
+ */
+@Getter
+@Setter
+public class AlgorithmScoreVo {
+
+    //项目名称
+    private String projectName;
+
+    //场景数量
+    private Integer sceneNum;
+
+    //权重
+    private String weight;
+
+    //得分
+    private Double score;
+
+    //得分率
+    private Double scoreRatio;
+
+
+
+}

+ 15 - 0
api-common/src/main/java/api/common/pojo/vo/project/ConfigSensorVo.java

@@ -0,0 +1,15 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 车辆配置传感器
+ */
+@Getter
+@Setter
+public class ConfigSensorVo {
+
+    private String sensorType;
+
+}

+ 21 - 0
api-common/src/main/java/api/common/pojo/vo/project/ConfigVehicleVO.java

@@ -0,0 +1,21 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 车辆配置ov
+ */
+@Getter
+@Setter
+public class ConfigVehicleVO {
+
+    private String id;
+
+    private String configName;
+
+    //传感器
+    private String sensor;
+
+    private String vehicleId;
+}

+ 18 - 0
api-common/src/main/java/api/common/pojo/vo/project/DropDownTypeVo.java

@@ -0,0 +1,18 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 下拉菜单返回值
+ */
+@Getter
+@Setter
+public class DropDownTypeVo {
+
+    private List<DropDownVo> dropDownList;
+
+    private String type;
+}

+ 22 - 0
api-common/src/main/java/api/common/pojo/vo/project/DropDownVo.java

@@ -0,0 +1,22 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 下拉菜单返回值
+ */
+@Getter
+@Setter
+public class DropDownVo {
+
+    private String id;
+
+    private String name;
+
+    //场景数量
+    private String sceneNum;
+
+    //传感器
+    private String sensor;
+}

+ 40 - 0
api-common/src/main/java/api/common/pojo/vo/project/ManualProjectTaskVo.java

@@ -0,0 +1,40 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+
+@Getter
+@Setter
+public class ManualProjectTaskVo {
+
+    //id
+    private String id;
+
+    //项目主表id
+    private String pId;
+
+    //场景id
+    private String sceneId;
+
+    //场景名称
+    private String sceneName;
+
+    //场景数量
+    private Integer sceneNum;
+
+    //场景类型
+    private String sceneType;
+
+    //运行开始时间
+    private String runStartTime;
+
+    //运行结束时间
+    private String runEndTime;
+
+    //运行状态
+    private String runState;
+
+    //运行结果
+    private String runResult;
+}

+ 15 - 0
api-common/src/main/java/api/common/pojo/vo/project/PageInfoVo.java

@@ -0,0 +1,15 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+public class PageInfoVo<T> {
+
+    private List<T> info;
+
+    private Long total;
+}

+ 73 - 0
api-common/src/main/java/api/common/pojo/vo/project/ProjectDetailsVo.java

@@ -0,0 +1,73 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 项目详情vo
+ */
+@Getter
+@Setter
+public class ProjectDetailsVo {
+
+    //项目id
+    private String projectId;
+
+    //项目名称
+    private String projectName;
+
+    //项目描述
+    private String projectDescribe;
+
+    //开始时间
+    private String startTime;
+
+    //完成时间
+    private String finishTime;
+
+    //当前运行状态(进度)
+    private String nowRunState;
+
+    //评测等级
+    private String evaluationLevel;
+
+    //算法名称
+    private String algorithmName;
+
+    //算法描述
+    private String algorithmDescribe;
+
+    //车辆名称
+    private String vehicleName;
+
+    //车辆描述
+    private String vehicleDescribe;
+
+    //摄像头
+    private List<SensorBaseInfoVo> sensorCameraList;
+
+    //完美传感器
+    private List<SensorBaseInfoVo> sensorOgtList;
+
+    //激光雷达
+    private List<SensorBaseInfoVo> sensorLidarList;
+
+    //毫米波雷达
+    private List<SensorBaseInfoVo> sensorRadarList;
+
+    //gps
+    private List<SensorBaseInfoVo> sensorGpsList;
+
+    //任务列表信息
+    private List<ManualProjectTaskVo> taskList;
+
+    //运行状态统计
+    private List<ProjectRunStateNumVo> stateList;
+
+    //运行结果统计
+    private List<ProjectRunResultRatioNumVo> resultList;
+
+
+}

+ 47 - 0
api-common/src/main/java/api/common/pojo/vo/project/ProjectReportVo.java

@@ -0,0 +1,47 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 工作报告
+ */
+@Getter
+@Setter
+public class ProjectReportVo {
+
+    //算法名称
+    private String algorithmName;
+
+    //算法得分
+    private Double algorithmScore;
+
+    //算法描述
+    private String algorithmDescribe;
+
+    //评测等级
+    private String evaluationLevel;
+
+    //得分率
+    private Double scoreRatio;
+
+    //场景名称(二级,多个指标用顿号隔开)
+//    private String sceneNames;
+
+    //算法简评
+    private String algorithmEvaluation;
+
+    //算法测试得分
+    private List<AlgorithmScoreVo> algorithmScoreList;
+
+    private String evaluationGrade;
+
+    //算法测试评分细则、详细得分情况
+    private List<ScenePackageSubListVO> sceneScoreList;
+
+
+}
+
+

+ 21 - 0
api-common/src/main/java/api/common/pojo/vo/project/ProjectRunResultRatioNumVo.java

@@ -0,0 +1,21 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 运行结果比例
+ */
+@Getter
+@Setter
+public class ProjectRunResultRatioNumVo {
+
+    //结果名称
+    private String resultName;
+
+    //数量
+    private Integer num;
+
+    //比例
+    private Double ratio;
+}

+ 21 - 0
api-common/src/main/java/api/common/pojo/vo/project/ProjectRunStateNumVo.java

@@ -0,0 +1,21 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *工作运行状态数量统计
+ */
+@Getter
+@Setter
+public class ProjectRunStateNumVo {
+
+    //状态名称
+    private String stateName;
+
+    //统计数量
+    private Integer num;
+
+    //比例
+    private Double ratio;
+}

+ 89 - 0
api-common/src/main/java/api/common/pojo/vo/project/ProjectTaskDetailsVo.java

@@ -0,0 +1,89 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 任务详情
+ */
+@Getter
+@Setter
+public class ProjectTaskDetailsVo {
+
+    //任务id
+    private String taskId;
+
+    //场景名称
+    private String sceneName;
+
+    //运行开始时间
+    private String runStartTime;
+
+    //运行结束时间
+    private String runEndTime;
+
+    //执行状态
+    private String runState;
+
+    //完成状态
+    private String finishState;
+
+    //场景描述
+    private String sceneDescribe;
+
+    //里程
+    private String mileage;
+
+    //平均速度
+    private String averageVelocity;
+
+    //最大速度
+    private String maximunSpeed;
+
+    //最小速度
+    private String minimunVelocity;
+
+    //最大减速度
+    private String maximumDeceleration;
+
+    //最大摆角速度
+    private String maximumSwingSpeed;
+
+    //自车速度方差
+    private Double speedVariance;
+
+    //舒适度
+    private String speedComfortLevel;
+
+    //自车横摆角速度均方根
+    private Double swingSpeedMeanSquareRoot;
+
+    //舒适度
+    private String swingComfortLevel;
+
+    //acceleration变化曲线
+    private String acceleration;
+
+    //lane_offset变化曲线
+    private String laneOffset;
+
+    //brake变化曲线
+    private String brake;
+
+    //steeting_wheel变化曲线
+    private String steetingWheel;
+
+    //throttle变化曲线
+    private String throttle;
+
+    //yaw_rate变化曲线
+    private String yawRate;
+
+    //velocity变化曲线
+    private String velocity;
+
+    //其他
+    private String otherCurve;
+
+
+}

+ 35 - 0
api-common/src/main/java/api/common/pojo/vo/project/SceneBaseInfoVo.java

@@ -0,0 +1,35 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 场景基本信息
+ */
+@Getter
+@Setter
+public class SceneBaseInfoVo {
+
+    //场景id集合
+    private String sceneIds;
+
+    //自然场景id
+    private String naturalId;
+
+    //自然场景名称
+    private String naturalName;
+
+    //交通事故场景id
+    private String accidentId;
+
+    //交通事故场景名称/自然法规场景名称
+    private String sceneName;
+
+    //标准法规场景id
+    private String regulationsId;
+
+    //场景描述通用字段
+    private String commonSceneName;
+
+
+}

+ 18 - 0
api-common/src/main/java/api/common/pojo/vo/project/ScenePackageBaseVo.java

@@ -0,0 +1,18 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 场景包基本信息
+ */
+@Getter
+@Setter
+public class ScenePackageBaseVo {
+
+    private String packageId;
+
+    private String packageName;
+
+    private String sceneNum;
+}

+ 61 - 0
api-common/src/main/java/api/common/pojo/vo/project/ScenePackageSubListVO.java

@@ -0,0 +1,61 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 场景子包信息
+ */
+@Getter
+@Setter
+public class ScenePackageSubListVO {
+
+    //指标id
+    private String sublistId;
+
+    //指标名称
+    private String sublistName;
+
+    //场景数量
+    private Integer sceneNum;
+
+    //测试权重
+    private String weight;
+
+    //父级id
+    private String parentId;
+
+    //自然场景id
+    private String sceneNaturalIds;
+
+    //所有场景得分信息
+    private List<SceneScoreVo> sceneScoreList;
+
+    //交通事故场景id
+    private String sceneTrafficIds;
+
+    //标准法规场景id
+    private String sceneStatueIds;
+
+    //泛化场景id
+    private String sceneGeneralizationIds;
+
+    //下级指标
+    private List<ScenePackageSubListVO> childScenePackageSubListVOList;
+
+    //得分
+    private Double score;
+
+    //未达标场景个数
+    private Integer notStandardSceneNum;
+
+    //当前指标级别(指标划分,场景包下一级为一级指标,往后依次递增)
+    private Integer level;
+
+    //指标评价
+    private String targetEvaluate;
+
+
+}

+ 27 - 0
api-common/src/main/java/api/common/pojo/vo/project/SceneScoreInfoVo.java

@@ -0,0 +1,27 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 场景得分信息
+ */
+@Getter
+@Setter
+public class SceneScoreInfoVo {
+
+    //场景名称
+    private String sceneName;
+
+    //场景id
+    private String sceneId;
+
+    //场景类型
+    private String sceneType;
+
+    //得分
+    private String score;
+
+    //指标
+    private String target;
+}

+ 39 - 0
api-common/src/main/java/api/common/pojo/vo/project/SceneScoreVo.java

@@ -0,0 +1,39 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 场景得分信息
+ */
+@Getter
+@Setter
+public class SceneScoreVo {
+
+    //id
+    private String id;
+
+    //场景id
+    private String sceneId;
+
+    //测试场景
+    private String sceneName;
+
+    //场景类型
+    private String sceneType;
+
+    //得分
+    private Double score;
+
+    //指标评价
+    private String targetEvaluate;
+
+    //场景包场景数量
+    private Integer num;
+
+    //返回的场景id
+    private String returnSceneId;
+
+    //得分说明
+    private String scoreExplain;
+}

+ 14 - 0
api-common/src/main/java/api/common/pojo/vo/project/SensorBaseInfoVo.java

@@ -0,0 +1,14 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 传感器基本信息
+ */
+@Getter
+@Setter
+public class SensorBaseInfoVo {
+    //名称
+    private String name;
+}

+ 38 - 0
api-common/src/main/java/api/common/pojo/vo/project/SimulationManualProjectSingleVo.java

@@ -0,0 +1,38 @@
+package api.common.pojo.vo.project;
+
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class SimulationManualProjectSingleVo {
+
+    //id
+    private String id;
+
+    //项目名称
+    private String projectName;
+
+    //项目描述
+    private String projectDescribe;
+
+    //算法
+    private String algorithm;
+
+    //车辆
+    private String vehicle;
+
+    //场景
+    private String scene;
+
+    //最大仿真时间(秒)
+    private Long maxSimulationTime;
+
+    //并行度
+    private String parallelism;
+
+    //是否选择gpu(0:是,1:否)
+    private String isChoiceGpu;
+
+}

+ 39 - 0
api-common/src/main/java/api/common/pojo/vo/project/SimulationManualProjectVo.java

@@ -0,0 +1,39 @@
+package api.common.pojo.vo.project;
+
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+@Getter
+@Setter
+public class SimulationManualProjectVo {
+
+    private String id;
+
+    private String projectId;//项目id
+
+    private String projectName;//项目名称
+
+    private Date createTime;//创建时间
+    private String createTimeFmt;//创建时间
+
+    private String algorithm;//算法名称
+
+    private Long automaticRunTimes;
+
+    private Date lastRunTime;
+
+    private String automaticRunState;
+
+    private String nowRunState;//进度(字典)
+    private String nowRunStateDict;//进度(字典)
+
+    private String evaluationLevel;//评测等级(字典)
+    private String evaluationLevelDict;//评测等级(字典)
+
+    private Long maxSimulationTime;
+
+
+}

+ 16 - 0
api-common/src/main/java/api/common/pojo/vo/project/SystemUserVo.java

@@ -0,0 +1,16 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 人员返回信息
+ */
+@Getter
+@Setter
+public class SystemUserVo {
+
+    private String id;
+
+    private String cpuAvailableNumber;
+}

+ 22 - 0
api-common/src/main/java/api/common/pojo/vo/project/VehicleBaseInfoVo.java

@@ -0,0 +1,22 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 车辆基本信息
+ */
+@Getter
+@Setter
+public class VehicleBaseInfoVo {
+
+    //id
+    private String id;
+
+    //车辆名称
+    private String vehicleName;
+
+    //车辆描述
+    private String description;
+
+}

+ 19 - 0
api-common/src/main/java/api/common/pojo/vo/project/VehicleSensorVo.java

@@ -0,0 +1,19 @@
+package api.common.pojo.vo.project;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 车辆传感器关联信息
+ */
+@Getter
+@Setter
+public class VehicleSensorVo {
+
+    //传感器id
+    private String sensorId;
+
+    //传感器类型
+    private String sensorType;
+
+}

+ 1 - 0
api-common/src/main/java/api/common/pojo/vo/scene/SceneAccidentVO.java

@@ -23,5 +23,6 @@ public class SceneAccidentVO extends PageVO implements Serializable {
     private String conflictBehavior ; //冲突行为
     private String conflictType ; //冲突类型
     private String videoAddress ; //视频地址
+    private String videoPreview;//视频预览地址
 
 }

+ 1 - 0
api-common/src/main/java/api/common/pojo/vo/scene/SceneNaturalVO.java

@@ -59,6 +59,7 @@ public class SceneNaturalVO extends PageVO implements Serializable {
     private String xodrAddress ; //
     private String xoscAddress ; //
     private String jsonAddress ; //
+    private String videoPreview;//视频预览地址
 
 
 }

+ 28 - 0
api-common/src/main/java/api/common/pojo/vo/scene/ScenePackageNewVO.java

@@ -0,0 +1,28 @@
+package api.common.pojo.vo.scene;
+
+import api.common.pojo.common.PageVO;
+import lombok.*;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+import java.util.List;
+
+/**
+ * 测试场景包
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ScenePackageNewVO  implements Serializable {
+
+    private String packageId  ;//主键Id
+    private String packageCode  ;//测试包指标Id
+    private String packageName ; //指标名称
+    private String weight;//权重
+    private Integer sceneNum;//场景数量
+    private String remarks;//备注
+    private List<ScenePackageSublistVO> list;
+
+}

+ 8 - 3
api-common/src/main/java/api/common/pojo/vo/scene/ScenePackageSublistVO.java

@@ -18,13 +18,18 @@ public class ScenePackageSublistVO implements Serializable {
     private String sublistId  ;//主键Id
     private String sublistName ; //指标名称
     private String weight;//权重
-    private String ruleName ; //规则名称
-    private Integer sceneNum;//场景数量
+    private String ruleName;//打分规则名称
+    private String packageAndRules;//关联打分规则Id
+    private String sceneNaturalIds;//关联自然场景ids
+    private String sceneTrafficIds;//关联交通事故场景ids
+    private String sceneStatueIds;//关联标准法规ids
+    private String sceneGeneralizationIds;//关联泛化场景ids
+    private Integer sceneNum=0;//场景数量
     private String parentId;//父节点id
     private String rootId;//根id
     private int packageLevel;//级别
     private String remarks;//备注
     private int seq;//在当前层级下的顺序,由小到大
+    private boolean hasChildren;
     private List<ScenePackageSublistVO>  list;
-
 }

+ 1 - 0
api-common/src/main/java/api/common/pojo/vo/scene/ScenePackageVO.java

@@ -18,6 +18,7 @@ public class ScenePackageVO extends PageVO implements Serializable {
 
     private String packageId  ;//主键Id
     private String packageName ; //指标名称
+    private String packageCode  ;//测试包指标Id
     private Integer sceneNum;//场景数量
     private String share ; //是否分析  1为分享
     /**

+ 1 - 0
api-common/src/main/java/api/common/pojo/vo/scene/ScoringRulesVO.java

@@ -17,6 +17,7 @@ import java.sql.Timestamp;
 public class ScoringRulesVO extends PageVO implements Serializable {
 
     private String rulesId  ;//打分规则Id
+    private String rulesCode  ;//打分规则code
     private String ruleName ; //规则名称
     private String ruleDescription ; //打分规则描述
     private String share ; //是否分析  1为分享

+ 1 - 0
api-common/src/main/java/api/common/pojo/vo/scene/StandardsRegulationsVO.java

@@ -21,5 +21,6 @@ public class StandardsRegulationsVO extends PageVO implements Serializable {
     private String standardType;  //标准类型
     private String share ; //是否分析  1为分享
     private String videoAddress ; //视频地址
+    private String videoPreview;//视频预览地址
 
 }

+ 5 - 0
api-common/src/main/java/api/common/util/ObjectUtil.java

@@ -2,7 +2,9 @@ package api.common.util;
 
 import api.common.pojo.vo.system.DictVO;
 import com.fasterxml.jackson.databind.JsonNode;
+import org.springframework.beans.BeanUtils;
 
+import java.security.PublicKey;
 import java.util.*;
 
 public class ObjectUtil {
@@ -103,4 +105,7 @@ public class ObjectUtil {
         return dictVO;
     }
 
+    public static void voToPo(Object source, Object target){
+        BeanUtils.copyProperties(source,target);
+    }
 }

+ 2 - 2
api-common/src/main/java/api/common/util/ParamUtil.java

@@ -21,9 +21,9 @@ public class ParamUtil {
                 return ;
             }
             for (int i = 0; i < arr.length; i++) {
+                String[] selector = arr[i];
                 //至少包含两级
-                if(arr[i] != null || arr[i].length >= 2){
-                    String[] selector = arr[i];
+                if(selector != null && selector.length >= 2){
                     //截取type和value
                     String type = selector[selector.length-2];
                     String value = selector[selector.length-1];

+ 4 - 0
api-common/src/main/java/api/common/util/StringUtil.java

@@ -10,6 +10,10 @@ public class StringUtil {
         return UUID.randomUUID().toString().replace("-", "");
     }
 
+    public static String getRandomCode() {
+        return TimeUtil.getNow() + "";
+    }
+
     public static boolean isEmpty(Object string) {
         return string == null || "".equals(string);
     }

+ 2 - 2
simulation-resource-server/src/main/java/com/css/simulation/resource/feign/FileDownService.java

@@ -3,7 +3,7 @@ package com.css.simulation.resource.feign;
 import api.common.pojo.common.ResponseBodyVO;
 import api.common.pojo.param.MinioParameter;
 import com.css.simulation.resource.common.config.FeignConfiguration;
-import com.css.simulation.resource.feign.fallback.RedisServiceFallback;
+import com.css.simulation.resource.feign.fallback.FileDownServiceFallback;
 import feign.Response;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.http.MediaType;
@@ -20,7 +20,7 @@ import org.springframework.web.multipart.MultipartFile;
         contextId = "file",
         value = "simulation-resource-common",
         path = "/simulation/resource/common",
-        fallback = RedisServiceFallback.class,
+        fallback = FileDownServiceFallback.class,
         configuration = FeignConfiguration.class
 )
 public interface FileDownService {

+ 5 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/CameraCtrl.java

@@ -83,7 +83,11 @@ public class CameraCtrl {
             return new ResponseBodyVO(false, 500, "参数必传!",null);
         }
         ResponseBodyVO<CameraPO> response = new ResponseBodyVO<CameraPO>(ResponseBodyVO.Response.SUCCESS);
-        response.setInfo(cameraService.shareCamera(cameraPO));
+        CameraPO po = cameraService.shareCamera(cameraPO);
+        if(ObjectUtil.isNull(po.getId())){
+            return new ResponseBodyVO(false, 500, "传感器名称重复!",null);
+        }
+        response.setInfo(po);
         return response;
     }
 

+ 115 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/ConfigCtrl.java

@@ -0,0 +1,115 @@
+package com.css.simulation.resource.model.ctrl;
+
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.model.ConfigPageParam;
+import api.common.pojo.po.model.ConfigPO;
+import api.common.pojo.vo.model.ConfigVO;
+import api.common.util.ObjectUtil;
+import com.css.simulation.resource.model.service.ConfigService;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+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.ResponseBody;
+
+@Controller
+@RequestMapping("/config")
+public class ConfigCtrl {
+
+    @Autowired
+    ConfigService configService;
+
+    /**
+     * 获取列表
+     */
+    @RequestMapping("/getConfigPageList")
+    @ResponseBody
+    public ResponseBodyVO<PageInfo<ConfigVO>> getConfigPageList(@RequestBody @Validated ConfigPageParam pageParam){
+        ResponseBodyVO<PageInfo<ConfigVO>> response = new ResponseBodyVO<PageInfo<ConfigVO>>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(configService.getConfigPageList(pageParam));
+        return response;
+    }
+
+
+    /**
+     * 根据id获取详情
+     */
+    @RequestMapping("/getConfigInfo")
+    @ResponseBody
+    public ResponseBodyVO<ConfigVO> getConfigInfo(@RequestBody ConfigVO configVO){
+        ResponseBodyVO<ConfigVO> response = new ResponseBodyVO<ConfigVO>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(configService.getConfigInfo(configVO));
+        return response;
+    }
+
+    /**
+     * 新增、修改
+     */
+    @RequestMapping("/saveConfig")
+    @ResponseBody
+    public ResponseBodyVO<ConfigPO> saveConfig(@RequestBody ConfigVO configVO){
+        if(ObjectUtil.isNull(configVO)){
+            return new ResponseBodyVO(false, 500, "参数必传!",null);
+        }
+        ResponseBodyVO<ConfigPO> response = new ResponseBodyVO<ConfigPO>(ResponseBodyVO.Response.SUCCESS);
+        ConfigPO po = configService.saveConfig(configVO);
+        if(ObjectUtil.isNull(po.getId())){
+            return new ResponseBodyVO(false, 500, "配置名称重复!",null);
+        }
+        response.setInfo(po);
+        return response;
+    }
+
+    /**
+     * 详情分享
+     */
+    @RequestMapping("/shareConfigByInfo")
+    @ResponseBody
+    public ResponseBodyVO<ConfigPO> shareConfigByInfo(@RequestBody ConfigVO configVO){
+        if(ObjectUtil.isNull(configVO)){
+            return new ResponseBodyVO(false, 500, "参数必传!",null);
+        }
+        ResponseBodyVO<ConfigPO> response = new ResponseBodyVO<ConfigPO>(ResponseBodyVO.Response.SUCCESS);
+        ConfigPO po = configService.shareConfigByInfo(configVO);
+        if(ObjectUtil.isNull(po.getId())){
+            return new ResponseBodyVO(false, 500, "配置名称重复!",null);
+        }
+        response.setInfo(po);
+        return response;
+    }
+
+    /**
+     * 列表分享
+     */
+    @RequestMapping("/shareConfigById")
+    @ResponseBody
+    public ResponseBodyVO<ConfigPO> shareConfigById(@RequestBody ConfigVO configVO){
+        if(ObjectUtil.isNull(configVO) || ObjectUtil.isNull(configVO.getId())){
+            return new ResponseBodyVO(false, 500, "参数必传!",null);
+        }
+        ResponseBodyVO<ConfigPO> response = new ResponseBodyVO<ConfigPO>(ResponseBodyVO.Response.SUCCESS);
+        ConfigPO po = configService.shareConfigById(configVO);
+        if(ObjectUtil.isNull(po.getId())){
+            return new ResponseBodyVO(false, 500, "配置名称重复!",null);
+        }
+        response.setInfo(po);
+        return response;
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delConfigById")
+    @ResponseBody
+    public ResponseBodyVO delConfigById(@RequestBody ConfigVO configVO){
+        int i = configService.delConfigById(configVO);
+        if(i>0){
+            return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+        }else{
+            return new ResponseBodyVO(false, 500, "删除失败!",null);
+        }
+    }
+}

+ 107 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/GpsCtrl.java

@@ -0,0 +1,107 @@
+package com.css.simulation.resource.model.ctrl;
+
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.model.GpsParam;
+import api.common.pojo.po.model.GpsPO;
+import api.common.pojo.vo.model.GpsVO;
+import api.common.util.ObjectUtil;
+import com.css.simulation.resource.model.service.GpsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+@Controller
+@RequestMapping("/gps")
+public class GpsCtrl {
+
+    @Autowired
+    GpsService gpsService;
+
+    /**
+     * 获取列表
+     */
+    @RequestMapping("/getGpsList")
+    @ResponseBody
+    public ResponseBodyVO<List<GpsVO>> getGpsList(@RequestBody GpsParam gpsParam){
+        ResponseBodyVO<List<GpsVO>> response = new ResponseBodyVO<List<GpsVO>>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(gpsService.getGpsList(gpsParam));
+        return response;
+    }
+
+    /**
+     * 获取私有列表
+     */
+    @RequestMapping("/getMyGpsList")
+    @ResponseBody
+    public ResponseBodyVO<List<GpsVO>> getMyCameraList(@RequestBody GpsParam gpsParam){
+        ResponseBodyVO<List<GpsVO>> response = new ResponseBodyVO<List<GpsVO>>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(gpsService.getMyGpsList(gpsParam));
+        return response;
+    }
+
+    /**
+     * 根据id获取详情
+     */
+    @RequestMapping("/getGpsInfo")
+    @ResponseBody
+    public ResponseBodyVO<GpsVO> getGpsInfo(@RequestBody GpsParam gpsParam){
+        ResponseBodyVO<GpsVO> response = new ResponseBodyVO<GpsVO>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(gpsService.getGpsInfo(gpsParam));
+        return response;
+    }
+
+    /**
+     * 新增、修改、另存为
+     */
+    @RequestMapping("/saveGps")
+    @ResponseBody
+    public ResponseBodyVO<GpsPO> saveGps(@RequestBody GpsPO gpsPO){
+        if(ObjectUtil.isNull(gpsPO)){
+            return new ResponseBodyVO(false, 500, "参数必传!",null);
+        }
+        ResponseBodyVO<GpsPO> response = new ResponseBodyVO<GpsPO>(ResponseBodyVO.Response.SUCCESS);
+        GpsPO po = gpsService.saveGps(gpsPO);
+        if(ObjectUtil.isNull(po.getId())){
+            return new ResponseBodyVO(false, 500, "传感器名称重复!",null);
+        }
+        response.setInfo(po);
+        return response;
+    }
+
+    /**
+     * 分享
+     */
+    @RequestMapping("/shareGps")
+    @ResponseBody
+    public ResponseBodyVO<GpsPO> shareGps(@RequestBody GpsPO gpsPO){
+        if(ObjectUtil.isNull(gpsPO)){
+            return new ResponseBodyVO(false, 500, "参数必传!",null);
+        }
+        ResponseBodyVO<GpsPO> response = new ResponseBodyVO<GpsPO>(ResponseBodyVO.Response.SUCCESS);
+        GpsPO po = gpsService.shareGps(gpsPO);
+        if(ObjectUtil.isNull(po.getId())){
+            return new ResponseBodyVO(false, 500, "传感器名称重复!",null);
+        }
+        response.setInfo(po);
+        return response;
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delGpsById")
+    @ResponseBody
+    public ResponseBodyVO delGpsById(@RequestBody GpsPO gpsPO){
+        int i = gpsService.delGpsById(gpsPO);
+        if(i>0){
+            return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+        }else{
+            return new ResponseBodyVO(false, 500, "删除失败!",null);
+        }
+    }
+}

+ 5 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/LidarCtrl.java

@@ -83,7 +83,11 @@ public class LidarCtrl {
             return new ResponseBodyVO(false, 500, "参数必传!",null);
         }
         ResponseBodyVO<LidarPO> response = new ResponseBodyVO<LidarPO>(ResponseBodyVO.Response.SUCCESS);
-        response.setInfo(lidarService.shareLidar(lidarPO));
+        LidarPO po = lidarService.shareLidar(lidarPO);
+        if(ObjectUtil.isNull(po.getId())){
+            return new ResponseBodyVO(false, 500, "传感器名称重复!",null);
+        }
+        response.setInfo(po);
         return response;
     }
 

+ 5 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/OgtCtrl.java

@@ -82,7 +82,11 @@ public class OgtCtrl {
             return new ResponseBodyVO(false, 500, "参数必传!",null);
         }
         ResponseBodyVO<OgtPO> response = new ResponseBodyVO<OgtPO>(ResponseBodyVO.Response.SUCCESS);
-        response.setInfo(ogtService.shareOgt(ogtPO));
+        OgtPO po = ogtService.shareOgt(ogtPO);
+        if(ObjectUtil.isNull(po.getId())){
+            return new ResponseBodyVO(false, 500, "传感器名称重复!",null);
+        }
+        response.setInfo(po);
         return response;
     }
 

+ 5 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/VehicleCtrl.java

@@ -83,7 +83,11 @@ public class VehicleCtrl {
             return new ResponseBodyVO(false, 500, "参数必传!",null);
         }
         ResponseBodyVO<VehiclePO> response = new ResponseBodyVO<VehiclePO>(ResponseBodyVO.Response.SUCCESS);
-        response.setInfo(vehicleService.shareVehicle(vehiclePO));
+        VehiclePO po = vehicleService.shareVehicle(vehiclePO);
+        if(ObjectUtil.isNull(po.getId())){
+            return new ResponseBodyVO(false, 500, "车辆名称重复!",null);
+        }
+        response.setInfo(po);
         return response;
     }
 

+ 36 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/mapper/ConfigMapper.java

@@ -0,0 +1,36 @@
+package com.css.simulation.resource.model.mapper;
+
+
+import api.common.pojo.param.model.ConfigPageParam;
+import api.common.pojo.po.model.ConfigPO;
+import api.common.pojo.po.model.ConfigSensorPO;
+import api.common.pojo.vo.model.ConfigSensorVO;
+import api.common.pojo.vo.model.ConfigVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface ConfigMapper {
+
+
+    List<ConfigVO> getConfigPageList(ConfigPageParam pageParam);
+
+    ConfigVO getConfigInfo(ConfigVO configVO);
+
+    List<ConfigSensorVO> getConfigSensors(ConfigVO configVO);
+
+    List<ConfigVO> checkConfigName(ConfigPO configPO);
+
+    void insertConfig(ConfigPO configPO);
+
+    void updateConfig(ConfigPO configPO);
+
+    void delConfigSensors(ConfigPO configPO);
+
+    void insertConfigSensors(List<ConfigSensorPO> configSensorPOs);
+
+    int delConfigById(ConfigPO po);
+}

+ 27 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/mapper/GpsMapper.java

@@ -0,0 +1,27 @@
+package com.css.simulation.resource.model.mapper;
+
+
+import api.common.pojo.param.model.GpsParam;
+import api.common.pojo.po.model.GpsPO;
+import api.common.pojo.vo.model.GpsVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface GpsMapper {
+
+    List<GpsVO> getGpsList(GpsParam gpsParam);
+
+    GpsVO getGpsInfo(GpsParam gpsParam);
+
+    List<GpsVO> checkGpsName(GpsPO gpsPO);
+
+    void insert(GpsPO gpsPO);
+
+    void update(GpsPO gpsPO);
+
+    int delGpsById(GpsPO gpsPO);
+}

+ 13 - 5
simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/CameraService.java

@@ -49,6 +49,7 @@ public class CameraService {
         cameraPO.setModifyUserId(currentUserId);
         cameraPO.setModifyTime(currentTime);
         cameraPO.setIsDeleted(DictConstants.NO);
+        cameraPO.setShare(DictConstants.NO);//私有
         //名称校验
         List<CameraVO> list = cameraMapper.checkCameraName(cameraPO);
         if(ObjectUtil.isNotNull(list)){
@@ -58,8 +59,7 @@ public class CameraService {
         String id = cameraPO.getId();
         if(ObjectUtil.isNull(id)){//新增
             cameraPO.setId(StringUtil.getRandomUUID());
-            cameraPO.setSensorId(StringUtil.getRandomUUID());
-            cameraPO.setShare(DictConstants.NO);//私有
+            cameraPO.setSensorCode(StringUtil.getRandomCode());
             cameraMapper.insert(cameraPO);
         }else{//修改
             cameraMapper.update(cameraPO);
@@ -68,6 +68,16 @@ public class CameraService {
     }
 
     public CameraPO shareCamera(CameraPO cameraPO) {
+        //调用保存
+        saveCamera(cameraPO);
+        cameraPO.setShare(DictConstants.YES);//转公有
+        cameraPO.setCreateUserId(null);
+        //名称校验
+        List<CameraVO> list = cameraMapper.checkCameraName(cameraPO);
+        if(ObjectUtil.isNotNull(list)){
+            cameraPO.setId(null);
+            return cameraPO;
+        }
         //常规字段赋值
         String currentUserId = AuthUtil.getCurrentUserId();
         Timestamp currentTime = TimeUtil.getNowForMysql();
@@ -76,10 +86,8 @@ public class CameraService {
         cameraPO.setModifyUserId(currentUserId);
         cameraPO.setModifyTime(currentTime);
         cameraPO.setIsDeleted(DictConstants.NO);
-
-        cameraPO.setShare(DictConstants.YES);//转公有
         cameraPO.setId(StringUtil.getRandomUUID());
-        cameraPO.setSensorId(StringUtil.getRandomUUID());
+        cameraPO.setSensorCode(StringUtil.getRandomCode());
         cameraMapper.insert(cameraPO);
         return cameraPO;
     }

+ 191 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/ConfigService.java

@@ -0,0 +1,191 @@
+package com.css.simulation.resource.model.service;
+
+import api.common.pojo.constants.DictConstants;
+import api.common.pojo.param.model.ConfigPageParam;
+import api.common.pojo.po.model.ConfigPO;
+import api.common.pojo.po.model.ConfigSensorPO;
+import api.common.pojo.vo.model.ConfigSensorVO;
+import api.common.pojo.vo.model.ConfigVO;
+import api.common.util.ObjectUtil;
+import api.common.util.StringUtil;
+import api.common.util.TimeUtil;
+import com.css.simulation.resource.common.utils.AuthUtil;
+import com.css.simulation.resource.common.utils.PageUtil;
+import com.css.simulation.resource.model.mapper.CameraMapper;
+import com.css.simulation.resource.model.mapper.ConfigMapper;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.sql.Timestamp;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class ConfigService {
+
+    @Autowired
+    ConfigMapper configMapper;
+
+    public PageInfo<ConfigVO> getConfigPageList(ConfigPageParam pageParam) {
+        PageUtil.setPageInfo(pageParam);
+        pageParam.setCreateUserId(AuthUtil.getCurrentUserId());
+        if(DictConstants.YES.equals(pageParam.getShare())){//公有查询去掉创建人id条件
+            pageParam.setCreateUserId(null);
+        }
+        List<ConfigVO> list = configMapper.getConfigPageList(pageParam);
+        //传感器数量
+        list.forEach(configVO -> {
+            List<ConfigSensorVO> sensorList = configMapper.getConfigSensors(configVO);
+            Map<String, List<ConfigSensorVO>> configSensors = sensorList.stream().collect(Collectors.groupingBy(ConfigSensorVO::getSensorType));
+            Map<String,String> sensorCount = new HashMap<>();
+            configSensors.forEach((sensorType,configSensorVOs)->{
+                sensorCount.put(sensorType,String.valueOf(configSensorVOs.size()));
+            });
+            configVO.setSensorCount(sensorCount);
+        });
+        return new PageInfo<>(list);
+    }
+
+    public ConfigVO getConfigInfo(ConfigVO configVO) {
+        configVO = configMapper.getConfigInfo(configVO);
+        List<ConfigSensorVO> sensorList = configMapper.getConfigSensors(configVO);
+        Map<String, List<ConfigSensorVO>> configSensors = sensorList.stream().collect(Collectors.groupingBy(ConfigSensorVO::getSensorType));
+        configVO.setConfigSensors(configSensors);
+        return configVO;
+    }
+
+    public ConfigPO saveConfig(ConfigVO configVO) {
+        //构建主表对象
+        ConfigPO configPO = new ConfigPO();
+        String currentUserId = AuthUtil.getCurrentUserId();
+        Timestamp currentTime = TimeUtil.getNowForMysql();
+        ObjectUtil.voToPo(configVO,configPO);
+        configPO.setCreateUserId(currentUserId);
+        configPO.setCreateTime(currentTime);
+        configPO.setModifyUserId(currentUserId);
+        configPO.setModifyTime(currentTime);
+        configPO.setIsDeleted(DictConstants.NO);
+        configPO.setShare(DictConstants.NO);//私有
+        //单独处理配置描述
+        configPO.setDescription(configVO.getConfigDescription());
+        //名称校验
+        List<ConfigVO> list = configMapper.checkConfigName(configPO);
+        if(ObjectUtil.isNotNull(list)){
+            configPO.setId(null);
+            return configPO;
+        }
+        //主表主键
+        String configId = configPO.getId();
+        if(ObjectUtil.isNull(configId)){//新增
+            configId = StringUtil.getRandomUUID();
+            configPO.setId(configId);
+            configPO.setConfigCode(StringUtil.getRandomCode());
+            configMapper.insertConfig(configPO);
+        }else{//修改
+            configMapper.updateConfig(configPO);
+        }
+        //删除子表旧数据
+        configMapper.delConfigSensors(configPO);
+        //构建字表新数据
+        //List<ConfigSensorVO> configSensorVOs = configVO.getConfigSensors();
+        Map<String, List<ConfigSensorVO>> configSensors = configVO.getConfigSensors();
+        List<ConfigSensorPO> configSensorPOs = new ArrayList<>();
+        if(ObjectUtil.isNotNull(configSensors)){
+            configSensors.forEach((sensorType,configSensorVOs)->{
+                if(ObjectUtil.isNotNull(configSensorVOs)){
+                    configSensorVOs.forEach(vo -> {
+                        ConfigSensorPO po = new ConfigSensorPO();
+                        ObjectUtil.voToPo(vo,po);
+                        po.setId(StringUtil.getRandomUUID());
+                        //子表外键
+                        po.setConfigId(configPO.getId());
+                        po.setCreateUserId(currentUserId);
+                        po.setCreateTime(currentTime);
+                        po.setModifyUserId(currentUserId);
+                        po.setModifyTime(currentTime);
+                        po.setIsDeleted(DictConstants.NO);
+                        configSensorPOs.add(po);
+                    });
+                }
+            });
+        }
+        if(ObjectUtil.isNotNull(configSensorPOs)){
+            configMapper.insertConfigSensors(configSensorPOs);
+        }
+        return configPO;
+    }
+
+    public int delConfigById(ConfigVO vo) {
+        ConfigPO po = new ConfigPO();
+        ObjectUtil.voToPo(vo,po);
+        po.setIsDeleted(DictConstants.YES);
+        po.setModifyUserId(AuthUtil.getCurrentUserId());
+        po.setModifyTime(TimeUtil.getNowForMysql());
+        int i = configMapper.delConfigById(po);
+        return i;
+    }
+
+    public ConfigPO shareConfigByInfo(ConfigVO configVO) {
+        //构建主表对象
+        ConfigPO configPO = new ConfigPO();
+        ObjectUtil.voToPo(configVO,configPO);
+        configPO.setShare(DictConstants.YES);//转公有
+        configPO.setCreateUserId(null);
+        //名称校验
+        List<ConfigVO> list = configMapper.checkConfigName(configPO);
+        if(ObjectUtil.isNotNull(list)){
+            configPO.setId(null);
+            return configPO;
+        }
+        String currentUserId = AuthUtil.getCurrentUserId();
+        Timestamp currentTime = TimeUtil.getNowForMysql();
+        configPO.setCreateUserId(currentUserId);
+        configPO.setCreateTime(currentTime);
+        configPO.setModifyUserId(currentUserId);
+        configPO.setModifyTime(currentTime);
+        configPO.setIsDeleted(DictConstants.NO);
+        //单独处理配置描述
+        configPO.setDescription(configVO.getConfigDescription());
+        //主表主键
+        String configId = StringUtil.getRandomUUID();
+        configPO.setId(configId);
+        configPO.setConfigCode(StringUtil.getRandomCode());
+        configMapper.insertConfig(configPO);
+        //删除子表旧数据
+        configMapper.delConfigSensors(configPO);
+        //构建字表新数据
+        Map<String, List<ConfigSensorVO>> configSensors = configVO.getConfigSensors();
+        List<ConfigSensorPO> configSensorPOs = new ArrayList<>();
+        if(ObjectUtil.isNotNull(configSensors)){
+            configSensors.forEach((sensorType,configSensorVOs)->{
+                if(ObjectUtil.isNotNull(configSensorVOs)){
+                    configSensorVOs.forEach(vo -> {
+                        ConfigSensorPO po = new ConfigSensorPO();
+                        ObjectUtil.voToPo(vo,po);
+                        po.setId(StringUtil.getRandomUUID());
+                        //子表外键
+                        po.setConfigId(configPO.getId());
+                        po.setCreateUserId(currentUserId);
+                        po.setCreateTime(currentTime);
+                        po.setModifyUserId(currentUserId);
+                        po.setModifyTime(currentTime);
+                        po.setIsDeleted(DictConstants.NO);
+                        configSensorPOs.add(po);
+                    });
+                }
+            });
+        }
+        if(ObjectUtil.isNotNull(configSensorPOs)){
+            configMapper.insertConfigSensors(configSensorPOs);
+        }
+        return configPO;
+    }
+
+    public ConfigPO shareConfigById(ConfigVO configVO) {
+        configVO = getConfigInfo(configVO);
+        ConfigPO configPO = shareConfigByInfo(configVO);
+        return configPO;
+    }
+}

+ 101 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/GpsService.java

@@ -0,0 +1,101 @@
+package com.css.simulation.resource.model.service;
+
+import api.common.pojo.constants.DictConstants;
+import api.common.pojo.param.model.GpsParam;
+import api.common.pojo.po.model.GpsPO;
+import api.common.pojo.vo.model.GpsVO;
+import api.common.util.ObjectUtil;
+import api.common.util.StringUtil;
+import api.common.util.TimeUtil;
+import com.css.simulation.resource.common.utils.AuthUtil;
+import com.css.simulation.resource.model.mapper.GpsMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.sql.Timestamp;
+import java.util.List;
+
+@Service
+public class GpsService {
+
+    @Autowired
+    GpsMapper gpsMapper;
+
+    public List<GpsVO> getGpsList(GpsParam gpsParam) {
+        gpsParam.setCreateUserId(AuthUtil.getCurrentUserId());
+        gpsParam.setShare(null);
+        List<GpsVO> list = gpsMapper.getGpsList(gpsParam);
+        return list;
+    }
+
+    public List<GpsVO> getMyGpsList(GpsParam gpsParam) {
+        gpsParam.setCreateUserId(AuthUtil.getCurrentUserId());
+        gpsParam.setShare(DictConstants.NO);
+        List<GpsVO> list = gpsMapper.getGpsList(gpsParam);
+        return list;
+    }
+
+    public GpsVO getGpsInfo(GpsParam gpsParam) {
+        return gpsMapper.getGpsInfo(gpsParam);
+    }
+
+    public GpsPO saveGps(GpsPO gpsPO) {
+        //常规字段赋值
+        String currentUserId = AuthUtil.getCurrentUserId();
+        Timestamp currentTime = TimeUtil.getNowForMysql();
+        gpsPO.setCreateUserId(currentUserId);
+        gpsPO.setCreateTime(currentTime);
+        gpsPO.setModifyUserId(currentUserId);
+        gpsPO.setModifyTime(currentTime);
+        gpsPO.setIsDeleted(DictConstants.NO);
+        gpsPO.setShare(DictConstants.NO);//私有
+        //名称校验
+        List<GpsVO> list = gpsMapper.checkGpsName(gpsPO);
+        if(ObjectUtil.isNotNull(list)){
+            gpsPO.setId(null);
+            return gpsPO;
+        }
+        String id = gpsPO.getId();
+        if(ObjectUtil.isNull(id)){//新增
+            gpsPO.setId(StringUtil.getRandomUUID());
+            gpsPO.setSensorCode(StringUtil.getRandomUUID());
+            gpsMapper.insert(gpsPO);
+        }else{//修改
+            gpsMapper.update(gpsPO);
+        }
+        return gpsPO;
+    }
+
+    public GpsPO shareGps(GpsPO gpsPO) {
+        //调用保存
+        saveGps(gpsPO);
+        gpsPO.setShare(DictConstants.YES);//转公有
+        gpsPO.setCreateUserId(null);
+        //名称校验
+        List<GpsVO> list = gpsMapper.checkGpsName(gpsPO);
+        if(ObjectUtil.isNotNull(list)){
+            gpsPO.setId(null);
+            return gpsPO;
+        }
+        //常规字段赋值
+        String currentUserId = AuthUtil.getCurrentUserId();
+        Timestamp currentTime = TimeUtil.getNowForMysql();
+        gpsPO.setCreateUserId(currentUserId);
+        gpsPO.setCreateTime(currentTime);
+        gpsPO.setModifyUserId(currentUserId);
+        gpsPO.setModifyTime(currentTime);
+        gpsPO.setIsDeleted(DictConstants.NO);
+        gpsPO.setId(StringUtil.getRandomUUID());
+        gpsPO.setSensorCode(StringUtil.getRandomCode());
+        gpsMapper.insert(gpsPO);
+        return gpsPO;
+    }
+
+    public int delGpsById(GpsPO gpsPO) {
+        gpsPO.setIsDeleted(DictConstants.YES);
+        gpsPO.setModifyUserId(AuthUtil.getCurrentUserId());
+        gpsPO.setModifyTime(TimeUtil.getNowForMysql());
+        int i = gpsMapper.delGpsById(gpsPO);
+        return i;
+    }
+}

+ 13 - 5
simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/LidarService.java

@@ -48,6 +48,7 @@ public class LidarService {
         lidarPO.setModifyUserId(currentUserId);
         lidarPO.setModifyTime(currentTime);
         lidarPO.setIsDeleted(DictConstants.NO);
+        lidarPO.setShare(DictConstants.NO);//私有
         //名称校验
         List<LidarVO> list = lidarMapper.checkLidarName(lidarPO);
         if(ObjectUtil.isNotNull(list)){
@@ -57,8 +58,7 @@ public class LidarService {
         String id = lidarPO.getId();
         if(ObjectUtil.isNull(id)){//新增
             lidarPO.setId(StringUtil.getRandomUUID());
-            lidarPO.setSensorId(StringUtil.getRandomUUID());
-            lidarPO.setShare(DictConstants.NO);//私有
+            lidarPO.setSensorCode(StringUtil.getRandomCode());
             lidarMapper.insert(lidarPO);
         }else{//修改
             lidarMapper.update(lidarPO);
@@ -67,6 +67,16 @@ public class LidarService {
     }
 
     public LidarPO shareLidar(LidarPO lidarPO) {
+        //调用保存
+        saveLidar(lidarPO);
+        lidarPO.setShare(DictConstants.YES);//转公有
+        lidarPO.setCreateUserId(null);
+        //名称校验
+        List<LidarVO> list = lidarMapper.checkLidarName(lidarPO);
+        if(ObjectUtil.isNotNull(list)){
+            lidarPO.setId(null);
+            return lidarPO;
+        }
         //常规字段赋值
         String currentUserId = AuthUtil.getCurrentUserId();
         Timestamp currentTime = TimeUtil.getNowForMysql();
@@ -75,10 +85,8 @@ public class LidarService {
         lidarPO.setModifyUserId(currentUserId);
         lidarPO.setModifyTime(currentTime);
         lidarPO.setIsDeleted(DictConstants.NO);
-
-        lidarPO.setShare(DictConstants.YES);//转公有
         lidarPO.setId(StringUtil.getRandomUUID());
-        lidarPO.setSensorId(StringUtil.getRandomUUID());
+        lidarPO.setSensorCode(StringUtil.getRandomCode());
         lidarMapper.insert(lidarPO);
         return lidarPO;
     }

+ 13 - 5
simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/OgtService.java

@@ -50,6 +50,7 @@ public class OgtService {
         ogtPO.setModifyUserId(currentUserId);
         ogtPO.setModifyTime(currentTime);
         ogtPO.setIsDeleted(DictConstants.NO);
+        ogtPO.setShare(DictConstants.NO);//私有
         //名称校验
         List<OgtVO> list = ogtMapper.checkOgtName(ogtPO);
         if(ObjectUtil.isNotNull(list)){
@@ -59,8 +60,7 @@ public class OgtService {
         String id = ogtPO.getId();
         if(ObjectUtil.isNull(id)){//新增
             ogtPO.setId(StringUtil.getRandomUUID());
-            ogtPO.setSensorId(StringUtil.getRandomUUID());
-            ogtPO.setShare(DictConstants.NO);//私有
+            ogtPO.setSensorCode(StringUtil.getRandomCode());
             ogtMapper.insert(ogtPO);
         }else{//修改
             ogtMapper.update(ogtPO);
@@ -69,6 +69,16 @@ public class OgtService {
     }
 
     public OgtPO shareOgt(OgtPO ogtPO) {
+        //调用保存
+        saveOgt(ogtPO);
+        ogtPO.setShare(DictConstants.YES);//转公有
+        ogtPO.setCreateUserId(null);
+        //名称校验
+        List<OgtVO> list = ogtMapper.checkOgtName(ogtPO);
+        if(ObjectUtil.isNotNull(list)){
+            ogtPO.setId(null);
+            return ogtPO;
+        }
         //常规字段赋值
         String currentUserId = AuthUtil.getCurrentUserId();
         Timestamp currentTime = TimeUtil.getNowForMysql();
@@ -77,10 +87,8 @@ public class OgtService {
         ogtPO.setModifyUserId(currentUserId);
         ogtPO.setModifyTime(currentTime);
         ogtPO.setIsDeleted(DictConstants.NO);
-
-        ogtPO.setShare(DictConstants.YES);//转公有
         ogtPO.setId(StringUtil.getRandomUUID());
-        ogtPO.setSensorId(StringUtil.getRandomUUID());
+        ogtPO.setSensorCode(StringUtil.getRandomCode());
         ogtMapper.insert(ogtPO);
         return ogtPO;
     }

+ 13 - 2
simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/VehicleService.java

@@ -49,6 +49,7 @@ public class VehicleService {
         vehiclePO.setModifyUserId(currentUserId);
         vehiclePO.setModifyTime(currentTime);
         vehiclePO.setIsDeleted(DictConstants.NO);
+        vehiclePO.setShare(DictConstants.NO);//私有
         //名称校验
         List<VehicleVO> list = vehicleMapper.checkVehicleName(vehiclePO);
         if(ObjectUtil.isNotNull(list)){
@@ -58,7 +59,7 @@ public class VehicleService {
         String id = vehiclePO.getId();
         if(ObjectUtil.isNull(id)){//新增
             vehiclePO.setId(StringUtil.getRandomUUID());
-            vehiclePO.setShare(DictConstants.NO);//私有
+            vehiclePO.setVehicleCode(StringUtil.getRandomCode());
             vehicleMapper.insert(vehiclePO);
         }else{//修改
             vehicleMapper.update(vehiclePO);
@@ -67,6 +68,16 @@ public class VehicleService {
     }
 
     public VehiclePO shareVehicle(VehiclePO vehiclePO) {
+        //调用保存
+        saveVehicle(vehiclePO);
+        vehiclePO.setShare(DictConstants.YES);//转公有
+        vehiclePO.setCreateUserId(null);
+        //名称校验
+        List<VehicleVO> list = vehicleMapper.checkVehicleName(vehiclePO);
+        if(ObjectUtil.isNotNull(list)){
+            vehiclePO.setId(null);
+            return vehiclePO;
+        }
         //常规字段赋值
         String currentUserId = AuthUtil.getCurrentUserId();
         Timestamp currentTime = TimeUtil.getNowForMysql();
@@ -76,8 +87,8 @@ public class VehicleService {
         vehiclePO.setModifyTime(currentTime);
         vehiclePO.setIsDeleted(DictConstants.NO);
 
-        vehiclePO.setShare(DictConstants.YES);//转公有
         vehiclePO.setId(StringUtil.getRandomUUID());
+        vehiclePO.setVehicleCode(StringUtil.getRandomCode());
         vehicleMapper.insert(vehiclePO);
         return vehiclePO;
     }

+ 11 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/constants/ProjectConstants.java

@@ -0,0 +1,11 @@
+package com.css.simulation.resource.project.constants;
+
+/**
+ * 工作相关常量
+ */
+public class ProjectConstants {
+
+    //任务运行 Kafka推送主题
+    public static final String RUN_TASK_TOPIC = "manualProject";
+
+}

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

@@ -0,0 +1,132 @@
+package com.css.simulation.resource.project.ctrl;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.project.SimulationManualProjectParam;
+import com.css.simulation.resource.project.service.SimulationProjectService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ * 工作台模块--项目运行
+ */
+@Controller
+@RequestMapping("/simulationProject")
+public class SimulationProjectCtrl {
+
+    @Autowired
+    private SimulationProjectService service;
+
+
+    /**
+     * 创建/修改工作
+     * @param param
+     * @return
+     */
+    @RequestMapping("addOrUpdateProject")
+    @ResponseBody
+    public ResponseBodyVO addOrUpdateProject(@RequestBody SimulationManualProjectParam param){
+        return service.addOrUpdateProject(param);
+    }
+
+    /**
+     * 查询项目列表
+     * @param param
+     * @return
+     */
+    @RequestMapping("selectProject")
+    @ResponseBody
+    public ResponseBodyVO selectProject(@RequestBody SimulationManualProjectParam param){
+        return service.selectProject(param);
+    }
+
+    /**
+     * 根据id查询
+     * @return
+     */
+    @RequestMapping("selectProjectById")
+    @ResponseBody
+    public ResponseBodyVO selectProjectById(@RequestBody SimulationManualProjectParam param){
+        return service.selectProjectById(param);
+    }
+
+    /**
+     * 删除工作(支持批量删除)
+     * @return
+     */
+    @RequestMapping("deleteProjectByids")
+    @ResponseBody
+    public ResponseBodyVO deleteProjectByids(@RequestBody SimulationManualProjectParam param){
+        return service.deleteProjectByids(param);
+    }
+
+    /**
+     * 修改工作运行状态
+     * @param param
+     * @return
+     */
+    @RequestMapping("updateProjectNowRunState")
+    @ResponseBody
+    public ResponseBodyVO updateProjectNowRunState(@RequestBody SimulationManualProjectParam param){
+        return service.updateProjectNowRunState(param);
+    }
+
+    /**
+     * 获取工作详情
+     * @param param
+     * @return
+     */
+    @RequestMapping("selectProjectDetailsById")
+    @ResponseBody
+    public ResponseBodyVO selectProjectDetailsById(@RequestBody SimulationManualProjectParam param){
+        return service.selectProjectDetailsById(param);
+    }
+
+    /**
+     * 获取测试报告详情
+     * @param param
+     * @return
+     */
+    @RequestMapping("selectProjectReportById")
+    @ResponseBody
+    public  ResponseBodyVO selectProjectReportById(@RequestBody SimulationManualProjectParam param){
+        return service.selectProjectReportById(param);
+    }
+
+    /**
+     * 获取任务详情信息
+     * @param param
+     * @return
+     */
+    @RequestMapping("selectProjectTaskById")
+    @ResponseBody
+    public ResponseBodyVO selectProjectTaskById(@RequestBody SimulationManualProjectParam param){
+        return service.selectProjectTaskById(param);
+    }
+
+    /**
+     * 获取添加工作时需要的下拉选项
+     * @return
+     */
+    @RequestMapping("selectDropDownByType")
+    @ResponseBody
+    public ResponseBodyVO selectDropDownByType(@RequestBody SimulationManualProjectParam param){
+        return service.selectDropDownByType(param);
+    }
+
+
+    /**
+     * 获取人员可用最大并行度
+     * @return
+     */
+    @RequestMapping("selectMaxParallelism")
+    @ResponseBody
+    public ResponseBodyVO selectMaxParallelism(){
+        return service.selectMaxParallelism();
+    }
+
+
+
+}

+ 36 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/enums/EvaluationLevelEnum.java

@@ -0,0 +1,36 @@
+package com.css.simulation.resource.project.enums;
+
+import lombok.Getter;
+
+/**
+ * 项目评测等级枚举
+ */
+@Getter
+public enum  EvaluationLevelEnum {
+
+    G("10","G"),
+    A("20","A"),
+    M("30","M"),
+    P("30","P");
+
+    private String code;
+
+    private String state;
+
+    EvaluationLevelEnum(String code, String state){
+        this.code = code;
+        this.state = state;
+    }
+
+    public static String getState(String code){
+        if(code == null){
+            return "";
+        }
+        for(EvaluationLevelEnum e :  EvaluationLevelEnum.values()){
+            if(e.code.equals(code)){
+                return e.state;
+            }
+        }
+        return "";
+    }
+}

+ 37 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/enums/ProjectRunStateEnum.java

@@ -0,0 +1,37 @@
+package com.css.simulation.resource.project.enums;
+
+import lombok.Getter;
+
+/**
+ * 项目运行状态枚举
+ */
+@Getter
+public enum  ProjectRunStateEnum {
+
+    NOT_START("10","未执行"),
+    EXECUTION("20","执行中"),
+    FINISH("30","执行完成"),
+    DISCONTINUE("40","已中止");
+
+
+    private String code;
+
+    private String state;
+
+    ProjectRunStateEnum(String code, String state){
+        this.code = code;
+        this.state = state;
+    }
+
+    public static String getState(String code){
+        if(code == null){
+            return "";
+        }
+        for(ProjectRunStateEnum e :  ProjectRunStateEnum.values()){
+            if(e.code.equals(code)){
+                return e.state;
+            }
+        }
+        return "";
+    }
+}

+ 36 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/enums/SceneTypeEnum.java

@@ -0,0 +1,36 @@
+package com.css.simulation.resource.project.enums;
+
+import lombok.Getter;
+
+/**
+ * 场景类型
+ */
+@Getter
+public enum SceneTypeEnum {
+
+    SCENE_NATURAL("1","自然驾驶"),
+    SCENE_STANDARD("2","标准法规"),
+    SCENE_ACCIDENT("3","交通事故"),
+    SCENE_GENERAL("4","泛化场景");
+
+    private String code;
+
+    private String state;
+
+    SceneTypeEnum(String code, String state){
+        this.code = code;
+        this.state = state;
+    }
+
+    public static String getState(String code){
+        if(code == null){
+            return "";
+        }
+        for(SceneTypeEnum e :  SceneTypeEnum.values()){
+            if(e.code.equals(code)){
+                return e.state;
+            }
+        }
+        return "";
+    }
+}

+ 34 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/enums/WhetherEnum.java

@@ -0,0 +1,34 @@
+package com.css.simulation.resource.project.enums;
+
+import lombok.Getter;
+
+/**
+ * 是否
+ */
+@Getter
+public enum  WhetherEnum {
+
+    YES("0","是"),
+    NO("1","否");
+
+    private String code;
+
+    private String state;
+
+    WhetherEnum(String code, String state){
+        this.code = code;
+        this.state = state;
+    }
+
+    public static String getState(String code){
+        if(code == null){
+            return "";
+        }
+        for(WhetherEnum e :  WhetherEnum.values()){
+            if(e.code.equals(code)){
+                return e.state;
+            }
+        }
+        return "";
+    }
+}

+ 25 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/feign/KafkaService.java

@@ -0,0 +1,25 @@
+package com.css.simulation.resource.project.feign;
+
+
+import api.common.pojo.param.KafkaParameter;
+import com.css.simulation.resource.common.config.FeignConfiguration;
+import com.css.simulation.resource.project.feign.fallback.KafkaServiceFallback;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+@FeignClient(
+        contextId = "kafka",
+        value = "simulation-resource-common",
+        path = "/simulation/resource/common",
+        fallback = KafkaServiceFallback.class,
+        configuration = FeignConfiguration.class
+)
+public interface KafkaService {
+
+    @PostMapping("/kafka/send")
+    void send(@RequestBody @Validated KafkaParameter kafkaParameter);
+
+
+}

+ 18 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/feign/fallback/KafkaServiceFallback.java

@@ -0,0 +1,18 @@
+package com.css.simulation.resource.project.feign.fallback;
+
+import api.common.pojo.param.KafkaParameter;
+import com.css.simulation.resource.project.feign.KafkaService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class KafkaServiceFallback implements KafkaService {
+
+
+    @Override
+    public void send(KafkaParameter kafkaParameter) {
+        log.error("发送消息失败");
+
+    }
+}

+ 1032 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/impl/SimulationProjectServiceImpl.java

@@ -0,0 +1,1032 @@
+package com.css.simulation.resource.project.impl;
+
+import api.common.pojo.common.PageVO;
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.constants.DictConstants;
+import api.common.pojo.param.KafkaParameter;
+import api.common.pojo.param.project.ProjectTaskParam;
+import api.common.pojo.param.project.SceneScoreParam;
+import api.common.pojo.param.project.SimulationManualProjectKafkaParam;
+import api.common.pojo.param.project.SimulationManualProjectParam;
+import api.common.pojo.po.project.*;
+import api.common.pojo.vo.project.*;
+import api.common.util.JsonUtil;
+import com.css.simulation.resource.common.utils.AuthUtil;
+import com.css.simulation.resource.common.utils.PageUtil;
+import com.css.simulation.resource.project.constants.ProjectConstants;
+import com.css.simulation.resource.project.enums.EvaluationLevelEnum;
+import com.css.simulation.resource.project.enums.ProjectRunStateEnum;
+import com.css.simulation.resource.project.enums.SceneTypeEnum;
+import com.css.simulation.resource.project.feign.KafkaService;
+import com.css.simulation.resource.project.mapper.SimulationProjectMapper;
+import com.css.simulation.resource.project.service.SimulationProjectService;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.github.pagehelper.PageInfo;
+import lombok.SneakyThrows;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class SimulationProjectServiceImpl implements SimulationProjectService {
+
+    @Autowired
+    private SimulationProjectMapper simulationProjectMapper;
+
+    @Autowired
+    private KafkaService kafkaService;
+
+    private String[] dateFmtArr= new String[]{"yyyyMMdd", "yyyy-MM-dd HH:mm:ss","yyyy-MM-dd"};
+
+    @Override
+    public ResponseBodyVO addOrUpdateProject(SimulationManualProjectParam param) {
+
+        if(isEmpty(param.getProjectName())){
+            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE,"工作名称不能为空");
+        }
+        SimulationManualProjectPo po = convertParamToPo(param);
+
+        if(isEmpty(param.getId())){
+
+            //工作名称一样的的不能创建
+            List<SimulationManualProjectPo> simulationManualProjectPos = simulationProjectMapper.selectProjectByName(param);
+            if(!isEmpty(simulationManualProjectPos)){
+                return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE,"工作名称已经存在,请修改后再保存");
+            }
+
+            //添加
+//            ResponseBodyVO vo = new ResponseBodyVO();
+
+            po.createPo(AuthUtil.getCurrentUserId());
+            //生成id
+            createProjectId(po);
+
+            int add = simulationProjectMapper.add(po);
+            if(add > 0){
+                return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+            }
+            return new ResponseBodyVO(ResponseBodyVO.Response.SERVER_FAILURE,"添加失败");
+        }else{
+            //TODO 删除逻辑有待商议
+            //获取工作状态,仅未开始的才可以修改信息
+            SimulationManualProjectPo simulationManualProjectPo = simulationProjectMapper.selectProjectById(param);
+            if(!ProjectRunStateEnum.NOT_START.getCode().equals(simulationManualProjectPo.getNowRunState())){
+                return new ResponseBodyVO(ResponseBodyVO.Response.SERVER_FAILURE,"当前状态不支持修改");
+            }
+
+            po.updatePo(AuthUtil.getCurrentUserId());
+            int update = simulationProjectMapper.update(po);
+            if(update > 0){
+                return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+            }
+
+            return new ResponseBodyVO(ResponseBodyVO.Response.SERVER_FAILURE,"修改失败");
+        }
+
+    }
+
+    @Override
+    public ResponseBodyVO selectProject(SimulationManualProjectParam param) {
+
+        if(!isEmpty(param.getCreateStartDate())){
+            String createStartDate = param.getCreateStartDate();
+            Date startDate = getDate(createStartDate + " 00:00:00",1);
+            if(startDate == null){
+                return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE);
+            }
+            param.setCreateTimeStart(startDate);
+        }
+        if(!isEmpty(param.getCreateEndDate())){
+            String createEndDate = param.getCreateEndDate();
+            Date endDate = getDate(createEndDate + " 11:59:59",1);
+            if(endDate == null){
+                return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE);
+            }
+            param.setCreateTimeEnd(endDate);
+        }
+
+        if(!isEmpty(param.getFinishDateStart())){
+            String finishDateStart = param.getFinishDateStart();
+            Date startDate = getDate(finishDateStart + " 00:00:00",1);
+            if(startDate == null){
+                return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE);
+            }
+            param.setFinishTimeStart(startDate);
+
+        }
+        if(!isEmpty(param.getFinishDateEnd())){
+            String finishDateEnd = param.getFinishDateEnd();
+            Date enddate = getDate(finishDateEnd + " 11:59:59",1);
+            if(enddate == null){
+                return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE);
+            }
+            param.setFinishTimeEnd(enddate);
+        }
+
+        //查询有效数据
+        param.setIsDeleted("0");
+
+        setPage(param.getCurrentPage()==null?1:param.getCurrentPage(), param.getPageSize()==null?10:param.getPageSize());
+        List<SimulationManualProjectVo> vos = simulationProjectMapper.selectProjectList(param);
+        PageInfo<SimulationManualProjectVo> pageInfo = new PageInfo(vos);
+
+        for(SimulationManualProjectVo p : pageInfo.getList()){
+            convertPoToVo(p);
+        }
+
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS,pageInfo);
+    }
+
+    @Override
+    public ResponseBodyVO selectProjectById(SimulationManualProjectParam param) {
+        if(isEmpty(param.getId())){
+            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE);
+        }
+        SimulationManualProjectPo po = simulationProjectMapper.selectProjectById(param);
+        if(po == null){
+            return new ResponseBodyVO(ResponseBodyVO.Response.SERVER_FAILURE,"没有获取到数据");
+        }
+
+        SimulationManualProjectSingleVo vo = new SimulationManualProjectSingleVo();
+        convertPoToVo(po, vo);
+
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS,vo);
+
+    }
+
+
+    @Override
+    public ResponseBodyVO deleteProjectByids(SimulationManualProjectParam param) {
+
+        String ids = param.getIds();
+        if(isEmpty(ids)){
+            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE);
+        }
+
+        String[] idArr = ids.split(",");
+
+        //执行中的不允许删除
+        List<SimulationManualProjectPo> pos = simulationProjectMapper.selectProjectNowRunState(idArr);
+        for(SimulationManualProjectPo p : pos){
+            if(!isEmpty(p.getNowRunState()) && !ProjectRunStateEnum.NOT_START.getCode().equals(p.getNowRunState())){
+                return new ResponseBodyVO(ResponseBodyVO.Response.SERVER_FAILURE,"数据不支持删除");
+            }
+        }
+
+        int i = simulationProjectMapper.deleteProject(idArr);
+        if(i > 0){
+            return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+        }
+
+        return new ResponseBodyVO(ResponseBodyVO.Response.SERVER_FAILURE,"删除失败");
+    }
+
+    @SneakyThrows
+    @Override
+    public ResponseBodyVO updateProjectNowRunState(SimulationManualProjectParam param) {
+
+        SimulationManualProjectPo po = simulationProjectMapper.selectProjectById(param);
+
+        if(po == null){
+            return new ResponseBodyVO(ResponseBodyVO.Response.SERVER_FAILURE,"数据没有找到");
+        }
+
+        if(isEmpty(param.getId()) || isEmpty(param.getNowRunState())){
+            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE);
+        }
+        if("20".equals(param.getNowRunState())){
+            //设置开始时间
+            param.setStartTime(new Date());
+
+            //创建项目最后一级指标信息和场景信息(生成得分时创建数据)
+//            createProjectSceneAndTarget(param.getId());
+            ///TODO Kafka推送消息
+            projectRunToKafka(po);
+
+
+        }else if("30".equals(param.getNowRunState())){
+            //设置完成时间
+            param.setFinishTime(new Date());
+
+        }
+        int i = simulationProjectMapper.updateProjectNowRunState(param);
+        if(i > 0){
+            return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+        }
+        return new ResponseBodyVO(ResponseBodyVO.Response.SERVER_FAILURE);
+
+
+    }
+
+    private void projectRunToKafka(SimulationManualProjectPo po) throws JsonProcessingException {
+        SimulationManualProjectKafkaParam kafkaParam = new SimulationManualProjectKafkaParam();
+        kafkaParam.setProjectId(po.getId());
+        kafkaParam.setAlgorithmId(po.getAlgorithm());
+        kafkaParam.setVehicleConfigId(po.getVehicle());
+        kafkaParam.setScenePackageId(po.getScene());
+        kafkaParam.setMaxSimulationTime(po.getMaxSimulationTime());
+        kafkaParam.setParallelism(Integer.valueOf(po.getParallelism()));
+        KafkaParameter kafkaParameter = new KafkaParameter();
+        kafkaParameter.setTopic(ProjectConstants.RUN_TASK_TOPIC);
+        String data = JsonUtil.beanToJson(kafkaParam);
+        kafkaParameter.setData(data);
+        kafkaService.send(kafkaParameter);
+    }
+
+    @Override
+    public ResponseBodyVO selectProjectDetailsById(SimulationManualProjectParam param) {
+
+        if(isEmpty(param.getId())){
+            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE);
+        }
+        ProjectDetailsVo projectDetailsVo = new ProjectDetailsVo();
+        //项目基本信息
+        SimulationManualProjectPo po = simulationProjectMapper.selectProjectById(param);
+        if(po == null){
+            return new ResponseBodyVO(ResponseBodyVO.Response.SERVER_FAILURE, "没有获取到数据");
+        }
+        //算法配置
+        String algorithmId = po.getAlgorithm();
+        AlgorithmBaseInfoVo algorithmBaseInfoVo = simulationProjectMapper.selectAlgorithmBaseInfoById(algorithmId).get(0);
+
+        //车辆配置
+        VehicleBaseInfoVo vehicleBaseInfoVo = null;
+        String vehicleConfigId = po.getVehicle();
+        List<ConfigVehicleVO> configVehicleVOS = simulationProjectMapper.selectConfigVehicle(vehicleConfigId);
+        if(!isEmpty(configVehicleVOS)){
+            ConfigVehicleVO configVehicleVO = configVehicleVOS.get(0);
+            vehicleBaseInfoVo = simulationProjectMapper.selectVehicleBaseInfoById(configVehicleVO.getVehicleId()).get(0);
+        }
+
+        List<VehicleSensorVo> vehicleSensorVos = simulationProjectMapper.selectVehicleSensor(vehicleConfigId);
+
+        List<SensorBaseInfoVo> sensorCameraList = new ArrayList<>();
+        List<SensorBaseInfoVo> sensorOgtList = new ArrayList<>();
+        List<SensorBaseInfoVo> sensorLidarList = new ArrayList<>();
+        List<SensorBaseInfoVo> sensorRadarList = new ArrayList<>();
+        List<SensorBaseInfoVo> sensorGpsList = new ArrayList<>();
+        for(VehicleSensorVo vs : vehicleSensorVos){
+            String sensorType = vs.getSensorType();
+            String sensorId = vs.getSensorId();
+            if(DictConstants.SENSOR_CAMERA.equals(sensorType)){
+                //摄像头
+                SensorBaseInfoVo sensorBaseInfoVo = simulationProjectMapper.selectSensorCamera(sensorId);
+                sensorCameraList.add(sensorBaseInfoVo);
+            }else if(DictConstants.SENSOR_OGT.equals(sensorType)){
+                //完美传感器
+                SensorBaseInfoVo sensorBaseInfoVo = simulationProjectMapper.selectSensorOgt(sensorId);
+                sensorOgtList.add(sensorBaseInfoVo);
+            }else if(DictConstants.SENSOR_LIDAR.equals(sensorType)){
+                //激光雷达
+                SensorBaseInfoVo sensorBaseInfoVo = simulationProjectMapper.selectSensorLidar(sensorId);
+                sensorLidarList.add(sensorBaseInfoVo);
+            }else if(DictConstants.SENSOR_RADAR.equals(sensorType)){
+                //毫米波雷达
+                SensorBaseInfoVo sensorBaseInfoVo = simulationProjectMapper.selectSensorRadar(sensorId);
+                sensorRadarList.add(sensorBaseInfoVo);
+            }else if(DictConstants.SENSOR_GPS.equals(sensorType)){
+                //gps
+                SensorBaseInfoVo sensorBaseInfoVo = simulationProjectMapper.selectSensorGps(sensorId);
+                sensorGpsList.add(sensorBaseInfoVo);
+            }
+        }
+
+        //任务信息
+        ProjectTaskParam projectTaskParam = new ProjectTaskParam();
+        projectTaskParam.setPId(po.getId());
+        List<ManualProjectTaskPo> manualProjectTaskPos = simulationProjectMapper.selectprojectTaskByQuery(projectTaskParam);
+        List<ManualProjectTaskVo> ManualProjectTaskVoList = new ArrayList<>();
+        List<ProjectRunStateNumVo> projectRunStateNumVoList = new ArrayList<>();
+        List<ProjectRunResultRatioNumVo> projectRunResultRatioNumVoList = new ArrayList<>();
+        if(manualProjectTaskPos != null){
+            for(ManualProjectTaskPo task : manualProjectTaskPos){
+                ManualProjectTaskVo manualProjectTaskVo = convertManualProjectTaskPoToVo(task);
+                setUpSceneInfo(manualProjectTaskVo);
+                ManualProjectTaskVoList.add(manualProjectTaskVo);
+            }
+
+            //任务运行状态统计
+            int size = manualProjectTaskPos.size();
+//            List<ProjectRunStateNumVo> projectRunStateNumVos = simulationProjectMapper.selectRunStateCount(po.getId());
+            projectRunStateNumVoList = simulationProjectMapper.selectRunStateCount(po.getId());
+
+            /*状态统计统计数字,不统计比率
+            for(ProjectRunStateNumVo pv : projectRunStateNumVos){
+                Integer num = pv.getNum();
+                Double d = (double)num/size;
+                d = saveTwoDecimalPlaces(d);
+                pv.setRatio(d);
+                projectRunStateNumVoList.add(pv);
+            }*/
+
+            //结果状态统计
+            List<ProjectRunResultRatioNumVo> projectRunResultRatioNumVos = simulationProjectMapper.selectRunResultCount(po.getId());
+            for(ProjectRunResultRatioNumVo rv : projectRunResultRatioNumVos){
+                Integer num = rv.getNum();
+                Double d = (double)num/size;
+                d = saveTwoDecimalPlaces(d);
+                rv.setRatio(d);
+                projectRunResultRatioNumVoList.add(rv);
+            }
+
+        }
+
+
+
+        projectDetailsVo.setProjectId(po.getProjectId());
+        projectDetailsVo.setProjectName(po.getProjectName());
+        projectDetailsVo.setProjectDescribe(po.getProjectDescribe());
+        projectDetailsVo.setStartTime(getRqStr(po.getStartTime(),1));
+        projectDetailsVo.setFinishTime(getRqStr(po.getFinishTime(),1));
+        projectDetailsVo.setNowRunState(ProjectRunStateEnum.getState(po.getNowRunState()));
+        projectDetailsVo.setEvaluationLevel(EvaluationLevelEnum.getState(po.getEvaluationLevel()));
+        if(algorithmBaseInfoVo != null){
+            projectDetailsVo.setAlgorithmName(algorithmBaseInfoVo.getAlgorithmName());
+            projectDetailsVo.setAlgorithmDescribe(algorithmBaseInfoVo.getDescription());
+        }
+        if(vehicleBaseInfoVo != null){
+            projectDetailsVo.setVehicleName(vehicleBaseInfoVo.getVehicleName());
+            projectDetailsVo.setVehicleDescribe(vehicleBaseInfoVo.getDescription());
+
+        }
+        projectDetailsVo.setSensorCameraList(sensorCameraList);
+        projectDetailsVo.setSensorOgtList(sensorOgtList);
+        projectDetailsVo.setSensorLidarList(sensorLidarList);
+        projectDetailsVo.setSensorRadarList(sensorRadarList);
+        projectDetailsVo.setSensorGpsList(sensorGpsList);
+        projectDetailsVo.setTaskList(ManualProjectTaskVoList);
+        projectDetailsVo.setStateList(projectRunStateNumVoList);
+        projectDetailsVo.setResultList(projectRunResultRatioNumVoList);
+
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS, projectDetailsVo);
+    }
+
+
+
+    @Override
+    public ResponseBodyVO selectProjectReportById(SimulationManualProjectParam param) {
+        if(isEmpty(param.getId())){
+            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE);
+        }
+        //项目基本信息
+        SimulationManualProjectPo po = simulationProjectMapper.selectProjectBaseById(param);
+        if(po == null){
+            return new ResponseBodyVO(ResponseBodyVO.Response.SERVER_FAILURE, "没有获取到数据");
+        }
+        //算法配置
+        String algorithmId = po.getAlgorithm();
+        AlgorithmBaseInfoVo algorithmBaseInfoVo = simulationProjectMapper.selectAlgorithmBaseInfoById(algorithmId).get(0);
+
+
+        ProjectReportVo projectReportVo = new ProjectReportVo();
+        projectReportVo.setAlgorithmName(algorithmBaseInfoVo.getAlgorithmName());
+//        Double algorithmScore = po.getAlgorithmScore();
+//        projectReportVo.setAlgorithmScore(algorithmScore);
+        projectReportVo.setAlgorithmDescribe(algorithmBaseInfoVo.getDescription());
+
+//        String evaluationLevelReport = getEvaluationLevelReport(algorithmScore);
+//        projectReportVo.setEvaluationLevel(evaluationLevelReport);
+
+
+        String sceneNames = "";
+
+        //算法测试得分表
+        /*
+        汇总测试得分计算方法:(每一项一级指标的测试得分*测试权重)累加
+        得分率计算方法:每一项一级指标的所有场景得分不为0的数量/每一项一级指标的场景数量
+        汇总得分率计算方法:每一项一级指标的所有场景得分不为0的数量_累加/每一项一级指标的场景数量_累加
+         */
+        List<ScenePackageSubListVO> scenePackageSubListVOS = simulationProjectMapper.selectSubSceneByPid(po.getScene());
+
+        List<AlgorithmScoreVo> algorithmScoreVoList = new ArrayList();
+        String evaluationLevelReport = "";
+        if(!isEmpty(scenePackageSubListVOS)){
+            StringBuffer stringBuffer = new StringBuffer("");
+
+            //汇总数据初始化
+            Integer totalSceneNum = 0;
+//            Double totalWeight = 0D;
+            Double totalScore = 0D;
+            Double totalScoreRatio=0D;
+            Integer totalSceneScoreNum = 0;
+
+            for(ScenePackageSubListVO v : scenePackageSubListVOS){
+                stringBuffer.append(v+"、");
+                AlgorithmScoreVo algorithmScoreVo = new AlgorithmScoreVo();
+                algorithmScoreVo.setProjectName(v.getSublistName());
+                Integer sceneNum = v.getSceneNum();
+                totalSceneNum += sceneNum;
+                algorithmScoreVo.setSceneNum(sceneNum);
+                String weight = v.getWeight();
+                Double weightDouble = Double.valueOf(weight);
+                algorithmScoreVo.setWeight(weight);
+                SimulationMptFirstTargetScorePo simulationMptFirstTargetScorePo = new SimulationMptFirstTargetScorePo();
+                simulationMptFirstTargetScorePo.setPId(po.getId());
+                simulationMptFirstTargetScorePo.setTarget(v.getSublistId());
+                SimulationMptFirstTargetScorePo simulationMptFirstTargetScorePo1 = simulationProjectMapper.selectFirstTargetScore(simulationMptFirstTargetScorePo);
+                Double score = simulationMptFirstTargetScorePo1.getScore();
+                totalScore += score*weightDouble;
+                algorithmScoreVo.setScore(saveTwoDecimalPlaces(score));
+//                totalWeight +=aDouble;
+                Integer num = v.getSceneNum();
+                Integer scoreNum = getSetScoreNum(po.getId());
+                totalSceneScoreNum += scoreNum;
+                algorithmScoreVo.setScoreRatio(saveTwoDecimalPlaces(Double.valueOf(num/scoreNum)));
+                algorithmScoreVoList.add(algorithmScoreVo);
+            }
+            //汇总
+            AlgorithmScoreVo algorithmScoreVo = new AlgorithmScoreVo();
+            algorithmScoreVo.setProjectName("汇总");
+            algorithmScoreVo.setSceneNum(totalSceneNum);
+//            algorithmScoreVo.setWeight(saveTwoDecimalPlaces(totalWeight).toString());
+            //指标权重总和默认是1
+            algorithmScoreVo.setWeight("1");
+            algorithmScoreVo.setScore(saveTwoDecimalPlaces(totalScore));
+            totalScoreRatio = Double.valueOf(totalSceneScoreNum/totalSceneNum);
+            algorithmScoreVo.setScoreRatio(saveTwoDecimalPlaces(totalScoreRatio));
+            algorithmScoreVoList.add(algorithmScoreVo);
+
+            projectReportVo.setScoreRatio(saveTwoDecimalPlaces(totalScoreRatio));
+
+            projectReportVo.setAlgorithmScore(saveTwoDecimalPlaces(totalScore));
+            evaluationLevelReport = getEvaluationLevelReport(saveTwoDecimalPlaces(totalScore));
+            projectReportVo.setEvaluationLevel(evaluationLevelReport);
+
+            sceneNames = stringBuffer.substring(0,stringBuffer.lastIndexOf("、"));
+        }
+
+
+
+        projectReportVo.setAlgorithmEvaluation(algorithmBaseInfoVo.getAlgorithmName()+"经测试获得"+evaluationLevelReport+"级评价,"+
+                "("+sceneNames+")得分率达到了"+projectReportVo.getScoreRatio()+"。");
+
+        projectReportVo.setAlgorithmScoreList(algorithmScoreVoList);
+        projectReportVo.setEvaluationGrade(evaluationLevelReport);
+
+        //算法测试评分细则、详细得分情况
+        List<ScenePackageSubListVO> scenePackageSubListVOS1 = selectScenePackageSubListTreeAndSetScore(null, true, po.getScene(), po.getId(), 1);
+        projectReportVo.setSceneScoreList(scenePackageSubListVOS1);
+
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS, projectReportVo);
+    }
+
+
+    @Override
+    public ResponseBodyVO selectDropDownByType(SimulationManualProjectParam param) {
+        List<DropDownTypeVo> result = new ArrayList<>();
+        if(isEmpty(param.getDropDownType())){
+            //获取全部(算法,车辆,场景)
+            setAlgorithmDropDown(result);
+            setVehicleDropDown(result);
+            setScenePackageDropDown(result);
+        }else if("1".equals(param.getDropDownType())){
+            setAlgorithmDropDown(result);
+        }else if("2".equals(param.getDropDownType())){
+            setVehicleDropDown(result);
+        }else if("3".equals(param.getDropDownType())){
+            setScenePackageDropDown(result);
+        }
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS, result);
+    }
+
+    @Override
+    public ResponseBodyVO selectProjectTaskById(SimulationManualProjectParam param) {
+        String id = param.getId();
+        String taskId = param.getTaskId();
+        if(isEmpty(id) || isEmpty(taskId)){
+            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE);
+        }
+
+        ProjectTaskDetailsVo resultVo = new ProjectTaskDetailsVo();
+
+        //基本信息
+        ProjectTaskParam projectTaskParam = new ProjectTaskParam();
+        projectTaskParam.setPId(id);
+        projectTaskParam.setId(taskId);
+        List<ManualProjectTaskPo> pos = simulationProjectMapper.selectprojectTaskByQuery(projectTaskParam);
+        if(isEmpty(pos)){
+            return new ResponseBodyVO(ResponseBodyVO.Response.SERVER_FAILURE,"没有获取到任务信息");
+        }
+        ManualProjectTaskPo po = pos.get(0);
+        resultVo.setTaskId(po.getId());
+        String sceneId = po.getSceneId();
+        String sceneType = po.getSceneType();
+        SceneBaseInfoVo sceneBaseInfoVo = getsceneNameAndOther(sceneId, sceneType);
+        resultVo.setSceneName(sceneBaseInfoVo.getCommonSceneName());
+        resultVo.setRunStartTime(getRqStr(po.getRunStartTime(),1));
+        resultVo.setRunEndTime(getRqStr(po.getRunEndTime(),1));
+        resultVo.setRunState(po.getRunState());
+        resultVo.setFinishState(po.getRunResult());
+        resultVo.setSceneDescribe("");
+        ///TODO 任务详情信息
+        resultVo.setMileage(po.getMileage());
+        resultVo.setAverageVelocity(po.getAverageVelocity());
+        resultVo.setMaximunSpeed(po.getMaximunSpeed());
+        resultVo.setMinimunVelocity(po.getMinimunVelocity());
+        resultVo.setMaximumDeceleration(po.getMaximumDeceleration());
+        resultVo.setMaximumSwingSpeed(po.getMaximumSwingSpeed());
+        resultVo.setSpeedVariance(saveTwoDecimalPlaces(po.getSpeedVariance()));
+        resultVo.setSpeedComfortLevel(po.getSpeedComfortLevel());
+        resultVo.setSwingSpeedMeanSquareRoot(saveTwoDecimalPlaces(po.getSwingSpeedMeanSquareRoot()));
+        resultVo.setSwingComfortLevel(po.getSwingComfortLevel());
+        resultVo.setAcceleration(po.getAcceleration());
+        resultVo.setLaneOffset(po.getLaneOffset());
+        resultVo.setBrake(po.getBrake());
+        resultVo.setSteetingWheel(po.getSteetingWheel());
+        resultVo.setThrottle(po.getThrottle());
+        resultVo.setYawRate(po.getYawRate());
+        resultVo.setVelocity(po.getVelocity());
+        resultVo.setOtherCurve(po.getOtherCurve());
+
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS,resultVo);
+    }
+
+    @Override
+    public ResponseBodyVO selectMaxParallelism() {
+        String currentUserId = AuthUtil.getCurrentUserId();
+        SystemUserVo systemUserVo = simulationProjectMapper.selectUserById(currentUserId);
+        if(systemUserVo == null){
+            return new ResponseBodyVO(ResponseBodyVO.Response.SERVER_FAILURE,"没有获取到用户信息");
+        }
+
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS,null,systemUserVo.getCpuAvailableNumber());
+    }
+
+    /**
+     * 根据场景id和场景类型获取场景名
+     * @return
+     */
+    private SceneBaseInfoVo getsceneNameAndOther(String sceneId, String sceneType){
+        SceneBaseInfoVo resultVo = new SceneBaseInfoVo();
+        if("1".equals(sceneType)){
+            SceneBaseInfoVo sceneBaseInfoVo = simulationProjectMapper.selectSceneNatural(sceneId);
+            if(sceneBaseInfoVo != null){
+                resultVo.setCommonSceneName(sceneBaseInfoVo.getNaturalName());
+            }
+        }else if("2".equals(sceneType)){
+            SceneBaseInfoVo sceneBaseInfoVo = simulationProjectMapper.selectSceneStandardsRegulations(sceneId);
+            if(sceneBaseInfoVo != null){
+                resultVo.setCommonSceneName(sceneBaseInfoVo.getSceneName());
+            }
+        }else if("3".equals(sceneType)){
+            SceneBaseInfoVo sceneBaseInfoVo = simulationProjectMapper.selectSceneAccidentById(sceneId);
+            if(sceneBaseInfoVo != null){
+                resultVo.setCommonSceneName(sceneBaseInfoVo.getSceneName());
+            }
+        }else if("4".equals(sceneType)){
+            ///TODO 泛化场景暂不支持
+
+        }
+
+        return resultVo;
+
+    }
+
+    private void setAlgorithmDropDown(List<DropDownTypeVo> result){
+        List<AlgorithmBaseInfoVo> algorithmBaseInfoVo = simulationProjectMapper.selectAlgorithmBaseInfoById(null);
+        List<DropDownVo> algorithmList = new ArrayList<>();
+        for(AlgorithmBaseInfoVo v : algorithmBaseInfoVo){
+            DropDownVo dropDownVo = new DropDownVo();
+            dropDownVo.setId(v.getId());
+            dropDownVo.setName(v.getAlgorithmName());
+            algorithmList.add(dropDownVo);
+        }
+        DropDownTypeVo algorithmDropDown = new DropDownTypeVo();
+        algorithmDropDown.setDropDownList(algorithmList);
+        algorithmDropDown.setType("1");
+        result.add(algorithmDropDown);
+    }
+    private void setVehicleDropDown(List<DropDownTypeVo> result){
+        List<ConfigVehicleVO> vehicleBaseInfoVo = simulationProjectMapper.selectConfigVehicle(null);
+        List<DropDownVo> vehicleList = new ArrayList<>();
+        for(ConfigVehicleVO v : vehicleBaseInfoVo){
+            DropDownVo dropDownVo = new DropDownVo();
+            dropDownVo.setId(v.getId());
+            dropDownVo.setName(v.getConfigName());
+
+            //获取传感器信息
+            List<ConfigSensorVo> configSensorVos = simulationProjectMapper.selectConfigSensor(v.getId());
+            String sensor = "";
+            if(!isEmpty(configSensorVos) && configSensorVos.get(0) != null){
+                StringBuffer stringBuffer = new StringBuffer();
+                for(ConfigSensorVo cv : configSensorVos){
+                    stringBuffer.append(cv.getSensorType()+",");
+                }
+                sensor = stringBuffer.substring(0,stringBuffer.lastIndexOf(","));
+
+            }
+            dropDownVo.setSensor(sensor);
+
+            vehicleList.add(dropDownVo);
+        }
+
+        DropDownTypeVo vehicleDropDown = new DropDownTypeVo();
+        vehicleDropDown.setDropDownList(vehicleList);
+        vehicleDropDown.setType("2");
+        result.add(vehicleDropDown);
+    }
+    private void setScenePackageDropDown(List<DropDownTypeVo> result){
+        List<ScenePackageBaseVo> scenePackageBaseVo = simulationProjectMapper.selectScenePackageBaseById(null);
+        List<DropDownVo> scenePackageList = new ArrayList<>();
+        for(ScenePackageBaseVo v : scenePackageBaseVo){
+            DropDownVo dropDownVo = new DropDownVo();
+            dropDownVo.setId(v.getPackageId());
+            dropDownVo.setName(v.getPackageName());
+            dropDownVo.setSceneNum(v.getSceneNum());
+            scenePackageList.add(dropDownVo);
+        }
+        DropDownTypeVo scenePackageDropDown = new DropDownTypeVo();
+        scenePackageDropDown.setDropDownList(scenePackageList);
+        scenePackageDropDown.setType("3");
+        result.add(scenePackageDropDown);
+    }
+
+
+    private SimulationManualProjectPo convertParamToPo(SimulationManualProjectParam param){
+        SimulationManualProjectPo po = new SimulationManualProjectPo();
+        po.setId(param.getId());
+        po.setProjectName(param.getProjectName());
+        po.setProjectDescribe(param.getProjectDescribe());
+        po.setAlgorithm(param.getAlgorithm());
+        po.setVehicle(param.getVehicle());
+        po.setScene(param.getScene());
+        //po.setOperationCycle(param.getOperationCycle());
+        po.setMaxSimulationTime(param.getMaxSimulationTime());
+        po.setParallelism(param.getParallelism());
+        //po.setRuleView(param.getRuleView());
+        po.setIsChoiceGpu(param.getIsChoiceGpu());
+        po.setNowRunState(param.getNowRunState());
+        return po;
+
+    }
+
+    private SimulationManualProjectVo convertPoToVo(SimulationManualProjectVo vo){
+        Date createTime = vo.getCreateTime();
+        vo.setCreateTimeFmt(getRqStr(createTime, 2));
+        String algorithm = vo.getAlgorithm();
+        List<AlgorithmBaseInfoVo> algorithmBaseInfoVos = simulationProjectMapper.selectAlgorithmBaseInfoById(algorithm);
+        if(!isEmpty(algorithmBaseInfoVos)){
+            AlgorithmBaseInfoVo algorithmBaseInfoVo = algorithmBaseInfoVos.get(0);
+            vo.setAlgorithm(algorithmBaseInfoVo.getAlgorithmName());
+        }
+        vo.setNowRunStateDict(ProjectRunStateEnum.getState(vo.getNowRunState()));
+        vo.setEvaluationLevelDict(EvaluationLevelEnum.getState(vo.getEvaluationLevel()));
+        return vo;
+    }
+
+    private void convertPoToVo (SimulationManualProjectPo po, SimulationManualProjectSingleVo vo){
+        vo.setId(po.getId());
+        vo.setProjectName(po.getProjectName());
+        vo.setProjectDescribe(po.getProjectDescribe());
+        vo.setAlgorithm(po.getAlgorithm());
+        vo.setVehicle(po.getVehicle());
+        vo.setScene(po.getScene());
+        vo.setMaxSimulationTime(po.getMaxSimulationTime());
+        vo.setParallelism(po.getParallelism());
+        vo.setIsChoiceGpu(po.getIsChoiceGpu());
+
+    }
+
+    private void createProjectId(SimulationManualProjectPo po){
+        Integer nowRq = getRq(null,0);
+        po.setProjectDate(nowRq);
+        SimulationManualProjectPo po1 = simulationProjectMapper.selectLastProjectId(nowRq);
+        if(po1 == null){
+            //生成新id
+            po.setProjectNum(1);
+        }else{
+            po.setProjectNum(po1.getProjectNum()+1);
+        }
+        po.setProjectId(po.getProjectDate()+"-"+po.getProjectNum());
+
+    }
+
+    private Integer getRq(Date date, int index){
+        SimpleDateFormat sdf = new SimpleDateFormat(dateFmtArr[index]);
+        if(date == null){
+            date = new Date();
+        }
+        return Integer.valueOf(sdf.format(date));
+
+    }
+
+    private String getRqStr(Date date, int index){
+        SimpleDateFormat sdf = new SimpleDateFormat(dateFmtArr[index]);
+        if(date == null){
+            return "";
+        }
+        return sdf.format(date);
+
+    }
+
+    private Date getDate(String dateFmt, int index){
+        SimpleDateFormat sdf = new SimpleDateFormat(dateFmtArr[index]);
+        try {
+            return sdf.parse(dateFmt);
+        } catch (ParseException e) {
+            return null;
+        }
+    }
+
+    private boolean isEmpty(String value){
+        if(value == null){
+            return true;
+        }
+        value = value.trim();
+        if(value.length() == 0){
+            return true;
+        }
+        return false;
+    }
+    private boolean isEmpty(List list){
+        if(list == null || list.size() <= 0){
+            return true;
+        }
+        return false;
+    }
+
+    private void setPage(Integer pageNum, Integer pageSize){
+        PageVO pageVO = new PageVO();
+        pageVO.setCurrentPage(pageNum);
+        pageVO.setPageSize(pageSize);
+        PageUtil.setPageInfo(pageVO);
+    }
+
+    private Double saveTwoDecimalPlaces(Double d){
+        if(d == null){
+            return null;
+        }
+        return new BigDecimal(d).setScale(2, RoundingMode.UP).doubleValue();
+    }
+
+    /**
+     * 设置场景基本字段
+     */
+    private void setUpSceneInfo(ManualProjectTaskVo vo){
+        String sceneType = vo.getSceneType();
+        String sceneId = vo.getSceneId();
+        SceneBaseInfoVo sceneBaseInfoVo;
+        if("1".equals(sceneType)){
+            //自然驾驶
+            sceneBaseInfoVo = simulationProjectMapper.selectSceneNatural(sceneId);
+            if(sceneBaseInfoVo != null){
+                vo.setSceneName(sceneBaseInfoVo.getNaturalName());
+            }
+        }else if("2".equals(sceneType)){
+            //标准法规
+            sceneBaseInfoVo = simulationProjectMapper.selectSceneStandardsRegulations(sceneId);
+            if(sceneBaseInfoVo != null){
+                vo.setSceneName(sceneBaseInfoVo.getSceneName());
+            }
+        }else if("3".equals(sceneType)){
+            //交通事故
+            sceneBaseInfoVo = simulationProjectMapper.selectSceneAccidentById(sceneId);
+            if(sceneBaseInfoVo != null){
+                vo.setSceneName(sceneBaseInfoVo.getSceneName());
+            }
+        }else if("4".equals(sceneType)){
+            /// TODO 泛化场景暂不支持
+
+        }
+    }
+
+    private ManualProjectTaskVo convertManualProjectTaskPoToVo(ManualProjectTaskPo po){
+        ManualProjectTaskVo manualProjectTaskVo = new ManualProjectTaskVo();
+        manualProjectTaskVo.setId(po.getPId());
+        manualProjectTaskVo.setPId(po.getPId());
+        manualProjectTaskVo.setSceneId(po.getSceneId());
+//        manualProjectTaskVo.setSceneName(po.getSceneName());
+        manualProjectTaskVo.setSceneType(po.getSceneType());
+        manualProjectTaskVo.setRunStartTime(getRqStr(po.getRunStartTime(), 2));
+        manualProjectTaskVo.setRunEndTime(getRqStr(po.getRunEndTime(), 2));
+        manualProjectTaskVo.setRunState(po.getRunState());
+        manualProjectTaskVo.setRunResult(po.getRunResult());
+        return manualProjectTaskVo;
+    }
+
+    /**
+     * 生成项目场景信息和最后一级指标信息
+     */
+    private void createProjectSceneAndTarget(String id){
+        //1.查询场景包下最后一级指标和指标下所有场景
+        List<ScenePackageSubListVO> scenePackageSubListVOS = simulationProjectMapper.selectSubListByPid(id);
+
+        //2.保存最后一级指标
+        for(ScenePackageSubListVO v : scenePackageSubListVOS){
+            SimulationMptLastTargetScorePo simulationMptTargetScorePo = new SimulationMptLastTargetScorePo();
+            simulationMptTargetScorePo.setPId(id);
+            simulationMptTargetScorePo.setTarget(v.getSublistId());
+            simulationMptTargetScorePo.createPo(AuthUtil.getCurrentUserId());
+            simulationProjectMapper.insertSimulationMptLastTargetScorePo(simulationMptTargetScorePo);
+
+            //3.保存场景
+            String sceneNaturalIds = v.getSceneNaturalIds();
+            String sceneTrafficIds = v.getSceneTrafficIds();
+            String sceneStatueIds = v.getSceneStatueIds();
+            if(!isEmpty(sceneNaturalIds)){
+                String[] split = sceneNaturalIds.split(",");
+                for(String s : split){
+                    SceneBaseInfoVo sceneBaseInfoVo = simulationProjectMapper.selectSceneNatural(s);
+                    SimulationMptSceneScorePo simulationMptSceneScorePo = new SimulationMptSceneScorePo();
+                    simulationMptSceneScorePo.setPId(id);
+                    simulationMptSceneScorePo.setSceneId(s);
+                    simulationMptSceneScorePo.setSceneType("1");
+                    simulationMptSceneScorePo.createPo(AuthUtil.getCurrentUserId());
+                    simulationProjectMapper.insertSimulationMptSceneScorePo(simulationMptSceneScorePo);
+                }
+
+            }
+            if(!isEmpty(sceneTrafficIds)){
+                String[] split = sceneTrafficIds.split(",");
+                for(String s : split){
+                    SceneBaseInfoVo sceneBaseInfoVo = simulationProjectMapper.selectSceneAccidentById(s);
+                    SimulationMptSceneScorePo simulationMptSceneScorePo = new SimulationMptSceneScorePo();
+                    simulationMptSceneScorePo.setPId(id);
+                    simulationMptSceneScorePo.setSceneId(s);
+                    simulationMptSceneScorePo.setSceneType("3");
+                    simulationMptSceneScorePo.createPo(AuthUtil.getCurrentUserId());
+                    simulationProjectMapper.insertSimulationMptSceneScorePo(simulationMptSceneScorePo);
+                }
+            }
+            if(!isEmpty(sceneStatueIds)){
+                String[] split = sceneStatueIds.split(",");
+                for(String s : split){
+                    SceneBaseInfoVo sceneBaseInfoVo = simulationProjectMapper.selectSceneStandardsRegulations(s);
+                    SimulationMptSceneScorePo simulationMptSceneScorePo = new SimulationMptSceneScorePo();
+                    simulationMptSceneScorePo.setPId(id);
+                    simulationMptSceneScorePo.setSceneId(s);
+                    simulationMptSceneScorePo.setSceneType("2");
+                    simulationMptSceneScorePo.createPo(AuthUtil.getCurrentUserId());
+                    simulationProjectMapper.insertSimulationMptSceneScorePo(simulationMptSceneScorePo);
+                }
+            }
+
+            ///TODO 泛化场景暂不支持
+        }
+
+        //4.查询第一级指标
+
+        //5.保存第一级指标
+
+    }
+
+
+    /**
+     * 级联获取场景指标得分数据
+     * @param parentVoList 首次传null
+     * @param isRoot 首次传true
+     * @param scenePackageId 场景包id
+     * @param pId 项目表id,用于统计得分使用
+     * @param level 指标级别
+     * @return
+     */
+    private List<ScenePackageSubListVO> selectScenePackageSubListTreeAndSetScore(List<ScenePackageSubListVO> parentVoList,
+                                                                      boolean isRoot,String scenePackageId, String pId, Integer level){
+
+        if(isRoot){
+            //查找一级节点
+            parentVoList = simulationProjectMapper.selectSubSceneByPid(scenePackageId);
+            if(!isEmpty(parentVoList)){
+                selectScenePackageSubListTreeAndSetScore(parentVoList, false, null,pId,level);
+            }
+
+        }else{
+
+            //获取子节点集合
+            for(ScenePackageSubListVO pvo : parentVoList){
+                //二级指标获取总分
+                if(level == 2){
+                    setFirstTargetScore(pvo,pId);
+                }
+
+                List<ScenePackageSubListVO> cvoList = simulationProjectMapper.selectSubSceneByPid(pvo.getSublistId());
+                if(!isEmpty(cvoList)){
+                    //存入父节点集合中
+                    pvo.setChildScenePackageSubListVOList(cvoList);
+                    pvo.setLevel(level);
+                    //继续查找下一节点
+                    selectScenePackageSubListTreeAndSetScore(cvoList,false, null, pId, level+1);
+                }else{
+                    //没有子节点;最后一级,获取指标得分和指标下场景得分
+                    setScore(pvo,pId);
+                }
+
+            }
+        }
+
+
+        return parentVoList;
+    }
+
+    private void setScore(ScenePackageSubListVO vo, String pId){
+        setLastTargetScore(vo,pId);
+        setSceneScore(vo,pId);
+    }
+
+    private void setSceneScore(ScenePackageSubListVO vo, String pId){
+        String sceneNaturalIds = vo.getSceneNaturalIds();
+        String sceneTrafficIds = vo.getSceneTrafficIds();
+        String sceneStatueIds = vo.getSceneStatueIds();
+        List<SceneScoreVo> NaturalSceneScoreVos = setSceneScore(vo, sceneNaturalIds, "1", pId);
+        List<SceneScoreVo> StatueSceneScoreVos = setSceneScore(vo, sceneStatueIds, "2", pId);
+        List<SceneScoreVo> TrafficSceneScoreVos = setSceneScore(vo, sceneTrafficIds, "3", pId);
+        ///TODO 暂不支持泛化场景
+
+        //合成一个list
+        NaturalSceneScoreVos.addAll(StatueSceneScoreVos);
+        NaturalSceneScoreVos.addAll(TrafficSceneScoreVos);
+        vo.setSceneScoreList(NaturalSceneScoreVos);
+    }
+    private void setLastTargetScore(ScenePackageSubListVO vo, String pId){
+        SimulationMptLastTargetScorePo poParam = new SimulationMptLastTargetScorePo();
+        poParam.setPId(pId);
+        poParam.setTarget(vo.getSublistId());
+        SimulationMptLastTargetScorePo po = simulationProjectMapper.selectLastTargetScore(poParam);
+        if(po != null){
+            vo.setNotStandardSceneNum(po.getNotStandardSceneNum());
+            vo.setScore(po.getScore());
+        }
+
+    }
+
+    private void setFirstTargetScore(ScenePackageSubListVO vo, String pId){
+        SimulationMptFirstTargetScorePo poParam = new SimulationMptFirstTargetScorePo();
+        poParam.setPId(pId);
+        poParam.setTarget(vo.getSublistId());
+        SimulationMptFirstTargetScorePo po = simulationProjectMapper.selectFirstTargetScore(poParam);
+        if(po != null){
+            vo.setScore(po.getScore());
+        }
+
+    }
+
+    private List<SceneScoreVo> setSceneScore(ScenePackageSubListVO vo,String sceneIds, String sceneType, String pId){
+        if(isEmpty(sceneIds)){
+            return null;
+        }
+        String[] sceneIdArr = sceneIds.split(",");
+        SceneScoreParam sceneScoreParam = new SceneScoreParam();
+        sceneScoreParam.setPId(pId);
+        sceneScoreParam.setLastTargerId(vo.getSublistId());
+        sceneScoreParam.setSceneType(sceneType);
+        sceneScoreParam.setSceneIds(Arrays.asList(sceneIdArr));
+        List<SceneScoreVo> sceneScoreVos = simulationProjectMapper.selectSceneScoreByIds(sceneScoreParam);
+
+        for(SceneScoreVo s : sceneScoreVos){
+            /*if(SceneTypeEnum.SCENE_NATURAL.getCode().equals(sceneType)){
+                SceneBaseInfoVo sceneBaseInfoVo = simulationProjectMapper.selectSceneNatural(s.getSceneId());
+                if(sceneBaseInfoVo != null){
+                    s.setSceneName(sceneBaseInfoVo.getNaturalName());
+                }
+            }else if(SceneTypeEnum.SCENE_STANDARD.getCode().equals(sceneType)){
+                SceneBaseInfoVo sceneBaseInfoVo = simulationProjectMapper.selectSceneStandardsRegulations(s.getSceneId());
+                if(sceneBaseInfoVo != null){
+                    s.setSceneName(sceneBaseInfoVo.getSceneName());
+                }
+            }else if(SceneTypeEnum.SCENE_ACCIDENT.getCode().equals(sceneType)){
+                SceneBaseInfoVo sceneBaseInfoVo = simulationProjectMapper.selectSceneAccidentById(s.getSceneId());
+                if(sceneBaseInfoVo != null){
+                    s.setSceneName(sceneBaseInfoVo.getSceneName());
+                }
+            }else if(SceneTypeEnum.SCENE_GENERAL.getCode().equals(sceneType)){
+                ///TODO 泛化场景暂不支持
+
+            }*/
+            s.setSceneType(SceneTypeEnum.getState(sceneType));
+        }
+
+        return sceneScoreVos;
+
+    }
+
+    private String getEvaluationLevelReport(Double algorithmScore){
+        String evaluationLevelReport = "";
+        if(algorithmScore >= 90){
+            evaluationLevelReport = "G";
+        }else if(algorithmScore >= 80 && algorithmScore < 90){
+            evaluationLevelReport = "A";
+        }else if(algorithmScore >= 70 && algorithmScore < 80){
+            evaluationLevelReport = "M";
+        }else if(algorithmScore < 70){
+            evaluationLevelReport = "P";
+        }
+        return evaluationLevelReport;
+    }
+
+    private Integer getSetScoreNum(String pId){
+        SimulationMptSceneScorePo po = new SimulationMptSceneScorePo();
+        po.setPId(pId);
+        SceneScoreVo sceneScoreVo = simulationProjectMapper.selectSceneScoreNumQuery(po);
+        return sceneScoreVo.getNum();
+    }
+
+
+
+}

Some files were not shown because too many files changed in this diff