Эх сурвалжийг харах

Merge remote-tracking branch 'origin/master'

zhaoyan 3 жил өмнө
parent
commit
fe5edbc7a4
100 өөрчлөгдсөн 4388 нэмэгдсэн , 285 устгасан
  1. 2 2
      api-common/src/main/java/api/common/pojo/common/PageVO.java
  2. 19 8
      api-common/src/main/java/api/common/pojo/constants/DictConstants.java
  3. 2 0
      api-common/src/main/java/api/common/pojo/param/RedisParameter.java
  4. 2 0
      api-common/src/main/java/api/common/pojo/param/demo/TestPageParam.java
  5. 16 0
      api-common/src/main/java/api/common/pojo/param/model/CameraParam.java
  6. 17 0
      api-common/src/main/java/api/common/pojo/param/model/VehicleParam.java
  7. 35 0
      api-common/src/main/java/api/common/pojo/param/scene/SceneAccidentParam.java
  8. 64 0
      api-common/src/main/java/api/common/pojo/param/scene/SceneNaturalParam.java
  9. 25 0
      api-common/src/main/java/api/common/pojo/param/scene/ScenePackageParam.java
  10. 39 0
      api-common/src/main/java/api/common/pojo/param/scene/ScoringRulesParam.java
  11. 32 0
      api-common/src/main/java/api/common/pojo/param/scene/StandardsRegulationsParam.java
  12. 35 0
      api-common/src/main/java/api/common/pojo/po/model/CameraPO.java
  13. 61 0
      api-common/src/main/java/api/common/pojo/po/model/VehiclePO.java
  14. 63 0
      api-common/src/main/java/api/common/pojo/po/scene/SceneAccidentPO.java
  15. 94 0
      api-common/src/main/java/api/common/pojo/po/scene/SceneNaturalPO.java
  16. 58 0
      api-common/src/main/java/api/common/pojo/po/scene/ScenePackagePO.java
  17. 67 0
      api-common/src/main/java/api/common/pojo/po/scene/ScenePackageSublistPO.java
  18. 55 0
      api-common/src/main/java/api/common/pojo/po/scene/ScoringRulesPO.java
  19. 60 0
      api-common/src/main/java/api/common/pojo/po/scene/StandardsRegulationsPO.java
  20. 34 0
      api-common/src/main/java/api/common/pojo/vo/model/CameraVO.java
  21. 60 0
      api-common/src/main/java/api/common/pojo/vo/model/VehicleVO.java
  22. 27 0
      api-common/src/main/java/api/common/pojo/vo/scene/SceneAccidentVO.java
  23. 64 0
      api-common/src/main/java/api/common/pojo/vo/scene/SceneNaturalVO.java
  24. 30 0
      api-common/src/main/java/api/common/pojo/vo/scene/ScenePackageSublistVO.java
  25. 28 0
      api-common/src/main/java/api/common/pojo/vo/scene/ScenePackageVO.java
  26. 44 0
      api-common/src/main/java/api/common/pojo/vo/scene/ScoringRulesVO.java
  27. 25 0
      api-common/src/main/java/api/common/pojo/vo/scene/StandardsRegulationsVO.java
  28. 4 0
      api-common/src/main/java/api/common/pojo/vo/system/DictVO.java
  29. 8 0
      api-common/src/main/java/api/common/util/CollectionUtil.java
  30. 4 11
      api-common/src/main/java/api/common/util/JsonUtil.java
  31. 21 2
      api-common/src/main/java/api/common/util/ObjectUtil.java
  32. 50 0
      api-common/src/main/java/api/common/util/ParamUtil.java
  33. 10 1
      pom.xml
  34. 1 0
      simulation-oauth-server/src/main/java/com/css/simulation/oauth/server/cofiguration/oauth/MyUserAuthenticationConverter.java
  35. 1 0
      simulation-oauth-server/src/main/java/com/css/simulation/oauth/server/cofiguration/security/MyUserDetails.java
  36. 1 0
      simulation-oauth-server/src/main/java/com/css/simulation/oauth/server/cofiguration/security/MyUserDetailsService.java
  37. 28 19
      simulation-resource-common/src/main/java/com/css/simulation/resource/common/controller/RedisController.java
  38. 7 11
      simulation-resource-scheduler/pom.xml
  39. 0 33
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/configuration/oauth/MyTokenServices.java
  40. 0 11
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/configuration/parameter/MyParameter.java
  41. 0 84
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/configuration/redis/RedisTemplateConfiguration.java
  42. 34 17
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/consumer/ManualProjectConsumer.java
  43. 17 9
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/controller/TaskController.java
  44. 14 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/feign/CommonService.java
  45. 45 11
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/IndexMapper.java
  46. 28 4
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/ProjectMapper.java
  47. 2 1
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/SensorCameraMapper.java
  48. 2 1
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/SensorOgtMapper.java
  49. 46 29
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/TaskMapper.java
  50. 2 1
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/VehicleMapper.java
  51. 5 1
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/po/IndexPO.java
  52. 17 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/po/ProjectPO.java
  53. 1 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/po/TaskPO.java
  54. 7 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/scheduler/TickScheduler.java
  55. 108 17
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/service/TaskService.java
  56. 14 0
      simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/util/ScoreUtil.java
  57. 11 0
      simulation-resource-server/pom.xml
  58. 4 1
      simulation-resource-server/src/main/java/com/css/simulation/resource/Application.java
  59. 18 6
      simulation-resource-server/src/main/java/com/css/simulation/resource/common/config/OAuth2Config.java
  60. 13 1
      simulation-resource-server/src/main/java/com/css/simulation/resource/common/exception/GlobalExceptionHandler.java
  61. 42 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/common/oauth/MyUserAuthenticationConverter.java
  62. 59 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/common/oauth/MyUserDetails.java
  63. 1 1
      simulation-resource-server/src/main/java/com/css/simulation/resource/common/oauth/OauthParameter.java
  64. 21 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/common/utils/AuthUtil.java
  65. 1 1
      simulation-resource-server/src/main/java/com/css/simulation/resource/common/utils/PageUtil.java
  66. 1 1
      simulation-resource-server/src/main/java/com/css/simulation/resource/demo/ctrl/TestCtrl.java
  67. 2 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/demo/service/TestService.java
  68. 103 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/CameraCtrl.java
  69. 103 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/VehicleCtrl.java
  70. 26 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/mapper/CameraMapper.java
  71. 26 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/mapper/VehicleMapper.java
  72. 92 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/CameraService.java
  73. 92 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/VehicleService.java
  74. 75 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/ctrl/SceneAccidentController.java
  75. 66 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/ctrl/SceneNaturalController.java
  76. 79 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/ctrl/ScenePackageController.java
  77. 100 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/ctrl/ScoringRulesController.java
  78. 82 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/ctrl/StandardsRegulationsController.java
  79. 20 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/SceneAccidentMapper.java
  80. 21 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/SceneNaturalMapper.java
  81. 27 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/ScenePackageMapper.java
  82. 21 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/ScenePackageSublistMapper.java
  83. 22 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/ScoringRulesMapper.java
  84. 19 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/StandardsRegulationsMapper.java
  85. 174 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/SceneAccidentService.java
  86. 200 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/SceneNaturalService.java
  87. 111 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/ScenePackageService.java
  88. 53 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/ScoringRulesService.java
  89. 103 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/StandardsRegulationsService.java
  90. 14 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/system/ctrl/DictCtrl.java
  91. 21 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/system/service/DictService.java
  92. 4 1
      simulation-resource-server/src/main/resources/mapper/demo/TestMapper.xml
  93. 136 0
      simulation-resource-server/src/main/resources/mapper/model/CameraMapper.xml
  94. 199 0
      simulation-resource-server/src/main/resources/mapper/model/VehicleMapper.xml
  95. 74 0
      simulation-resource-server/src/main/resources/mapper/scene/SceneAccidentMapper.xml
  96. 303 0
      simulation-resource-server/src/main/resources/mapper/scene/SceneNaturalMapper.xml
  97. 108 0
      simulation-resource-server/src/main/resources/mapper/scene/ScenePackageMapper.xml
  98. 70 0
      simulation-resource-server/src/main/resources/mapper/scene/ScenePackageSublistMapper.xml
  99. 89 0
      simulation-resource-server/src/main/resources/mapper/scene/ScoringRulesMapper.xml
  100. 47 0
      simulation-resource-server/src/main/resources/mapper/scene/StandardsRegulationsMapper.xml

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

@@ -10,8 +10,8 @@ import lombok.NoArgsConstructor;
 @NoArgsConstructor
 public class PageVO {
     @JsonInclude(JsonInclude.Include.NON_NULL)
-    private Integer pageNum=1;
+    private Integer currentPage=1;
     @JsonInclude(JsonInclude.Include.NON_NULL)
-    private Integer pageSize=10;
+    private Integer pageSize=3;
 
 }

+ 19 - 8
api-common/src/main/java/api/common/pojo/constants/DictConstants.java

@@ -11,7 +11,18 @@ public class DictConstants {
     public static final String LEVEL = "level";//级别
     public static final String VEHICLE_TYPE = "vehicleType";//车辆类型
     public static final String DRIVE_TYPE = "driveType";//驱动方式
+    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 YES = "1";//是
+    public static final String NO = "0";//否
 
     public static final String SCENE_NATURAL = "1"; // 自然驾驶
     public static final String SCENE_STANDARD = "2";    // 标准法规
@@ -24,14 +35,14 @@ public class DictConstants {
     public static final String SENSOR_RADAR = "4"; // 毫米波雷达表
     public static final String SENSOR_GPS = "5"; // GPS 传感器表
 
-    public static final String TASK_WAITING = "1"; // 任务执行状态,待执行
-
-    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 TASK_PENDING = "Pending"; // 任务执行状态,待执行
+    public static final String TASK_RUNNING = "Running"; // 任务执行状态,运行中
+    public static final String TASK_ABORTED = "Aborted"; // 任务执行状态,中断
+    public static final String TASK_ANALYSIS = "Analysis"; // 任务执行状态,准备分析
+    public static final String TASK_ANALYSING = "Analysing"; // 任务执行状态,分析中
+    public static final String TASK_COMPLETED = "Completed"; // 任务执行状态,已完成
+    public static final String TASK_TERMINATING = "Terminating"; // 任务执行状态,终止中
+    public static final String TASK_TERMINATED = "Terminated"; // 任务执行状态,已终止
 
 
 

+ 2 - 0
api-common/src/main/java/api/common/pojo/param/RedisParameter.java

@@ -2,12 +2,14 @@ package api.common.pojo.param;
 
 
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import javax.validation.constraints.NotBlank;
 
 @Data
+@Builder
 @NoArgsConstructor
 @AllArgsConstructor
 public class RedisParameter {

+ 2 - 0
api-common/src/main/java/api/common/pojo/param/demo/TestPageParam.java

@@ -7,4 +7,6 @@ import lombok.Data;
 public class TestPageParam extends PageVO {
 
     private String name;
+    //创建人id
+    private String createUserId;
 }

+ 16 - 0
api-common/src/main/java/api/common/pojo/param/model/CameraParam.java

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

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

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

+ 35 - 0
api-common/src/main/java/api/common/pojo/param/scene/SceneAccidentParam.java

@@ -0,0 +1,35 @@
+package api.common.pojo.param.scene;
+
+import api.common.pojo.common.PageVO;
+import lombok.*;
+
+import java.io.Serializable;
+
+/**
+ * 交通事故场景
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneAccidentParam extends PageVO implements Serializable {
+
+    private String accidentId;              // (唯一)
+    private String sceneName;  //场景名称
+    private String[] selfDriving;  //自车驾驶行为
+    private String[] targetDriving;  //目标驾驶行为
+    private String[] selfReaction ; //自车反应行为
+    private String[] conflictBehavior ; //冲突行为
+    private String[] conflictType ; //冲突类型
+
+    private String path ; //文件所在文件夹路径
+
+    private String videoAddress ; //视频地址
+    private String osgbAddress  ;//
+    private String xmlAddress ; //
+    private String xodrAddress ; //
+    private String jsonAddress ; //
+
+
+}

+ 64 - 0
api-common/src/main/java/api/common/pojo/param/scene/SceneNaturalParam.java

@@ -0,0 +1,64 @@
+package api.common.pojo.param.scene;
+
+import api.common.pojo.common.PageVO;
+import lombok.*;
+
+import java.io.Serializable;
+
+/**
+ * 自然驾驶场景
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+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 String share ; //是否分析  1为分享
+
+    private String path ; //文件所在文件夹路径
+    private String videoAddress ; //视频地址
+    private String osgbAddress  ;//
+    private String xodrAddress ; //
+    private String xoscAddress ; //
+    private String jsonAddress ; //
+
+}

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

@@ -0,0 +1,25 @@
+package api.common.pojo.param.scene;
+
+import api.common.pojo.common.PageVO;
+import lombok.*;
+
+import java.io.Serializable;
+
+/**
+ * 测试场景包
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ScenePackageParam extends PageVO implements Serializable {
+
+    private String packageId  ;//主键Id
+    private String packageName ; //指标名称
+    private String share ; //是否分析  1为分享
+    public String yearMax;//结束时间
+    public String yearMin;//开始时间
+
+
+}

+ 39 - 0
api-common/src/main/java/api/common/pojo/param/scene/ScoringRulesParam.java

@@ -0,0 +1,39 @@
+package api.common.pojo.param.scene;
+
+import api.common.pojo.common.PageVO;
+import lombok.*;
+
+import java.io.Serializable;
+
+/**
+ * 打分规则
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ScoringRulesParam extends PageVO implements Serializable {
+
+    private String rulesId  ;//打分规则Id
+    private String ruleName ; //规则名称
+    private String ruleDescription ; //打分规则描述
+    private String share ; //是否分析  1为分享
+
+    public String yearMax;//结束时间
+
+    public String yearMin;//开始时间
+
+
+
+
+
+
+
+
+
+
+
+
+
+}

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

@@ -0,0 +1,32 @@
+package api.common.pojo.param.scene;
+
+import api.common.pojo.common.PageVO;
+import lombok.*;
+
+import java.io.Serializable;
+
+/**
+ * 标准法规场景
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class StandardsRegulationsParam extends PageVO implements Serializable {
+
+    private String regulationsId;              // (唯一)
+    private String sceneName;  //场景名称
+    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 ; //
+
+
+}

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

@@ -0,0 +1,35 @@
+package api.common.pojo.po.model;
+
+import api.common.pojo.common.CommonPO;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class CameraPO extends CommonPO {
+
+    //主键id
+    private String id;
+    //传感器id
+    private String sensorId;
+    //传感器名称
+    private String sensorName;
+    //传感器描述
+    private String description;
+    //盲区距离
+    private BigDecimal nearDistance;
+    //探测距离
+    private BigDecimal farDistance;
+    //水平现场角
+    private BigDecimal fovH;
+    //垂直现场角
+    private BigDecimal fovV;
+    //分辨率
+    private String resolution;
+    //帧率
+    private BigDecimal frameRate;
+    //是否显示本车(1显示0不显示)
+    private String selfDisplay;
+    //是否分享
+    private String share;
+}

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

@@ -0,0 +1,61 @@
+package api.common.pojo.po.model;
+
+import api.common.pojo.common.CommonPO;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class VehiclePO extends CommonPO {
+
+    //主键id
+    private String id;
+    //车辆id
+    private String vehicleId;
+    //车辆名称
+    private String vehicleName;
+    //车辆描述
+    private String description;
+    //车辆类型(字典代码)
+    private String vehicleType;
+    //车辆型号
+    private String vehicleModel;
+    //车辆颜色
+    private String vehicleColour;
+    //最大速度(千米/小时)
+    private BigDecimal maxSpeed;
+    //发动机功率(千瓦)
+    private BigDecimal enginePower;
+    //最大减速度(米/秒2)
+    private BigDecimal maxDeceleration;
+    //最大转角(度)
+    private BigDecimal maxSteeringAngle;
+    //质量(千克)
+    private BigDecimal mass;
+    //前表面有效面积(平方米)
+    private BigDecimal frontSurfaceEffective;
+    //空气阻力系数
+    private BigDecimal airDragCoefficient;
+    //滚动阻力系数
+    private BigDecimal rollingResistanceCoefficient;
+    //车轮直径(米)
+    private BigDecimal wheelDiameter;
+    //驱动方式
+    private BigDecimal wheelDrive;
+    //总效率
+    private BigDecimal overallEfficiency;
+    //车前距(米)
+    private BigDecimal frontDistance;
+    //车后距(米)
+    private BigDecimal rearDistance;
+    //车左距(米)
+    private BigDecimal leftDistance;
+    //车右距(米)
+    private BigDecimal rightDistance;
+    //车高(米)
+    private BigDecimal heightDistance;
+    //轴距(米)
+    private BigDecimal wheelbase;
+    //是否分享
+    private String share;
+}

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

@@ -0,0 +1,63 @@
+package api.common.pojo.po.scene;
+
+import lombok.*;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 交通事故场景
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneAccidentPO implements Serializable {
+
+    private String accidentId;              // (唯一)
+    private String sceneName;  //场景名称
+    private String selfDriving;  //自车驾驶行为
+    private String targetDriving;  //目标驾驶行为
+    private String selfReaction ; //自车反应行为
+    private String conflictBehavior ; //冲突行为
+    private String conflictType ; //冲突类型
+    private String share ; //是否分析  1为分享
+    private String videoAddress ; //视频地址
+    private String osgbAddress  ;//
+    private String xmlAddress ; //
+    private String xodrAddress ; //
+    private String jsonAddress ; //
+    /**
+     * 记录创建时间
+     */
+    public Timestamp createTime;
+    /**
+     * 记录最后更新时间(包括删除)
+     */
+    public Timestamp modifyTime;
+    /**
+     * 记录创建人(用户id)
+     */
+    public String createUserId;
+    /**
+     * 记录最后更新人(包括删除)(用户id)
+     */
+    public String modifyUserId;
+    /**
+     * 是否已删除
+     */
+    public String isDeleted;
+
+
+
+
+
+
+
+
+
+
+
+
+}

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

@@ -0,0 +1,94 @@
+package api.common.pojo.po.scene;
+
+import lombok.*;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 自然驾驶场景
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneNaturalPO  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 String share ; //是否分析  1为分享
+    private String videoAddress ; //视频地址
+    private String osgbAddress  ;//
+    private String xodrAddress ; //
+    private String xoscAddress ; //
+    private String jsonAddress ; //
+    /**
+     * 记录创建时间
+     */
+    public Timestamp createTime;
+    /**
+     * 记录最后更新时间(包括删除)
+     */
+    public Timestamp modifyTime;
+    /**
+     * 记录创建人(用户id)
+     */
+    public String createUserId;
+    /**
+     * 记录最后更新人(包括删除)(用户id)
+     */
+    public String modifyUserId;
+    /**
+     * 是否已删除
+     */
+    public String isDeleted;
+
+
+
+
+
+
+
+
+
+
+
+
+}

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

@@ -0,0 +1,58 @@
+package api.common.pojo.po.scene;
+
+import lombok.*;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 测试场景包
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ScenePackagePO 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为分享
+    /**
+     * 记录创建时间
+     */
+    public Timestamp createTime;
+    /**
+     * 记录最后更新时间(包括删除)
+     */
+    public Timestamp modifyTime;
+    /**
+     * 记录创建人(用户id)
+     */
+    public String createUserId;
+    /**
+     * 记录最后更新人(包括删除)(用户id)
+     */
+    public String modifyUserId;
+    /**
+     * 是否已删除
+     */
+    public String isDeleted;
+
+
+
+
+
+
+
+
+
+
+
+
+}

+ 67 - 0
api-common/src/main/java/api/common/pojo/po/scene/ScenePackageSublistPO.java

@@ -0,0 +1,67 @@
+package api.common.pojo.po.scene;
+
+import lombok.*;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 测试场景包
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ScenePackageSublistPO 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为分享
+    /**
+     * 记录创建时间
+     */
+    public Timestamp createTime;
+    /**
+     * 记录最后更新时间(包括删除)
+     */
+    public Timestamp modifyTime;
+    /**
+     * 记录创建人(用户id)
+     */
+    public String createUserId;
+    /**
+     * 记录最后更新人(包括删除)(用户id)
+     */
+    public String modifyUserId;
+    /**
+     * 是否已删除
+     */
+    public String isDeleted;
+
+
+
+
+
+
+
+
+
+
+
+
+}

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

@@ -0,0 +1,55 @@
+package api.common.pojo.po.scene;
+
+import lombok.*;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 打分规则
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ScoringRulesPO implements Serializable {
+
+    private String rulesId  ;//打分规则Id
+    private String ruleName ; //规则名称
+    private String ruleDescription ; //打分规则描述
+    private String ruleDetails;//打分规则详情
+    private String share ; //是否分析  1为分享
+    /**
+     * 记录创建时间
+     */
+    public Timestamp createTime;
+    /**
+     * 记录最后更新时间(包括删除)
+     */
+    public Timestamp modifyTime;
+    /**
+     * 记录创建人(用户id)
+     */
+    public String createUserId;
+    /**
+     * 记录最后更新人(包括删除)(用户id)
+     */
+    public String modifyUserId;
+    /**
+     * 是否已删除
+     */
+    public String isDeleted;
+
+
+
+
+
+
+
+
+
+
+
+
+}

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

@@ -0,0 +1,60 @@
+package api.common.pojo.po.scene;
+
+import lombok.*;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 标准法规场景
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class StandardsRegulationsPO implements Serializable {
+
+    private String regulationsId;              // (唯一)
+    private String sceneName;  //场景名称
+    private String regulationType;  //法规类型
+    private String standardType;  //标准类型
+    private String share ; //是否分析  1为分享
+    private String videoAddress ; //视频地址
+    private String osgbAddress  ;//
+    private String xmlAddress ; //
+    private String xodrAddress ; //
+    private String jsonAddress ; //
+    /**
+     * 记录创建时间
+     */
+    public Timestamp createTime;
+    /**
+     * 记录最后更新时间(包括删除)
+     */
+    public Timestamp modifyTime;
+    /**
+     * 记录创建人(用户id)
+     */
+    public String createUserId;
+    /**
+     * 记录最后更新人(包括删除)(用户id)
+     */
+    public String modifyUserId;
+    /**
+     * 是否已删除
+     */
+    public String isDeleted;
+
+
+
+
+
+
+
+
+
+
+
+
+}

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

@@ -0,0 +1,34 @@
+package api.common.pojo.vo.model;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class CameraVO {
+
+    //主键id
+    private String id;
+    //传感器id
+    private String sensorId;
+    //传感器名称
+    private String sensorName;
+    //传感器描述
+    private String description;
+    //盲区距离
+    private BigDecimal nearDistance;
+    //探测距离
+    private BigDecimal farDistance;
+    //水平现场角
+    private BigDecimal fovH;
+    //垂直现场角
+    private BigDecimal fovV;
+    //分辨率
+    private String resolution;
+    //帧率
+    private BigDecimal frameRate;
+    //是否显示本车(1显示0不显示)
+    private String selfDisplay;
+    //是否分享
+    private String share;
+}

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

@@ -0,0 +1,60 @@
+package api.common.pojo.vo.model;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class VehicleVO {
+
+    //主键id
+    private String id;
+    //车辆id
+    private String vehicleId;
+    //车辆名称
+    private String vehicleName;
+    //车辆描述
+    private String description;
+    //车辆类型(字典代码)
+    private String vehicleType;
+    //车辆型号
+    private String vehicleModel;
+    //车辆颜色
+    private String vehicleColour;
+    //最大速度(千米/小时)
+    private BigDecimal maxSpeed;
+    //发动机功率(千瓦)
+    private BigDecimal enginePower;
+    //最大减速度(米/秒2)
+    private BigDecimal maxDeceleration;
+    //最大转角(度)
+    private BigDecimal maxSteeringAngle;
+    //质量(千克)
+    private BigDecimal mass;
+    //前表面有效面积(平方米)
+    private BigDecimal frontSurfaceEffective;
+    //空气阻力系数
+    private BigDecimal airDragCoefficient;
+    //滚动阻力系数
+    private BigDecimal rollingResistanceCoefficient;
+    //车轮直径(米)
+    private BigDecimal wheelDiameter;
+    //驱动方式
+    private BigDecimal wheelDrive;
+    //总效率
+    private BigDecimal overallEfficiency;
+    //车前距(米)
+    private BigDecimal frontDistance;
+    //车后距(米)
+    private BigDecimal rearDistance;
+    //车左距(米)
+    private BigDecimal leftDistance;
+    //车右距(米)
+    private BigDecimal rightDistance;
+    //车高(米)
+    private BigDecimal heightDistance;
+    //轴距(米)
+    private BigDecimal wheelbase;
+    //是否分享
+    private String share;
+}

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

@@ -0,0 +1,27 @@
+package api.common.pojo.vo.scene;
+
+import api.common.pojo.common.PageVO;
+import lombok.*;
+
+import java.io.Serializable;
+
+/**
+ * 交通事故场景
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneAccidentVO extends PageVO implements Serializable {
+
+    private String accidentId;              // (唯一)
+    private String sceneName;  //场景名称
+    private String selfDriving;  //自车驾驶行为
+    private String targetDriving;  //目标驾驶行为
+    private String selfReaction ; //自车反应行为
+    private String conflictBehavior ; //冲突行为
+    private String conflictType ; //冲突类型
+    private String videoAddress ; //视频地址
+
+}

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

@@ -0,0 +1,64 @@
+package api.common.pojo.vo.scene;
+
+import api.common.pojo.common.PageVO;
+import lombok.*;
+
+import java.io.Serializable;
+
+/**
+ * 自然驾驶场景
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneNaturalVO 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 String share ; //是否分析  1为分享
+    private String videoAddress ; //视频地址
+    private String osgbAddress  ;//
+    private String xodrAddress ; //
+    private String xoscAddress ; //
+    private String jsonAddress ; //
+
+
+}

+ 30 - 0
api-common/src/main/java/api/common/pojo/vo/scene/ScenePackageSublistVO.java

@@ -0,0 +1,30 @@
+package api.common.pojo.vo.scene;
+
+import lombok.*;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 测试场景包
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ScenePackageSublistVO implements Serializable {
+
+    private String sublistId  ;//主键Id
+    private String sublistName ; //指标名称
+    private String weight;//权重
+    private String ruleName ; //规则名称
+    private Integer sceneNum;//场景数量
+    private String parentId;//父节点id
+    private String rootId;//根id
+    private int packageLevel;//级别
+    private String remarks;//备注
+    private int seq;//在当前层级下的顺序,由小到大
+    private List<ScenePackageSublistVO>  list;
+
+}

+ 28 - 0
api-common/src/main/java/api/common/pojo/vo/scene/ScenePackageVO.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;
+
+/**
+ * 测试场景包
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ScenePackageVO extends PageVO implements Serializable {
+
+    private String packageId  ;//主键Id
+    private String packageName ; //指标名称
+    private Integer sceneNum;//场景数量
+    private String share ; //是否分析  1为分享
+    /**
+     * 记录创建时间
+     */
+    public Timestamp createTime;
+
+}

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

@@ -0,0 +1,44 @@
+package api.common.pojo.vo.scene;
+
+import api.common.pojo.common.PageVO;
+import lombok.*;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 打分规则
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ScoringRulesVO extends PageVO implements Serializable {
+
+    private String rulesId  ;//打分规则Id
+    private String ruleName ; //规则名称
+    private String ruleDescription ; //打分规则描述
+    private String share ; //是否分析  1为分享
+    /**
+     * 记录创建时间
+     */
+    public Timestamp createTime;
+    /**
+     * 记录创建人(用户id)
+     */
+    public String createUserId;
+
+
+
+
+
+
+
+
+
+
+
+
+
+}

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

@@ -0,0 +1,25 @@
+package api.common.pojo.vo.scene;
+
+import api.common.pojo.common.PageVO;
+import lombok.*;
+
+import java.io.Serializable;
+
+/**
+ * 标准法规场景
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class StandardsRegulationsVO extends PageVO implements Serializable {
+
+    private String regulationsId;              // (唯一)
+    private String sceneName;  //场景名称
+    private String regulationType;  //法规类型
+    private String standardType;  //标准类型
+    private String share ; //是否分析  1为分享
+    private String videoAddress ; //视频地址
+
+}

+ 4 - 0
api-common/src/main/java/api/common/pojo/vo/system/DictVO.java

@@ -2,6 +2,8 @@ package api.common.pojo.vo.system;
 
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class DictVO {
 
@@ -17,4 +19,6 @@ public class DictVO {
     private String dictCode;
     //序号
     private String dictOrder;
+    //子对象
+    private List<DictVO> children;
 }

+ 8 - 0
api-common/src/main/java/api/common/util/CollectionUtil.java

@@ -19,6 +19,14 @@ public class CollectionUtil {
         return new HashSet<>(Arrays.asList(elements));
     }
 
+    public static <T> Set<T> listToSet(List<T> list) {
+        return new HashSet<>(list);
+    }
+
+    public static <T> List<T> setToList(Set<T> set) {
+        return new ArrayList<>(set);
+    }
+
     public static boolean isEmpty(Collection<?> collection) {
         return collection == null || collection.isEmpty();
     }

+ 4 - 11
api-common/src/main/java/api/common/util/JsonUtil.java

@@ -1,11 +1,11 @@
 package api.common.util;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 
-import java.lang.reflect.Type;
+
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -51,15 +51,8 @@ public class JsonUtil {
     }
 
     public static <T> List<T> jsonToList(String json, Class<T> tClass) throws JsonProcessingException {
-        TypeFactory t = TypeFactory.defaultInstance();
-        //List<T> list = new ObjectMapper().readValue(json,t.constructReferenceType(ArrayList.class,tClass));
-        List<T> list = new ObjectMapper().readValue(json, new TypeReference<List<T>>() {
-            @Override
-            public Type getType() {
-                return super.getType();
-            }
-
-        });
+        JavaType javaType = TypeFactory.defaultInstance().constructParametricType(List.class, tClass);
+        List<T> list = new ObjectMapper().readValue(json,javaType);
         return list;
     }
 

+ 21 - 2
api-common/src/main/java/api/common/util/ObjectUtil.java

@@ -1,5 +1,6 @@
 package api.common.util;
 
+import api.common.pojo.vo.system.DictVO;
 import com.fasterxml.jackson.databind.JsonNode;
 
 import java.util.*;
@@ -80,8 +81,26 @@ public class ObjectUtil {
         return jsonNode.isNull() || jsonNode.isEmpty();
     }
 
-    public static String uuid() {
-        return UUID.randomUUID().toString().replace("-", "");
+    public static List<DictVO> DictListToTree(List<DictVO> list) {
+        List<DictVO> treeList = new ArrayList<DictVO>();
+        for (DictVO dictVO: list) {
+            if("0".equals(dictVO.getPid())){
+                treeList.add(findChildren(dictVO,list));
+            }
+        }
+        return treeList;
+    }
+
+    private static DictVO findChildren(DictVO dictVO, List<DictVO> list) {
+        for (DictVO node: list) {
+            if(dictVO.getId().equals(node.getPid())){
+                if(dictVO.getChildren() == null || dictVO.getChildren().size() == 0){
+                    dictVO.setChildren(new ArrayList<DictVO>());
+                }
+                dictVO.getChildren().add(findChildren(node,list));
+            }
+        }
+        return dictVO;
     }
 
 }

+ 50 - 0
api-common/src/main/java/api/common/util/ParamUtil.java

@@ -0,0 +1,50 @@
+package api.common.util;
+
+
+import java.lang.reflect.Method;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * 参数转换工具类
+ */
+public class ParamUtil {
+
+    /**
+     * 将多级下拉二维数组中的数据,赋值到对应对象的属性中
+     * @param arr
+     * @param object
+     */
+    public static void arrConvertObj(String[][] arr,Object object) {
+        try {
+            if(arr == null || arr.length == 0){
+                return ;
+            }
+            for (int i = 0; i < arr.length; i++) {
+                //至少包含两级
+                if(arr[i] != null || arr[i].length >= 2){
+                    String[] selector = arr[i];
+                    //截取type和value
+                    String type = selector[selector.length-2];
+                    String value = selector[selector.length-1];
+                    String filedName = type.substring(0,1).toUpperCase() + type.substring(1);
+                    //get方法
+                    String getMethodName = "get" + filedName ;
+                    Method getMethod = object.getClass().getMethod(getMethodName,null);
+
+                    List<String> getValue = (List<String>) getMethod.invoke(object);
+                    if(getValue == null || getValue.size() == 0){
+                        getValue = new LinkedList<>();
+                    }
+                    getValue.add(value);
+                    //set方法
+                    String setMethodName = "set" + filedName;
+                    Method setMethod = object.getClass().getMethod(setMethodName, List.class);
+                    setMethod.invoke(object, getValue);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 10 - 1
pom.xml

@@ -54,7 +54,7 @@
         <minio.version>8.3.5</minio.version>
         <okhttp.version>4.9.3</okhttp.version>
         <kubernetes.version>14.0.0</kubernetes.version>
-        <ganymed-ssh2.version>262</ganymed-ssh2.version>
+        <docker-java.version>3.2.13</docker-java.version>
     </properties>
 
 
@@ -70,6 +70,15 @@
                 <artifactId>logback-classic</artifactId>
                 <version>${logback-classic.version}</version>
             </dependency>
+
+
+            <!-- docker 客户端 -->
+            <dependency>
+                <groupId>com.github.docker-java</groupId>
+                <artifactId>docker-java</artifactId>
+                <version>${docker-java.version}</version>
+            </dependency>
+
             <!-- ssh  -->
             <dependency>
                 <groupId>ch.ethz.ganymed</groupId>

+ 1 - 0
simulation-oauth-server/src/main/java/com/css/simulation/oauth/server/cofiguration/oauth/MyUserAuthenticationConverter.java

@@ -17,6 +17,7 @@ public class MyUserAuthenticationConverter extends DefaultUserAuthenticationConv
         Map<String, Object> response = new LinkedHashMap<>();
         MyUserDetails myUserDetails = (MyUserDetails) authentication.getPrincipal();
         //1 用户基本信息
+        response.put("id", myUserDetails.getId());
         response.put("username", authentication.getName());
         response.put("phone", myUserDetails.getPhone());
         response.put("isSub", myUserDetails.getIsSub());

+ 1 - 0
simulation-oauth-server/src/main/java/com/css/simulation/oauth/server/cofiguration/security/MyUserDetails.java

@@ -16,6 +16,7 @@ import java.util.Set;
 @AllArgsConstructor
 public class MyUserDetails implements UserDetails, Serializable {
     private static final long serialVersionUID = -158357727659030597L;
+    private String id;
     private String username;
     private String password;
     private String phone;

+ 1 - 0
simulation-oauth-server/src/main/java/com/css/simulation/oauth/server/cofiguration/security/MyUserDetailsService.java

@@ -23,6 +23,7 @@ public class MyUserDetailsService implements UserDetailsService {
         UserPO userPO = userMapper.selectByUsername(username);
 
         return new MyUserDetails(
+                userPO.getId(),
                 userPO.getUsername(),
                 userPO.getPassword(),
                 userPO.getPhone(),

+ 28 - 19
simulation-resource-common/src/main/java/com/css/simulation/resource/common/controller/RedisController.java

@@ -3,11 +3,14 @@ package com.css.simulation.resource.common.controller;
 import api.common.pojo.common.ResponseBodyVO;
 import api.common.pojo.constants.DictConstants;
 import api.common.pojo.param.RedisParameter;
-import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
-import javax.annotation.Resource;
 import java.time.Duration;
 import java.util.HashMap;
 import java.util.List;
@@ -21,8 +24,9 @@ import java.util.Map;
 @RequestMapping("/redis")
 public class RedisController {
 
-    @Resource
-    RedisTemplate<String, String> redisTemplate;
+    @Autowired
+    StringRedisTemplate redisTemplate;
+
 
     @PostMapping("/get")
     public ResponseBodyVO<String> get(@RequestBody @Validated RedisParameter redisParameter) {
@@ -34,8 +38,13 @@ public class RedisController {
 
     @PostMapping("/set")
     public ResponseBodyVO<String> set(@RequestBody @Validated RedisParameter redisParameter) {
-        //2 存储键值对并设置时间。
-        redisTemplate.opsForValue().set(redisParameter.getKey(), redisParameter.getValue(), Duration.ofMinutes(redisParameter.getMinutes()));
+        if (redisParameter.getMinutes() == 0) { //2 存储键值对,永不过期。
+            redisTemplate.opsForValue().set(redisParameter.getKey(), redisParameter.getValue());
+        } else { //2 存储键值对并设置时间。
+            redisTemplate.opsForValue().set(redisParameter.getKey(), redisParameter.getValue(), Duration.ofMinutes(redisParameter.getMinutes()));
+        }
+
+
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
     }
 
@@ -56,7 +65,7 @@ public class RedisController {
 
     @PostMapping("/setDictLists")
     public ResponseBodyVO<String> setDictLists(@RequestBody List<RedisParameter> redisParameterList) {
-        if(redisParameterList != null && redisParameterList.size() > 0){
+        if (redisParameterList != null && redisParameterList.size() > 0) {
             for (RedisParameter parameter : redisParameterList) {
                 redisTemplate.opsForValue().set(DictConstants.BASE_KEY + DictConstants.LIST_KEY + parameter.getKey().toUpperCase(), parameter.getValue());
             }
@@ -66,7 +75,7 @@ public class RedisController {
 
     @PostMapping("/setDictMaps")
     public ResponseBodyVO<String> setDictMaps(@RequestBody List<RedisParameter> redisParameterList) {
-        if(redisParameterList != null && redisParameterList.size() > 0){
+        if (redisParameterList != null && redisParameterList.size() > 0) {
             for (RedisParameter parameter : redisParameterList) {
                 redisTemplate.opsForValue().set(DictConstants.BASE_KEY + DictConstants.MAP_KEY + parameter.getKey().toUpperCase(), parameter.getValue());
             }
@@ -75,27 +84,27 @@ public class RedisController {
     }
 
     @PostMapping("/getDictLists")
-    public ResponseBodyVO<Map<String,String>> getDictLists(@RequestBody List<String> keyList) {
-        Map<String,String> map = new HashMap<>();
-        if(keyList != null && keyList.size() > 0){
+    public ResponseBodyVO<Map<String, String>> getDictLists(@RequestBody List<String> keyList) {
+        Map<String, String> map = new HashMap<>();
+        if (keyList != null && keyList.size() > 0) {
             for (String key : keyList) {
                 String value = redisTemplate.opsForValue().get(DictConstants.BASE_KEY + DictConstants.LIST_KEY + key.toUpperCase());
-                map.put(key,value);
+                map.put(key, value);
             }
         }
-        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS,map);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, map);
     }
 
     @PostMapping("/getDictMaps")
-    public ResponseBodyVO<Map<String,String>> getDictMaps(@RequestBody List<String> keyList) {
-        Map<String,String> map = new HashMap<>();
-        if(keyList != null && keyList.size() > 0){
+    public ResponseBodyVO<Map<String, String>> getDictMaps(@RequestBody List<String> keyList) {
+        Map<String, String> map = new HashMap<>();
+        if (keyList != null && keyList.size() > 0) {
             for (String key : keyList) {
                 String value = redisTemplate.opsForValue().get(DictConstants.BASE_KEY + DictConstants.MAP_KEY + key.toUpperCase());
-                map.put(key,value);
+                map.put(key, value);
             }
         }
-        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS,map);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, map);
     }
 
 }

+ 7 - 11
simulation-resource-scheduler/pom.xml

@@ -17,6 +17,13 @@
     </properties>
 
     <dependencies>
+
+        <!-- docker 客户端 -->
+        <dependency>
+            <groupId>com.github.docker-java</groupId>
+            <artifactId>docker-java</artifactId>
+        </dependency>
+
         <!-- kubernetes 客户端 -->
         <dependency>
             <groupId>io.kubernetes</groupId>
@@ -55,17 +62,6 @@
         </dependency>
         <!-- 数据库 - 结束 -->
 
-        <!-- 权限认证 - 开始 -->
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-security</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-oauth2</artifactId>
-        </dependency>
-        <!-- 权限认证 - 结束 -->
-
         <!-- nacos - 开始 -->
         <dependency>
             <groupId>org.springframework.cloud</groupId>

+ 0 - 33
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/configuration/oauth/MyTokenServices.java

@@ -1,33 +0,0 @@
-package com.css.simulation.resource.scheduler.configuration.oauth;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.oauth2.provider.token.RemoteTokenServices;
-import org.springframework.security.oauth2.provider.token.ResourceServerTokenServices;
-
-import javax.annotation.Resource;
-
-@Configuration
-public class MyTokenServices {
-
-    @Resource
-    private OauthParameter oauthParameter;
-
-
-    /**
-     * access_token 验证策略
-     * DefaultTokenServices()
-     * RemoteTokenServices():远程验证,通过 /oauth/check_token
-     * SpringSocialTokenServices()
-     * UserInfoTokenServices()
-     */
-    @Bean
-    public ResourceServerTokenServices tokenServices() {
-        RemoteTokenServices services = new RemoteTokenServices();
-        services.setCheckTokenEndpointUrl(oauthParameter.getCheckTokenEndpointUrl());  // 需要在授权服务器公开 /oauth/check_token
-        services.setClientId(oauthParameter.getClientId());
-        services.setClientSecret(oauthParameter.getClientSecret());
-        return services;
-    }
-
-}

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

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

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

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

+ 34 - 17
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/consumer/ManualProjectConsumer.java

@@ -5,14 +5,13 @@ import api.common.pojo.constants.DictConstants;
 import api.common.pojo.dto.ProjectMessageDTO;
 import api.common.pojo.param.KafkaParameter;
 import api.common.pojo.param.MinioParameter;
-import api.common.util.FileUtil;
-import api.common.util.JsonUtil;
-import api.common.util.LinuxUtil;
-import api.common.util.StringUtil;
+import api.common.pojo.param.RedisParameter;
+import api.common.util.*;
 import com.css.simulation.resource.scheduler.feign.CommonService;
 import com.css.simulation.resource.scheduler.mapper.*;
 import com.css.simulation.resource.scheduler.pojo.dto.*;
 import com.css.simulation.resource.scheduler.pojo.po.*;
+import com.github.dockerjava.api.DockerClient;
 import feign.Response;
 import io.kubernetes.client.openapi.ApiClient;
 import io.kubernetes.client.openapi.ApiException;
@@ -22,6 +21,7 @@ import io.kubernetes.client.util.Yaml;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.kafka.annotation.KafkaListener;
 import org.springframework.stereotype.Component;
 import org.springframework.util.ResourceUtils;
@@ -39,14 +39,14 @@ public class ManualProjectConsumer {
     @Autowired
     ProjectMapper projectMapper;
     @Autowired
+    TaskMapper taskMapper;
+    @Autowired
     IndexMapper indexMapper;
     @Autowired
     SceneMapper sceneMapper;
     @Autowired
     VehicleMapper vehicleMapper;
     @Autowired
-    TaskMapper taskMapper;
-    @Autowired
     SensorCameraMapper sensorCameraMapper;
     @Autowired
     SensorOgtMapper sensorOgtMapper;
@@ -56,8 +56,15 @@ public class ManualProjectConsumer {
     private AlgorithmMapper algorithmMapper;
     @Autowired
     private ApiClient apiClient;
+    @Value("${spring.kafka.consumer.topic.manual-project}")
+    private String manualProjectTopic;
+    @Value("${scheduler.manual-project.result-path-minio}")
+    private String manualProjectResultPath;
+    @Value("${scheduler.temp-path-linux}")
+    private String tempPath;
+
 
-    @KafkaListener(groupId = "simulation-resource-scheduler", topics = "test")
+    @KafkaListener(groupId = "simulation-resource-scheduler", topics = "${spring.kafka.consumer.topic.manual-project}")
     public void testConsumer(ConsumerRecord<String, String> projectRecord) {
         System.out.println("------- 消费成功:" + projectRecord.value());
     }
@@ -99,7 +106,7 @@ public class ManualProjectConsumer {
         sceneList.addAll(sceneMapper.selectNaturalByIdList(naturalIdList));
         sceneList.addAll(sceneMapper.selectStandardByIdList(standardIdList));
         sceneList.addAll(sceneMapper.selectAccidentByIdList(accidentIdList));
-
+        projectMapper.updateTaskNumber(projectId, sceneList.size()); // 有多少场景就有多少任务
         // -------------------------------- 2 模型 --------------------------------
         // 根据 vehicleId, 获取 模型信息和传感器信息
         String vehicleId = projectMessageDTO.getVehicleId();    // 模型 id
@@ -110,19 +117,30 @@ public class ManualProjectConsumer {
         // -------------------------------- 3 任务消息 --------------------------------
         // 根据场景创建任务,组装 task 消息
         int maxSimulationTime = projectMessageDTO.getMaxSimulationTime();
+
         for (ScenePO scenePO : sceneList) {
             String taskId = StringUtil.getRandomUUID();
-            String resultPath = "/project/manual-project/" + projectId + "/" + taskId;
-            TaskPO taskPO = TaskPO.builder()
+            String resultPath = manualProjectResultPath + projectId + "/" + taskId;
+            // 保存任务信息
+            TaskPO taskPO = TaskPO.builder() // run_start_time 和 run_end_time 不填
                     .id(taskId)
                     .pId(projectId)
                     .sceneId(scenePO.getId())
                     .sceneName(scenePO.getName())
                     .sceneType(scenePO.getType())
-                    .runState(DictConstants.TASK_WAITING)
+                    .runState(DictConstants.TASK_PENDING)
                     .runResult(resultPath)
                     .build();
-            //4-1 组装 task 消息
+            taskPO.setCreateTime(TimeUtil.getNowForMysql());
+            taskPO.setCreateUserId("simulation-resource-scheduler");
+            taskPO.setModifyTime(TimeUtil.getNowForMysql());
+            taskPO.setModifyUserId("simulation-resource-scheduler");
+            taskPO.setModifyTime(TimeUtil.getNowForMysql());
+            taskPO.setIsDeleted("0");
+            taskMapper.insert(taskPO);
+            // 心跳信息存在緩存中
+            commonService.set(new RedisParameter(manualProjectTopic + ":" + projectId + ":" + taskId, TimeUtil.getNow() + "", 0));
+            // 组装 task 消息
             TaskDTO taskDTO = TaskDTO.builder()
                     .info(InfoDTO.builder()
                             .project_id(projectId)
@@ -173,16 +191,13 @@ public class ManualProjectConsumer {
         // -------------------------------- 4 算法(一期按单机版做) --------------------------------
         // 私有仓库导入算法镜像(搭建私有仓库)
         String algorithmId = projectMessageDTO.getAlgorithmId();    // 算法 id
-        String localPath = "/opt/module/algorithm/";
         //4-1 根据算法 id 获取算法文件地址
         String minioPath = algorithmMapper.selectMinioPathById(algorithmId);
+        String linuxPath = tempPath + minioPath.substring(1);
         // 下载算法文件到本地( 2 到仓库服务器)
         Response response = commonService.download(new MinioParameter(minioPath));
         InputStream inputStream = response.body().asInputStream();
-        FileUtil.writeInputStreamToLocalFile(inputStream,localPath);
-        //4-2 本地执行 docker load 算法文件成镜像( 2 创建 ssh 连接)
-        LinuxUtil.execute("docker load");
-
+        //4-2 本地执行 docker load 算法文件成镜像(二期用 docker-java 操作 或 ssh 连接)
 
 
         // -------------------------------- 5 创建 pod 开始执行 --------------------------------
@@ -224,4 +239,6 @@ public class ManualProjectConsumer {
         batchV1Api.createNamespacedJob("test-namespace1", yaml, null, null, null);
 
     }
+
+
 }

+ 17 - 9
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/controller/TaskController.java

@@ -1,15 +1,16 @@
 package com.css.simulation.resource.scheduler.controller;
 
 
-import api.common.pojo.common.ResponseBodyVO;
 import com.css.simulation.resource.scheduler.service.TaskService;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 
 @RestController
+@RequestMapping("/task")
 public class TaskController {
 
     @Resource
@@ -18,19 +19,26 @@ public class TaskController {
     /**
      * Pod 的心跳接口
      */
-    @PostMapping("task/{taskId}/tick")
-    public ResponseBodyVO<String> taskTick(@PathVariable("taskId") String taskId) {
-        return taskService.taskTick(taskId);
+    @GetMapping("/tick")
+    public void taskTick(@RequestParam("taskId") String taskId) {
+        taskService.taskTick(taskId);
     }
 
     /**
      * 修改任务状态
      */
-    @PostMapping("/task/{taskId}/state/{taskState}")
-    public ResponseBodyVO<String> taskStateModify(@PathVariable("taskId") String taskId, @PathVariable("taskState") String taskState) {
-        return taskService.taskStateModify(taskId, taskState);
+    @GetMapping("/state")
+    public void taskState(@RequestParam("taskId") String taskId, @RequestParam("state") String state) {
+        taskService.taskState(taskId, state);
     }
 
+    /**
+     * 任务执行前调用该接口,确定该任务没有被终止
+     */
+    @GetMapping("/confirm")
+    public Boolean taskConfirm(@RequestParam("taskId") String taskId) {
+        return taskService.taskConfirm(taskId);
+    }
 
 
 }

+ 14 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/feign/CommonService.java

@@ -3,6 +3,7 @@ package com.css.simulation.resource.scheduler.feign;
 import api.common.pojo.common.ResponseBodyVO;
 import api.common.pojo.param.KafkaParameter;
 import api.common.pojo.param.MinioParameter;
+import api.common.pojo.param.RedisParameter;
 import com.css.simulation.resource.scheduler.configuration.feign.OpenFeignConfiguration;
 import com.css.simulation.resource.scheduler.feign.fallback.CommonServiceFallback;
 import feign.Response;
@@ -37,5 +38,18 @@ public interface CommonService {
     @PostMapping(value = "/kafka/send", consumes = MediaType.APPLICATION_JSON_VALUE)
     ResponseBodyVO<String> send(@RequestBody @Validated KafkaParameter kafkaParameter);
 
+    @PostMapping("/redis/get")
+    ResponseBodyVO<String> get(@RequestBody @Validated RedisParameter redisParameter);
+
+    @PostMapping("/redis/set")
+    ResponseBodyVO<String> set(@RequestBody @Validated RedisParameter redisParameter);
+
+    @PostMapping("/redis/getExpire")
+    ResponseBodyVO<Long> getExpire(@RequestBody @Validated RedisParameter redisParameter);
+
+
+    @PostMapping("/redis/delete")
+    ResponseBodyVO<String> delete(@RequestBody @Validated RedisParameter redisParameter);
+
 
 }

+ 45 - 11
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/IndexMapper.java

@@ -16,20 +16,54 @@ public interface IndexMapper {
 
 
     @Results(id = "index", value = {
-            @Result(column = "scene_natural_ids",property = "sceneNaturalIds",  jdbcType = JdbcType.VARCHAR),
-            @Result(column = "scene_traffic_ids",property = "sceneTrafficIds",  jdbcType = JdbcType.VARCHAR),
-            @Result(column = "scene_statue_ids",property = "sceneStatueIds",  jdbcType = JdbcType.VARCHAR)
+            @Result(column = "sublist_id", property = "indexId", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "scene_natural_ids", property = "sceneNaturalIds", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "scene_traffic_ids", property = "sceneTrafficIds", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "scene_statue_ids", property = "sceneStatueIds", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "weight", property = "weight", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "parent_id", property = "parentId", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "rule_details", property = "ruleDetails", jdbcType = JdbcType.VARCHAR)
     })
-
-
     @Select("select scene_natural_ids,\n" +
             "       scene_traffic_ids,\n" +
             "       scene_statue_ids\n" +
-            "from scene_package_sublist sps\n" +
-            "         left join scene_package sp on parent_id = sp.package_id\n" +
-            "where parent_id = '#{packageId}'\n" +
-            "  and ((scene_natural_ids is not null and scene_natural_ids != '')\n" +
-            "    or (scene_traffic_ids is not null and scene_traffic_ids != '')\n" +
-            "    or (scene_statue_ids is not null and scene_statue_ids != ''))")
+            "from scene_package_sublist\n" +
+            "where is_deleted = '0'\n" +
+            "  and root_id = #{packageId}\n" +
+            "  and package_and_rules is not null and package_and_rules != ''")
     List<IndexPO> selectLeafIndexByPackageId(@Param("packageId") String packageId);
+
+    @ResultMap("index")
+    @Select("select sps.scene_natural_ids,\n" +
+            "       sps.scene_traffic_ids,\n" +
+            "       sps.scene_statue_ids,\n" +
+            "       sps.weight,\n" +
+            "       sps.parent_id,\n" +
+            "       sr.rule_details\n" +
+            "from scene_package_sublist sps\n" +
+            "         left join scoring_rules sr on sps.package_and_rules = sr.rules_id\n" +
+            "where root_id = '#{packageId}'\n" +
+            "  and package_and_rules is not null\n" +
+            "  and package_and_rules != ''")
+    List<IndexPO> selectLeafIndexWithRuleDetailsByPackageId(@Param("packageId") String packageId);
+
+
+    @ResultMap("index")
+    @Select("select sublist_id,\n" +
+            "       scene_natural_ids,\n" +
+            "       scene_traffic_ids,\n" +
+            "       scene_statue_ids,\n" +
+            "       weight,\n" +
+            "       parent_id\n" +
+            "from scene_package_sublist\n" +
+            "where 1=1\n" +
+            "<if test='idList != null and idList.size() > 0'>\n" +
+            "   and sublist_id in\n" +
+            "       <foreach collection='idList' index='index' item='item' open='(' close=')' separator=','>\n" +
+            "           #{item}" +
+            "       </foreach>\n" +
+            "</if>\n" +
+            "")
+    List<IndexPO> selectByIdList(@Param("idList") List<String> idList);
+
 }

+ 28 - 4
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/ProjectMapper.java

@@ -1,6 +1,7 @@
 package com.css.simulation.resource.scheduler.mapper;
 
 
+import com.css.simulation.resource.scheduler.pojo.po.ProjectPO;
 import org.apache.ibatis.annotations.*;
 import org.apache.ibatis.type.JdbcType;
 
@@ -8,13 +9,36 @@ import org.apache.ibatis.type.JdbcType;
 public interface ProjectMapper {
 
 
-    @Results(id = "job", value = {
-            @Result(property = "id", column = "id", jdbcType = JdbcType.VARCHAR)
+    @Results(id = "project", value = {
+            @Result(column = "id", property = "id", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "scene", property = "scenePackageId", jdbcType = JdbcType.VARCHAR)
     })
 
+    @Select("select id, scene\n" +
+            "from simulation_manual_project \n" +
+            "where id = (select project_id from simulation_manual_project_task where id = #{taskId})")
+    ProjectPO selectById(@Param("taskId")String taskId);
 
-    @Update("update simulation_project\n" +
+    @Update("update simulation_manual_project\n" +
             "set state = #{state}\n" +
             "where id = #{id}")
-    void updateProjectState(@Param("id") String id,@Param("state") String state);
+    void updateProjectState(@Param("id") String id, @Param("state") String state);
+
+
+    @Update("update simulation_manual_project\n" +
+            "set task_number = {taskNumber}\n" +
+            "where id = #{id}")
+    void updateTaskNumber(@Param("id") String id, @Param("taskNumber") int taskNumber);
+
+
+    @Select("select task_number\n" +
+            "from simulation_manual_project\n" +
+            "where project_id = #{id}")
+    int selectTaskNumById(@Param("id") String id);
+
+    @Select("select count(1)\n" +
+            "from simulation_manual_project_task\n" +
+            "where run_state = #{state}\n" +
+            "  and p_id = #{projectId}")
+    int selectTaskNumByProjectIdAndState(@Param("projectId") String projectId,@Param("state") String state);
 }

+ 2 - 1
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/SensorCameraMapper.java

@@ -38,6 +38,7 @@ public interface SensorCameraMapper {
             "       rvs.sensor_p,\n" +
             "       rvs.sensor_r\n" +
             "from model_sensor_camera msc left join relation_vehicle_sensor rvs on msc.id = rvs.sensor_id\n" +
-            "where rvs.vehicle_id = #{vehicleId}")
+            "where msc.is_deleted = '0' and rvs.is_deleted = '0'" +
+            "   and rvs.vehicle_id = #{vehicleId}")
     List<CameraPO> selectCameraByVehicleId(@Param("vehicleId") String vehicleId);
 }

+ 2 - 1
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/SensorOgtMapper.java

@@ -44,6 +44,7 @@ public interface SensorOgtMapper {
             "       rvs.sensor_r,\n" +
             "       rvs.sensor_port\n" +
             "from model_sensor_ogt mso left join relation_vehicle_sensor rvs on mso.id = rvs.sensor_id\n" +
-            "where rvs.vehicle_id = #{vehicleId}")
+            "where mso.is_deleted = '0' and rvs.is_deleted = '0'\n" +
+            "   and rvs.vehicle_id = #{vehicleId}")
     List<OgtPO> selectOgtByVehicleId(@Param("vehicleId") String vehicleId);
 }

+ 46 - 29
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/TaskMapper.java

@@ -1,45 +1,62 @@
 package com.css.simulation.resource.scheduler.mapper;
 
+
 import com.css.simulation.resource.scheduler.pojo.po.TaskPO;
 import org.apache.ibatis.annotations.*;
 import org.apache.ibatis.type.JdbcType;
+import org.springframework.web.bind.annotation.RequestParam;
 
+import java.sql.Timestamp;
 import java.util.List;
 
+/**
+ * simulation_manual_project_task
+ */
 @Mapper
 public interface TaskMapper {
 
     @Results(id = "task", value = {
             @Result(column = "id", property = "id", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "p_id", property = "pId", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "scene_id", property = "sceneId", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "scene_name", property = "sceneName", jdbcType = JdbcType.VARCHAR),
             @Result(column = "scene_type", property = "sceneType", jdbcType = JdbcType.VARCHAR),
-            @Result(column = "sn_scenario_osc", property = "snScenarioOsc", jdbcType = JdbcType.VARCHAR),
-            @Result(column = "sn_scenario_odr", property = "snScenarioOdr", jdbcType = JdbcType.VARCHAR),
-            @Result(column = "sn_scenario_osgb", property = "snScenarioOsgb", jdbcType = JdbcType.VARCHAR),
-            @Result(column = "scr_scenario_osc", property = "scrScenarioOsc", jdbcType = JdbcType.VARCHAR),
-            @Result(column = "scr_scenario_odr", property = "scrScenarioOdr", jdbcType = JdbcType.VARCHAR),
-            @Result(column = "scr_scenario_osgb", property = "scrScenarioOsgb", jdbcType = JdbcType.VARCHAR),
-            @Result(column = "sa_scenario_osc", property = "saScenarioOsc", jdbcType = JdbcType.VARCHAR),
-            @Result(column = "sa_scenario_odr", property = "saScenarioOdr", jdbcType = JdbcType.VARCHAR),
-            @Result(column = "sa_scenario_osgb", property = "saScenarioOsgb", jdbcType = JdbcType.VARCHAR),
-            @Result(column = "vehicle_id", property = "vehicleId", jdbcType = JdbcType.VARCHAR),
-            @Result(column = "max_speed", property = "maxSpeed", jdbcType = JdbcType.DECIMAL),
-            @Result(column = "engine_power", property = "enginePower", jdbcType = JdbcType.DECIMAL),
-            @Result(column = "max_deceleration", property = "maxDeceleration", jdbcType = JdbcType.DECIMAL),
-            @Result(column = "max_steering_angle", property = "maxSteeringAngle", jdbcType = JdbcType.DECIMAL),
-            @Result(column = "mass", property = "mass", jdbcType = JdbcType.DECIMAL),
-            @Result(column = "front_surface_effective", property = "frontSurfaceEffective", jdbcType = JdbcType.DECIMAL),
-            @Result(column = "air_drag_coefficient", property = "airDragCoefficient", jdbcType = JdbcType.DECIMAL),
-            @Result(column = "rolling_resistance_coefficient", property = "rollingResistanceCoefficient", jdbcType = JdbcType.DECIMAL),
-            @Result(column = "wheel_diameter", property = "wheelDiameter", jdbcType = JdbcType.DECIMAL),
-            @Result(column = "wheel_drive", property = "wheelDrive", jdbcType = JdbcType.VARCHAR),
-            @Result(column = "overall_efficiency", property = "overallEfficiency", jdbcType = JdbcType.DECIMAL),
-            @Result(column = "front_distance", property = "frontDistance", jdbcType = JdbcType.DECIMAL),
-            @Result(column = "rear_distance", property = "rearDistance", jdbcType = JdbcType.DECIMAL),
-            @Result(column = "left_distance", property = "leftDistance", jdbcType = JdbcType.DECIMAL),
-            @Result(column = "right_distance", property = "rightDistance", jdbcType = JdbcType.DECIMAL),
-            @Result(column = "height_distance", property = "heightDistance", jdbcType = JdbcType.DECIMAL),
-            @Result(column = "wheelbase", property = "wheelbase", jdbcType = JdbcType.DECIMAL),
+            @Result(column = "run_state", property = "runState", jdbcType = JdbcType.VARCHAR),
+            @Result(column = "run_result", property = "runResult", jdbcType = JdbcType.VARCHAR)
     })
-    @Select("")
-    List<TaskPO> selectNaturalByProjectId(@Param("projectId") String projectId);
+    @Select("select id,\n" +
+            "       p_id,\n" +
+            "       scene_id,\n" +
+            "       scene_name,\n" +
+            "       scene_type,\n" +
+            "       run_state,\n" +
+            "       run_result\n" +
+            "from simulation_manual_project_task\n" +
+            "where p_id = #{projectId}")
+    List<TaskPO> selectTaskListByProjectId(@Param("projectId") String projectId);
+
+    @Update("update monitor_task\n" +
+            "set tick_time = #{tickTime}\n" +
+            "where task_id = #{id}")
+    void updateTickTime(@Param("id") String id, @Param("tickTime") Timestamp tickTime);
+
+    @Update("update simulation_manual_project_task smpt,monitor_task mt\n" +
+            "set smpt.run_state = #{tickTime},\n" +
+            "    mt.run_state= #{tickTime}\n" +
+            "where smpt.id = #{id}\n" +
+            "  and mt.task_id = #{id}")
+    void updateState(@Param("id") String id, @Param("runState") String runState);
+
+
+    @Insert("insert into simulation_manual_project_task(id, p_id, scene_id, scene_name, scene_type,\n" +
+            "                                           run_state, run_result, create_time, create_user_id, modify_time,\n" +
+            "                                           modify_user_id, is_deleted)\n" +
+            "values (#{task.id},#{task.pId},#{task.sceneId},#{task.sceneName},#{task.sceneType},#{task.runState},\n" +
+            "#{task.runResult},#{task.createTime},#{task.createUserId},#{task.modifyTime},#{modifyUserId},#{task.isDeleted})")
+    void insert(@RequestParam("task") TaskPO task);
+
+    @Select("select run_state\n" +
+            "from simulation_manual_project_task\n" +
+            "where id = #{id}")
+    String selectStateById(@Param("id") String id);
 }

+ 2 - 1
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/mapper/VehicleMapper.java

@@ -46,6 +46,7 @@ public interface VehicleMapper {
             "       height_distance,\n" +
             "       wheelbase\n" +
             "from model_vehicle\n" +
-            "where id = #{vehicleId}")
+            "where is_deleted = '0'\n" +
+            "   and id = #{vehicleId}")
     VehiclePO selectByVehicleId(@Param("projectId") String projectId);
 }

+ 5 - 1
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/po/IndexPO.java

@@ -11,8 +11,12 @@ import lombok.NoArgsConstructor;
 @AllArgsConstructor
 public class IndexPO {
 
+    private String indexId;
     private String sceneNaturalIds;
     private String sceneTrafficIds;
     private String sceneStatueIds;
-
+    private String weight;  // 权重
+    private String parentId;  // 权重
+    private String ruleDetails; // 打分规则代码
+    private Double score; // 打分规则代码
 }

+ 17 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/po/ProjectPO.java

@@ -0,0 +1,17 @@
+package com.css.simulation.resource.scheduler.pojo.po;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ProjectPO {
+
+    private String id;
+    private String scenePackageId;
+
+}

+ 1 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/pojo/po/TaskPO.java

@@ -16,4 +16,5 @@ public class TaskPO extends CommonPO {
     private String sceneType;
     private String runState;
     private String runResult;
+    private Double score;
 }

+ 7 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/scheduler/TickScheduler.java

@@ -0,0 +1,7 @@
+package com.css.simulation.resource.scheduler.scheduler;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class TickScheduler {
+}

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

@@ -1,33 +1,124 @@
 package com.css.simulation.resource.scheduler.service;
 
-import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.constants.DictConstants;
+import api.common.pojo.param.RedisParameter;
+import api.common.util.CollectionUtil;
+import api.common.util.StringUtil;
+import api.common.util.TimeUtil;
+import com.css.simulation.resource.scheduler.feign.CommonService;
+import com.css.simulation.resource.scheduler.mapper.IndexMapper;
+import com.css.simulation.resource.scheduler.mapper.ProjectMapper;
+import com.css.simulation.resource.scheduler.mapper.TaskMapper;
+import com.css.simulation.resource.scheduler.pojo.po.IndexPO;
+import com.css.simulation.resource.scheduler.pojo.po.ProjectPO;
+import com.css.simulation.resource.scheduler.pojo.po.TaskPO;
+import com.css.simulation.resource.scheduler.util.ScoreUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.util.*;
+import java.util.stream.Collectors;
+
 @Service
 public class TaskService {
 
-//    @Resource
-//    private RedisTemplate<String, String> redisTemplate;
 
+    @Autowired
+    private CommonService commonService;
+    @Autowired
+    private ProjectMapper projectMapper;
+    @Autowired
+    private TaskMapper taskMapper;
+    @Autowired
+    private IndexMapper indexMapper;
+    @Value("${spring.kafka.consumer.topic.manual-project}")
+    private String manualProjectTopic;
 
-    /**
-     * Pod 的心跳接口
-     */
-    public ResponseBodyVO<String> taskTick(String taskId) {
-        //1 将 taskId 存储到 redis,并刷新过期时间
-        //2
-        return null;
+    public void taskTick(String taskId) {
+        // 刷新 redis 心跳时间
+        ProjectPO projectPO = projectMapper.selectById(taskId);
+        String projectId = projectPO.getId();
+        taskMapper.updateTickTime(taskId, TimeUtil.getNowForMysql());
+        commonService.set(RedisParameter.builder()
+                .key(manualProjectTopic + ":" + projectId + ":" + taskId)
+                .value(TimeUtil.getNow() + "")
+                .build());
     }
 
-    /**
-     * 修改任务状态
-     */
-    public ResponseBodyVO<String> taskStateModify(String taskId, String taskState) {
+
+    public void taskState(String taskId, String state) {
         //1 根据 taskId 修改任务状态 taskState。
-        //2 如果 taskState 为完成状态,项目的已完成任务数+1。
-        //3 如果已完成任务数等于所有任务数量,调用打分程序,对项目中每个指标进行打分,
+        taskMapper.updateState(taskId, state);
+        //2 如果 taskState 为完成状态,校验一下项目的已完成数量。
+        ProjectPO projectPO = projectMapper.selectById(taskId);
+        String projectId = projectPO.getId();
+        String scenePackageId = projectPO.getScenePackageId();
+        int taskNum = projectMapper.selectTaskNumById(projectId);
+        int completedTaskNum = projectMapper.selectTaskNumByProjectIdAndState(projectId, DictConstants.TASK_COMPLETED);
+        if (taskNum != completedTaskNum) {
+            return;
+        }  //3 如果已完成任务数等于所有任务数量,调用打分程序,对项目中每个指标进行打分,
+        List<TaskPO> taskList = taskMapper.selectTaskListByProjectId(projectId);  // 所有任务信息
+        List<IndexPO> leafIndexList = indexMapper.selectLeafIndexWithRuleDetailsByPackageId(scenePackageId);
+
+        // 计算所有叶子节点指标的得分
+        for (IndexPO indexPO : leafIndexList) {
+            String ruleDetails = indexPO.getRuleDetails();
+            Set<String> sceneIdSet = new HashSet<>();
+            String naturalIds = indexPO.getSceneNaturalIds();
+            String standardIds = indexPO.getSceneStatueIds();
+            String accidentIds = indexPO.getSceneTrafficIds();
+            if (StringUtil.isNotEmpty(naturalIds)) {
+                String[] naturalIdArray = naturalIds.split(",");
+                sceneIdSet.addAll(Arrays.asList(naturalIdArray));
+            }
+            if (StringUtil.isNotEmpty(standardIds)) {
+                String[] standardArray = standardIds.split(",");
+                sceneIdSet.addAll(Arrays.asList(standardArray));
+            }
+            if (StringUtil.isNotEmpty(accidentIds)) {
+                String[] accidentIdArray = accidentIds.split(",");
+                sceneIdSet.addAll(Arrays.asList(accidentIdArray));
+            }
+            int resultNumberOfCurrentIndex = sceneIdSet.size();
+            double sum = taskList.stream()
+                    .filter(task1 -> sceneIdSet.contains(task1.getSceneId()))
+                    .mapToDouble(task2 -> {
+                        // 计算每个任务的得分
+                        double score = ScoreUtil.score(task2.getRunResult(), ruleDetails);
+                        task2.setScore(score);
+                        return score;
+                    }).sum();
+            double indexScore = sum / resultNumberOfCurrentIndex;
+            indexPO.setScore(indexScore);
+        }
+        // 计算不合格的任务总数(不到100分就是不合格)
+        int unqualified = (int) taskList.stream().filter(taskPO -> taskPO.getScore() < 100).count();
         //4 根据每个指标的得分和权重算出 project 的总得分。
+        double totalScore = compute(leafIndexList);
+        //5 保存指标的分数和总分数
+    }
+
+
+    public Boolean taskConfirm(String taskId) {
+        // 查询 task 如果不是 pending 则不执行
+        String state = taskMapper.selectStateById(taskId);
+        return DictConstants.TASK_PENDING.equals(state);
+    }
 
-        return null;
+    public double compute(List<IndexPO> leaf) {
+        double result = 0.0;
+        Map<String, List<IndexPO>> groups = leaf.stream().collect(Collectors.groupingBy(IndexPO::getParentId));
+        Set<String> idSet = groups.keySet();
+        List<IndexPO> indexPOList = indexMapper.selectByIdList(CollectionUtil.setToList(idSet));
+        indexPOList.forEach(index1 -> {
+            double sum = groups.get(index1.getIndexId()).stream().mapToDouble(index2 -> index2.getScore() * Double.parseDouble(index2.getWeight())).sum();
+            index1.setScore(sum);
+        });
+        if (indexPOList.size() > 1) {
+            result = result + compute(indexPOList);
+        }
+        return result;
     }
 }

+ 14 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/util/ScoreUtil.java

@@ -0,0 +1,14 @@
+package com.css.simulation.resource.scheduler.util;
+
+/**
+ * 任务结果打分
+ */
+public class ScoreUtil {
+
+    public static double score(Object taskResult, String scoreRule) {
+        return Math.random();
+    }
+
+
+
+}

+ 11 - 0
simulation-resource-server/pom.xml

@@ -52,6 +52,17 @@
         </dependency>
         <!-- nacos - 结束 -->
 
+        <!-- 权限认证 - 开始 -->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-security</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-oauth2</artifactId>
+        </dependency>
+        <!-- 权限认证 - 结束 -->
+
         <!-- 数据库 - 开始 -->
         <dependency>
             <groupId>com.github.pagehelper</groupId>

+ 4 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/Application.java

@@ -3,9 +3,12 @@ package com.css.simulation.resource;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
+
 
-@EnableFeignClients
 @SpringBootApplication
+@EnableFeignClients
+@EnableResourceServer
 public class Application {
 
     public static void main(String[] args) {

+ 18 - 6
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/configuration/oauth/OAuth2ResourceServerConfiguration.java → simulation-resource-server/src/main/java/com/css/simulation/resource/common/config/OAuth2Config.java

@@ -1,28 +1,40 @@
-package com.css.simulation.resource.scheduler.configuration.oauth;
+package com.css.simulation.resource.common.config;
 
+import com.css.simulation.resource.common.oauth.MyUserAuthenticationConverter;
+import com.css.simulation.resource.common.oauth.OauthParameter;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.config.http.SessionCreationPolicy;
 import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
 import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
-import org.springframework.security.oauth2.provider.token.ResourceServerTokenServices;
+import org.springframework.security.oauth2.provider.token.DefaultAccessTokenConverter;
+import org.springframework.security.oauth2.provider.token.RemoteTokenServices;
 
 import javax.annotation.Resource;
 
 @Configuration
-public class OAuth2ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
-
+public class OAuth2Config extends ResourceServerConfigurerAdapter {
 
     @Resource
     private OauthParameter oauthParameter;
 
     @Resource
-    private ResourceServerTokenServices resourceServerTokenServices;
+    MyUserAuthenticationConverter myUserAuthenticationConverter;
 
     @Override
     public void configure(ResourceServerSecurityConfigurer resources) {
+        //令牌解析服务配置
+        RemoteTokenServices services = new RemoteTokenServices();
+        services.setCheckTokenEndpointUrl(oauthParameter.getCheckTokenEndpointUrl());  // 需要在授权服务器公开 /oauth/check_token
+        services.setClientId(oauthParameter.getClientId());
+        services.setClientSecret(oauthParameter.getClientSecret());
+        //自定义令牌转换器
+        DefaultAccessTokenConverter defaultAccessTokenConverter = new DefaultAccessTokenConverter();
+        defaultAccessTokenConverter.setUserTokenConverter(myUserAuthenticationConverter);
+        services.setAccessTokenConverter(defaultAccessTokenConverter);
+
         resources.resourceId(oauthParameter.getResourceId())      // 资源 id
-                .tokenServices(resourceServerTokenServices)    // 使用远程服务验证令牌的服务
+                .tokenServices(services)    // 使用远程服务验证令牌的服务
                 .stateless(true);   // 无状态模式,即无需用户登录,无 session
     }
 

+ 13 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/common/config/GlobalExceptionHandler.java → simulation-resource-server/src/main/java/com/css/simulation/resource/common/exception/GlobalExceptionHandler.java

@@ -1,8 +1,9 @@
-package com.css.simulation.resource.common.config;
+package com.css.simulation.resource.common.exception;
 
 import api.common.pojo.common.ResponseBodyVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Scope;
+import org.springframework.http.converter.HttpMessageNotReadableException;
 import org.springframework.web.bind.MethodArgumentNotValidException;
 import org.springframework.web.bind.annotation.ControllerAdvice;
 import org.springframework.web.bind.annotation.ExceptionHandler;
@@ -24,6 +25,16 @@ public class GlobalExceptionHandler {
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE, Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage());
     }
 
+    /**
+     * 请求体缺失异常统一处理
+     */
+    @ExceptionHandler(HttpMessageNotReadableException.class)
+    @ResponseBody
+    public ResponseBodyVO<Object> handleHttpMessageNotReadableException(Exception e) {
+        log.error(e.getMessage(), e);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE, "Required request body is missing!");
+    }
+
     /**
      * 服务器错误异常统一处理
      */
@@ -33,4 +44,5 @@ public class GlobalExceptionHandler {
         log.error(e.getMessage(), e);
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE, "服务器错误!");
     }
+
 }

+ 42 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/common/oauth/MyUserAuthenticationConverter.java

@@ -0,0 +1,42 @@
+package com.css.simulation.resource.common.oauth;
+
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.AuthorityUtils;
+import org.springframework.security.oauth2.provider.token.DefaultUserAuthenticationConverter;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
+import java.util.*;
+
+@Component
+public class MyUserAuthenticationConverter extends DefaultUserAuthenticationConverter {
+
+    @Override
+    public Authentication extractAuthentication(Map<String, ?> map) {
+        List<GrantedAuthority> list = new LinkedList<>();
+        //解析权限
+        if (map.containsKey(AUTHORITIES)) {
+            Object authorities = map.get(AUTHORITIES);
+            if (authorities instanceof String) {
+                list = AuthorityUtils.commaSeparatedStringToAuthorityList((String) authorities);
+            } else if (authorities instanceof Collection) {
+                list = AuthorityUtils.commaSeparatedStringToAuthorityList(StringUtils.collectionToCommaDelimitedString((Collection) authorities));
+            } else {
+                throw new IllegalArgumentException("Authorities must be either a String or a Collection");
+            }
+        }
+        //解析当前登录人信息
+        MyUserDetails userDetails = new MyUserDetails();
+        userDetails.setId((String) map.get("id"));
+        userDetails.setUsername((String) map.get("username"));
+        userDetails.setPhone((String) map.get("phone"));
+        userDetails.setIsSub((String) map.get("isSub"));
+        userDetails.setParentId((String) map.get("parentId"));
+        return new UsernamePasswordAuthenticationToken(userDetails, "N/A", list);
+    }
+
+
+
+}

+ 59 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/common/oauth/MyUserDetails.java

@@ -0,0 +1,59 @@
+package com.css.simulation.resource.common.oauth;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
+
+import java.io.Serializable;
+import java.util.Set;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MyUserDetails implements UserDetails, Serializable {
+    private static final long serialVersionUID = -158357727659030597L;
+    private String id;
+    private String username;
+    private String password;
+    private String phone;
+    private String isSub;
+    private String parentId;
+    private Set<GrantedAuthority> authorities;
+
+
+    /**
+     * 默认 false 是将用户账号过期,需改成 true 不过期
+     */
+    @Override
+    public boolean isAccountNonExpired() {
+        return true;
+    }
+
+    /**
+     * 默认 false 是将用户上锁,需改成 true 不上锁
+     */
+    @Override
+    public boolean isAccountNonLocked() {
+        return true;
+    }
+
+    /**
+     * 默认 false 是用户凭证国汽,需改成 true 不过期
+     */
+    @Override
+    public boolean isCredentialsNonExpired() {
+        return true;
+    }
+
+    /**
+     * 默认 false 是将用户失效,需改成 true 不失效
+     */
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+}

+ 1 - 1
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/configuration/oauth/OauthParameter.java → simulation-resource-server/src/main/java/com/css/simulation/resource/common/oauth/OauthParameter.java

@@ -1,4 +1,4 @@
-package com.css.simulation.resource.scheduler.configuration.oauth;
+package com.css.simulation.resource.common.oauth;
 
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;

+ 21 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/common/utils/AuthUtil.java

@@ -0,0 +1,21 @@
+package com.css.simulation.resource.common.utils;
+
+import com.css.simulation.resource.common.oauth.MyUserDetails;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+
+/**
+ * 认证信息工具类
+ */
+public class AuthUtil {
+
+    /**
+     * 获取当前登录人id
+     */
+    public static String getCurrentUserId(){
+        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+        MyUserDetails userDetails = (MyUserDetails)authentication.getPrincipal();
+        String userId = userDetails.getId();
+        return userId;
+    }
+}

+ 1 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/common/utils/PageUtil.java

@@ -15,7 +15,7 @@ public class PageUtil {
     public static void setPageInfo(Object param){
         if(param != null && param instanceof PageVO) {
             PageVO pagevo = (PageVO) param;
-            PageHelper.startPage(pagevo.getPageNum(), pagevo.getPageSize());
+            PageHelper.startPage(pagevo.getCurrentPage(), pagevo.getPageSize());
         }
     }
 }

+ 1 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/demo/ctrl/TestCtrl.java

@@ -18,7 +18,7 @@ public class TestCtrl {
     @Autowired
     TestService testService;
 
-    @RequestMapping("getTestPageList")
+    @RequestMapping("/getTestPageList")
     @ResponseBody
     public ResponseBodyVO<PageInfo<TestVO>> getTestPageList(@RequestBody TestPageParam pageParam){
         ResponseBodyVO<PageInfo<TestVO>> response = new ResponseBodyVO<PageInfo<TestVO>>(ResponseBodyVO.Response.SUCCESS);

+ 2 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/demo/service/TestService.java

@@ -3,6 +3,7 @@ package com.css.simulation.resource.demo.service;
 import api.common.pojo.constants.DictConstants;
 import api.common.pojo.param.demo.TestPageParam;
 import api.common.pojo.vo.demo.TestVO;
+import com.css.simulation.resource.common.utils.AuthUtil;
 import com.css.simulation.resource.common.utils.PageUtil;
 import com.css.simulation.resource.demo.mapper.TestMapper;
 import com.css.simulation.resource.system.service.DictService;
@@ -24,6 +25,7 @@ public class TestService {
 
     public PageInfo<TestVO> getTestPageList(TestPageParam params) {
         PageUtil.setPageInfo(params);
+        params.setCreateUserId(AuthUtil.getCurrentUserId());
         List<TestVO> list = testMapper.getTestPageList(params);
         //字典翻译
         Map<String, Map<String, String>> dictMapsByTypes = dictService.getDictMapsByTypes(DictConstants.LEVEL + "," + DictConstants.DRIVE_TYPE);

+ 103 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/CameraCtrl.java

@@ -0,0 +1,103 @@
+package com.css.simulation.resource.model.ctrl;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.model.CameraParam;
+import api.common.pojo.po.model.CameraPO;
+import api.common.pojo.vo.model.CameraVO;
+import api.common.util.ObjectUtil;
+import com.css.simulation.resource.model.service.CameraService;
+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("/camera")
+public class CameraCtrl {
+
+    @Autowired
+    CameraService cameraService;
+
+    /**
+     * 获取列表
+     */
+    @RequestMapping("/getCameraList")
+    @ResponseBody
+    public ResponseBodyVO<List<CameraVO>> getCameraList(@RequestBody CameraParam cameraParam){
+        ResponseBodyVO<List<CameraVO>> response = new ResponseBodyVO<List<CameraVO>>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(cameraService.getCameraList(cameraParam));
+        return response;
+    }
+
+    /**
+     * 获取私有列表
+     */
+    @RequestMapping("/getMyCameraList")
+    @ResponseBody
+    public ResponseBodyVO<List<CameraVO>> getMyCameraList(@RequestBody CameraParam cameraParam){
+        ResponseBodyVO<List<CameraVO>> response = new ResponseBodyVO<List<CameraVO>>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(cameraService.getMyCameraList(cameraParam));
+        return response;
+    }
+
+
+    /**
+     * 根据id获取详情
+     */
+    @RequestMapping("/getCameraInfo")
+    @ResponseBody
+    public ResponseBodyVO<CameraVO> getCameraInfo(@RequestBody CameraParam cameraParam){
+        ResponseBodyVO<CameraVO> response = new ResponseBodyVO<CameraVO>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(cameraService.getCameraInfo(cameraParam));
+        return response;
+    }
+
+    /**
+     * 新增、修改、另存为
+     */
+    @RequestMapping("/saveCamera")
+    @ResponseBody
+    public ResponseBodyVO<CameraPO> saveCamera(@RequestBody CameraPO cameraPO){
+        if(ObjectUtil.isNull(cameraPO)){
+            return new ResponseBodyVO(false, 500, "参数必传!",null);
+        }
+        ResponseBodyVO<CameraPO> response = new ResponseBodyVO<CameraPO>(ResponseBodyVO.Response.SUCCESS);
+        CameraPO po = cameraService.saveCamera(cameraPO);
+        if(ObjectUtil.isNull(po.getId())){
+            return new ResponseBodyVO(false, 500, "传感器名称重复!",null);
+        }
+        response.setInfo(po);
+        return response;
+    }
+
+    /**
+     * 分享
+     */
+    @RequestMapping("/shareCamera")
+    @ResponseBody
+    public ResponseBodyVO<CameraPO> shareCamera(@RequestBody CameraPO cameraPO){
+        if(ObjectUtil.isNull(cameraPO)){
+            return new ResponseBodyVO(false, 500, "参数必传!",null);
+        }
+        ResponseBodyVO<CameraPO> response = new ResponseBodyVO<CameraPO>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(cameraService.shareCamera(cameraPO));
+        return response;
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delCameraById")
+    @ResponseBody
+    public ResponseBodyVO delCameraById(@RequestBody CameraPO cameraPO){
+        int i = cameraService.delCameraById(cameraPO);
+        if(i>0){
+            return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+        }else{
+            return new ResponseBodyVO(false, 500, "删除失败!",null);
+        }
+    }
+}

+ 103 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/VehicleCtrl.java

@@ -0,0 +1,103 @@
+package com.css.simulation.resource.model.ctrl;
+
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.model.VehicleParam;
+import api.common.pojo.po.model.VehiclePO;
+import api.common.pojo.vo.model.VehicleVO;
+import api.common.util.ObjectUtil;
+import com.css.simulation.resource.model.service.VehicleService;
+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("/vehicle")
+public class VehicleCtrl {
+
+    @Autowired
+    VehicleService vehicleService;
+
+    /**
+     * 获取列表
+     */
+    @RequestMapping("/getVehicleList")
+    @ResponseBody
+    public ResponseBodyVO<List<VehicleVO>> getVehicleList(@RequestBody VehicleParam vehicleParam){
+        ResponseBodyVO<List<VehicleVO>> response = new ResponseBodyVO<List<VehicleVO>>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(vehicleService.getVehicleList(vehicleParam));
+        return response;
+    }
+
+    /**
+     * 获取私有列表
+     */
+    @RequestMapping("/getMyVehicleList")
+    @ResponseBody
+    public ResponseBodyVO<List<VehicleVO>> getMyVehicleList(@RequestBody VehicleParam vehicleParam){
+        ResponseBodyVO<List<VehicleVO>> response = new ResponseBodyVO<List<VehicleVO>>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(vehicleService.getMyVehicleList(vehicleParam));
+        return response;
+    }
+
+    /**
+     * 根据id获取详情
+     */
+    @RequestMapping("/getVehicleInfo")
+    @ResponseBody
+    public ResponseBodyVO<VehicleVO> getVehicleInfo(@RequestBody VehicleParam vehicleParam){
+        ResponseBodyVO<VehicleVO> response = new ResponseBodyVO<VehicleVO>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(vehicleService.getVehicleInfo(vehicleParam));
+        return response;
+    }
+
+    /**
+     * 新增、修改、另存为
+     */
+    @RequestMapping("/saveVehicle")
+    @ResponseBody
+    public ResponseBodyVO<VehiclePO> saveVehicle(@RequestBody VehiclePO vehiclePO){
+        if(ObjectUtil.isNull(vehiclePO)){
+            return new ResponseBodyVO(false, 500, "参数必传!",null);
+        }
+        ResponseBodyVO<VehiclePO> response = new ResponseBodyVO<VehiclePO>(ResponseBodyVO.Response.SUCCESS);
+        VehiclePO po = vehicleService.saveVehicle(vehiclePO);
+        if(ObjectUtil.isNull(po.getId())){
+            return new ResponseBodyVO(false, 500, "车辆名称重复!",null);
+        }
+        response.setInfo(po);
+        return response;
+    }
+
+    /**
+     * 分享
+     */
+    @RequestMapping("/shareVehicle")
+    @ResponseBody
+    public ResponseBodyVO<VehiclePO> shareVehicle(@RequestBody VehiclePO vehiclePO){
+        if(ObjectUtil.isNull(vehiclePO)){
+            return new ResponseBodyVO(false, 500, "参数必传!",null);
+        }
+        ResponseBodyVO<VehiclePO> response = new ResponseBodyVO<VehiclePO>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(vehicleService.shareVehicle(vehiclePO));
+        return response;
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delVehicleById")
+    @ResponseBody
+    public ResponseBodyVO delVehicleById(@RequestBody VehiclePO vehiclePO){
+        int i = vehicleService.delVehicleById(vehiclePO);
+        if(i>0){
+            return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+        }else{
+            return new ResponseBodyVO(false, 500, "删除失败!",null);
+        }
+    }
+}

+ 26 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/mapper/CameraMapper.java

@@ -0,0 +1,26 @@
+package com.css.simulation.resource.model.mapper;
+
+import api.common.pojo.param.model.CameraParam;
+import api.common.pojo.po.model.CameraPO;
+import api.common.pojo.vo.model.CameraVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface CameraMapper {
+
+    List<CameraVO> getCameraList(CameraParam cameraParam);
+
+    CameraVO getCameraInfo(CameraParam cameraParam);
+
+    List<CameraVO> checkCameraName(CameraPO cameraPO);
+
+    void insert(CameraPO cameraPO);
+
+    void update(CameraPO cameraPO);
+
+    int delCameraById(CameraPO cameraPO);
+}

+ 26 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/mapper/VehicleMapper.java

@@ -0,0 +1,26 @@
+package com.css.simulation.resource.model.mapper;
+
+import api.common.pojo.param.model.VehicleParam;
+import api.common.pojo.po.model.VehiclePO;
+import api.common.pojo.vo.model.VehicleVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface VehicleMapper {
+
+    List<VehicleVO> getVehicleList(VehicleParam vehicleParam);
+
+    VehicleVO getVehicleInfo(VehicleParam vehicleParam);
+
+    List<VehicleVO> checkVehicleName(VehiclePO vehiclePO);
+
+    void insert(VehiclePO vehiclePO);
+
+    void update(VehiclePO vehiclePO);
+
+    int delVehicleById(VehiclePO vehiclePO);
+}

+ 92 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/CameraService.java

@@ -0,0 +1,92 @@
+package com.css.simulation.resource.model.service;
+
+import api.common.pojo.constants.DictConstants;
+import api.common.pojo.param.model.CameraParam;
+import api.common.pojo.po.model.CameraPO;
+import api.common.pojo.vo.model.CameraVO;
+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.CameraMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.sql.Timestamp;
+import java.util.List;
+
+@Service
+public class CameraService {
+
+    @Autowired
+    CameraMapper cameraMapper;
+
+    public List<CameraVO> getCameraList(CameraParam cameraParam) {
+        cameraParam.setCreateUserId(AuthUtil.getCurrentUserId());
+        cameraParam.setShare(null);
+        List<CameraVO> list = cameraMapper.getCameraList(cameraParam);
+        return list;
+    }
+
+    public List<CameraVO> getMyCameraList(CameraParam cameraParam) {
+        cameraParam.setCreateUserId(AuthUtil.getCurrentUserId());
+        cameraParam.setShare(DictConstants.NO);
+        List<CameraVO> list = cameraMapper.getCameraList(cameraParam);
+        return list;
+    }
+
+    public CameraVO getCameraInfo(CameraParam cameraParam) {
+        return cameraMapper.getCameraInfo(cameraParam);
+    }
+
+
+    public CameraPO saveCamera(CameraPO cameraPO) {
+        //常规字段赋值
+        String currentUserId = AuthUtil.getCurrentUserId();
+        Timestamp currentTime = TimeUtil.getNowForMysql();
+        cameraPO.setCreateUserId(currentUserId);
+        cameraPO.setCreateTime(currentTime);
+        cameraPO.setModifyUserId(currentUserId);
+        cameraPO.setModifyTime(currentTime);
+        cameraPO.setIsDeleted(DictConstants.NO);
+        //名称校验
+        List<CameraVO> list = cameraMapper.checkCameraName(cameraPO);
+        if(ObjectUtil.isNotNull(list)){
+            cameraPO.setId(null);
+            return cameraPO;
+        }
+        String id = cameraPO.getId();
+        if(ObjectUtil.isNull(id)){//新增
+            cameraPO.setId(StringUtil.getRandomUUID());
+            cameraPO.setShare(DictConstants.NO);//私有
+            cameraMapper.insert(cameraPO);
+        }else{//修改
+            cameraMapper.update(cameraPO);
+        }
+        return cameraPO;
+    }
+
+    public CameraPO shareCamera(CameraPO cameraPO) {
+        //常规字段赋值
+        String currentUserId = AuthUtil.getCurrentUserId();
+        Timestamp currentTime = TimeUtil.getNowForMysql();
+        cameraPO.setCreateUserId(currentUserId);
+        cameraPO.setCreateTime(currentTime);
+        cameraPO.setModifyUserId(currentUserId);
+        cameraPO.setModifyTime(currentTime);
+        cameraPO.setIsDeleted(DictConstants.NO);
+
+        cameraPO.setShare(DictConstants.YES);//转公有
+        cameraPO.setId(StringUtil.getRandomUUID());
+        cameraMapper.insert(cameraPO);
+        return cameraPO;
+    }
+
+    public int delCameraById(CameraPO cameraPO) {
+        cameraPO.setIsDeleted(DictConstants.YES);
+        cameraPO.setModifyUserId(AuthUtil.getCurrentUserId());
+        cameraPO.setModifyTime(TimeUtil.getNowForMysql());
+        int i = cameraMapper.delCameraById(cameraPO);
+        return i;
+    }
+}

+ 92 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/VehicleService.java

@@ -0,0 +1,92 @@
+package com.css.simulation.resource.model.service;
+
+import api.common.pojo.constants.DictConstants;
+import api.common.pojo.param.model.VehicleParam;
+import api.common.pojo.po.model.VehiclePO;
+import api.common.pojo.vo.model.VehicleVO;
+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.VehicleMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.sql.Timestamp;
+import java.util.List;
+
+@Service
+public class VehicleService {
+
+    @Autowired
+    VehicleMapper vehicleMapper;
+
+    public List<VehicleVO> getVehicleList(@RequestBody VehicleParam vehicleParam) {
+        vehicleParam.setCreateUserId(AuthUtil.getCurrentUserId());
+        vehicleParam.setShare(null);
+        List<VehicleVO> list = vehicleMapper.getVehicleList(vehicleParam);
+        return list;
+    }
+
+    public List<VehicleVO> getMyVehicleList(VehicleParam vehicleParam) {
+        vehicleParam.setCreateUserId(AuthUtil.getCurrentUserId());
+        vehicleParam.setShare(DictConstants.NO);
+        List<VehicleVO> list = vehicleMapper.getVehicleList(vehicleParam);
+        return list;
+    }
+
+    public VehicleVO getVehicleInfo(VehicleParam vehicleParam) {
+        return vehicleMapper.getVehicleInfo(vehicleParam);
+    }
+
+    public VehiclePO saveVehicle(VehiclePO vehiclePO) {
+        //常规字段赋值
+        String currentUserId = AuthUtil.getCurrentUserId();
+        Timestamp currentTime = TimeUtil.getNowForMysql();
+        vehiclePO.setCreateUserId(currentUserId);
+        vehiclePO.setCreateTime(currentTime);
+        vehiclePO.setModifyUserId(currentUserId);
+        vehiclePO.setModifyTime(currentTime);
+        vehiclePO.setIsDeleted(DictConstants.NO);
+        //名称校验
+        List<VehicleVO> list = vehicleMapper.checkVehicleName(vehiclePO);
+        if(ObjectUtil.isNotNull(list)){
+            vehiclePO.setId(null);
+            return vehiclePO;
+        }
+        String id = vehiclePO.getId();
+        if(ObjectUtil.isNull(id)){//新增
+            vehiclePO.setId(StringUtil.getRandomUUID());
+            vehiclePO.setShare(DictConstants.NO);//私有
+            vehicleMapper.insert(vehiclePO);
+        }else{//修改
+            vehicleMapper.update(vehiclePO);
+        }
+        return vehiclePO;
+    }
+
+    public VehiclePO shareVehicle(VehiclePO vehiclePO) {
+        //常规字段赋值
+        String currentUserId = AuthUtil.getCurrentUserId();
+        Timestamp currentTime = TimeUtil.getNowForMysql();
+        vehiclePO.setCreateUserId(currentUserId);
+        vehiclePO.setCreateTime(currentTime);
+        vehiclePO.setModifyUserId(currentUserId);
+        vehiclePO.setModifyTime(currentTime);
+        vehiclePO.setIsDeleted(DictConstants.NO);
+
+        vehiclePO.setShare(DictConstants.YES);//转公有
+        vehiclePO.setId(StringUtil.getRandomUUID());
+        vehicleMapper.insert(vehiclePO);
+        return vehiclePO;
+    }
+
+    public int delVehicleById(VehiclePO vehiclePO) {
+        vehiclePO.setIsDeleted(DictConstants.YES);
+        vehiclePO.setModifyUserId(AuthUtil.getCurrentUserId());
+        vehiclePO.setModifyTime(TimeUtil.getNowForMysql());
+        int i = vehicleMapper.delVehicleById(vehiclePO);
+        return i;
+    }
+}

+ 75 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/ctrl/SceneAccidentController.java

@@ -0,0 +1,75 @@
+package com.css.simulation.resource.scene.ctrl;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.scene.SceneAccidentParam;
+import api.common.pojo.po.scene.SceneAccidentPO;
+import api.common.pojo.vo.scene.SceneAccidentVO;
+import com.css.simulation.resource.common.utils.PageUtil;
+import com.css.simulation.resource.feign.FileDownService;
+import com.css.simulation.resource.scene.service.SceneAccidentService;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.BeanUtils;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+//交通事故场景
+@RestController
+@RequestMapping("/SceneAccident")
+public class SceneAccidentController {
+
+    @Resource
+    SceneAccidentService sceneAccidentService;
+
+//查询列表
+    @PostMapping("/querySceneAccidentList")
+    @ResponseBody
+    public ResponseBodyVO<List<SceneAccidentVO>> querySceneAccidentList(@RequestBody SceneAccidentParam parms) {
+        PageUtil.setPageInfo(parms);
+        List<SceneAccidentPO> list=sceneAccidentService.querySceneAccidentList(parms);
+        PageInfo<SceneAccidentPO> objectPageInfo = new PageInfo<>(list);
+        List<SceneAccidentVO> list1=new ArrayList<>();
+        for (SceneAccidentPO po: list) {
+            SceneAccidentVO vo=new SceneAccidentVO();
+            BeanUtils.copyProperties(po,vo);
+            list1.add(vo);
+        }
+        PageInfo pageInfo=new PageInfo<>(list1);
+        pageInfo.setTotal(objectPageInfo.getTotal());
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS,pageInfo);
+    }
+
+
+    //新增交通事故
+    @PostMapping("/saveSceneAccident")
+    @ResponseBody
+    public ResponseBodyVO<String> saveSceneAccident(@RequestBody SceneAccidentParam parms) {
+        sceneAccidentService.importJtSg(parms);
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+    }
+
+    //新增交通事故
+    @PostMapping("/saveSceneAccidentCS")
+    @ResponseBody
+    public ResponseBodyVO<String> saveSceneAccidentCS(@RequestBody SceneAccidentParam parms) {
+        sceneAccidentService.importJtSgCS(parms);
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+    }
+    @Resource
+    private FileDownService fileDownService;
+
+    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    public ResponseBodyVO<String> upload(@RequestPart("file") MultipartFile file,
+                                         @RequestParam("objectName") String objectName) {
+
+        objectName=objectName+"/"+file.getOriginalFilename();
+        System.out.println("上传文件名称--------"+objectName);
+        return fileDownService.upload(file,objectName);
+    }
+
+
+}

+ 66 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/ctrl/SceneNaturalController.java

@@ -0,0 +1,66 @@
+package com.css.simulation.resource.scene.ctrl;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.scene.SceneNaturalParam;
+import api.common.pojo.po.scene.SceneNaturalPO;
+import api.common.pojo.vo.scene.SceneNaturalVO;
+import com.css.simulation.resource.common.utils.PageUtil;
+import com.css.simulation.resource.feign.FileDownService;
+import com.css.simulation.resource.scene.service.SceneNaturalService;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.BeanUtils;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+//自然场景
+@RestController
+@RequestMapping("/SceneNatural")
+public class SceneNaturalController {
+
+    @Resource
+    SceneNaturalService sceneNaturalService;
+
+//查询列表
+    @PostMapping("/querySceneNaturalList")
+    @ResponseBody
+    public ResponseBodyVO<List<SceneNaturalVO>> querySceneNaturalList(@RequestBody SceneNaturalParam parms) {
+        PageUtil.setPageInfo(parms);
+        List<SceneNaturalPO> list=sceneNaturalService.querySceneNaturalList(parms);
+        PageInfo<SceneNaturalPO> objectPageInfo = new PageInfo<>(list);
+        List<SceneNaturalVO> list1=new ArrayList<>();
+        for (SceneNaturalPO po: list) {
+            SceneNaturalVO vo=new SceneNaturalVO();
+            BeanUtils.copyProperties(po,vo);
+            list1.add(vo);
+        }
+        PageInfo pageInfo=new PageInfo<>(list1);
+        pageInfo.setTotal(objectPageInfo.getTotal());
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS,pageInfo);
+    }
+
+
+    //新增标准法规
+    @PostMapping("/saveSceneAccident")
+    @ResponseBody
+    public ResponseBodyVO<String> saveSceneAccident(@RequestBody SceneNaturalParam parms) {
+        sceneNaturalService.importZrjsSceneCicv(parms);
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+    }
+
+    @Resource
+    private FileDownService fileDownService;
+
+    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    public ResponseBodyVO<String> upload(@RequestPart("file") MultipartFile file,
+                                         @RequestParam("objectName") String objectName) {
+        System.out.println("上传文件名称--------"+file.getOriginalFilename());
+        return fileDownService.upload(file,file.getOriginalFilename());
+    }
+
+
+}

+ 79 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/ctrl/ScenePackageController.java

@@ -0,0 +1,79 @@
+package com.css.simulation.resource.scene.ctrl;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.scene.ScenePackageParam;
+import api.common.pojo.po.scene.ScenePackagePO;
+import api.common.pojo.vo.scene.ScenePackageSublistVO;
+import api.common.pojo.vo.scene.ScenePackageVO;
+import com.css.simulation.resource.common.utils.PageUtil;
+import com.css.simulation.resource.scene.service.ScenePackageService;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.BeanUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+//测试包
+@RestController
+@RequestMapping("/ScenePackage")
+public class ScenePackageController {
+
+    @Resource
+    ScenePackageService scenePackageService;
+
+//查询主表列表
+    @PostMapping("/queryScenePackageList")
+    @ResponseBody
+    public ResponseBodyVO<List<ScenePackageVO>> queryScenePackageList(@RequestBody ScenePackageParam parms) {
+        PageUtil.setPageInfo(parms);
+        List<ScenePackagePO> list=scenePackageService.queryScenePackageList(parms);
+        PageInfo<ScenePackagePO> objectPageInfo = new PageInfo<>(list);
+        List<ScenePackageVO> list1=new ArrayList<>();
+        for (ScenePackagePO po: list) {
+            ScenePackageVO vo=new ScenePackageVO();
+            BeanUtils.copyProperties(po,vo);
+            list1.add(vo);
+        }
+        PageInfo pageInfo=new PageInfo<>(list1);
+        pageInfo.setTotal(objectPageInfo.getTotal());
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS,pageInfo);
+    }
+
+    //查询测试包详情
+    @PostMapping("/queryScenePackage")
+    @ResponseBody
+    public ResponseBodyVO<ScenePackageVO> queryScenePackage(@RequestBody ScenePackageParam parms) {
+       ScenePackagePO po=scenePackageService.queryScenePackage(parms);
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS,po);
+    }
+
+
+    //新增打分规则
+    @PostMapping("/saveScenePackage")
+    @ResponseBody
+    public ResponseBodyVO<String> saveScoringRules(@RequestBody ScenePackagePO parms) {
+        scenePackageService.saveScenePackage(parms);
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+    }
+
+    //修改打分规则
+    @PostMapping("/updateScenePackage")
+    @ResponseBody
+    public ResponseBodyVO<String> updateScenePackage(@RequestBody ScenePackagePO params)  {
+        scenePackageService.updateScenePackage(params);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
+    }
+
+    //查询一个测试包列表
+    @PostMapping("/queryScenePackageSublistList")
+    @ResponseBody
+    public ResponseBodyVO<ScenePackageSublistVO> queryScenePackageSublistList(@RequestBody ScenePackageParam parms) {
+        ScenePackageSublistVO po=  scenePackageService.queryScenePackageSublistList(parms);
+
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS,po);
+    }
+
+
+}

+ 100 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/ctrl/ScoringRulesController.java

@@ -0,0 +1,100 @@
+package com.css.simulation.resource.scene.ctrl;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.MinioParameter;
+import api.common.pojo.param.scene.ScoringRulesParam;
+import api.common.pojo.po.scene.ScoringRulesPO;
+import api.common.pojo.vo.scene.ScoringRulesVO;
+import api.common.util.FileUtil;
+import com.css.simulation.resource.common.utils.PageUtil;
+import com.css.simulation.resource.feign.FileDownService;
+import com.css.simulation.resource.scene.service.ScoringRulesService;
+import com.github.pagehelper.PageInfo;
+import feign.Response;
+import org.springframework.beans.BeanUtils;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+//打分规则
+@RestController
+@RequestMapping("/ScoringRules")
+public class ScoringRulesController {
+
+    @Resource
+    ScoringRulesService scoringRulesService;
+
+//查询列表
+    @PostMapping("/queryScoringRulesList")
+    @ResponseBody
+    public ResponseBodyVO<List<ScoringRulesVO>> queryScoringRulesList(@RequestBody ScoringRulesParam parms) {
+        PageUtil.setPageInfo(parms);
+        List<ScoringRulesPO> list=scoringRulesService.queryScoringRulesList(parms);
+        PageInfo<ScoringRulesPO> scoringRulesPOPageInfo = new PageInfo<>(list);
+        List<ScoringRulesVO> list1=new ArrayList<>();
+        for (ScoringRulesPO po: list) {
+            ScoringRulesVO vo=new ScoringRulesVO();
+            BeanUtils.copyProperties(po,vo);
+            list1.add(vo);
+        }
+        PageInfo pageInfo = new PageInfo(list1);
+        pageInfo.setTotal(scoringRulesPOPageInfo.getTotal());
+
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS,pageInfo);
+    }
+
+     //查询详情
+    @PostMapping("/queryScoringRules")
+    @ResponseBody
+    public ResponseBodyVO<List<ScoringRulesPO>> queryScoringRules(@RequestBody ScoringRulesParam parms)  {
+        ScoringRulesPO po=scoringRulesService.queryScoringRules(parms);
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS,po);
+    }
+
+    //新增打分规则
+    @PostMapping("/saveScoringRules")
+    @ResponseBody
+    public ResponseBodyVO<String> saveScoringRules(@RequestBody ScoringRulesPO parms) {
+        scoringRulesService.saveScoringRules(parms);
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+    }
+
+    //修改打分规则
+    @PostMapping("/updateScoringRules")
+    @ResponseBody
+    public ResponseBodyVO<String> updateScoringRules(@RequestBody ScoringRulesPO params)  {
+       scoringRulesService.updateScoringRules(params);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
+    }
+
+
+    @Resource
+    private FileDownService fileDownService;
+
+    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    public ResponseBodyVO<String> upload(@RequestPart("file") MultipartFile file,
+                                         @RequestParam("objectName") String objectName) {
+        System.out.println("上传文件名称--------"+file.getOriginalFilename());
+        return fileDownService.upload(file,file.getOriginalFilename());
+    }
+
+@GetMapping(value = "/download")
+    public void download(
+            HttpServletResponse response
+    ) throws IOException {
+    MinioParameter parms=new MinioParameter();
+    parms.setObjectName("new4.txt");
+        Response download = fileDownService.download(parms);
+        Response.Body body = download.body();
+        InputStream inputStream = body.asInputStream();
+        FileUtil.downloadForHttp(parms.getObjectName(), inputStream, response, 1024);
+    }
+
+}

+ 82 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/ctrl/StandardsRegulationsController.java

@@ -0,0 +1,82 @@
+package com.css.simulation.resource.scene.ctrl;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.MinioParameter;
+import api.common.pojo.param.scene.StandardsRegulationsParam;
+import api.common.pojo.po.scene.StandardsRegulationsPO;
+import api.common.pojo.vo.scene.StandardsRegulationsVO;
+import api.common.util.FileUtil;
+import com.css.simulation.resource.common.utils.PageUtil;
+import com.css.simulation.resource.feign.FileDownService;
+import com.css.simulation.resource.scene.service.StandardsRegulationsService;
+import com.github.pagehelper.PageInfo;
+import feign.Response;
+import org.springframework.beans.BeanUtils;
+import org.springframework.http.MediaType;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+//标准法规
+@RestController
+@RequestMapping("/StandardsRegulations")
+public class StandardsRegulationsController {
+
+    @Resource
+    StandardsRegulationsService standardsRegulationsService;
+
+//查询列表
+    @PostMapping("/queryStandardsRegulationsList")
+    @ResponseBody
+    public ResponseBodyVO<List<StandardsRegulationsVO>> queryStandardsRegulationsList(@RequestBody StandardsRegulationsParam parms) {
+        PageUtil.setPageInfo(parms);
+        List<StandardsRegulationsPO> list=standardsRegulationsService.querySceneNaturalList(parms);
+        PageInfo<StandardsRegulationsPO> objectPageInfo = new PageInfo<>(list);
+        List<StandardsRegulationsVO> list1=new ArrayList<>();
+        for (StandardsRegulationsPO po: list) {
+            StandardsRegulationsVO vo=new StandardsRegulationsVO();
+            BeanUtils.copyProperties(po,vo);
+            list1.add(vo);
+        }
+        PageInfo pageInfo=new PageInfo<>(list1);
+        pageInfo.setTotal(objectPageInfo.getTotal());
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS,pageInfo);
+    }
+
+
+    //新增标准法规
+    @PostMapping("/saveStandardsRegulations")
+    @ResponseBody
+    public ResponseBodyVO<String> saveStandardsRegulations(@RequestBody StandardsRegulationsParam parms) {
+        standardsRegulationsService.importBzFg(parms);
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+    }
+
+    @Resource
+    private FileDownService fileDownService;
+
+    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    public ResponseBodyVO<String> upload(@RequestPart("file") MultipartFile file,
+                                         @RequestParam("objectName") String objectName) {
+        System.out.println("上传文件名称--------"+file.getOriginalFilename());
+        return fileDownService.upload(file,file.getOriginalFilename());
+    }
+
+@PostMapping(value = "/download")
+    public void download(
+            HttpServletResponse response,@RequestBody @Validated MinioParameter parms
+    ) throws IOException {
+        Response download = fileDownService.download(parms);
+        Response.Body body = download.body();
+        InputStream inputStream = body.asInputStream();
+        FileUtil.downloadForHttp(parms.getObjectName(), inputStream, response, 1024);
+    }
+
+}

+ 20 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/SceneAccidentMapper.java

@@ -0,0 +1,20 @@
+package com.css.simulation.resource.scene.mapper;
+
+
+import api.common.pojo.param.scene.SceneAccidentParam;
+import api.common.pojo.po.scene.SceneAccidentPO;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+
+@Mapper
+@Repository
+public interface SceneAccidentMapper {
+
+   void saveSceneAccident(SceneAccidentPO params);
+
+   List<SceneAccidentPO> querySceneAccidentList(SceneAccidentParam params);
+
+}

+ 21 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/SceneNaturalMapper.java

@@ -0,0 +1,21 @@
+package com.css.simulation.resource.scene.mapper;
+
+
+import api.common.pojo.param.scene.SceneNaturalParam;
+import api.common.pojo.po.scene.SceneNaturalPO;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+
+
+@Mapper
+@Repository
+public interface SceneNaturalMapper {
+
+   void saveSceneNatural(SceneNaturalPO params);
+
+   List<SceneNaturalPO> querySceneNaturalList(SceneNaturalParam params);
+
+}

+ 27 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/ScenePackageMapper.java

@@ -0,0 +1,27 @@
+package com.css.simulation.resource.scene.mapper;
+
+
+import api.common.pojo.param.scene.ScenePackageParam;
+import api.common.pojo.po.scene.ScenePackagePO;
+import api.common.pojo.vo.scene.ScenePackageSublistVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+
+@Mapper
+@Repository
+public interface ScenePackageMapper {
+
+   void saveScenePackage(ScenePackagePO params);
+   void updateScenePackage(ScenePackagePO params);
+   //查询详情
+   ScenePackagePO queryScenePackage(ScenePackageParam params);
+
+   List<ScenePackagePO> queryScenePackageList(ScenePackageParam params);
+
+   //单独给查询一个测试包的列表用
+   ScenePackageSublistVO queryScenePackageBySublist(String packageId);
+
+}

+ 21 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/ScenePackageSublistMapper.java

@@ -0,0 +1,21 @@
+package com.css.simulation.resource.scene.mapper;
+
+import api.common.pojo.po.scene.ScenePackageSublistPO;
+import api.common.pojo.vo.scene.ScenePackageSublistVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+
+@Mapper
+@Repository
+public interface ScenePackageSublistMapper {
+
+   void saveScenePackageSublist(ScenePackageSublistPO params);
+   void saveScenePackageSublistAll(List<ScenePackageSublistPO> list);
+   void updateScenePackageSublist(String  rootId);
+
+   List<ScenePackageSublistVO> queryScenePackageSublistList(ScenePackageSublistPO params);
+
+}

+ 22 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/ScoringRulesMapper.java

@@ -0,0 +1,22 @@
+package com.css.simulation.resource.scene.mapper;
+
+
+import api.common.pojo.param.scene.ScoringRulesParam;
+import api.common.pojo.po.scene.ScoringRulesPO;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+
+@Mapper
+@Repository
+public interface ScoringRulesMapper {
+
+   void saveScoringRules(ScoringRulesPO params);
+
+   List<ScoringRulesPO> queryScoringRulesList(ScoringRulesParam params);
+   ScoringRulesPO queryScoringRules(ScoringRulesParam params);
+   void updateScoringRules(ScoringRulesPO params);
+
+}

+ 19 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/StandardsRegulationsMapper.java

@@ -0,0 +1,19 @@
+package com.css.simulation.resource.scene.mapper;
+
+import api.common.pojo.param.scene.StandardsRegulationsParam;
+import api.common.pojo.po.scene.StandardsRegulationsPO;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+
+@Mapper
+@Repository
+public interface StandardsRegulationsMapper {
+
+   void saveStandardsRegulations(StandardsRegulationsPO params);
+
+   List<StandardsRegulationsPO> queryStandardsRegulationsList(StandardsRegulationsParam params);
+
+}

+ 174 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/SceneAccidentService.java

@@ -0,0 +1,174 @@
+package com.css.simulation.resource.scene.service;
+
+import api.common.pojo.param.MinioParameter;
+import api.common.pojo.param.scene.SceneAccidentParam;
+import api.common.pojo.po.scene.SceneAccidentPO;
+import api.common.util.FileUtil;
+import api.common.util.StringUtil;
+import api.common.util.TimeUtil;
+import com.css.simulation.resource.common.utils.AuthUtil;
+import com.css.simulation.resource.feign.FileDownService;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import feign.Response;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@Service
+public class SceneAccidentService {
+
+    @Resource
+    com.css.simulation.resource.scene.mapper.SceneAccidentMapper SceneAccidentMapper;
+
+
+    @Resource
+    private FileDownService fileDownService;
+    /**
+     * 获取交通事故场景数据:
+     */
+    @SneakyThrows
+    public void importJtSgCS(SceneAccidentParam param) {
+
+        String fileName = null;
+        try {
+            MinioParameter MI=new MinioParameter();
+            MI.setObjectName(param.getJsonAddress());
+            Response download = fileDownService.download(MI);
+            Response.Body body = download.body();
+                // -------------------------------- label.json --------------------------------
+                String json = download.body().toString();;
+                    ObjectMapper objMap = new ObjectMapper();
+                    JsonNode root = objMap.readTree(json);
+
+                    SceneAccidentPO sceneAccidentPO = null;
+                    sceneAccidentPO = sceneAccidentPO.builder()
+                        .accidentId(StringUtil.getRandomUUID())
+                        .sceneName(root.path("场景名称").asText())
+                        .selfDriving(root.path("自车驾驶行为").asText())
+                        .targetDriving(root.path("目标驾驶行为").asText())
+                        .selfReaction(root.path("自车反应行为").asText())
+                        .conflictBehavior(root.path("冲突行为").asText())
+                        .conflictType(root.path("冲突类型").asText())
+                        .isDeleted("0")
+                        .build();
+                // -------------------------------- 保存数据到 mysql --------------------------------
+                    sceneAccidentPO.setCreateTime(TimeUtil.getNowForMysql());
+                    sceneAccidentPO.setCreateUserId(AuthUtil.getCurrentUserId());
+                    sceneAccidentPO.setModifyTime(TimeUtil.getNowForMysql());
+
+                    if(null!=param.getJsonAddress()&&!param.getJsonAddress().equals("")){
+                        sceneAccidentPO.setJsonAddress(param.getJsonAddress());
+                    }
+                    if(null!=param.getXmlAddress()&&!param.getXmlAddress().equals("")){
+                        sceneAccidentPO.setXmlAddress(param.getXmlAddress());
+                    }
+                    if(null!=param.getXodrAddress()&&!param.getXodrAddress().equals("")){
+                        sceneAccidentPO.setXodrAddress(param.getXodrAddress());
+                    }
+                    if(null!=param.getOsgbAddress()&&!param.getOsgbAddress().equals("")){
+                        sceneAccidentPO.setOsgbAddress(param.getOsgbAddress());
+                    }
+                    if(null!=param.getVideoAddress()&&!param.getVideoAddress().equals("")){
+                        sceneAccidentPO.setVideoAddress(param.getVideoAddress());
+                    }
+
+                    SceneAccidentMapper.saveSceneAccident(sceneAccidentPO);
+
+
+
+
+        } catch (Exception e) {
+            log.error("标准法规场景" + fileName + " 解析出错:", e);
+        }
+
+
+    }
+
+    /**
+     * 获取交通事故场景数据:
+     */
+    @SneakyThrows
+    public void importJtSg(SceneAccidentParam param) {
+        //1 获取所有目录下所有场景
+        // String dataUrl0 ="C:\\Users\\CSS\\Desktop\\GQ\\仿真云平台\\测试场景样例数据\\交通事故场景\\China_Expressway_002";     // 场景数据根路径
+        String dataUrl0 =param.getPath();
+        System.out.println("--------"+param.getPath());
+        File[] scenes = FileUtil.getDirectory(dataUrl0).listFiles();
+        if (scenes == null) {
+            throw new RuntimeException("目录:" + dataUrl0 + " 下没有文件!");
+        }
+
+        String fileName = null;
+        try {
+
+            for (File scene : scenes) {
+                String dataUrl = scene.getAbsolutePath();
+                if(dataUrl.indexOf(".json")!=-1){
+                    //获取文件名
+                    File tempFile =new File( dataUrl.trim());
+                    fileName = tempFile.getName();
+                    fileName=  fileName.substring(0,fileName.lastIndexOf("."));
+                    // -------------------------------- 读取结构化数据文件 --------------------------------
+                    List<String> exceptionList = new ArrayList<>();     // 异常列表
+                    // -------------------------------- label.json --------------------------------
+                    String json = FileUtil.readFile(dataUrl);
+                    ObjectMapper objMap = new ObjectMapper();
+                    JsonNode root = objMap.readTree(json);
+
+                    SceneAccidentPO sceneAccidentPO = null;
+                    sceneAccidentPO = sceneAccidentPO.builder()
+                            .accidentId(StringUtil.getRandomUUID())
+                            .sceneName(root.path("场景名称").asText())
+                            .selfDriving(root.path("自车驾驶行为").asText())
+                            .targetDriving(root.path("目标驾驶行为").asText())
+                            .selfReaction(root.path("自车反应行为").asText())
+                            .conflictBehavior(root.path("冲突行为").asText())
+                            .conflictType(root.path("冲突类型").asText())
+                            .isDeleted("0")
+                            .build();
+                    // -------------------------------- 保存数据到 mysql --------------------------------
+                    sceneAccidentPO.setCreateTime(TimeUtil.getNowForMysql());
+                    sceneAccidentPO.setCreateUserId(AuthUtil.getCurrentUserId());
+                    sceneAccidentPO.setModifyTime(TimeUtil.getNowForMysql());
+
+                    if(null!=param.getJsonAddress()&&!param.getJsonAddress().equals("")){
+                        sceneAccidentPO.setJsonAddress(param.getJsonAddress());
+                    }
+                    if(null!=param.getXmlAddress()&&!param.getXmlAddress().equals("")){
+                        sceneAccidentPO.setXmlAddress(param.getXmlAddress());
+                    }
+                    if(null!=param.getXodrAddress()&&!param.getXodrAddress().equals("")){
+                        sceneAccidentPO.setXodrAddress(param.getXodrAddress());
+                    }
+                    if(null!=param.getOsgbAddress()&&!param.getOsgbAddress().equals("")){
+                        sceneAccidentPO.setOsgbAddress(param.getOsgbAddress());
+                    }
+                    if(null!=param.getVideoAddress()&&!param.getVideoAddress().equals("")){
+                        sceneAccidentPO.setVideoAddress(param.getVideoAddress());
+                    }
+
+                    SceneAccidentMapper.saveSceneAccident(sceneAccidentPO);
+
+                }
+
+            }
+        } catch (Exception e) {
+            log.error("标准法规场景" + fileName + " 解析出错:", e);
+        }
+
+
+    }
+
+
+    public   List<SceneAccidentPO> querySceneAccidentList(SceneAccidentParam params) {
+        List<SceneAccidentPO> list = SceneAccidentMapper.querySceneAccidentList(params);
+        return list;
+    }
+}

+ 200 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/SceneNaturalService.java

@@ -0,0 +1,200 @@
+package com.css.simulation.resource.scene.service;
+
+import api.common.pojo.param.scene.SceneNaturalParam;
+import api.common.pojo.po.scene.SceneNaturalPO;
+import api.common.util.FileUtil;
+import api.common.util.TimeUtil;
+import com.css.simulation.resource.common.utils.AuthUtil;
+import com.css.simulation.resource.scene.mapper.SceneNaturalMapper;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.pagehelper.util.StringUtil;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+
+
+@Slf4j
+@Service
+public class SceneNaturalService {
+
+    @Resource
+    private SceneNaturalMapper sceneNaturalMapper;
+
+
+
+    /**
+     * 获取自然驾驶场景数据:包括切分数据和标注数据
+     */
+    @SneakyThrows
+    public void importZrjsSceneCicv(SceneNaturalParam param) {
+        //1 获取所有目录下所有场景
+     //  String dataUrl0 ="C:\\Users\\CSS\\Desktop\\GQ\\仿真云平台\\场景数据样例\\测试\\2021-08-06-08-40-47_2";     // 场景数据根路径
+       String dataUrl0 = param.getPath();
+
+        File[] scenes = FileUtil.getDirectory(dataUrl0).listFiles();
+        if (scenes == null) {
+            throw new RuntimeException("目录:" + dataUrl0 + " 下没有文件!");
+        }
+
+        String fileName = null;
+        try {
+
+            for (File scene : scenes) {
+                String dataUrl = scene.getAbsolutePath();
+                if(dataUrl.indexOf(".json")!=-1){
+                    //获取文件名
+                    File tempFile =new File( dataUrl.trim());
+                    fileName = tempFile.getName();
+                    fileName=  fileName.substring(0,fileName.lastIndexOf("."));
+                // -------------------------------- 读取结构化数据文件 --------------------------------
+                List<String> exceptionList = new ArrayList<>();     // 异常列表
+                // -------------------------------- label.json --------------------------------
+                String json = FileUtil.readFile(dataUrl);
+                    ObjectMapper objMap = new ObjectMapper();
+                    JsonNode root = objMap.readTree(json);
+                // -------------------------------- 自然环境 --------------------------------
+                JsonNode naturalEnvironment =  root.path("自然环境");
+                // -------------------------------- 道路 --------------------------------
+                JsonNode road =  root.path("道路");
+                // -------------------------------- 基础设施 --------------------------------
+                JsonNode infrastructure =  root.path("基础设施");
+                // -------------------------------- 临时性操纵 --------------------------------
+                JsonNode temporaryManipulation = root.path("临时性操纵");
+                // -------------------------------- 交通状况 --------------------------------
+                JsonNode traffic =  root.path("交通状况");
+                // -------------------------------- 自车行为 --------------------------------
+                JsonNode selfDrivingBehavior = root.path("自车行为");
+                // -------------------------------- 目标行为 --------------------------------
+                JsonNode targetBehavior =  root.path("目标行为");
+               SceneNaturalPO sceneNaturalPO = null;
+                sceneNaturalPO = sceneNaturalPO.builder()
+                        .naturalId(api.common.util.StringUtil.getRandomUUID())
+                        .naturalName(fileName)
+                        .weather(getSequenceNew(naturalEnvironment, "天气情况"))
+                        .backlight(getSequenceNew(naturalEnvironment, "逆光"))
+                        .lightChange(getSequenceNew(naturalEnvironment, "隧道光线变化"))
+                        .roadType(getSequenceNew(road, "道路类型"))
+                        .roadMatrrial(getSequenceNew(road, "路面材质"))
+                        .drivewayNum(getSequenceNew(road, "车道数量"))
+                        .drivewayType(getSequenceNew(road, "车道类型"))
+                        .roadFlatness(getSequenceNew(road, "道路平坦程度"))
+                        .roadCurvature(getSequenceNew(road, "道路弯曲度"))
+                        .ramp(getSequenceNew(road, "匝道"))
+                        .intersectionType(getSequenceNew(road, "路口类型"))
+                        .planeIntersection(getSequenceNew(road, "道路与铁路平面交叉"))
+                        .bridge(getSequenceNew(road, "桥梁"))
+                        .tunnel(getSequenceNew(road, "隧道"))
+                        .speedLimit(getSequenceNew(infrastructure, "限速标志"))
+                        .minSpeedLimit(getSequenceNew(infrastructure, "最低限速标志"))
+                        .noEntry(getSequenceNew(infrastructure, "禁止通行"))
+                        .noStopping(getSequenceNew(infrastructure, "禁止停车"))
+                        .leftLaneLine(getSequenceNew(infrastructure, "左侧车道线"))
+                        .rightLaneLine(getSequenceNew(infrastructure, "右侧车道线"))
+                        .conductorMarking(getSequenceNew(infrastructure, "导线标线及标志"))
+                        .pedestrianCrossing(getSequenceNew(infrastructure, "人行横道"))
+                        .trafficLight(getSequenceNew(infrastructure, "交通信号灯"))
+                        .decelerationMarking(getSequenceNew(infrastructure, "减速标线"))
+                        .pavementCondition(getSequenceNew(temporaryManipulation, "路面状况"))
+                        .naturalDisaster(getSequenceNew(temporaryManipulation, "自然灾害"))
+                        .roadSafetySigns(getSequenceNew(temporaryManipulation, "道路施工安全标识"))
+                        .safetyWarningBoard(getSequenceNew(temporaryManipulation, "三角安全警示牌"))
+                        .trafficAccident(getSequenceNew(traffic, "交通事故"))
+                        .violation(getSequenceNew(traffic, "违规"))
+                        .specialVehicleYield(getSequenceNew(traffic, "特种车辆让行"))
+                        .patency(getSequenceNew(traffic, "通畅情况"))
+                        .doubleFlashingCar(getSequenceNew(traffic, "双闪车辆"))
+                        .selfBehavior(getSequenceNew(selfDrivingBehavior))
+                        .targetBehavior(getSequenceNew(targetBehavior))
+                        .isDeleted("0")
+                        .build();
+                // -------------------------------- 保存数据到 mysql --------------------------------
+                sceneNaturalPO.setCreateTime(TimeUtil.getNowForMysql());
+                    sceneNaturalPO.setCreateUserId(AuthUtil.getCurrentUserId());
+                sceneNaturalPO.setModifyTime(TimeUtil.getNowForMysql());
+
+                    if(null!=param.getJsonAddress()&&!param.getJsonAddress().equals("")){
+                        sceneNaturalPO.setJsonAddress(param.getJsonAddress());
+                    }
+                    if(null!=param.getXoscAddress()&&!param.getXoscAddress().equals("")){
+                        sceneNaturalPO.setXoscAddress(param.getXoscAddress());
+                    }
+                    if(null!=param.getXodrAddress()&&!param.getXodrAddress().equals("")){
+                        sceneNaturalPO.setXodrAddress(param.getXodrAddress());
+                    }
+                    if(null!=param.getOsgbAddress()&&!param.getOsgbAddress().equals("")){
+                        sceneNaturalPO.setOsgbAddress(param.getOsgbAddress());
+                    }
+                    if(null!=param.getVideoAddress()&&!param.getVideoAddress().equals("")){
+                        sceneNaturalPO.setVideoAddress(param.getVideoAddress());
+                    }
+
+                    sceneNaturalMapper.saveSceneNatural(sceneNaturalPO);
+
+            }
+
+            }
+        } catch (Exception e) {
+            log.error("场景" + fileName + " 解析出错:", e);
+        }
+
+
+    }
+
+    public String getSequenceNew(JsonNode jsonObject, String field) throws Exception {
+        if (jsonObject == null) {
+            return "无法确定";
+        }
+        JsonNode jsonArray = jsonObject.path(field);
+        StringBuilder sequence = new StringBuilder();
+        for (int i = 0; i < jsonArray.size(); i++) {
+            String type_ = jsonArray.path(i).path("type_").asText();
+            if (StringUtil.isNotEmpty(type_)) {
+                if (i == 0) {
+                    sequence.append(type_);
+                    continue;
+                }
+                if (!sequence.toString().contains(type_))
+                    sequence.append(",").append(type_);
+            }
+        }
+        String s = sequence.toString();
+        if (StringUtil.isEmpty(s))
+            return "无法确定";
+        else
+            return s;
+    }
+
+    public String getSequenceNew(JsonNode jsonArray) throws Exception {
+        if (jsonArray == null) {
+            return "无法确定";
+        }
+        StringBuilder sequence = new StringBuilder();
+        for (int i = 0; i < jsonArray.size(); i++) {
+            String type_ = jsonArray.path(i).path("type_").asText();
+            if (StringUtil.isNotEmpty(type_)) {
+                if (i == 0) {
+                    sequence.append(type_);
+                    continue;
+                }
+                if (!sequence.toString().contains(type_))
+                    sequence.append(",").append(type_);
+            }
+        }
+        String s = sequence.toString();
+        if (StringUtil.isEmpty(s))
+            return "无法确定";
+        else
+            return s;
+    }
+    public   List<SceneNaturalPO> querySceneNaturalList(SceneNaturalParam params) {
+        List<SceneNaturalPO> list = sceneNaturalMapper.querySceneNaturalList(params);
+        return list;
+    }
+}

+ 111 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/ScenePackageService.java

@@ -0,0 +1,111 @@
+package com.css.simulation.resource.scene.service;
+
+import api.common.pojo.param.scene.ScenePackageParam;
+import api.common.pojo.po.scene.ScenePackagePO;
+import api.common.pojo.po.scene.ScenePackageSublistPO;
+import api.common.pojo.vo.scene.ScenePackageSublistVO;
+import api.common.util.StringUtil;
+
+import api.common.util.TimeUtil;
+import com.css.simulation.resource.common.utils.AuthUtil;
+import com.css.simulation.resource.scene.mapper.ScenePackageMapper;
+import com.css.simulation.resource.scene.mapper.ScenePackageSublistMapper;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Slf4j
+@Service
+public class ScenePackageService {
+
+    @Resource
+    private ScenePackageMapper scenePackageMapper;
+    @Resource
+    private ScenePackageSublistMapper scenePackageSublistMapper;
+
+
+
+
+    /**
+     * 测试包数据录入:
+     */
+    @SneakyThrows
+    public void saveScenePackage(ScenePackagePO params){
+        params.setCreateTime(TimeUtil.getNowForMysql());
+        params.setModifyTime(TimeUtil.getNowForMysql());
+        params.setCreateUserId(AuthUtil.getCurrentUserId());
+        params.setPackageId(StringUtil.getRandomUUID());
+        params.setIsDeleted("0");
+        scenePackageMapper.saveScenePackage(params);
+    }
+    //查询测试包主表列表
+    @SneakyThrows
+    public   List<ScenePackagePO> queryScenePackageList(ScenePackageParam params){
+        List<ScenePackagePO> list = scenePackageMapper.queryScenePackageList(params);
+        return list;
+    }
+    //查询测试包主表一条数据详情
+    @SneakyThrows
+    public   ScenePackagePO queryScenePackage(ScenePackageParam params){
+
+        return  scenePackageMapper.queryScenePackage(params);
+    }
+    //修改主表数据
+    @SneakyThrows
+    public   void updateScenePackage(ScenePackagePO params) {
+        params.setModifyUserId(StringUtil.getRandomUUID());
+        params.setModifyTime(TimeUtil.getNowForMysql());
+        scenePackageMapper.updateScenePackage(params);
+    }
+
+    //查询一个测试包的指标列表
+    @SneakyThrows
+    public ScenePackageSublistVO queryScenePackageSublistList(ScenePackageParam params){
+        ScenePackageSublistPO po=new ScenePackageSublistPO();
+        po.setParentId(params.getPackageId());
+        ScenePackageSublistVO vo= scenePackageMapper.queryScenePackageBySublist(params.getPackageId());
+        List<ScenePackageSublistVO> list =selectScenePackageSubListTree(null,true,params.getPackageId());
+
+        vo.setList(list);
+        return vo;
+    }
+
+    /**
+     * 级联获取场景指标
+     * @param parentVoList 首次传null
+     * @param isRoot 首次传true
+     * @param scenePackageId 场景包id
+     * @return
+     */
+    public List<ScenePackageSublistVO> selectScenePackageSubListTree(List<ScenePackageSublistVO> parentVoList,
+                                                                     boolean isRoot,String scenePackageId){
+        ScenePackageSublistPO params=new ScenePackageSublistPO();
+        params.setParentId(scenePackageId);
+        if(isRoot){
+            //查找一级节点
+            parentVoList = scenePackageSublistMapper.queryScenePackageSublistList(params);
+            if(parentVoList != null && parentVoList.size() > 0){
+                selectScenePackageSubListTree(parentVoList, false, null);
+            }
+        }else{
+            //获取子节点集合
+            for(ScenePackageSublistVO pvo : parentVoList){
+                params.setParentId(pvo.getSublistId());
+                List<ScenePackageSublistVO> cvoList = scenePackageSublistMapper.queryScenePackageSublistList(params);
+                if(cvoList != null && cvoList.size() > 0){
+                    //存入父节点集合中
+                    pvo.setList(cvoList);
+                    //继续查找下一节点
+                    selectScenePackageSubListTree(cvoList,false, null);
+                }
+            }
+        }
+        return parentVoList;
+    }
+
+
+
+}

+ 53 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/ScoringRulesService.java

@@ -0,0 +1,53 @@
+package com.css.simulation.resource.scene.service;
+
+import api.common.pojo.param.scene.ScoringRulesParam;
+import api.common.pojo.po.scene.ScoringRulesPO;
+import api.common.util.StringUtil;
+import api.common.util.TimeUtil;
+import com.css.simulation.resource.common.utils.AuthUtil;
+import com.css.simulation.resource.scene.mapper.ScoringRulesMapper;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Slf4j
+@Service
+public class ScoringRulesService {
+
+    @Resource
+    private ScoringRulesMapper scoringRulesMapper;
+
+
+
+    /**
+     * 打分规则数据录入:
+     */
+    @SneakyThrows
+    public void saveScoringRules(ScoringRulesPO params){
+        params.setCreateTime(TimeUtil.getNowForMysql());
+        params.setModifyTime(TimeUtil.getNowForMysql());
+        params.setRulesId(StringUtil.getRandomUUID());
+        params.setCreateUserId(AuthUtil.getCurrentUserId());
+        params.setIsDeleted("0");
+        scoringRulesMapper.saveScoringRules(params);
+    }
+    @SneakyThrows
+    public   List<ScoringRulesPO> queryScoringRulesList(ScoringRulesParam params){
+        List<ScoringRulesPO> list = scoringRulesMapper.queryScoringRulesList(params);
+        return list;
+    }
+    @SneakyThrows
+    public   ScoringRulesPO queryScoringRules(ScoringRulesParam params) {
+        ScoringRulesPO Po = scoringRulesMapper.queryScoringRules(params);
+        return Po;
+    }
+    @SneakyThrows
+    public   void updateScoringRules(ScoringRulesPO params) {
+        params.setModifyTime(TimeUtil.getNowForMysql());
+        params.setModifyUserId(AuthUtil.getCurrentUserId());
+         scoringRulesMapper.updateScoringRules(params);
+    }
+}

+ 103 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/StandardsRegulationsService.java

@@ -0,0 +1,103 @@
+package com.css.simulation.resource.scene.service;
+
+import api.common.pojo.param.scene.StandardsRegulationsParam;
+import api.common.pojo.po.scene.StandardsRegulationsPO;
+import api.common.util.FileUtil;
+import api.common.util.StringUtil;
+import api.common.util.TimeUtil;
+import com.css.simulation.resource.common.utils.AuthUtil;
+import com.css.simulation.resource.scene.mapper.StandardsRegulationsMapper;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@Service
+public class StandardsRegulationsService {
+
+    @Resource
+    private StandardsRegulationsMapper standardsRegulationsMapper;
+
+
+
+    /**
+     * 获取标准法规场景数据:
+     */
+    @SneakyThrows
+    public void importBzFg(StandardsRegulationsParam param) {
+        //1 获取所有目录下所有场景
+     //  String dataUrl0 ="C:\\Users\\CSS\\Desktop\\GQ\\仿真云平台\\场景数据样例\\标准法规场景\\ENCAP_001_left25%_stop30";     // 场景数据根路径
+        String dataUrl0=param.getPath();
+        File[] scenes = FileUtil.getDirectory(dataUrl0).listFiles();
+        if (scenes == null) {
+            throw new RuntimeException("目录:" + dataUrl0 + " 下没有文件!");
+        }
+
+        String fileName = null;
+        try {
+
+            for (File scene : scenes) {
+                String dataUrl = scene.getAbsolutePath();
+                if(dataUrl.indexOf(".json")!=-1){
+                    //获取文件名
+                    File tempFile =new File( dataUrl.trim());
+                    fileName = tempFile.getName();
+                    fileName=  fileName.substring(0,fileName.lastIndexOf("."));
+                // -------------------------------- 读取结构化数据文件 --------------------------------
+                List<String> exceptionList = new ArrayList<>();     // 异常列表
+                // -------------------------------- label.json --------------------------------
+                String json = FileUtil.readFile(dataUrl);
+                    ObjectMapper objMap = new ObjectMapper();
+                    JsonNode root = objMap.readTree(json);
+
+                    StandardsRegulationsPO standardsRegulationsPO = null;
+                    standardsRegulationsPO = standardsRegulationsPO.builder()
+                        .regulationsId(StringUtil.getRandomUUID())
+                        .sceneName(root.path("场景名称").asText())
+                        .regulationType(root.path("法规类型").asText())
+                        .standardType(root.path("标准类型").asText())
+                        .isDeleted("0")
+                        .build();
+                // -------------------------------- 保存数据到 mysql --------------------------------
+                    standardsRegulationsPO.setCreateTime(TimeUtil.getNowForMysql());
+                    standardsRegulationsPO.setModifyTime(TimeUtil.getNowForMysql());
+                    standardsRegulationsPO.setCreateUserId(AuthUtil.getCurrentUserId());
+                    if(null!=param.getJsonAddress()&&!param.getJsonAddress().equals("")){
+                        standardsRegulationsPO.setJsonAddress(param.getJsonAddress());
+                    }
+                    if(null!=param.getXmlAddress()&&!param.getXmlAddress().equals("")){
+                        standardsRegulationsPO.setXmlAddress(param.getXmlAddress());
+                    }
+                    if(null!=param.getXodrAddress()&&!param.getXodrAddress().equals("")){
+                        standardsRegulationsPO.setXodrAddress(param.getXodrAddress());
+                    }
+                    if(null!=param.getOsgbAddress()&&!param.getOsgbAddress().equals("")){
+                        standardsRegulationsPO.setOsgbAddress(param.getOsgbAddress());
+                    }
+                    if(null!=param.getVideoAddress()&&!param.getVideoAddress().equals("")){
+                        standardsRegulationsPO.setVideoAddress(param.getVideoAddress());
+                    }
+                    standardsRegulationsMapper.saveStandardsRegulations(standardsRegulationsPO);
+
+            }
+
+            }
+        } catch (Exception e) {
+            log.error("标准法规场景" + fileName + " 解析出错:", e);
+        }
+
+
+    }
+//查看列表
+    public   List<StandardsRegulationsPO> querySceneNaturalList(StandardsRegulationsParam params) {
+        List<StandardsRegulationsPO> list = standardsRegulationsMapper.queryStandardsRegulationsList(params);
+        return list;
+    }
+}

+ 14 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/system/ctrl/DictCtrl.java

@@ -53,6 +53,20 @@ public class DictCtrl {
         return response;
     }
 
+    /**
+     * 通过字典类型dictTypes从缓存中查询字典数据trees
+     * @param param
+     * @return
+     * @throws JsonProcessingException
+     */
+    @RequestMapping("/getDictTreesByTypes")
+    @ResponseBody
+    public ResponseBodyVO getDictTreesByTypes(@RequestBody @Validated DictParam param) throws JsonProcessingException {
+        ResponseBodyVO<Map<String, List<DictVO>>> response = new ResponseBodyVO<Map<String,List<DictVO>>>(ResponseBodyVO.Response.SUCCESS);
+        response.setInfo(dictService.getDictTreesByTypes(param));
+        return response;
+    }
+
     /**
      * 通过字典类型dictTypes从缓存中查询字典数据maps
      * @param param

+ 21 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/system/service/DictService.java

@@ -5,6 +5,7 @@ import api.common.pojo.param.RedisParameter;
 import api.common.pojo.param.system.DictParam;
 import api.common.pojo.vo.system.DictVO;
 import api.common.util.JsonUtil;
+import api.common.util.ObjectUtil;
 import com.css.simulation.resource.feign.RedisService;
 import com.css.simulation.resource.system.mapper.DictMapper;
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -89,6 +90,26 @@ public class DictService {
         return dictLists;
     }
 
+    public Map<String, List<DictVO>> getDictTreesByTypes(DictParam param) throws JsonProcessingException {
+        //解析参数进行查询
+        String dictTypes = param.getDictTypes();
+        List<String> dictTypeList = Arrays.asList(dictTypes.split(","));
+        ResponseBodyVO<Map<String, String>> responseBodyVO = redisService.getDictLists(dictTypeList);
+        //查询结果转换至java对象
+        Map<String, String> map = responseBodyVO.getInfo();
+        Map<String, List<DictVO>> dictTrees = new HashMap<>();
+        Set<String> keySet = map.keySet();
+        for (String key: keySet) {
+            String val = map.get(key);
+            //json转javaBean
+            List<DictVO> dictVOS = JsonUtil.jsonToList(val, DictVO.class);
+            //list转tree
+            List<DictVO> tree = ObjectUtil.DictListToTree(dictVOS);
+            dictTrees.put(key,tree);
+        }
+        return dictTrees;
+    }
+
     public Map<String, Map<String,String>> getDictMapsByTypes(DictParam param) {
         //解析参数进行查询
         String dictTypes = param.getDictTypes();

+ 4 - 1
simulation-resource-server/src/main/resources/mapper/demo/TestMapper.xml

@@ -20,7 +20,10 @@
             <if test="name != null and name != ''">
                 and t.name like CONCAT('%',#{name,jdbcType=VARCHAR},'%')
             </if>
-            order by create_time desc
+            <if test="createUserId != null and createUserId != ''">
+                and t.create_user_id like CONCAT('%',#{createUserId,jdbcType=VARCHAR},'%')
+            </if>
+            order by t.create_time desc
         </where>
     </select>
 

+ 136 - 0
simulation-resource-server/src/main/resources/mapper/model/CameraMapper.xml

@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.css.simulation.resource.model.mapper.CameraMapper" >
+
+    <resultMap id="CameraVOMap" type="api.common.pojo.vo.model.CameraVO">
+        <id column="ID" property="id" jdbcType="VARCHAR" />
+        <result column="sensor_id" property="sensorId" jdbcType="VARCHAR" />
+        <result column="sensor_name" property="sensorName" jdbcType="VARCHAR" />
+        <result column="description" property="description" jdbcType="VARCHAR" />
+        <result column="near_distance" property="nearDistance" jdbcType="DECIMAL" />
+        <result column="far_distance" property="farDistance" jdbcType="DECIMAL" />
+        <result column="fov_h" property="fovH" jdbcType="DECIMAL" />
+        <result column="fov_v" property="fovV" jdbcType="DECIMAL" />
+        <result column="resolution" property="resolution" jdbcType="VARCHAR" />
+        <result column="frame_rate" property="frameRate" jdbcType="DECIMAL" />
+        <result column="self_display" property="selfDisplay" jdbcType="VARCHAR" />
+        <result column="share" property="share" jdbcType="VARCHAR" />
+
+    </resultMap>
+
+    <select id="getCameraList" parameterType="api.common.pojo.param.model.CameraParam" resultMap="CameraVOMap">
+        select
+          id,
+          sensor_name,
+          description,
+          share
+        from model_sensor_camera c
+        where c.is_deleted = '0'
+        <if test="sensorName != null and sensorName != ''">
+            and c.sensor_name like CONCAT('%',#{sensorName,jdbcType=VARCHAR},'%')
+        </if>
+        <if test="share != null and share != ''">
+            and c.create_user_id = #{createUserId,jdbcType=VARCHAR}
+            and c.share = '0'
+        </if>
+        <if test="share == null or share == ''">
+            and (c.create_user_id = #{createUserId,jdbcType=VARCHAR} or c.share = '1')
+        </if>
+        order by c.create_time desc
+    </select>
+
+    <select id="getCameraInfo" parameterType="api.common.pojo.param.model.CameraParam" resultMap="CameraVOMap">
+        select
+            id,
+            sensor_id,
+            sensor_name,
+            description,
+            near_distance,
+            far_distance,
+            fov_h,
+            fov_v,
+            resolution,
+            frame_rate,
+            self_display,
+            share
+        from model_sensor_camera c
+        where c.id = #{id,jdbcType=VARCHAR} limit 1
+    </select>
+
+    <select id="checkCameraName" parameterType="api.common.pojo.po.model.CameraPO" resultMap="CameraVOMap">
+        select
+            id
+        from model_sensor_camera
+        where is_deleted = '0' and share = '0'
+          and sensor_name = #{sensorName,jdbcType=VARCHAR}
+          and create_user_id = #{createUserId,jdbcType=VARCHAR}
+          and id &lt;&gt; #{id,jdbcType=VARCHAR}
+    </select>
+
+    <insert id="insert" parameterType="api.common.pojo.po.model.CameraPO">
+        insert into model_sensor_camera(
+            id,
+            sensor_id,
+            sensor_name,
+            description,
+            near_distance,
+            far_distance,
+            fov_h,
+            fov_v,
+            resolution,
+            frame_rate,
+            self_display,
+            share,
+            create_time,
+            modify_time,
+            create_user_id,
+            modify_user_id,
+            is_deleted
+        )
+        values(
+            #{id,jdbcType=VARCHAR},
+            #{sensorId,jdbcType=VARCHAR},
+            #{sensorName,jdbcType=VARCHAR},
+            #{description,jdbcType=VARCHAR},
+            #{nearDistance,jdbcType=DECIMAL},
+            #{farDistance,jdbcType=DECIMAL},
+            #{fovH,jdbcType=DECIMAL},
+            #{fovV,jdbcType=DECIMAL},
+            #{resolution,jdbcType=VARCHAR},
+            #{frameRate,jdbcType=DECIMAL},
+            #{selfDisplay,jdbcType=VARCHAR},
+            #{share,jdbcType=VARCHAR},
+            #{createTime,jdbcType=TIMESTAMP},
+            #{modifyTime,jdbcType=TIMESTAMP},
+            #{createUserId,jdbcType=VARCHAR},
+            #{modifyUserId,jdbcType=VARCHAR},
+            #{isDeleted,jdbcType=VARCHAR}
+        )
+    </insert>
+
+    <update id="update" parameterType="api.common.pojo.po.model.CameraPO">
+        update model_sensor_camera set
+            sensor_id = #{sensorId,jdbcType=VARCHAR},
+            sensor_name = #{sensorName,jdbcType=VARCHAR},
+            description = #{description,jdbcType=VARCHAR},
+            near_distance = #{nearDistance,jdbcType=DECIMAL},
+            far_distance = #{farDistance,jdbcType=DECIMAL},
+            fov_h = #{fovH,jdbcType=DECIMAL},
+            fov_v = #{fovV,jdbcType=DECIMAL},
+            resolution = #{resolution,jdbcType=VARCHAR},
+            frame_rate = #{frameRate,jdbcType=DECIMAL},
+            self_display = #{selfDisplay,jdbcType=VARCHAR},
+
+            modify_time = #{modifyTime,jdbcType=TIMESTAMP},
+            modify_user_id = #{modifyUserId,jdbcType=VARCHAR}
+        where id = #{id,jdbcType=VARCHAR}
+    </update>
+
+    <update id="delCameraById" parameterType="api.common.pojo.po.model.CameraPO">
+        update model_sensor_camera set
+          modify_time = #{modifyTime,jdbcType=TIMESTAMP},
+          modify_user_id = #{modifyUserId,jdbcType=VARCHAR},
+          is_deleted = #{isDeleted,jdbcType=VARCHAR}
+        where id = #{id,jdbcType=VARCHAR}
+    </update>
+</mapper>

+ 199 - 0
simulation-resource-server/src/main/resources/mapper/model/VehicleMapper.xml

@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.css.simulation.resource.model.mapper.VehicleMapper" >
+
+    <resultMap id="VehicleVOMap" type="api.common.pojo.vo.model.VehicleVO">
+        <id column="ID" property="id" jdbcType="VARCHAR" />
+        <result column="vehicle_id" property="vehicleId" jdbcType="VARCHAR" />
+        <result column="vehicle_name" property="vehicleName" jdbcType="VARCHAR" />
+        <result column="description" property="description" jdbcType="VARCHAR" />
+        <result column="vehicle_type" property="vehicleType" jdbcType="VARCHAR" />
+        <result column="vehicle_model" property="vehicleModel" jdbcType="VARCHAR" />
+        <result column="vehicle_colour" property="vehicleColour" jdbcType="VARCHAR" />
+        <result column="max_speed" property="maxSpeed" jdbcType="DECIMAL" />
+        <result column="engine_power" property="enginePower" jdbcType="DECIMAL" />
+        <result column="max_deceleration" property="maxDeceleration" jdbcType="DECIMAL" />
+        <result column="max_steering_angle" property="maxSteeringAngle" jdbcType="DECIMAL" />
+        <result column="mass" property="mass" jdbcType="DECIMAL" />
+        <result column="front_surface_effective" property="frontSurfaceEffective" jdbcType="DECIMAL" />
+        <result column="air_drag_coefficient" property="airDragCoefficient" jdbcType="DECIMAL" />
+        <result column="rolling_resistance_coefficient" property="rollingResistanceCoefficient" jdbcType="DECIMAL" />
+        <result column="wheel_diameter" property="wheelDiameter" jdbcType="DECIMAL" />
+        <result column="wheel_drive" property="wheelDrive" jdbcType="DECIMAL" />
+        <result column="overall_efficiency" property="overallEfficiency" jdbcType="DECIMAL" />
+        <result column="front_distance" property="frontDistance" jdbcType="DECIMAL" />
+        <result column="rear_distance" property="rearDistance" jdbcType="DECIMAL" />
+        <result column="left_distance" property="leftDistance" jdbcType="DECIMAL" />
+        <result column="right_distance" property="rightDistance" jdbcType="DECIMAL" />
+        <result column="height_distance" property="heightDistance" jdbcType="DECIMAL" />
+        <result column="wheelbase" property="wheelbase" jdbcType="DECIMAL" />
+        <result column="share" property="share" jdbcType="VARCHAR" />
+    </resultMap>
+
+    <select id="getVehicleList" parameterType="api.common.pojo.param.model.VehicleParam" resultMap="VehicleVOMap">
+        select
+          id,
+          vehicle_name,
+          share
+        from model_vehicle v
+        where v.is_deleted = '0'
+        <if test="vehicleName != null and vehicleName != ''">
+            and v.vehicle_name like CONCAT('%',#{vehicleName,jdbcType=VARCHAR},'%')
+        </if>
+        <if test="share != null and share != ''">
+            and v.create_user_id = #{createUserId,jdbcType=VARCHAR}
+            and v.share = '0'
+        </if>
+        <if test="share == null or share == ''">
+            and (v.create_user_id = #{createUserId,jdbcType=VARCHAR} or v.share = '1')
+        </if>
+        order by v.create_time desc
+    </select>
+
+    <select id="getVehicleInfo" parameterType="api.common.pojo.param.model.VehicleParam" resultMap="VehicleVOMap">
+        select
+            id,
+            vehicle_id,
+            vehicle_name,
+            description,
+            vehicle_type,
+            vehicle_model,
+            vehicle_colour,
+            max_speed,
+            engine_power,
+            max_deceleration,
+            max_steering_angle,
+            mass,
+            front_surface_effective,
+            air_drag_coefficient,
+            rolling_resistance_coefficient,
+            wheel_diameter,
+            wheel_drive,
+            overall_efficiency,
+            front_distance,
+            rear_distance,
+            left_distance,
+            right_distance,
+            height_distance,
+            wheelbase,
+            share
+        from model_vehicle v
+        where v.id = #{id,jdbcType=VARCHAR} limit 1
+    </select>
+
+    <select id="checkVehicleName" parameterType="api.common.pojo.po.model.VehiclePO" resultMap="VehicleVOMap">
+        select
+            id
+        from model_vehicle v
+        where v.is_deleted = '0' and v.share = '0'
+          and v.vehicle_name = #{vehicleName,jdbcType=VARCHAR}
+          and v.create_user_id = #{createUserId,jdbcType=VARCHAR}
+          and v.id &lt;&gt; #{id,jdbcType=VARCHAR}
+    </select>
+
+    <insert id="insert" parameterType="api.common.pojo.po.model.VehiclePO">
+        insert into model_vehicle(
+            id,
+            vehicle_id,
+            vehicle_name,
+            description,
+            vehicle_type,
+            vehicle_model,
+            vehicle_colour,
+            max_speed,
+            engine_power,
+            max_deceleration,
+            max_steering_angle,
+            mass,
+            front_surface_effective,
+            air_drag_coefficient,
+            rolling_resistance_coefficient,
+            wheel_diameter,
+            wheel_drive,
+            overall_efficiency,
+            front_distance,
+            rear_distance,
+            left_distance,
+            right_distance,
+            height_distance,
+            wheelbase,
+            share,
+            create_time,
+            modify_time,
+            create_user_id,
+            modify_user_id,
+            is_deleted
+        )
+        values(
+            #{id,jdbcType=VARCHAR},
+            #{vehicleId,jdbcType=VARCHAR},
+            #{vehicleName,jdbcType=VARCHAR},
+            #{description,jdbcType=VARCHAR},
+            #{vehicleType,jdbcType=VARCHAR},
+            #{vehicleModel,jdbcType=VARCHAR},
+            #{vehicleColour,jdbcType=VARCHAR},
+            #{maxSpeed,jdbcType=DECIMAL},
+            #{enginePower,jdbcType=DECIMAL},
+            #{maxDeceleration,jdbcType=DECIMAL},
+            #{maxSteeringAngle,jdbcType=DECIMAL},
+            #{mass,jdbcType=DECIMAL},
+            #{frontSurfaceEffective,jdbcType=DECIMAL},
+            #{airDragCoefficient,jdbcType=DECIMAL},
+            #{rollingResistanceCoefficient,jdbcType=DECIMAL},
+            #{wheelDiameter,jdbcType=DECIMAL},
+            #{wheelDrive,jdbcType=DECIMAL},
+            #{overallEfficiency,jdbcType=DECIMAL},
+            #{frontDistance,jdbcType=DECIMAL},
+            #{rearDistance,jdbcType=DECIMAL},
+            #{leftDistance,jdbcType=DECIMAL},
+            #{rightDistance,jdbcType=DECIMAL},
+            #{heightDistance,jdbcType=DECIMAL},
+            #{wheelbase,jdbcType=DECIMAL},
+            #{share,jdbcType=VARCHAR},
+            #{createTime,jdbcType=TIMESTAMP},
+            #{modifyTime,jdbcType=TIMESTAMP},
+            #{createUserId,jdbcType=VARCHAR},
+            #{modifyUserId,jdbcType=VARCHAR},
+            #{isDeleted,jdbcType=VARCHAR}
+        )
+    </insert>
+
+    <update id="update" parameterType="api.common.pojo.po.model.VehiclePO">
+        update model_vehicle set
+            vehicle_id = #{vehicleId,jdbcType=VARCHAR},
+            vehicle_name = #{vehicleName,jdbcType=VARCHAR},
+            description = #{description,jdbcType=VARCHAR},
+            vehicle_type = #{vehicleType,jdbcType=VARCHAR},
+            vehicle_model = #{vehicleModel,jdbcType=VARCHAR},
+            vehicle_colour = #{vehicleColour,jdbcType=VARCHAR},
+            max_speed = #{maxSpeed,jdbcType=DECIMAL},
+            engine_power = #{enginePower,jdbcType=DECIMAL},
+            max_deceleration = #{maxDeceleration,jdbcType=DECIMAL},
+            max_steering_angle = #{maxSteeringAngle,jdbcType=DECIMAL},
+            mass = #{mass,jdbcType=DECIMAL},
+            front_surface_effective = #{frontSurfaceEffective,jdbcType=DECIMAL},
+            air_drag_coefficient = #{airDragCoefficient,jdbcType=DECIMAL},
+            rolling_resistance_coefficient = #{rollingResistanceCoefficient,jdbcType=DECIMAL},
+            wheel_diameter = #{wheelDiameter,jdbcType=DECIMAL},
+            wheel_drive = #{wheelDrive,jdbcType=DECIMAL},
+            overall_efficiency = #{overallEfficiency,jdbcType=DECIMAL},
+            front_distance = #{frontDistance,jdbcType=DECIMAL},
+            rear_distance = #{rearDistance,jdbcType=DECIMAL},
+            left_distance = #{leftDistance,jdbcType=DECIMAL},
+            right_distance = #{rightDistance,jdbcType=DECIMAL},
+            height_distance = #{heightDistance,jdbcType=DECIMAL},
+            wheelbase = #{wheelbase,jdbcType=DECIMAL},
+
+            modify_time = #{modifyTime,jdbcType=TIMESTAMP},
+            modify_user_id = #{modifyUserId,jdbcType=VARCHAR}
+        where id = #{id,jdbcType=VARCHAR}
+    </update>
+
+    <update id="delVehicleById" parameterType="api.common.pojo.po.model.VehiclePO">
+        update model_vehicle set
+          modify_time = #{modifyTime,jdbcType=TIMESTAMP},
+          modify_user_id = #{modifyUserId,jdbcType=VARCHAR},
+          is_deleted = #{isDeleted,jdbcType=VARCHAR}
+        where id = #{id,jdbcType=VARCHAR}
+    </update>
+</mapper>

+ 74 - 0
simulation-resource-server/src/main/resources/mapper/scene/SceneAccidentMapper.xml

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.css.simulation.resource.scene.mapper.SceneAccidentMapper" >
+
+    <insert id="saveSceneAccident" parameterType="api.common.pojo.po.scene.SceneAccidentPO">
+        insert into simulation.scene_accident
+        (accident_id,scene_name,self_driving,target_driving,
+        self_reaction,conflict_behavior,conflict_type,
+       create_user_id,create_time,modify_user_id,modify_time,
+         is_deleted,share,video_address,osgb_address,xml_address,xodr_address,
+        json_address)
+        values (#{accidentId,jdbcType=VARCHAR},#{sceneName,jdbcType=VARCHAR},#{selfDriving,jdbcType=VARCHAR}, #{targetDriving,jdbcType=VARCHAR},
+        #{selfReaction,jdbcType=VARCHAR}, #{conflictBehavior,jdbcType=VARCHAR},#{conflictType,jdbcType=VARCHAR},
+
+       #{createUserId,jdbcType=VARCHAR},#{createTime},#{modifyUserId,jdbcType=VARCHAR},#{modifyTime},
+        #{isDeleted,jdbcType=VARCHAR}, #{share,jdbcType=VARCHAR},#{videoAddress,jdbcType=VARCHAR},#{osgbAddress,jdbcType=VARCHAR},
+        #{xmlAddress,jdbcType=VARCHAR}, #{xodrAddress,jdbcType=VARCHAR},#{jsonAddress,jdbcType=VARCHAR})
+    </insert>
+
+
+    <select id="querySceneAccidentList" parameterType="api.common.pojo.param.scene.SceneAccidentParam" resultType="api.common.pojo.po.scene.SceneNaturalPO">
+        select
+        accident_id,scene_name,self_driving,target_driving,
+        self_reaction,conflict_behavior,conflict_type,
+        create_user_id,create_time,modify_user_id,modify_time,
+        is_deleted,share,video_address,osgb_address,xml_address,xodr_address,
+        json_address
+        from simulation.scene_accident
+        <where>
+            is_deleted = '0'
+            <if test="sceneName != null and sceneName != ''">
+                and scene_name like CONCAT('%',#{sceneName,jdbcType=VARCHAR},'%')
+            </if>
+
+            <if test="selfDriving != null and selfDriving != ''">
+            and   self_driving  in
+            <foreach collection="selfDriving" item="item" index="index"
+                     separator="," open="(" close=")">
+                #{item}
+            </foreach>
+            </if>
+            <if test="targetDriving != null and targetDriving != ''">
+               and   target_driving  in
+                <foreach collection="targetDriving" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="selfReaction != null and selfReaction != ''">
+                and  self_reaction  in
+                <foreach collection="selfReaction" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="conflictBehavior != null and conflictBehavior != ''">
+                and   conflict_behavior  in
+                <foreach collection="conflictBehavior" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="conflictType != null and conflictType != ''">
+                and   conflict_type  in
+                <foreach collection="conflictType" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            order by create_time desc
+        </where>
+    </select>
+
+</mapper>

+ 303 - 0
simulation-resource-server/src/main/resources/mapper/scene/SceneNaturalMapper.xml

@@ -0,0 +1,303 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.css.simulation.resource.scene.mapper.SceneNaturalMapper" >
+
+    <insert id="saveSceneNatural" parameterType="api.common.pojo.po.scene.SceneNaturalPO">
+        insert into simulation.scene_natural
+        (natural_id,natural_name,weather,backlight,
+        light_change,road_type,road_matrrial,driveway_num,
+        driveway_type,road_flatness,road_curvature,ramp,
+        intersection_type,plane_intersection,bridge,tunnel,
+        speed_limit,min_speed_limit,no_entry,no_stopping,
+        left_lane_line,right_lane_line,conductor_marking,pedestrian_crossing,
+        traffic_light,deceleration_marking,pavement_condition,natural_disaster,
+        road_safety_signs,safety_warning_board,traffic_accident,patency,
+        special_vehicle_yield,violation,double_flashing_car,self_behavior,
+        target_behavior,create_user_id,create_time,modify_user_id,modify_time,
+         is_deleted,share,video_address,osgb_address,xodr_address,xosc_address,
+        json_address)
+        values (#{naturalId,jdbcType=VARCHAR},#{naturalName,jdbcType=VARCHAR},#{weather,jdbcType=VARCHAR}, #{backlight,jdbcType=VARCHAR},
+        #{lightChange,jdbcType=VARCHAR}, #{roadType,jdbcType=VARCHAR},#{roadMatrrial,jdbcType=VARCHAR},#{drivewayNum,jdbcType=VARCHAR},
+        #{drivewayType,jdbcType=VARCHAR}, #{roadFlatness,jdbcType=VARCHAR},#{roadCurvature,jdbcType=VARCHAR},#{ramp,jdbcType=VARCHAR},
+        #{intersectionType,jdbcType=VARCHAR}, #{planeIntersection,jdbcType=VARCHAR},#{bridge,jdbcType=VARCHAR},#{tunnel,jdbcType=VARCHAR},
+        #{speedLimit,jdbcType=VARCHAR}, #{minSpeedLimit,jdbcType=VARCHAR},#{noEntry,jdbcType=VARCHAR},#{noStopping,jdbcType=VARCHAR},
+        #{leftLaneLine,jdbcType=VARCHAR}, #{rightLaneLine,jdbcType=VARCHAR},#{conductorMarking,jdbcType=VARCHAR},#{pedestrianCrossing,jdbcType=VARCHAR},
+        #{trafficLight,jdbcType=VARCHAR}, #{decelerationMarking,jdbcType=VARCHAR},#{pavementCondition,jdbcType=VARCHAR},#{naturalDisaster,jdbcType=VARCHAR},
+        #{roadSafetySigns,jdbcType=VARCHAR}, #{safetyWarningBoard,jdbcType=VARCHAR},#{trafficAccident,jdbcType=VARCHAR},#{patency,jdbcType=VARCHAR},
+        #{specialVehicleYield,jdbcType=VARCHAR}, #{violation,jdbcType=VARCHAR},#{doubleFlashingCar,jdbcType=VARCHAR},#{selfBehavior,jdbcType=VARCHAR},
+
+        #{targetBehavior,jdbcType=VARCHAR}, #{createUserId,jdbcType=VARCHAR},#{createTime},#{modifyUserId,jdbcType=VARCHAR},#{modifyTime},
+
+        #{isDeleted,jdbcType=VARCHAR}, #{share,jdbcType=VARCHAR},#{videoAddress,jdbcType=VARCHAR},#{osgbAddress,jdbcType=VARCHAR},
+        #{xodrAddress,jdbcType=VARCHAR}, #{xoscAddress,jdbcType=VARCHAR},#{jsonAddress,jdbcType=VARCHAR})
+    </insert>
+
+
+    <select id="querySceneNaturalList" parameterType="api.common.pojo.param.scene.SceneNaturalParam" resultType="api.common.pojo.po.scene.SceneNaturalPO">
+        select
+        natural_id,natural_name,weather,backlight,light_change,road_type,
+        road_matrrial,driveway_num,driveway_type,road_flatness,road_curvature,
+        ramp,intersection_type,plane_intersection,bridge,tunnel,speed_limit,
+        min_speed_limit,no_entry,no_stopping,left_lane_line,right_lane_line,
+        conductor_marking,pedestrian_crossing,traffic_light,deceleration_marking,
+        pavement_condition,natural_disaster,road_safety_signs,safety_warning_board,
+        traffic_accident,patency,special_vehicle_yield,violation,double_flashing_car,
+        self_behavior,target_behavior,create_user_id,create_time,modify_user_id,
+        modify_time,is_deleted,share,video_address,osgb_address,
+        xodr_address,xosc_address,json_address
+        from simulation.scene_natural
+        <where>
+            is_deleted = '0'
+            <if test="naturalName != null and naturalName != ''">
+                and natural_name like CONCAT('%',#{naturalName,jdbcType=VARCHAR},'%')
+            </if>
+            <if test="weather != null and weather != ''">
+                and   weather  in
+                <foreach collection="weather" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="backlight != null and backlight != ''">
+                and   backlight  in
+                <foreach collection="backlight" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="lightChange != null and lightChange != ''">
+                and   light_change  in
+                <foreach collection="lightChange" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="roadType != null and roadType != ''">
+                and   road_type  in
+                <foreach collection="roadType" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="roadMatrrial != null and roadMatrrial != ''">
+                and   road_matrrial  in
+                <foreach collection="roadMatrrial" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="drivewayNum != null and drivewayNum != ''">
+                and   driveway_num  in
+                <foreach collection="drivewayNum" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="drivewayType != null and drivewayType != ''">
+                and   driveway_type  in
+                <foreach collection="drivewayType" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="roadFlatness != null and roadFlatness != ''">
+                and   road_flatness  in
+                <foreach collection="roadFlatness" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="roadCurvature != null and roadCurvature != ''">
+                and   road_curvature  in
+                <foreach collection="roadCurvature" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="ramp != null and ramp != ''">
+                and   ramp  in
+                <foreach collection="ramp" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="intersectionType != null and intersectionType != ''">
+                and   intersection_type  in
+                <foreach collection="intersectionType" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="planeIntersection != null and planeIntersection != ''">
+                and   plane_intersection  in
+                <foreach collection="planeIntersection" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="bridge != null and bridge != ''">
+                and   bridge  in
+                <foreach collection="bridge" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="tunnel != null and tunnel != ''">
+                and   tunnel  in
+                <foreach collection="tunnel" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="speedLimit != null and speedLimit != ''">
+                and   speed_limit  in
+                <foreach collection="speedLimit" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="minSpeedLimit != null and minSpeedLimit != ''">
+                and   min_speed_limit  in
+                <foreach collection="minSpeedLimit" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="noEntry != null and noEntry != ''">
+                and   no_entry  in
+                <foreach collection="noEntry" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="noStopping != null and noStopping != ''">
+                and   no_stopping  in
+                <foreach collection="noStopping" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="leftLaneLine != null and leftLaneLine != ''">
+                and   left_lane_line  in
+                <foreach collection="leftLaneLine" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="rightLaneLine != null and rightLaneLine != ''">
+                and   right_lane_line  in
+                <foreach collection="rightLaneLine" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="conductorMarking != null and conductorMarking != ''">
+                and   conductor_marking  in
+                <foreach collection="conductorMarking" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="pedestrianCrossing != null and pedestrianCrossing != ''">
+                and   pedestrian_crossing  in
+                <foreach collection="pedestrianCrossing" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="trafficLight != null and trafficLight != ''">
+                and   traffic_light  in
+                <foreach collection="trafficLight" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="decelerationMarking != null and decelerationMarking != ''">
+                and   deceleration_marking  in
+                <foreach collection="decelerationMarking" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="pavementCondition != null and pavementCondition != ''">
+                and   pavement_condition  in
+                <foreach collection="pavementCondition" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="naturalDisaster != null and naturalDisaster != ''">
+                and   natural_disaster  in
+                <foreach collection="naturalDisaster" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="roadSafetySigns != null and roadSafetySigns != ''">
+                and   road_safety_signs  in
+                <foreach collection="roadSafetySigns" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="safetyWarningBoard != null and safetyWarningBoard != ''">
+                and   safety_warning_board  in
+                <foreach collection="safetyWarningBoard" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="trafficAccident != null and trafficAccident != ''">
+                and   traffic_accident  in
+                <foreach collection="trafficAccident" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="patency != null and patency != ''">
+                and   patency  in
+                <foreach collection="patency" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="specialVehicleYield != null and specialVehicleYield != ''">
+                and   special_vehicle_yield  in
+                <foreach collection="specialVehicleYield" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="violation != null and violation != ''">
+                and   violation  in
+                <foreach collection="violation" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="doubleFlashingCar != null and doubleFlashingCar != ''">
+                and   double_flashing_car  in
+                <foreach collection="doubleFlashingCar" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="selfBehavior != null and selfBehavior != ''">
+                and   self_behavior  in
+                <foreach collection="selfBehavior" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="targetBehavior != null and targetBehavior != ''">
+                and   target_behavior  in
+                <foreach collection="targetBehavior" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            order by create_time desc
+        </where>
+    </select>
+
+</mapper>

+ 108 - 0
simulation-resource-server/src/main/resources/mapper/scene/ScenePackageMapper.xml

@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.css.simulation.resource.scene.mapper.ScenePackageMapper" >
+
+
+    <insert id="saveScenePackage" parameterType="api.common.pojo.po.scene.ScenePackagePO">
+        insert into simulation.scene_package
+        (package_id,package_name,weight,
+        package_and_rules,scene_num,remarks,
+        create_user_id,create_time,modify_user_id,modify_time,
+         is_deleted,share)
+        values (#{packageId,jdbcType=VARCHAR},#{packageName,jdbcType=VARCHAR},#{weight,jdbcType=VARCHAR},
+        #{packageAndRules,jdbcType=VARCHAR},#{sceneNum},#{remarks,jdbcType=VARCHAR},
+         #{createUserId,jdbcType=VARCHAR},#{createTime},#{modifyUserId,jdbcType=VARCHAR},#{modifyTime},
+        #{isDeleted,jdbcType=VARCHAR}, #{share,jdbcType=VARCHAR})
+    </insert>
+
+
+    <select id="queryScenePackageList" parameterType="api.common.pojo.param.scene.ScenePackageParam" resultType="api.common.pojo.po.scene.ScenePackagePO">
+        select
+        a.package_id,a.package_name,a.weight,
+        a.package_and_rules,a.scene_num,a.remarks,
+        a.create_user_id,a.create_time,a.modify_user_id,a.modify_time,
+        a.is_deleted,a.share
+        from simulation.scene_package as a
+        <where>
+            a.is_deleted = '0'
+            <if test="packageId != null and packageId != ''">
+                and a.package_id  = #{packageId,jdbcType=VARCHAR}
+            </if>
+            <if test="share != null and share != ''">
+                and a.share  = #{share,jdbcType=VARCHAR}
+            </if>
+            <if test="packageName != null and packageName != ''">
+                and a.package_name like CONCAT('%',#{packageName,jdbcType=VARCHAR},'%')
+            </if>
+            <if test="yearMax != null and yearMax != ''">
+                and #{yearMax,jdbcType=VARCHAR} &gt; a.CREATE_TIME and #{yearMin,jdbcType=VARCHAR} &lt; a.CREATE_TIME
+            </if>
+            order by a.create_time desc
+        </where>
+    </select>
+
+
+    <select id="queryScenePackage" parameterType="api.common.pojo.param.scene.ScenePackageParam" resultType="api.common.pojo.po.scene.ScenePackagePO">
+        select
+        a.package_id,a.package_name,a.weight,
+        a.package_and_rules,a.scene_num,a.remarks,
+        a.create_user_id,a.create_time,a.modify_user_id,a.modify_time,
+        a.is_deleted,a.share
+        from simulation.scene_package as a
+        <where>
+            a.is_deleted = '0'
+            <if test="packageId != null and packageId != ''">
+                and a.package_id  = #{packageId,jdbcType=VARCHAR}
+            </if>
+            <if test="packageName != null and packageName != ''">
+                and a.package_name like CONCAT('%',#{packageName,jdbcType=VARCHAR},'%')
+            </if>
+            <if test="yearMax != null and yearMax != ''">
+                and #{yearMax,jdbcType=VARCHAR} &gt; a.CREATE_TIME and #{yearMin,jdbcType=VARCHAR} &lt; a.CREATE_TIME
+            </if>
+            order by a.create_time desc
+        </where>
+    </select>
+
+    <select id="queryScenePackageBySublist" parameterType="java.lang.String" resultType="api.common.pojo.vo.scene.ScenePackageSublistVO">
+        select
+        a.package_id as sublistId,a.package_name as sublistName,a.weight,
+        a.scene_num,a.remarks
+        from simulation.scene_package as a
+        <where>
+            a.is_deleted = '0'
+            <if test="packageId != null and packageId != ''">
+                and a.package_id  = #{packageId,jdbcType=VARCHAR}
+            </if>
+        </where>
+    </select>
+    <update id="updateScenePackage" parameterType="api.common.pojo.po.scene.ScenePackagePO">
+        update simulation.scene_package
+        <set>
+            <if test="isDeleted != null and isDeleted!=''">
+                is_deleted = #{isDeleted,jdbcType=VARCHAR},
+            </if>
+            <if test="packageName != null and packageName!=''">
+                package_name = #{share,jdbcType=VARCHAR},
+            </if>
+            <if test="weight != null and weight!=''">
+                weight = #{weight,jdbcType=VARCHAR},
+            </if>
+            <if test="sceneNum != null and sceneNum!=''">
+                scene_num = #{sceneNum},
+            </if>
+            <if test="remarks != null and remarks!=''">
+                remarks = #{ruleDetails},
+            </if>
+
+            <if test="modifyUserId != null and modifyUserId!=''">
+                modify_user_id = #{modifyUserId},
+            </if>
+            <if test="modifyTime != null ">
+                modify_time = #{modifyTime},
+            </if>
+
+        </set>
+        where package_id = #{packageId,jdbcType=VARCHAR}
+    </update>
+</mapper>

+ 70 - 0
simulation-resource-server/src/main/resources/mapper/scene/ScenePackageSublistMapper.xml

@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.css.simulation.resource.scene.mapper.ScenePackageSublistMapper" >
+
+    <insert id="saveScenePackageSublist" parameterType="api.common.pojo.po.scene.ScenePackageSublistPO">
+        insert into simulation.scene_package_sublist
+        (sublist_id,sublist_name,weight,rules_name,package_and_rules,
+        scene_natural_ids,scene_traffic_ids,scene_statue_ids,scene_generalization_ids
+        scene_num,parent_id,root_id,seq,package_level,remarks,
+        create_user_id,create_time,modify_user_id,modify_time,
+         is_deleted,share)
+        values (#{sublistId,jdbcType=VARCHAR},#{sublistName,jdbcType=VARCHAR},#{weight,jdbcType=VARCHAR},#{rulesName,jdbcType=VARCHAR},
+        #{packageAndRules,jdbcType=VARCHAR},
+        #{sceneNaturalIds}, #{sceneTrafficIds}, #{sceneStatueIds}, #{sceneGeneralizationIds},
+        #{sceneNum},#{parentId,jdbcType=VARCHAR},#{rootId,jdbcType=VARCHAR},#{seq},
+         #{packageLevel},#{remarks,jdbcType=VARCHAR},
+         #{createUserId,jdbcType=VARCHAR},#{createTime},#{modifyUserId,jdbcType=VARCHAR},#{modifyTime},
+        #{isDeleted,jdbcType=VARCHAR}, #{share,jdbcType=VARCHAR})
+    </insert>
+
+
+    <insert id="saveScenePackageSublistAll" parameterType="java.util.List">
+        <foreach collection="list" index="index" item="item" separator=";">
+        insert into simulation.scene_package_sublist
+        (sublist_id,sublist_name,weight,rules_name,package_and_rules,
+        scene_natural_ids,scene_traffic_ids,scene_statue_ids,scene_generalization_ids
+        scene_num,parent_id,root_id,seq,package_level,remarks,
+        create_user_id,create_time,modify_user_id,modify_time,
+         is_deleted,share)
+        values (#{sublistId,jdbcType=VARCHAR},#{sublistName,jdbcType=VARCHAR},#{weight,jdbcType=VARCHAR},#{rulesName,jdbcType=VARCHAR},
+        #{packageAndRules,jdbcType=VARCHAR},
+        #{sceneNaturalIds}, #{sceneTrafficIds}, #{sceneStatueIds}, #{sceneGeneralizationIds},
+        #{sceneNum},#{parentId,jdbcType=VARCHAR},#{rootId,jdbcType=VARCHAR},#{seq},
+         #{packageLevel},#{remarks,jdbcType=VARCHAR},
+         #{createUserId,jdbcType=VARCHAR},#{createTime},#{modifyUserId,jdbcType=VARCHAR},#{modifyTime},
+        #{isDeleted,jdbcType=VARCHAR}, #{share,jdbcType=VARCHAR})
+        </foreach>
+    </insert>
+
+    <select id="queryScenePackageSublistList" parameterType="api.common.pojo.po.scene.ScenePackageSublistPO" resultType="api.common.pojo.vo.scene.ScenePackageSublistVO">
+        select
+        a.sublist_id,a.sublist_name,a.weight,b.rule_name,
+        a.scene_num,a.parent_id,a.root_id,a.package_level,a.remarks,a.seq
+        from simulation.scene_package_sublist as a  left join simulation.scoring_rules as b on a.package_and_rules=b.rules_id
+        <where>
+            a.is_deleted = '0'
+            <if test="sublistId != null and sublistId != ''">
+                and a.sublist_id  = #{sublistId,jdbcType=VARCHAR}
+            </if>
+            <if test="sublistName != null and sublistName != ''">
+                and a.sublist_name  = #{sublistName,jdbcType=VARCHAR}
+            </if>
+
+            <if test="parentId != null and parentId != ''">
+                and a.parent_id = #{parentId}
+            </if>
+            <if test="rootId != null and rootId != ''">
+                and a.root_id = #{rootId}
+            </if>
+            order by a.seq
+        </where>
+    </select>
+
+
+    <update id="updateScenePackageSublist" parameterType="java.lang.String">
+        update simulation.scene_package_sublist
+        set is_deleted='1'
+        where root_id = #{rootId,jdbcType=VARCHAR}
+    </update>
+</mapper>

+ 89 - 0
simulation-resource-server/src/main/resources/mapper/scene/ScoringRulesMapper.xml

@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.css.simulation.resource.scene.mapper.ScoringRulesMapper" >
+
+    <insert id="saveScoringRules" parameterType="api.common.pojo.po.scene.ScoringRulesPO">
+        insert into simulation.scoring_rules
+        (rules_id,rule_name,rule_description,rule_details,
+        create_user_id,create_time,modify_user_id,modify_time,
+         is_deleted,share)
+        values (#{rulesId,jdbcType=VARCHAR},#{ruleName,jdbcType=VARCHAR},#{ruleDescription,jdbcType=VARCHAR},#{ruleDetails},
+         #{createUserId,jdbcType=VARCHAR},#{createTime},#{modifyUserId,jdbcType=VARCHAR},#{modifyTime},
+        #{isDeleted,jdbcType=VARCHAR}, #{share,jdbcType=VARCHAR})
+    </insert>
+
+
+    <select id="queryScoringRulesList" parameterType="api.common.pojo.param.scene.ScoringRulesParam" resultType="api.common.pojo.po.scene.ScoringRulesPO">
+        select
+        rules_id,rule_name,rule_description,rule_details,
+        create_user_id,create_time,modify_user_id,modify_time,
+        is_deleted,share
+        from simulation.scoring_rules
+        <where>
+            is_deleted = '0'
+            <if test="rulesId != null and rulesId != ''">
+                and rules_id  = #{rulesId,jdbcType=VARCHAR}
+            </if>
+            <if test="share != null and share!=''">
+               and share = #{share,jdbcType=VARCHAR}
+            </if>
+            <if test="ruleName != null and ruleName != ''">
+                and rule_name like CONCAT('%',#{ruleName,jdbcType=VARCHAR},'%')
+            </if>
+            <if test="ruleDescription != null and ruleDescription != ''">
+                and rule_description like  CONCAT('%',#{ruleDescription},'%')
+            </if>
+            <if test="yearMax != null and yearMax != ''">
+                and #{yearMax,jdbcType=VARCHAR} <![CDATA[ >= ]]> CREATE_TIME and #{yearMin,jdbcType=VARCHAR}  <![CDATA[ <= ]]> CREATE_TIME
+            </if>
+            order by create_time desc
+        </where>
+    </select>
+    <select id="queryScoringRules" parameterType="api.common.pojo.param.scene.ScoringRulesParam" resultType="api.common.pojo.po.scene.ScoringRulesPO">
+        select
+        rules_id,rule_name,rule_description,rule_details,
+        create_user_id,create_time,modify_user_id,modify_time,
+        is_deleted,share
+        from simulation.scoring_rules
+        <where>
+            is_deleted = '0'
+            <if test="rulesId != null and rulesId != ''">
+                and rules_id  = #{rulesId,jdbcType=VARCHAR}
+            </if>
+            <if test="ruleName != null and ruleName != ''">
+                and rule_name like CONCAT('%',#{ruleName,jdbcType=VARCHAR},'%')
+            </if>
+            order by create_time desc
+        </where>
+    </select>
+
+
+    <update id="updateScoringRules" parameterType="api.common.pojo.po.scene.ScoringRulesPO">
+        update simulation.scoring_rules
+        <set>
+            <if test="isDeleted != null and isDeleted!=''">
+                is_deleted = #{isDeleted,jdbcType=VARCHAR},
+            </if>
+            <if test="share != null and share!=''">
+                share = #{share,jdbcType=VARCHAR},
+            </if>
+            <if test="ruleName != null and ruleName!=''">
+                rule_name = #{ruleName,jdbcType=VARCHAR},
+            </if>
+            <if test="ruleDescription != null and ruleDescription!=''">
+                rule_description = #{ruleDescription,jdbcType=VARCHAR},
+            </if>
+            <if test="ruleDetails != null and ruleDetails!=''">
+                rule_details = #{ruleDetails,jdbcType=VARCHAR},
+            </if>
+            <if test="modifyUserId != null and modifyUserId!=''">
+                modify_user_id = #{modifyUserId,jdbcType=VARCHAR},
+            </if>
+            <if test="modifyTime != null">
+                modify_time = #{modifyTime},
+            </if>
+
+        </set>
+        where rules_id = #{rulesId,jdbcType=VARCHAR}
+    </update>
+</mapper>

+ 47 - 0
simulation-resource-server/src/main/resources/mapper/scene/StandardsRegulationsMapper.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.css.simulation.resource.scene.mapper.StandardsRegulationsMapper" >
+
+
+    <insert id="saveStandardsRegulations" parameterType="api.common.pojo.po.scene.StandardsRegulationsPO">
+        insert into simulation.scene_standards_regulations
+        (regulations_id,scene_name,regulation_type,standard_type,
+       create_user_id,create_time,modify_user_id,modify_time,
+         is_deleted,share,video_address,osgb_address,xml_address,xodr_address,
+        json_address)
+        values (#{regulationsId,jdbcType=VARCHAR},#{sceneName,jdbcType=VARCHAR},#{regulationType,jdbcType=VARCHAR}, #{standardType,jdbcType=VARCHAR},
+
+       #{createUserId,jdbcType=VARCHAR},#{createTime},#{modifyUserId,jdbcType=VARCHAR},#{modifyTime},
+        #{isDeleted,jdbcType=VARCHAR}, #{share,jdbcType=VARCHAR},#{videoAddress,jdbcType=VARCHAR},#{osgbAddress,jdbcType=VARCHAR},
+        #{xmlAddress,jdbcType=VARCHAR}, #{xodrAddress,jdbcType=VARCHAR},#{jsonAddress,jdbcType=VARCHAR})
+    </insert>
+
+
+    <select id="queryStandardsRegulationsList" parameterType="api.common.pojo.param.scene.StandardsRegulationsParam" resultType="api.common.pojo.po.scene.StandardsRegulationsPO">
+        select
+        regulations_id,scene_name,regulation_type,standard_type,
+        create_user_id,create_time,modify_user_id,
+        modify_time,is_deleted,share,video_address,osgb_address,
+        xml_address,xodr_address,json_address
+        from simulation.scene_standards_regulations
+        <where>
+            is_deleted = '0'
+            <if test="sceneName != null and sceneName != ''">
+                and scene_name like CONCAT('%',#{sceneName,jdbcType=VARCHAR},'%')
+            </if>
+
+            <if test="regulationType != null and regulationType != ''">
+            and  regulation_type  in
+            <foreach collection="regulationType" item="item" index="index"
+                     separator="," open="(" close=")">
+                #{item}
+            </foreach>
+            </if>
+            <if test="standardType != null and standardType != ''">
+                and standard_type like CONCAT('%',#{standardType,jdbcType=VARCHAR},'%')
+            </if>
+            order by create_time desc
+        </where>
+    </select>
+
+</mapper>