Browse Source

泛化模块代码

wangzhiqiang 3 years ago
parent
commit
85d6c59aa5
43 changed files with 2274 additions and 162 deletions
  1. 26 0
      api-common/src/main/java/api/common/pojo/param/scene/SceneGeneralTemplateParam.java
  2. 2 0
      api-common/src/main/java/api/common/pojo/param/scene/ScenePackageSublistParam.java
  3. 1 0
      api-common/src/main/java/api/common/pojo/po/scene/SceneAccidentPO.java
  4. 58 0
      api-common/src/main/java/api/common/pojo/po/scene/SceneGeneralDataPO.java
  5. 90 0
      api-common/src/main/java/api/common/pojo/po/scene/SceneGeneralExamplePO.java
  6. 91 0
      api-common/src/main/java/api/common/pojo/po/scene/SceneGeneralTemplatePO.java
  7. 2 0
      api-common/src/main/java/api/common/pojo/po/scene/SceneNaturalPO.java
  8. 6 0
      api-common/src/main/java/api/common/pojo/po/scene/ScenePackageSublistPO.java
  9. 2 0
      api-common/src/main/java/api/common/pojo/po/scene/StandardsRegulationsPO.java
  10. 1 0
      api-common/src/main/java/api/common/pojo/vo/scene/SceneAccidentVO.java
  11. 34 0
      api-common/src/main/java/api/common/pojo/vo/scene/SceneGeneralTemplateMbVO.java
  12. 89 0
      api-common/src/main/java/api/common/pojo/vo/scene/SceneGeneralTemplateVO.java
  13. 1 0
      api-common/src/main/java/api/common/pojo/vo/scene/SceneNaturalVO.java
  14. 2 0
      api-common/src/main/java/api/common/pojo/vo/scene/ScenePackageSublistVO.java
  15. 1 0
      api-common/src/main/java/api/common/pojo/vo/scene/StandardsRegulationsVO.java
  16. 10 2
      simulation-resource-common/src/main/java/com/css/simulation/resource/common/controller/MinioController.java
  17. 27 5
      simulation-resource-common/src/main/java/com/css/simulation/resource/common/util/MinioUtil.java
  18. 5 5
      simulation-resource-server/pom.xml
  19. 4 1
      simulation-resource-server/src/main/java/com/css/simulation/resource/feign/FileDownService.java
  20. 5 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/feign/fallback/FileDownServiceFallback.java
  21. 16 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/ctrl/FileController.java
  22. 10 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/ctrl/SceneAccidentController.java
  23. 185 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/ctrl/SceneGeneralTemplateController.java
  24. 5 1
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/SceneAccidentMapper.java
  25. 19 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/SceneGeneralDataMapper.java
  26. 18 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/SceneGeneralExampleMapper.java
  27. 22 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/SceneGeneralTemplateMapper.java
  28. 5 1
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/SceneNaturalMapper.java
  29. 4 2
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/StandardsRegulationsMapper.java
  30. 342 73
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/SceneAccidentService.java
  31. 232 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/SceneGeneralExampleService.java
  32. 290 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/SceneGeneralTemplateService.java
  33. 16 10
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/SceneNaturalService.java
  34. 6 3
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/ScenePackageService.java
  35. 20 10
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/StandardsRegulationsService.java
  36. 140 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/XmlParse.java
  37. 58 13
      simulation-resource-server/src/main/resources/mapper/scene/SceneAccidentMapper.xml
  38. 52 0
      simulation-resource-server/src/main/resources/mapper/scene/SceneGeneralDataMapper.xml
  39. 79 0
      simulation-resource-server/src/main/resources/mapper/scene/SceneGeneralExampleMapper.xml
  40. 145 0
      simulation-resource-server/src/main/resources/mapper/scene/SceneGeneralTemplateMapper.xml
  41. 87 18
      simulation-resource-server/src/main/resources/mapper/scene/SceneNaturalMapper.xml
  42. 19 5
      simulation-resource-server/src/main/resources/mapper/scene/ScenePackageSublistMapper.xml
  43. 47 13
      simulation-resource-server/src/main/resources/mapper/scene/StandardsRegulationsMapper.xml

+ 26 - 0
api-common/src/main/java/api/common/pojo/param/scene/SceneGeneralTemplateParam.java

@@ -0,0 +1,26 @@
+package api.common.pojo.param.scene;
+
+import api.common.pojo.common.PageVO;
+import lombok.*;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 交通事故场景
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneGeneralTemplateParam extends PageVO implements Serializable {
+
+    private String id;              // (唯一)
+    private String sceneId;//场景编号
+    private List<String> scenarioWeather;  //天气
+    private String scenarioTime;  //场景发生时间
+    private List<String> fileName;//模块名称
+    private String version;//版本号
+
+}

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

@@ -32,6 +32,8 @@ public class ScenePackageSublistParam implements Serializable {
     private int packageLevel;//级别
     private String remarks;//备注
     private String share ; //是否分析  1为分享
+    private String templateId;//泛化模板id
+    private String exampleId;//泛化实例id
     private List<ScenePackageSublistParam> list;
 
 

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

@@ -33,6 +33,7 @@ public class SceneAccidentPO implements Serializable {
     private String jsonAddress ; //
     private String videoPreview;//视频预览地址
     private String label;//标签
+    private String maxTime ; //该场景仿真最大时长
     /**
      * 记录创建时间
      */

+ 58 - 0
api-common/src/main/java/api/common/pojo/po/scene/SceneGeneralDataPO.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 SceneGeneralDataPO implements Serializable {
+
+    private String id;              // (唯一)
+    private String sceneId;        // 场景编号(任务用)
+    private String sublistId;//指标Id
+    private String templateId;  //关联模板id
+    private String exampleId;  //关联模板实例id
+    private String osgbAddress  ;//
+    private String xodrAddress ; //
+    private String xoscAddress ; //
+    /**
+     * 记录创建时间
+     */
+    public Timestamp createTime;
+    /**
+     * 记录最后更新时间(包括删除)
+     */
+    public Timestamp modifyTime;
+    /**
+     * 记录创建人(用户id)
+     */
+    public String createUserId;
+    /**
+     * 记录最后更新人(包括删除)(用户id)
+     */
+    public String modifyUserId;
+    /**
+     * 是否已删除
+     */
+    public String isDeleted;
+
+
+
+
+
+
+
+
+
+
+
+
+}

+ 90 - 0
api-common/src/main/java/api/common/pojo/po/scene/SceneGeneralExamplePO.java

@@ -0,0 +1,90 @@
+package api.common.pojo.po.scene;
+
+import lombok.*;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 泛化模板实例
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneGeneralExamplePO implements Serializable {
+
+    private String id;              // (唯一)
+    private String sceneId;//场景编号
+    private String scenarioName;  //场景名称
+    private String scenarioWeather;  //天气
+    private String scenarioTime;  //场景发生时间
+    private String scenarioVehicleModel;  //车辆模型
+    private String scenarioRoadType;  //道路类型
+    private String scenarioRadiusCurvature;  //车道线曲率半径
+    private String egoStartX;  //自车初始x坐标
+    private String egoStartY;  //自车初始y坐标
+    private String egoStartVelocity ; //自车初始速度
+    private String egoHeadingAngle ; //自车航向角
+    private String egoVelocityStatus ; //自车行驶速度状态
+    private String egoTrajectory ; //自车轨迹形态
+    private String egoDurationTime ; //自车轨迹持续时间
+    private String egoVelocityTime  ;//自车速度分段持续时间
+    private String egoTrajectoryTime ; //自车轨迹形态分段持续时间
+    private String obsStartX ; //目标车初始x坐标
+    private String obsStartY ; //目标车初始y坐标
+    private String obsStartVelocity;//目标车初始速度
+    private String obsLateralAcceleration;//目标物最大横向加速度(m/s²)
+    private String obsLongitudinalAcceleration;//目标物最大纵向加速度(m/s²)
+    private String obsHeadingAngleRel;//目标物相对自车航向角
+    private String obsVelocityStatus;//目标车行驶速度状态
+    private String obsTrajectory;//目标车轨迹形态
+    private String obsDurationTime;//目标车轨迹持续时间
+    private String obsVelocityTime;//目标速度分段持续时间(s)
+    private String obsTrailTime;//目标车轨迹形态分段持续时间
+    private String generalizationType;//泛化标志位
+    private String scenarioResume;//场景简述
+    private String sceneDetailedDescription;//场景详细描述
+    private String evaluatingIndicator;//评价指标
+    private String videoLink;//视频链接
+    private String fileName;//文件名或地址
+    private String templateId;//模板id
+    private String sublistId;//指标id
+
+    private String uuId;//唯一值
+    private String isTure;//所用模板是否更新,1:该模板不是最新模板
+
+    /**
+     * 记录创建时间
+     */
+    public Timestamp createTime;
+    /**
+     * 记录最后更新时间(包括删除)
+     */
+    public Timestamp modifyTime;
+    /**
+     * 记录创建人(用户id)
+     */
+    public String createUserId;
+    /**
+     * 记录最后更新人(包括删除)(用户id)
+     */
+    public String modifyUserId;
+    /**
+     * 是否已删除
+     */
+    public String isDeleted;
+
+
+
+
+
+
+
+
+
+
+
+
+}

+ 91 - 0
api-common/src/main/java/api/common/pojo/po/scene/SceneGeneralTemplatePO.java

@@ -0,0 +1,91 @@
+package api.common.pojo.po.scene;
+
+import lombok.*;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+import java.util.List;
+
+/**
+ * 泛化模板
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneGeneralTemplatePO implements Serializable {
+
+    private String id;              // (唯一)
+    private String sceneId;//场景编号
+    private String scenarioName;  //场景名称
+    private String scenarioWeather;  //天气
+    private String scenarioTime;  //场景发生时间
+    private String scenarioVehicleModel;  //车辆模型
+    private String scenarioRoadType;  //道路类型
+    private String scenarioRadiusCurvature;  //车道线曲率半径
+    private String egoStartX;  //自车初始x坐标
+    private String egoStartY;  //自车初始y坐标
+    private String egoStartVelocity ; //自车初始速度
+    private String egoHeadingAngle ; //自车航向角
+    private String egoVelocityStatus ; //自车行驶速度状态
+    private String egoTrajectory ; //自车轨迹形态
+    private String egoDurationTime ; //自车轨迹持续时间
+    private String egoVelocityTime  ;//自车速度分段持续时间
+    private String egoTrajectoryTime ; //自车轨迹形态分段持续时间
+    private String obsStartX ; //目标车初始x坐标
+    private String obsStartY ; //目标车初始y坐标
+    private String obsStartVelocity;//目标车初始速度
+    private String obsLateralAcceleration;//目标物最大横向加速度(m/s²)
+    private String obsLongitudinalAcceleration;//目标物最大纵向加速度(m/s²)
+    private String obsHeadingAngleRel;//目标物相对自车航向角
+    private String obsVelocityStatus;//目标车行驶速度状态
+    private String obsTrajectory;//目标车轨迹形态
+    private String obsDurationTime;//目标车轨迹持续时间
+    private String obsVelocityTime;//目标速度分段持续时间(s)
+    private String obsTrailTime;//目标车轨迹形态分段持续时间
+    private String generalizationType;//泛化标志位
+    private String scenarioResume;//场景简述
+    private String sceneDetailedDescription;//场景详细描述
+    private String evaluatingIndicator;//评价指标
+    private String videoLink;//视频链接
+    private String fileName;//文件名或地址
+    private String version;//版本号
+
+
+    private List<String> fileNameAll;//sheet页集合
+
+
+    /**
+     * 记录创建时间
+     */
+    public Timestamp createTime;
+    /**
+     * 记录最后更新时间(包括删除)
+     */
+    public Timestamp modifyTime;
+    /**
+     * 记录创建人(用户id)
+     */
+    public String createUserId;
+    /**
+     * 记录最后更新人(包括删除)(用户id)
+     */
+    public String modifyUserId;
+    /**
+     * 是否已删除
+     */
+    public String isDeleted;
+
+
+
+
+
+
+
+
+
+
+
+
+}

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

@@ -62,6 +62,8 @@ public class SceneNaturalPO  implements Serializable {
     private String videoPreview;//视频预览地址
 
     private String label;//标签
+
+    private String maxTime ; //该场景仿真最大时长
     /**
      * 记录创建时间
      */

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

@@ -33,6 +33,12 @@ public class ScenePackageSublistPO implements Serializable {
     private String remarks;//备注
     private String share ; //是否分析  1为分享
     private String treeNode;//模板预览node节点
+    private String templateId;//泛化模板id
+    private String exampleId;//泛化实例id
+
+
+
+
     /**
      * 记录创建时间
      */

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

@@ -27,6 +27,8 @@ public class StandardsRegulationsPO implements Serializable {
     private String jsonAddress ; //
     private String videoPreview;//视频预览地址
     private String label;//标签
+
+    private String maxTime ; //该场景仿真最大时长
     /**
      * 记录创建时间
      */

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

@@ -28,5 +28,6 @@ public class SceneAccidentVO extends PageVO implements Serializable {
     private String scenceResume ; //场景描述
     private String sceneTime ; //场景时间
     private String sceneWeather ; //天气
+    private String maxTime ; //该场景仿真最大时长
 
 }

+ 34 - 0
api-common/src/main/java/api/common/pojo/vo/scene/SceneGeneralTemplateMbVO.java

@@ -0,0 +1,34 @@
+package api.common.pojo.vo.scene;
+
+import lombok.*;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+import java.util.List;
+
+/**
+ * 泛化模板目标物
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneGeneralTemplateMbVO implements Serializable {
+
+    private String obsStartX ; //目标车初始x坐标
+    private String obsStartY ; //目标车初始y坐标
+    private String obsStartVelocity;//目标车初始速度
+    private String obsLateralAcceleration;//目标物最大横向加速度(m/s²)
+    private String obsLongitudinalAcceleration;//目标物最大纵向加速度(m/s²)
+    private String obsHeadingAngleRel;//目标物相对自车航向角
+    private String obsVelocityStatus;//目标车行驶速度状态
+    private String obsTrajectory;//目标车轨迹形态
+    private String obsDurationTime;//目标车轨迹持续时间
+    private String obsVelocityTime;//目标速度分段持续时间(s)
+    private String obsTrailTime;//目标车轨迹形态分段持续时间
+    private String generalizationType;//泛化标志位
+
+
+
+}

+ 89 - 0
api-common/src/main/java/api/common/pojo/vo/scene/SceneGeneralTemplateVO.java

@@ -0,0 +1,89 @@
+package api.common.pojo.vo.scene;
+
+import lombok.*;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+import java.util.List;
+
+/**
+ * 泛化模板
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneGeneralTemplateVO implements Serializable {
+
+    private String id;              // (唯一)
+    private String sceneId;//场景编号
+    private String scenarioName;  //场景名称
+    private String scenarioWeather;  //天气
+    private String scenarioTime;  //场景发生时间
+    private String scenarioVehicleModel;  //车辆模型
+    private String scenarioRoadType;  //道路类型
+    private String scenarioRadiusCurvature;  //车道线曲率半径
+    private String egoStartX;  //自车初始x坐标
+    private String egoStartY;  //自车初始y坐标
+    private String egoStartVelocity ; //自车初始速度
+    private String egoHeadingAngle ; //自车航向角
+    private String egoVelocityStatus ; //自车行驶速度状态
+    private String egoTrajectory ; //自车轨迹形态
+    private String egoDurationTime ; //自车轨迹持续时间
+    private String egoVelocityTime  ;//自车速度分段持续时间
+    private String egoTrajectoryTime ; //自车轨迹形态分段持续时间
+
+    private List<SceneGeneralTemplateMbVO> listMb;//目标物集合
+
+    private String generalizationType;//泛化标志位  目标物为空时使用
+
+    private String scenarioResume;//场景简述
+    private String sceneDetailedDescription;//场景详细描述
+    private String evaluatingIndicator;//评价指标
+    private String videoLink;//视频链接
+    private String fileName;//文件名或地址
+    private String version;//版本号
+
+    private String templateId;//模板id
+    private String isTure;//所用模板是否更新,1:该模板不是最新模板
+
+
+
+
+    private List<String> fileNameAll;//sheet页集合
+
+
+    /**
+     * 记录创建时间
+     */
+    public Timestamp createTime;
+    /**
+     * 记录最后更新时间(包括删除)
+     */
+    public Timestamp modifyTime;
+    /**
+     * 记录创建人(用户id)
+     */
+    public String createUserId;
+    /**
+     * 记录最后更新人(包括删除)(用户id)
+     */
+    public String modifyUserId;
+    /**
+     * 是否已删除
+     */
+    public String isDeleted;
+
+
+
+
+
+
+
+
+
+
+
+
+}

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

@@ -62,6 +62,7 @@ public class SceneNaturalVO extends PageVO implements Serializable {
     private String videoPreview;//视频预览地址
 
     private String label;//标签
+    private String maxTime ; //该场景仿真最大时长
 
 
 }

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

@@ -32,4 +32,6 @@ public class ScenePackageSublistVO implements Serializable {
     private int seq;//在当前层级下的顺序,由小到大
     private List<ScenePackageSublistVO>  children;
     private String treeNode;//模板预览node节点
+    private String templateId;//泛化模板id
+    private String exampleId;//泛化实例id
 }

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

@@ -23,4 +23,5 @@ public class StandardsRegulationsVO extends PageVO implements Serializable {
     private String videoAddress ; //视频地址
     private String videoPreview;//视频预览地址
     private String label;//标签
+    private String maxTime ; //该场景仿真最大时长
 }

+ 10 - 2
simulation-resource-common/src/main/java/com/css/simulation/resource/common/controller/MinioController.java

@@ -11,6 +11,7 @@ import com.css.simulation.resource.common.util.MinioUtil;
 import io.minio.*;
 import io.minio.errors.*;
 import io.minio.http.Method;
+import io.minio.messages.Item;
 import io.minio.messages.Part;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -109,8 +110,7 @@ public class MinioController {
     @PostMapping("/listDeepOne")
     public ResponseBodyVO<List<String>> listDeepOne(
             @RequestBody @Validated MinioParameter minioParameter
-    ) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
-
+    ) throws Exception {
         List<String> objects = MinioUtil.listObjectsUnRecursive(minioClientPrivate, bucketName, minioParameter.getObjectName());
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, objects);
     }
@@ -202,4 +202,12 @@ public class MinioController {
         minioClientPrivate.completeMultipartUpload(bucketName, null, objectName, uploadId, partArr, null, null);
         return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS, "合并成功!");
     }
+    @PostMapping("/remove")
+    public void download(
+            @RequestBody @Validated MinioParameter minioParameter
+    ) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
+
+        MinioUtil.removeObject(minioClientPrivate, bucketName, minioParameter.getObjectName());
+    }
+
 }

+ 27 - 5
simulation-resource-common/src/main/java/com/css/simulation/resource/common/util/MinioUtil.java

@@ -18,11 +18,14 @@ import java.io.InputStream;
 import java.security.InvalidKeyException;
 import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 public class MinioUtil {
 
 
+
     /**
      * 获取下一级文件列表
      *
@@ -31,8 +34,11 @@ public class MinioUtil {
      * @param prefix      目录名
      * @return 文件路径列表
      */
-    public static List<String> listObjectsUnRecursive(MinioClient minioClient, String bucket, String prefix) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, io.minio.errors.InternalException {
+    public static List<String> listObjectsUnRecursive(MinioClient minioClient, String bucket, String prefix) throws Exception{
 
+        if (prefix.startsWith("/")) {
+            prefix = prefix.substring(1);
+        }
         if (!prefix.endsWith("/")) {
             prefix = prefix + "/";
         }
@@ -44,19 +50,18 @@ public class MinioUtil {
                         .prefix(prefix)
                         .build()
         );
-        List<String> result = new ArrayList<>();
+        Set<String> resultSet = new HashSet<>();
         for (Result<Item> next : objects) {
             Item item = next.get();
             String objectName = item.objectName();
             String substring = objectName.substring(length);
             String[] split = substring.split("/");
-            result.add(prefix + split[0]);
+            resultSet.add(prefix + split[0]);
         }
 
-        return result;
+        return new ArrayList<>(resultSet);
     }
 
-
     /**
      * 判断 bucket 是否存在
      */
@@ -253,4 +258,21 @@ public class MinioUtil {
         }
         return null;
     }
+    /**
+     * 删除文件
+     *
+     * @param minioClient minio 客户端对象
+     * @param bucket      桶
+     * @param object      文件对象
+     */
+    public static void removeObject(
+            MinioClient minioClient,
+            String bucket,
+            String object
+    ) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, io.minio.errors.InternalException {
+        minioClient.removeObject(RemoveObjectArgs.builder()
+                .bucket(bucket)
+                .object(object)
+                .build());
+    }
 }

+ 5 - 5
simulation-resource-server/pom.xml

@@ -17,17 +17,17 @@
 
     <dependencies>
 
-        <!-- 测试excel解析-->
-       <!-- <dependency>
+       <!--  测试excel解析-->
+        <dependency>
             <groupId>org.apache.poi</groupId>
             <artifactId>poi</artifactId>
-            <version>5.2.0</version>
+            <version>3.17</version>
         </dependency>
         <dependency>
             <groupId>org.apache.poi</groupId>
             <artifactId>poi-ooxml</artifactId>
-            <version>5.2.0</version>
-        </dependency>-->
+            <version>3.17</version>
+        </dependency>
       <!--  <dependency>
             <groupId>org.apache.poi</groupId>
             <artifactId>poi-ooxml-schemas</artifactId>

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

@@ -15,7 +15,7 @@ import org.springframework.web.multipart.MultipartFile;
 import java.util.List;
 
 
-//@FeignClient(name = "test", url = "http://10.15.12.72:8001",path = "/simulation/resource/common", fallback = FileDownServiceFallback.class, configuration = FeignConfiguration.class)
+//@FeignClient(name = "test", url = "http://47.93.217.159",path = "/simulation/resource/common", fallback = FileDownServiceFallback.class, configuration = FeignConfiguration.class)
 @FeignClient(
         contextId = "file",
         value = "simulation-resource-common",
@@ -40,6 +40,9 @@ public interface FileDownService {
     @PostMapping("/minio/list")
     ResponseBodyVO<List<String>> list( @RequestBody @Validated MinioParameter minioParameter );
 
+    @PostMapping("/minio/listDeepOne")
+    ResponseBodyVO<List<String>> listDeepOne( @RequestBody @Validated MinioParameter minioParameter );
+
     @RequestMapping("/minio/getPreviewUrl")
     ResponseBodyVO<String> getPreviewUrl(@RequestBody @Validated MinioParameter minioParameter);
 

+ 5 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/feign/fallback/FileDownServiceFallback.java

@@ -46,6 +46,11 @@ public class FileDownServiceFallback implements FileDownService {
         return null;
     }
 
+    @Override
+    public ResponseBodyVO<List<String>> listDeepOne(@RequestBody @Validated MinioParameter minioParameter) {
+        return null;
+    }
+
     @Override
     public ResponseBodyVO<String> getPreviewUrl(@RequestBody @Validated MinioParameter minioParameter) {
         return null;

+ 16 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/ctrl/FileController.java

@@ -23,6 +23,7 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 //文件上传下载
@@ -109,5 +110,20 @@ public class FileController {
         }
     }
 
+//从minio获取文件列表
+    @PostMapping(value = "/queryList")
+    public List<String> queryList(@RequestBody @Validated MinioParameter parms
+    ) throws IOException {
+        List<String> list = fileDownService.list(parms).getInfo();
+        return list;
+    }
+
+    @PostMapping(value = "/queryList1")
+    public List<String> queryList1(@RequestBody @Validated MinioParameter parms
+    ) throws IOException {
+        List<String> list = fileDownService.listDeepOne(parms).getInfo();
+        return list;
+    }
+
 
 }

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

@@ -1,6 +1,7 @@
 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.SceneAccidentParam;
 import api.common.pojo.po.scene.SceneAccidentPO;
 import api.common.pojo.vo.scene.SceneAccidentVO;
@@ -61,4 +62,13 @@ public class SceneAccidentController {
         return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
     }
 
+    //测试批量导入
+    @PostMapping("/saveAll")
+    @ResponseBody
+    public ResponseBodyVO<String> saveAll(@RequestBody MinioParameter parms) {
+
+      return  sceneAccidentService.importMiNio(parms);
+        //return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+    }
+
 }

+ 185 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/ctrl/SceneGeneralTemplateController.java

@@ -0,0 +1,185 @@
+package com.css.simulation.resource.scene.ctrl;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.scene.SceneGeneralTemplateParam;
+import api.common.pojo.po.scene.SceneGeneralDataPO;
+import api.common.pojo.po.scene.SceneGeneralExamplePO;
+import api.common.pojo.po.scene.SceneGeneralTemplatePO;
+import api.common.pojo.vo.scene.SceneGeneralTemplateVO;
+import api.common.util.HttpUtil;
+import api.common.util.JsonUtil;
+import api.common.util.ObjectUtil;
+import api.common.util.TimeUtil;
+import com.css.simulation.resource.common.utils.PageUtil;
+import com.css.simulation.resource.feign.FileDownService;
+import com.css.simulation.resource.scene.service.SceneGeneralExampleService;
+import com.css.simulation.resource.scene.service.SceneGeneralTemplateService;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.pagehelper.PageInfo;
+import lombok.SneakyThrows;
+import org.apache.http.client.config.RequestConfig;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import javax.annotation.Resource;
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.security.KeyManagementException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+//泛化场景
+@RestController
+@RequestMapping("/SceneGeneralTemplate")
+public class SceneGeneralTemplateController {
+
+    @Resource
+    SceneGeneralTemplateService sceneGeneralTemplateService;
+    @Resource
+    SceneGeneralExampleService exampleService;
+    @Resource
+    private FileDownService fileDownService;
+    //查询列表
+    @PostMapping("/querySceneGeneralTemplateList")
+    @ResponseBody
+    public ResponseBodyVO<List<SceneGeneralTemplatePO>> querySceneGeneralTemplateList(@RequestBody SceneGeneralTemplateParam po) {
+        PageUtil.setPageInfo(po);
+        List<SceneGeneralTemplatePO> list = sceneGeneralTemplateService.querySceneGeneralTemplateList(po);
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS,  new PageInfo<>(list));
+    }
+
+    //查模板详情
+    @PostMapping("/querySceneGeneralTemplateById")
+    @ResponseBody
+    public ResponseBodyVO<SceneGeneralTemplateVO> querySceneGeneralTemplateById(@RequestBody SceneGeneralTemplateParam param) {
+        if(param!=null&&ObjectUtil.isNotNull(param.getId())){
+            SceneGeneralTemplateVO po = sceneGeneralTemplateService.querySceneGeneralTemplateById(param.getId());
+            return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS, po);
+        }
+        return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "参数id不能为空,请检查");
+
+    }
+
+    /*
+        //新增泛化模板
+        @PostMapping("/saveSceneGeneralTemplate")
+        @ResponseBody
+        public ResponseBodyVO<String> saveSceneGeneralTemplate() {
+            return   sceneGeneralTemplateService.saveSceneGeneralTemplate1();
+
+        }*/
+    //新增泛化模板
+    @PostMapping("/saveSceneGeneralTemplate")
+    @ResponseBody
+    public ResponseBodyVO<String> saveSceneGeneralTemplate(@RequestParam("file") MultipartFile multipartFile) {
+        File file = null;
+        String originalFilename =  multipartFile.getOriginalFilename();
+        if(originalFilename.indexOf(".xls")==-1&&originalFilename.indexOf(".xlsx")==-1){
+            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "文件格式错误,请检查模板.");
+
+        }
+        //版本号
+        String version=TimeUtil.getToStringDate(new Date(),5);
+        try {
+            ResponseBodyVO<String> respon;
+            Integer nowTime = TimeUtil.getRq(new Date(), 0);
+          String  fileName = "泛化场景/" + version +"/"+originalFilename;
+            respon = fileDownService.upload(multipartFile, fileName);
+
+            String[] filename = originalFilename.split("\\.");
+            file = File.createTempFile(filename[0], filename[1]);
+            multipartFile.transferTo(file);
+            file.deleteOnExit();
+        } catch (IOException e) {
+            e.printStackTrace();
+            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "模板解析失败,请检查模板.");
+
+        }
+        return sceneGeneralTemplateService.saveSceneGeneralTemplate(file,version);
+
+    }
+
+    //删除泛化模板
+    @PostMapping("/deleteSceneGeneralTemplateById")
+    @ResponseBody
+    public ResponseBodyVO<String> deleteSceneGeneralTemplateById(@RequestBody SceneGeneralTemplatePO po) {
+        return sceneGeneralTemplateService.deleteSceneGeneralTemplateById(po);
+
+    }
+
+    //查看泛化实例详情页面
+
+    @PostMapping("/queryGeneralTemplateByFh")
+    @ResponseBody
+    public ResponseBodyVO queryGeneralTemplateByFh(@RequestBody SceneGeneralExamplePO param) {
+        if(param!=null&&ObjectUtil.isNotNull(param.getId())){
+            return  exampleService.querySceneGeneralExampleById(param.getId());
+        }
+        return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "参数id不能为空,请检查");
+    }
+
+
+    //泛化实例保存及调用外部接口
+    @PostMapping("/saveSceneGeneralExample")
+    @ResponseBody
+    public ResponseBodyVO saveSceneGeneralExample(@RequestBody SceneGeneralTemplateVO vo) {
+        if(ObjectUtil.isNotNull(vo)){
+            return  exampleService.saveSceneGeneralExample(vo);
+        }
+        return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "参数不能为空,请检查");
+    }
+
+    //查询模块名称
+    @PostMapping("/queryType")
+    @ResponseBody
+    public ResponseBodyVO queryType() {
+            return  exampleService.queryType();
+    }
+
+
+
+
+    //测试
+    @PostMapping("/test1")
+    @ResponseBody
+    public ResponseBodyVO test1(@RequestBody SceneGeneralTemplatePO po) throws IllegalAccessException, IOException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
+      Map map=  beanToMap(po);
+        RequestConfig requestConfig = RequestConfig.custom()
+                .setSocketTimeout(6*10*1000)
+                .setConnectTimeout(6*10*1000)
+                .setConnectionRequestTimeout(6*10*1000)
+                .setRedirectsEnabled(false)
+                .setExpectContinueEnabled(false)
+                .build();
+
+        String post = HttpUtil.post(HttpUtil.getHttpClient(), requestConfig, "http://47.94.105.148:5000/test_1.0", null, map);
+        JsonNode params = JsonUtil.readTree(post).get("params");
+        // 实例化 ObjectMapper 对象
+        ObjectMapper objectMapper = new ObjectMapper();
+        String newjson = objectMapper.writeValueAsString(params);
+       List<SceneGeneralDataPO>  list=JsonUtil.jsonToList(newjson,SceneGeneralDataPO.class);
+        return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "参数不能为空,请检查");
+    }
+
+    /**
+     * 对象转Map
+     * @param object
+     * @return
+     * @throws IllegalAccessException
+     */
+    public static Map beanToMap(Object object) throws IllegalAccessException {
+        Map<String, Object> map = new HashMap<String, Object>();
+        Field[] fields = object.getClass().getDeclaredFields();
+        for (Field field : fields) {
+            field.setAccessible(true);
+            map.put(field.getName(), field.get(object));
+        }
+        return map;
+    }
+
+}

+ 5 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/SceneAccidentMapper.java

@@ -12,13 +12,17 @@ public interface SceneAccidentMapper {
 
     void saveSceneAccident(SceneAccidentPO params);
 
+    void saveSceneAccidentList(List<SceneAccidentPO> list);
+
     List<SceneAccidentPO> querySceneAccidentList(SceneAccidentParam params);
     List<SceneAccidentPO> querySceneAccidentListByXlk(SceneAccidentParam params);
     List<SceneAccidentPO> querySceneAccidentListByBq(SceneAccidentParam params);
 
     void deleteSceneAccidentList(SceneAccidentPO params);
 
-    Integer querySceneAccidentByNmae(String sceneName);
+    String querySceneAccidentByNmae(String sceneName);
+    void updateSceneAccident(SceneAccidentPO params);
+    void updateSceneAccidentList(List<SceneAccidentPO> list);
 
 
 }

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

@@ -0,0 +1,19 @@
+package com.css.simulation.resource.scene.mapper;
+
+import api.common.pojo.po.scene.SceneGeneralDataPO;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface SceneGeneralDataMapper {
+
+    void saveSceneGeneralDataAll(List<SceneGeneralDataPO> list);
+    List<SceneGeneralDataPO> querySceneGeneralDataList(SceneGeneralDataPO params);
+    SceneGeneralDataPO querySceneGeneralDataById(String id);
+
+
+
+}

+ 18 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/SceneGeneralExampleMapper.java

@@ -0,0 +1,18 @@
+package com.css.simulation.resource.scene.mapper;
+
+import api.common.pojo.po.scene.SceneGeneralExamplePO;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface SceneGeneralExampleMapper {
+
+    void saveSceneGeneralExampleAll(List<SceneGeneralExamplePO> list);
+    void saveSceneGeneralExample(SceneGeneralExamplePO  po);
+    SceneGeneralExamplePO querySceneGeneralExampleById(String id);
+
+
+}

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

@@ -0,0 +1,22 @@
+package com.css.simulation.resource.scene.mapper;
+
+import api.common.pojo.param.scene.SceneGeneralTemplateParam;
+import api.common.pojo.po.scene.SceneGeneralTemplatePO;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface SceneGeneralTemplateMapper {
+
+    void saveSceneGeneralTemplateAll(List<SceneGeneralTemplatePO> list);
+    List<SceneGeneralTemplatePO> querySceneGeneralTemplateList(SceneGeneralTemplateParam params);
+    SceneGeneralTemplatePO querySceneGeneralTemplateById(String id);
+    void deleteSceneGeneralTemplateAll(SceneGeneralTemplatePO po);
+    void deleteSceneGeneralTemplateById(SceneGeneralTemplatePO po);
+    List<String> queryType( );
+
+
+}

+ 5 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/SceneNaturalMapper.java

@@ -13,6 +13,7 @@ import java.util.Map;
 public interface SceneNaturalMapper {
 
     void saveSceneNatural(SceneNaturalPO params);
+    void saveSceneNaturalList(List<SceneNaturalPO> list);
 
     List<SceneNaturalPO> querySceneNaturalList(SceneNaturalParam params);
     List<SceneNaturalPO> querySceneNaturalListByBqAndXlk(Map<String,SceneNaturalParam> map);
@@ -20,8 +21,11 @@ public interface SceneNaturalMapper {
 
     void deleteSceneNatural(SceneNaturalPO params);
 
-    List<SceneNaturalPO> querySceneNaturaByName(SceneNaturalParam params);
+    String querySceneNaturaByName(String fileName);
 
     Integer querySceneNumBySy(SceneNaturalParam params);
 
+    void updateSceneNatural(SceneNaturalPO params);
+    void updateSceneNaturalList(List<SceneNaturalPO> list);
+
 }

+ 4 - 2
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/StandardsRegulationsMapper.java

@@ -12,13 +12,15 @@ import java.util.List;
 public interface StandardsRegulationsMapper {
 
     void saveStandardsRegulations(StandardsRegulationsPO params);
+    void saveStandardsRegulationsList(List<StandardsRegulationsPO> list);
 
     List<StandardsRegulationsPO> queryStandardsRegulationsList(StandardsRegulationsParam params);
     List<StandardsRegulationsPO> queryStandardsRegulationsListByBq(StandardsRegulationsParam params);
 
     void deleteStandardsRegulations(StandardsRegulationsPO params);
 
-    List<StandardsRegulationsPO> queryStandardsRegulationsByName(StandardsRegulationsParam params);
-
+    String queryStandardsRegulationsByName(String sceneName);
 
+    void updateStandardsRegulations(StandardsRegulationsPO params);
+    void updateStandardsRegulationsList(List<StandardsRegulationsPO> list);
 }

+ 342 - 73
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/SceneAccidentService.java

@@ -15,19 +15,16 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import feign.Response;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
-/*import org.apache.poi.util.IOUtils;
-import org.springframework.mock.web.MockMultipartFile;
+import org.apache.commons.fileupload.FileItem;
 import org.springframework.web.multipart.MultipartFile;
-import java.io.FileInputStream;
-import java.util.Date;*/
+import java.util.Date;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
 import javax.annotation.Resource;
 import java.io.File;
 import java.util.ArrayList;
-
 import java.util.List;
 
-
 @Slf4j
 @Service
 public class SceneAccidentService {
@@ -58,11 +55,7 @@ public class SceneAccidentService {
         JsonNode root = objMap.readTree(json);
         //判断场景名称唯一
         String sceneName = root.path("场景名称").asText();
-       Integer sceneNum = SceneAccidentMapper.querySceneAccidentByNmae(sceneName);
-        if (sceneNum > 0) {
-            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "该场景名称" + sceneName + "已存在,请检查");
-        }
-
+        String sceneId = SceneAccidentMapper.querySceneAccidentByNmae(sceneName);
         SceneAccidentPO sceneAccidentPO = null;
         sceneAccidentPO = sceneAccidentPO.builder()
                 .accidentId(StringUtil.getRandomUUID())
@@ -75,13 +68,9 @@ public class SceneAccidentService {
                 .conflictType(root.path("冲突类型").asText())
                 .sceneTime(root.path("时间").asText())
                 .sceneWeather(root.path("天气").asText())
+                .maxTime(root.path("max_time").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());
         }
@@ -97,11 +86,24 @@ public class SceneAccidentService {
         if (null != param.getVideoAddress() && !param.getVideoAddress().equals("")) {
             sceneAccidentPO.setVideoAddress(param.getVideoAddress());
         }
-        if (null != param.getVideoPreview() && !param.getVideoPreview().equals("")) {
-            sceneAccidentPO.setVideoPreview(param.getVideoPreview());
-        }
-        SceneAccidentMapper.saveSceneAccident(sceneAccidentPO);
+        if (ObjectUtil.isNull(sceneId)) {
+            // -------------------------------- 保存数据到 mysql --------------------------------
+            sceneAccidentPO.setCreateTime(TimeUtil.getNowForMysql());
+            sceneAccidentPO.setCreateUserId(AuthUtil.getCurrentUserId());
+            sceneAccidentPO.setModifyTime(TimeUtil.getNowForMysql());
 
+
+         /*   if (null != param.getVideoPreview() && !param.getVideoPreview().equals("")) {
+                sceneAccidentPO.setVideoPreview(param.getVideoPreview());
+            }*/
+            SceneAccidentMapper.saveSceneAccident(sceneAccidentPO);
+        } else {
+            // -------------------------------- 修改数据到 mysql --------------------------------
+            sceneAccidentPO.setAccidentId(sceneId);
+            sceneAccidentPO.setModifyTime(TimeUtil.getNowForMysql());
+            sceneAccidentPO.setModifyUserId(AuthUtil.getCurrentUserId());
+            SceneAccidentMapper.updateSceneAccident(sceneAccidentPO);
+        }
         return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
 
     }
@@ -146,6 +148,7 @@ public class SceneAccidentService {
                             .conflictType(root.path("冲突类型").asText())
                             .sceneTime(root.path("时间").asText())
                             .sceneWeather(root.path("天气").asText())
+                            .maxTime(root.path("max_time").asText())
                             .isDeleted("0")
                             .build();
                     // -------------------------------- 保存数据到 mysql --------------------------------
@@ -177,19 +180,19 @@ public class SceneAccidentService {
     }
 
     public List<SceneAccidentPO> querySceneAccidentList(SceneAccidentParam params) {
-        if(ObjectUtil.isNotNull(params.getSceneName()) || (params.getSelfDriving()!=null&&params.getSelfDriving().size()>0)||(params.getTargetDriving()!=null&&params.getTargetDriving().size()>0)
-        || (params.getSelfReaction()!=null&&params.getSelfReaction().size()>0)||(params.getConflictType()!=null&&params.getConflictType().size()>0)||(params.getConflictBehavior()!=null&&params.getConflictBehavior().size()>0)||(params.getIds()!=null&&params.getIds().length>0)){
+        if (ObjectUtil.isNotNull(params.getSceneName()) || (params.getSelfDriving() != null && params.getSelfDriving().size() > 0) || (params.getTargetDriving() != null && params.getTargetDriving().size() > 0)
+                || (params.getSelfReaction() != null && params.getSelfReaction().size() > 0) || (params.getConflictType() != null && params.getConflictType().size() > 0) || (params.getConflictBehavior() != null && params.getConflictBehavior().size() > 0) || (params.getIds() != null && params.getIds().length > 0)) {
             params.setXlk("1");
         }
-        if(ObjectUtil.isNotNull(params.getRearEndCollision()) ||ObjectUtil.isNotNull(params.getCutIn()) ||ObjectUtil.isNotNull(params.getDriveCurve()) ||ObjectUtil.isNotNull(params.getCarConflict())){
+        if (ObjectUtil.isNotNull(params.getRearEndCollision()) || ObjectUtil.isNotNull(params.getCutIn()) || ObjectUtil.isNotNull(params.getDriveCurve()) || ObjectUtil.isNotNull(params.getCarConflict())) {
             params.setBq(1);
         }
         List<SceneAccidentPO> list = null;
-        if((params.getXlk().equals("1")&&params.getBq().equals(1))||(params.getXlk().equals("0")&&params.getBq().equals(0))||(params.getXlk().equals("1")&&params.getBq().equals(0))){
+        if ((params.getXlk().equals("1") && params.getBq().equals(1)) || (params.getXlk().equals("0") && params.getBq().equals(0)) || (params.getXlk().equals("1") && params.getBq().equals(0))) {
             list = SceneAccidentMapper.querySceneAccidentList(params);
         }/*else if(params.getXlk().equals("1")&&params.getBq().equals("0")){
             list = SceneAccidentMapper.querySceneAccidentListByXlk(params);
-        }*/else if(params.getXlk().equals("0")&&params.getBq().equals(1)){
+        }*/ else if (params.getXlk().equals("0") && params.getBq().equals(1)) {
             list = SceneAccidentMapper.querySceneAccidentListByBq(params);
         }
 
@@ -249,31 +252,31 @@ public class SceneAccidentService {
             params.setAllIds(listA);
         }*/
 
-        for (SceneAccidentPO po: list) {
-            if(po.getConflictBehavior().indexOf("追尾")>-1){
+        for (SceneAccidentPO po : list) {
+            if (po.getConflictBehavior().indexOf("追尾") > -1) {
                 po.setLabel("追尾");
             }
-            if(po.getTargetDriving().indexOf("切入")>-1){
-                if(ObjectUtil.isNull(po.getLabel())){
+            if (po.getTargetDriving().indexOf("切入") > -1) {
+                if (ObjectUtil.isNull(po.getLabel())) {
                     po.setLabel("目标车切入");
-                }else{
-                    po.setLabel(po.getLabel()+",目标车切入");
+                } else {
+                    po.setLabel(po.getLabel() + ",目标车切入");
                 }
 
             }
-            if(po.getTargetDriving().indexOf("沿弯道行驶")>-1){
-                if(ObjectUtil.isNull(po.getLabel())){
+            if (po.getTargetDriving().indexOf("沿弯道行驶") > -1) {
+                if (ObjectUtil.isNull(po.getLabel())) {
                     po.setLabel("目标车沿弯道行驶");
-                }else{
-                    po.setLabel(po.getLabel()+",目标车沿弯道行驶");
+                } else {
+                    po.setLabel(po.getLabel() + ",目标车沿弯道行驶");
                 }
 
             }
-            if(po.getConflictType().indexOf("机动车-机动车")>-1){
-                if(ObjectUtil.isNull(po.getLabel())){
+            if (po.getConflictType().indexOf("机动车-机动车") > -1) {
+                if (ObjectUtil.isNull(po.getLabel())) {
                     po.setLabel("机动车-机动车冲突");
-                }else{
-                    po.setLabel(po.getLabel()+",机动车-机动车冲突");
+                } else {
+                    po.setLabel(po.getLabel() + ",机动车-机动车冲突");
                 }
             }
         }
@@ -289,10 +292,9 @@ public class SceneAccidentService {
         //systemUserSceneService.deleteSystemUserSceneBySceneId(params.getAccidentId());
     }
 
-
-/*    *//**
+    /*
      * 获取交通事故场景数据:
-     *//*
+     */
     @SneakyThrows
     public ResponseBodyVO<String> saveAll(SceneAccidentParam param) {
         //1 获取所有目录下所有场景
@@ -305,8 +307,9 @@ public class SceneAccidentService {
 
         String fileName = null;
         try {
-            List<SceneAccidentPO> list=new ArrayList<SceneAccidentPO>();
-                Integer wJNum=1;
+            List<SceneAccidentPO> list = new ArrayList<SceneAccidentPO>();
+            List<SceneAccidentPO> updateList = new ArrayList<SceneAccidentPO>();
+            Integer wJNum = 1;
             for (File scene1 : scenes) {
                 String dataUrlNew = scene1.getAbsolutePath();
                 File[] scenes1 = FileUtil.getDirectory(dataUrlNew).listFiles();
@@ -317,15 +320,19 @@ public class SceneAccidentService {
                 Integer nowTime = TimeUtil.getRq(new Date(), 0);
                 for (File scene : scenes1) {
                     String dataUrl = scene.getAbsolutePath();
-                   // File pdfFile = new File(dataUrl);
-                    fileName= scene.getName();
+                    // File pdfFile = new File(dataUrl);
+                    fileName = scene.getName();
                     //文件上传测试1  遍历拿到的文件scene
-                    FileInputStream inputStream = new FileInputStream(scene);
+                   /* FileInputStream inputStream = new FileInputStream(scene);
                     MultipartFile multipartFile = new MockMultipartFile("file", fileName, "text/plain", IOUtils.toByteArray(inputStream));
+                 */
+                    FileItem fileItem = XmlParse.createFileItem(scene.getPath(), scene.getName());
+                    MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
+                    fileItem.delete();
                     //调用文件上传方法
-                   String  nowNum=nowTime+""+wJNum;
-                    String  objectName = "交通事故场景1111/" + nowNum  + "/" + fileName;
-                    ResponseBodyVO<String> respon= fileDownService.upload(multipartFile, objectName);
+                    String nowNum = nowTime + "" + wJNum;
+                    String objectName = "交通事故场景1111/" + nowNum + "/" + fileName;
+                    ResponseBodyVO<String> respon = fileDownService.upload(multipartFile, objectName);
 
                     if (dataUrl.indexOf(".json") != -1) {
                         // -------------------------------- 读取结构化数据文件 --------------------------------
@@ -334,11 +341,8 @@ public class SceneAccidentService {
                         ObjectMapper objMap = new ObjectMapper();
                         JsonNode root = objMap.readTree(json);
                         //判断是否存在
-                        String sceneName=root.path("场景名称").asText();
-                        Integer sceneNum = SceneAccidentMapper.querySceneAccidentByNmae(root.path("场景名称").asText());
-                        if (sceneNum > 0) {
-                            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "该场景名称" + sceneName + "已存在,请检查");
-                        }
+                        String sceneName = root.path("场景名称").asText();
+                        String sceneId = SceneAccidentMapper.querySceneAccidentByNmae(root.path("场景名称").asText());
                         sceneAccidentPO = sceneAccidentPO.builder()
                                 .accidentId(StringUtil.getRandomUUID())
                                 .sceneName(root.path("场景名称").asText())
@@ -350,34 +354,299 @@ public class SceneAccidentService {
                                 .conflictType(root.path("冲突类型").asText())
                                 .sceneTime(root.path("时间").asText())
                                 .sceneWeather(root.path("天气").asText())
+                                .maxTime(root.path("max_time").asText())
                                 .isDeleted("0")
                                 .build();
                         // -------------------------------- 保存数据到 mysql --------------------------------
-                        sceneAccidentPO.setCreateTime(TimeUtil.getNowForMysql());
-                        sceneAccidentPO.setCreateUserId(AuthUtil.getCurrentUserId());
-                        sceneAccidentPO.setModifyTime(TimeUtil.getNowForMysql());
-                    }
-                    //插入地址
-                    if (null != objectName && objectName.indexOf(".json")!=-1) {
-                        sceneAccidentPO.setJsonAddress(objectName);
-                    }else if (null != objectName && objectName.indexOf(".xml")!=-1) {
-                        sceneAccidentPO.setXmlAddress(objectName);
-                    }else if (null != objectName && objectName.indexOf(".xodr")!=-1) {
-                        sceneAccidentPO.setXodrAddress(objectName);
-                    }else if (null != objectName && objectName.indexOf(".osgb")!=-1) {
-                        sceneAccidentPO.setOsgbAddress(objectName);
-                    }else if (null != objectName && objectName.indexOf(".mp4")!=-1) {
-                        sceneAccidentPO.setVideoAddress(objectName);
+                        //插入地址
+                        if (null != objectName && objectName.indexOf(".json") != -1) {
+                            sceneAccidentPO.setJsonAddress(objectName);
+                        } else if (objectName.indexOf(".xml") != -1 || objectName.indexOf(".xosc") != -1) {
+                            sceneAccidentPO.setXmlAddress(objectName);
+                        } else if (null != objectName && objectName.indexOf(".xodr") != -1) {
+                            sceneAccidentPO.setXodrAddress(objectName);
+                        } else if (null != objectName && objectName.indexOf(".osgb") != -1) {
+                            sceneAccidentPO.setOsgbAddress(objectName);
+                        } else if (null != objectName && objectName.indexOf(".mp4") != -1) {
+                            sceneAccidentPO.setVideoAddress(objectName);
+                        }
+
+                        if (ObjectUtil.isNull(sceneId)) {
+                            sceneAccidentPO.setCreateTime(TimeUtil.getNowForMysql());
+                            sceneAccidentPO.setCreateUserId(AuthUtil.getCurrentUserId());
+                            sceneAccidentPO.setModifyTime(TimeUtil.getNowForMysql());
+                            // return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "该场景名称" + sceneName + "已存在,请检查");
+                        } else {
+                            sceneAccidentPO.setAccidentId(sceneId);
+                            sceneAccidentPO.setModifyUserId(AuthUtil.getCurrentUserId());
+                            sceneAccidentPO.setModifyTime(TimeUtil.getNowForMysql());
+
+
+                        }
                     }
                 }
-            list.add(sceneAccidentPO);
+                if (ObjectUtil.isNull(sceneAccidentPO.getModifyUserId())) {
+                    list.add(sceneAccidentPO);
+                } else {
+                    updateList.add(sceneAccidentPO);
+                }
                 wJNum++;
             }
-            //SceneAccidentMapper.saveSceneAccident(sceneAccidentPO);
+            if (ObjectUtil.isNotNull(list)) {
+                SceneAccidentMapper.saveSceneAccidentList(list);
+            }
+            if (ObjectUtil.isNotNull(updateList)) {
+                SceneAccidentMapper.updateSceneAccidentList(updateList);
+            }
+            return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
         } catch (Exception e) {
+            e.printStackTrace();
             return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "该场景文件" + fileName + "解析出错");
         }
-        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
 
+    }
+
+    /*
+     * 获取交通事故场景数据:最新的自己获取路径
+     */
+    @SneakyThrows
+    public ResponseBodyVO<String> saveAllNew(String dataUrl1) {
+        //1 获取所有目录下所有场景
+        // String dataUrl0 = "D:\\自然驾驶场景样例";     // 场景数据根路径
+        String dataUrl0 = "D:\\自然驾驶场景样例\\2021\\20210806";
+        File[] scenes = FileUtil.getDirectory(dataUrl0).listFiles();
+        if (scenes == null) {
+            throw new RuntimeException("目录:" + dataUrl0 + " 下没有文件!");
+        }
+        try {
+            List<SceneAccidentPO> list = new ArrayList<SceneAccidentPO>();
+            List<SceneAccidentPO> updateList = new ArrayList<SceneAccidentPO>();
+            for (File scene1 : scenes) {
+                String dataUrlNew = scene1.getAbsolutePath();
+                File[] scenes1 = FileUtil.getDirectory(dataUrlNew).listFiles();
+                if (scenes1 == null) {
+                    throw new RuntimeException("目录:" + dataUrlNew + " 下没有文件!");
+                }
+
+                for (File scene : scenes1) {
+                    //判断是否为场景文件夹
+                    if (scene.isDirectory()) {
+                        String dataUrlNew1 = scene.getAbsolutePath();
+                        File[] scenes2 = FileUtil.getDirectory(dataUrlNew1).listFiles();
+                        if (scenes2 == null) {
+                            throw new RuntimeException("目录:" + dataUrlNew1 + " 下没有文件!");
+                        }
+                        SceneAccidentPO sceneAccidentPO = null;
+                        String isUpdate = "";
+                        for (File scene3 : scenes2) {
+                            String dataUrl = scene3.getAbsolutePath();
+                            if (dataUrl.indexOf(".json") != -1) {
+                                // -------------------------------- 读取结构化数据文件 --------------------------------
+                                // -------------------------------- label.json --------------------------------
+                                String json = FileUtil.readFile(dataUrl);
+                                ObjectMapper objMap = new ObjectMapper();
+                                JsonNode root = objMap.readTree(json);
+                                //判断是否存在
+                                String sceneName = root.path("场景名称").asText();
+                                String sceneId = SceneAccidentMapper.querySceneAccidentByNmae(sceneName);
+                                sceneAccidentPO = sceneAccidentPO.builder()
+                                        .accidentId(StringUtil.getRandomUUID())
+                                        .sceneName(sceneName)
+                                        .scenceResume(root.path("场景描述").asText())
+                                        .selfDriving(root.path("自车驾驶行为").asText())
+                                        .targetDriving(root.path("目标驾驶行为").asText())
+                                        .selfReaction(root.path("自车反应行为").asText())
+                                        .conflictBehavior(root.path("冲突行为").asText())
+                                        .conflictType(root.path("冲突类型").asText())
+                                        .sceneTime(root.path("时间").asText())
+                                        .sceneWeather(root.path("天气").asText())
+                                        .maxTime(root.path("max_time").asText())
+                                        .isDeleted("0")
+                                        .build();
+
+                                String xodrAderss = root.path("xodr").asText();
+                                String osgbAderss = root.path("osgb").asText();
+                                sceneAccidentPO.setOsgbAddress(dataUrl0 + osgbAderss);
+                                sceneAccidentPO.setXodrAddress(dataUrl0 + xodrAderss);
+                                // -------------------------------- 保存数据到 mysql --------------------------------
+                                if (ObjectUtil.isNull(sceneId)) {
+                                    isUpdate = "0";
+                                    sceneAccidentPO.setCreateTime(TimeUtil.getNowForMysql());
+                                    sceneAccidentPO.setCreateUserId(AuthUtil.getCurrentUserId());
+                                    sceneAccidentPO.setModifyTime(TimeUtil.getNowForMysql());
+                                    // return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "该场景名称" + sceneName + "已存在,请检查");
+                                } else {
+                                    isUpdate = "1";
+                                    sceneAccidentPO.setAccidentId(sceneId);
+                                    sceneAccidentPO.setModifyUserId(AuthUtil.getCurrentUserId());
+                                    sceneAccidentPO.setModifyTime(TimeUtil.getNowForMysql());
+
+                                }
+                            }
+                            //插入地址
+                            if (dataUrl.indexOf(".json") != -1) {
+                                sceneAccidentPO.setJsonAddress(dataUrl);
+                            } else if (dataUrl.indexOf(".xml") != -1 || dataUrl.indexOf(".xosc") != -1) {
+                                sceneAccidentPO.setXmlAddress(dataUrl);
+                            } /*else if (dataUrl.indexOf(".xodr") != -1) {
+                        sceneAccidentPO.setXodrAddress(dataUrl);
+                    } else if (dataUrl.indexOf(".osgb") != -1) {
+                        sceneAccidentPO.setOsgbAddress(dataUrl);
+                    }*/ else if (dataUrl.indexOf("simulation.mp4") != -1) {
+                                sceneAccidentPO.setVideoAddress(dataUrl);
+                            } else if (dataUrl.indexOf("simulation.mp4") == -1 && dataUrl.indexOf(".mp4") != -1) {
+                                sceneAccidentPO.setVideoPreview(dataUrl);
+                            }
+
+                        }
+                        if (isUpdate.equals("0")) {
+                            list.add(sceneAccidentPO);
+                        } else if (isUpdate.equals("1")) {
+                            updateList.add(sceneAccidentPO);
+                        }
+
+                    }
+
+                }
+
+            }
+            if (ObjectUtil.isNotNull(list)) {
+                SceneAccidentMapper.saveSceneAccidentList(list);
+            }
+            if (ObjectUtil.isNotNull(updateList)) {
+                SceneAccidentMapper.updateSceneAccidentList(updateList);
+            }
+            return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "该场景文件" + dataUrl0 + "解析出错");
+        }
+
+
+    }
+
+/*    public static FileItem createFileItem(String filePath, String fileName){
+        String fieldName = "file";
+        FileItemFactory factory = new DiskFileItemFactory();
+        FileItem item = factory.createItem(fieldName, "text/plain", false,fileName);
+        File newfile = new File(filePath);
+        int bytesRead = 0;
+        byte[] buffer = new byte[8192];
+        try (FileInputStream fis = new FileInputStream(newfile);
+             OutputStream os = item.getOutputStream()) {
+            while ((bytesRead = fis.read(buffer, 0, 8192))!= -1)
+            {
+                os.write(buffer, 0, bytesRead);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return item;
     }*/
+
+
+    /**
+     * 获取交通事故场景数据:
+     */
+    public ResponseBodyVO<String> importMiNio(MinioParameter parms) {
+
+        MinioParameter MI = new MinioParameter();
+
+        MI.setObjectName(parms.getObjectName());
+        List<String>  errList=new ArrayList<>();
+        List<String> list = fileDownService.listDeepOne(MI).getInfo();
+        String OsgbPath=null;
+        String XodrPath=null;
+        for (String filePath:list) {
+            if (filePath.indexOf("/OSGB") != -1) {
+                OsgbPath = filePath;
+            } else if (filePath.indexOf("/XODR") != -1) {
+                XodrPath = filePath;
+            }
+        }
+        for (String filePath:list) {
+            if(filePath.indexOf("/Scenarios")!=-1){
+                MI.setObjectName(filePath);
+                List<String> listScene = fileDownService.listDeepOne(MI).getInfo();
+                for (String scenePath:listScene) {
+
+                    try {
+                        MI.setObjectName(scenePath);
+                        List<String> listAderss = fileDownService.list(MI).getInfo();
+                        SceneAccidentPO sceneAccidentPO = null;
+                        String isupdate = null;
+                        for (String adress : listAderss) {
+                            if (adress.indexOf(".json") != -1) {
+                                MI.setObjectName(adress);
+                                Response download = fileDownService.download(MI);
+                                // -------------------------------- label.json --------------------------------
+                                String json = download.body().toString();
+                                ObjectMapper objMap = new ObjectMapper();
+                                JsonNode root = objMap.readTree(json);
+                                //判断场景名称唯一
+                                String sceneName = root.path("场景名称").asText();
+                                String sceneId = SceneAccidentMapper.querySceneAccidentByNmae(sceneName);
+                                String osgbAdress = OsgbPath + "/" + root.path("osgb").asText();
+                                String xodrAdress = XodrPath + "/" + root.path("xodr").asText();
+                                sceneAccidentPO = sceneAccidentPO.builder()
+                                        .accidentId(StringUtil.getRandomUUID())
+                                        .sceneName(sceneName)
+                                        .scenceResume(root.path("场景描述").asText())
+                                        .selfDriving(root.path("自车驾驶行为").asText())
+                                        .targetDriving(root.path("目标驾驶行为").asText())
+                                        .selfReaction(root.path("自车反应行为").asText())
+                                        .conflictBehavior(root.path("冲突行为").asText())
+                                        .conflictType(root.path("冲突类型").asText())
+                                        .sceneTime(root.path("时间").asText())
+                                        .sceneWeather(root.path("天气").asText())
+                                        .maxTime(root.path("max_time").asText())
+                                        .xodrAddress(xodrAdress)
+                                        .osgbAddress(osgbAdress)
+                                        .isDeleted("0")
+                                        .build();
+                                if (ObjectUtil.isNull(sceneId)) {
+                                    isupdate = "0";
+                                } else {
+                                    isupdate = "1";
+                                    sceneAccidentPO.setAccidentId(sceneId);
+                                }
+
+                            }
+                            if (adress.indexOf(".json") != -1) {
+                                sceneAccidentPO.setJsonAddress(adress);
+                            } else if (adress.indexOf(".xml") != -1 || adress.indexOf(".xosc") != -1) {
+                                sceneAccidentPO.setXmlAddress(adress);
+                            } else if (adress.indexOf(".xodr") != -1) {
+                                sceneAccidentPO.setXodrAddress(adress);
+                            } else if (adress.indexOf(".osgb") != -1) {
+                                sceneAccidentPO.setOsgbAddress(adress);
+                            } else if (adress.indexOf(".mp4") != -1) {
+                                sceneAccidentPO.setVideoAddress(adress);
+                            }
+
+                        }
+                        if (isupdate.equals("0")) {
+                            // -------------------------------- 保存数据到 mysql --------------------------------
+                            sceneAccidentPO.setCreateTime(TimeUtil.getNowForMysql());
+                            sceneAccidentPO.setCreateUserId(AuthUtil.getCurrentUserId());
+                            sceneAccidentPO.setModifyTime(TimeUtil.getNowForMysql());
+                            SceneAccidentMapper.saveSceneAccident(sceneAccidentPO);
+                        } else if (isupdate.equals("1")) {
+                            // -------------------------------- 修改数据到 mysql --------------------------------
+                            sceneAccidentPO.setModifyTime(TimeUtil.getNowForMysql());
+                            sceneAccidentPO.setModifyUserId(AuthUtil.getCurrentUserId());
+                            SceneAccidentMapper.updateSceneAccident(sceneAccidentPO);
+                        }
+                    }catch (Exception e){
+                        errList.add(scenePath);
+                }
+                }
+            }
+
+        }
+
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+
+    }
+
 }

+ 232 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/SceneGeneralExampleService.java

@@ -0,0 +1,232 @@
+package com.css.simulation.resource.scene.service;
+
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.scene.SceneGeneralTemplateParam;
+import api.common.pojo.po.scene.SceneGeneralDataPO;
+import api.common.pojo.po.scene.SceneGeneralExamplePO;
+import api.common.pojo.po.scene.SceneGeneralTemplatePO;
+import api.common.pojo.vo.scene.SceneGeneralTemplateMbVO;
+import api.common.pojo.vo.scene.SceneGeneralTemplateVO;
+import api.common.util.*;
+import com.css.simulation.resource.common.utils.AuthUtil;
+import com.css.simulation.resource.scene.mapper.SceneGeneralDataMapper;
+import com.css.simulation.resource.scene.mapper.SceneGeneralExampleMapper;
+import com.css.simulation.resource.scene.mapper.SceneGeneralTemplateMapper;
+import com.css.simulation.resource.system.service.DictService;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.poi.ss.usermodel.*;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.io.FileInputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.*;
+
+@Slf4j
+@Service
+public class SceneGeneralExampleService {
+
+    @Resource
+    SceneGeneralExampleMapper exampleMapper;
+    @Resource
+    SceneGeneralTemplateMapper templateMapper;
+    @Resource
+    SceneGeneralDataMapper dataMapper;
+    @Resource
+    SceneGeneralTemplateService sceneGeneralTemplateService;
+
+       @SneakyThrows
+       public  ResponseBodyVO querySceneGeneralExampleById(String id) {
+
+        SceneGeneralExamplePO examplePo= exampleMapper.querySceneGeneralExampleById(id);
+        if(ObjectUtil.isNotNull(examplePo)){
+            SceneGeneralTemplatePO templatePO=templateMapper.querySceneGeneralTemplateById(examplePo.getTemplateId());
+            if(ObjectUtil.isNotNull(templatePO)&&templatePO.getIsDeleted().equals("1")){
+                examplePo.setIsTure("1");
+            }
+        }
+
+
+           //转换为vo
+           SceneGeneralTemplatePO po=new SceneGeneralTemplatePO();
+           BeanUtils.copyProperties(examplePo, po);
+           SceneGeneralTemplateVO vo=new SceneGeneralTemplateVO();
+           BeanUtils.copyProperties(po, vo);
+           List<SceneGeneralTemplateMbVO>  listMb=new ArrayList<>();
+           if(po.getObsStartX().indexOf(";")!=-1){
+               listMb= sceneGeneralTemplateService.spliceVo(po);
+           }else{
+               SceneGeneralTemplateMbVO  mbVO=new SceneGeneralTemplateMbVO();
+               BeanUtils.copyProperties(po, mbVO);
+               mbVO.setGeneralizationType(po.getGeneralizationType());
+               listMb.add(mbVO);
+           }
+           vo.setListMb(listMb);
+
+
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS, vo);
+
+    }
+
+    public  ResponseBodyVO queryType() {
+
+        List<String> list= templateMapper.queryType();
+
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS, list);
+
+    }
+
+    @SneakyThrows
+    public  ResponseBodyVO saveSceneGeneralExample(SceneGeneralTemplateVO vo) {
+          /* //测试用
+        SceneGeneralTemplatePO po1=templateMapper.querySceneGeneralTemplateById(po.getTemplateId());
+        BeanUtils.copyProperties(po1, po);*/
+
+        //查询泛化标志位并赋值
+        SceneGeneralTemplatePO poV= templateMapper.querySceneGeneralTemplateById(vo.getTemplateId());
+        SceneGeneralExamplePO po=new SceneGeneralExamplePO();
+        //转换为vo
+        BeanUtils.copyProperties(vo, po);
+        po.setGeneralizationType(poV.getGeneralizationType());
+        po.setEgoVelocityStatus(poV.getEgoVelocityStatus());
+        po.setEgoTrajectory(poV.getEgoTrajectory());
+        po.setObsVelocityStatus(poV.getObsVelocityStatus());
+        po.setObsTrajectory(poV.getObsTrajectory());
+        //加个唯一值,确定文件夹唯一
+        po.setUuId(StringUtil.getRandomUUID());
+
+        //合并目标物
+        List<SceneGeneralTemplateMbVO> listMb=vo.getListMb();
+
+        String  obsStartX= "";
+        String  obsStartY="";;
+        String  obsStartVelocity= "";
+        String  obsLateralAcceleration="";
+        String  obsLongitudinalAcceleration= "";
+        String  obsHeadingAngleRel= "";
+        String  obsDurationTime= "";
+        String  obsVelocityTime= "";
+        String  obsTrailTime= "";
+
+        int a=0;
+        for (SceneGeneralTemplateMbVO mbVo: listMb) {
+            if(a<1){
+                obsStartX=mbVo.getObsStartX();
+                obsStartY=mbVo.getObsStartY();
+                obsStartVelocity= mbVo.getObsStartVelocity();
+                obsLateralAcceleration=mbVo.getObsLateralAcceleration();
+                obsLongitudinalAcceleration=mbVo.getObsLongitudinalAcceleration();
+                obsHeadingAngleRel= mbVo.getObsHeadingAngleRel();
+                obsDurationTime= mbVo.getObsDurationTime();
+                obsVelocityTime=mbVo.getObsVelocityTime();
+                obsTrailTime=mbVo.getObsTrailTime();
+            }else{
+                obsStartX=obsStartX+";"+mbVo.getObsStartX();
+                obsStartY=obsStartY+";"+mbVo.getObsStartY();
+                obsStartVelocity=obsStartVelocity+";"+mbVo.getObsStartVelocity();
+                obsLateralAcceleration=obsLateralAcceleration+";"+mbVo.getObsLateralAcceleration();
+                obsLongitudinalAcceleration=obsLongitudinalAcceleration+";"+mbVo.getObsLongitudinalAcceleration();
+                obsHeadingAngleRel=obsHeadingAngleRel +";"+mbVo.getObsHeadingAngleRel();
+                obsDurationTime=obsDurationTime +";"+mbVo.getObsDurationTime();
+                obsVelocityTime=obsVelocityTime+";"+mbVo.getObsVelocityTime();
+                obsTrailTime=obsTrailTime+";"+mbVo.getObsTrailTime();
+            }
+            a++;
+        }
+
+        po.setObsStartX(obsStartX);
+        po.setObsStartY(obsStartY);
+        po.setObsStartVelocity(obsStartVelocity);
+        po.setObsLateralAcceleration(obsLateralAcceleration);
+        po.setObsLongitudinalAcceleration(obsLongitudinalAcceleration);
+        po.setObsHeadingAngleRel(obsHeadingAngleRel);
+        po.setObsDurationTime(obsDurationTime);
+        po.setObsVelocityTime(obsVelocityTime);
+        po.setObsTrailTime(obsTrailTime);
+
+        //远程调用接口
+        Map map=  beanToMap(po);
+        RequestConfig requestConfig = RequestConfig.custom()
+                .setSocketTimeout(6*10*1000)
+                .setConnectTimeout(6*10*1000)
+                .setConnectionRequestTimeout(6*10*1000)
+                .setRedirectsEnabled(false)
+                .setExpectContinueEnabled(false)
+                .build();
+
+        String post = HttpUtil.post(HttpUtil.getHttpClient(), requestConfig, "http://47.94.105.148:5000/test_1.0", null, map);
+        JsonNode params = JsonUtil.readTree(post).get("params");
+        // 实例化 ObjectMapper 对象
+        ObjectMapper objectMapper = new ObjectMapper();
+        String newjson = objectMapper.writeValueAsString(params);
+        List<SceneGeneralDataPO>  list=JsonUtil.jsonToList(newjson,SceneGeneralDataPO.class);
+
+        String sceneGeneralizationIds=null;
+        //生成指标id
+        String sublistId=StringUtil.getRandomUUID();
+        //生成实例主键id
+        String exampleId=StringUtil.getRandomUUID();
+        for (SceneGeneralDataPO datePo:list) {
+            //生成主键id
+            String dataId=StringUtil.getRandomUUID();
+            datePo.setId(dataId);
+            datePo.setCreateTime(TimeUtil.getNowForMysql());
+            datePo.setCreateUserId(AuthUtil.getCurrentUserId());
+            datePo.setModifyTime(TimeUtil.getNowForMysql());
+            datePo.setIsDeleted("0");
+            datePo.setSceneId(po.getSceneId());
+            datePo.setTemplateId(po.getId());
+            datePo.setExampleId(exampleId);
+            datePo.setSublistId(sublistId);
+            if(ObjectUtil.isNotNull(sceneGeneralizationIds)){
+                sceneGeneralizationIds=  sceneGeneralizationIds+","+dataId;
+            }else{
+                sceneGeneralizationIds=dataId;
+            }
+        }
+        dataMapper.saveSceneGeneralDataAll(list);
+       // po.setTemplateId(po.getId());  //前端需要帮忙赋值
+        po.setId(exampleId);
+        po.setSublistId(sublistId);
+        po.setCreateTime(TimeUtil.getNowForMysql());
+        po.setSceneId(po.getSceneId());
+        po.setCreateUserId(AuthUtil.getCurrentUserId());
+        po.setModifyTime(TimeUtil.getNowForMysql());
+        po.setIsDeleted("0");
+        //po.setGeneralizationType(generalizationType);
+        exampleMapper.saveSceneGeneralExample(po);
+        Map map1=new HashMap();
+        map1.put("exampleId",exampleId);//实例id
+        map1.put("templateId",po.getTemplateId()); //模板id
+        map1.put("sceneGeneralizationIds",sceneGeneralizationIds);//泛化场景数组
+        map1.put("sublistId",sublistId); //指标id
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS, map1);
+
+    }
+
+    /**
+     * 对象转Map
+     * @param object
+     * @return
+     * @throws IllegalAccessException
+     */
+    public  Map beanToMap(Object object) throws IllegalAccessException {
+        Map<String, Object> map = new HashMap<String, Object>();
+        Field[] fields = object.getClass().getDeclaredFields();
+        for (Field field : fields) {
+            field.setAccessible(true);
+            map.put(field.getName(), field.get(object));
+        }
+        return map;
+    }
+
+}

+ 290 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/SceneGeneralTemplateService.java

@@ -0,0 +1,290 @@
+package com.css.simulation.resource.scene.service;
+
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.scene.SceneGeneralTemplateParam;
+import api.common.pojo.vo.scene.SceneGeneralTemplateMbVO;
+import api.common.pojo.vo.scene.SceneGeneralTemplateVO;
+import api.common.util.JsonUtil;
+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.scene.mapper.SceneGeneralTemplateMapper;
+import api.common.pojo.po.scene.SceneGeneralTemplatePO;
+import com.css.simulation.resource.system.service.DictService;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.usermodel.*;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.io.FileInputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.*;
+
+@Slf4j
+@Service
+public class SceneGeneralTemplateService {
+
+    @Resource
+    SceneGeneralTemplateMapper mapper;
+    @Autowired
+    DictService dictService;
+
+    /**
+     * 泛化模板导入:
+     *//*
+    @SneakyThrows
+    public ResponseBodyVO<String> saveSceneGeneralTemplate1() {
+            //同时支持Excel 2003、2007
+            File excelFile = new File("D:\\配置参数表样例0415.xlsx"); //创建文件对象
+            String fileName=    excelFile.getName();//文件名
+        //  String fileName=   excelFile.getAbsolutePath();//文件地址
+            // File excelFile = new File("D:\\0414.xlsx"); //创建文件对象
+            FileInputStream is = new FileInputStream(excelFile); //文件流
+            Workbook workbook = WorkbookFactory.create(is); //这种方式 Excel 2003/2007/2010 都是可以处理的
+            int sheetCount = workbook.getNumberOfSheets();  //Sheet的数量
+        List<SceneGeneralTemplatePO> list=new ArrayList<>();
+        //遍历每个Sheet
+            for (int s = 0; s < sheetCount; s++) {
+                Sheet sheet = workbook.getSheetAt(s);
+              // String aqq=sheet.getSheetName();  //文件Sheet的名称
+                int rowCount = sheet.getPhysicalNumberOfRows(); //获取总行数
+                //效验sheet页是否符合标准
+                Cell ce00 = sheet.getRow(0).getCell(0);
+                ce00.setCellType(Cell.CELL_TYPE_STRING);
+                 String   c00Value = ce00.getStringCellValue();
+                 System.out.println("测试是否符合---"+c00Value);
+                 if(c00Value!=null&&c00Value.equals("场景编号")) {
+                     //遍历每一行
+                     for (int r = 0; r < rowCount; r++) {
+                         Row row = sheet.getRow(r);
+                         int cellCount = row.getPhysicalNumberOfCells(); //获取总列数
+                         SceneGeneralTemplatePO po = new SceneGeneralTemplatePO();
+                         Field[] field = po.getClass().getDeclaredFields();
+                         //遍历每一个单元格
+                         for (int c = 0; c < cellCount; c++) {
+                             int a = c + 1;
+                             Cell cell = row.getCell(c);
+                             String cellValue = null;
+                             //在读取单元格内容前,设置所有单元格中内容都是字符串类型
+                             cell.setCellType(Cell.CELL_TYPE_STRING);
+                             //按照字符串类型读取单元格内数据
+                             cellValue = cell.getStringCellValue();
+                             *//*在这里可以对每个单元格中的值进行二次操作转化*//*
+                             //    System.out.print(cellValue + "    ");
+                             if (r > 0) {
+                                 //获取属性的名字
+                                 String name = field[a].getName();
+                                 //将属性名的第一位字母大写
+                                 name = name.substring(0, 1).toUpperCase() + name.substring(1);
+                                 //调用setter方法设属性值
+                                 Class[] parameterTypes = new Class[1];
+                                 parameterTypes[0] = field[a].getType();
+                                 Method getOrSet = po.getClass().getDeclaredMethod("set" + name, parameterTypes);
+                                 getOrSet.invoke(po, cellValue);
+                             }
+                         }
+                         System.out.println();
+                         if (r > 0) {
+                             po.setCreateTime(TimeUtil.getNowForMysql());
+                             po.setCreateUserId(AuthUtil.getCurrentUserId());
+                             po.setModifyUserId(AuthUtil.getCurrentUserId());
+                             po.setModifyTime(TimeUtil.getNowForMysql());
+                             po.setIsDeleted("0");
+                             po.setId(StringUtil.getRandomUUID());
+                             po.setFileName(fileName);
+                             list.add(po);
+                         }
+                     }
+                 }
+            }
+            if(ObjectUtil.isNotNull(list)){
+                mapper.deleteSceneGeneralTemplateAll(list.get(0));
+                mapper.saveSceneGeneralTemplateAll(list);
+                return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+            }
+        return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, fileName+"模板解析失败,请检查模板");
+    }
+
+*/
+    /**
+     * 泛化模板导入:
+     */
+    @SneakyThrows
+    public ResponseBodyVO<String> saveSceneGeneralTemplate(File excelFile,String version) {
+        FileInputStream is = new FileInputStream(excelFile); //文件流
+        Workbook workbook = WorkbookFactory.create(is); //这种方式 Excel 2003/2007/2010 都是可以处理的
+        int sheetCount = workbook.getNumberOfSheets();  //Sheet的数量
+        List<SceneGeneralTemplatePO> list=new ArrayList<>();
+        List<String> fileNameAll=new ArrayList<>();
+        //遍历每个Sheet
+        for (int s = 0; s < sheetCount; s++) {
+            Sheet sheet = workbook.getSheetAt(s);
+            String sheetName = sheet.getSheetName();  //文件Sheet的名称
+            //验证模板名称是否正确  filrName为字典中的类别名
+           /* Map<String, String> map = dictService.getDictMapByType("fileName");
+            String fileName = map.get(sheetName);
+            if (ObjectUtil.isNotNull(fileName)) {*/
+            int rowCount = sheet.getPhysicalNumberOfRows(); //获取总行数
+            //效验sheet页是否符合标准
+            Cell ce00 = sheet.getRow(0).getCell(0);
+            //ce00.setCellType(CellType.STRING);
+            String c00Value = ce00.getStringCellValue();
+            if (c00Value != null && c00Value.equals("场景编号")) {
+                //遍历每一行
+                for (int r = 1; r < rowCount; r++) {
+                    Row row = sheet.getRow(r);
+                    int cellCount = row.getPhysicalNumberOfCells(); //获取总列数
+                    SceneGeneralTemplatePO po = new SceneGeneralTemplatePO();
+                    Field[] field = po.getClass().getDeclaredFields();
+                    //遍历每一个单元格
+                    for (int c = 0; c < cellCount; c++) {
+                        int a = c + 1;
+                        Cell cell = row.getCell(c);
+                        String cellValue = null;
+                        if (r > 0 && c == 3) {
+                            Date aaa = cell.getDateCellValue();
+                            cellValue = TimeUtil.getToStringDate(aaa, 4);
+                        } else {
+                            //在读取单元格内容前,设置所有单元格中内容都是字符串类型
+                            cell.setCellType(CellType.STRING);
+                            //按照字符串类型读取单元格内数据
+                            cellValue = cell.getStringCellValue();
+                        }
+                        /*在这里可以对每个单元格中的值进行二次操作转化*/
+                        //    System.out.print(cellValue + "    ");
+                        if (r > 0) {
+                            //获取属性的名字
+                            String name = field[a].getName();
+                            //将属性名的第一位字母大写
+                            name = name.substring(0, 1).toUpperCase() + name.substring(1);
+                            //调用setter方法设属性值
+                            Class[] parameterTypes = new Class[1];
+                            parameterTypes[0] = field[a].getType();
+                            Method getOrSet = po.getClass().getDeclaredMethod("set" + name, parameterTypes);
+                            getOrSet.invoke(po, cellValue);
+                        }
+                    }
+                    System.out.println();
+                    if (r > 0) {
+                        po.setCreateTime(TimeUtil.getNowForMysql());
+                        po.setCreateUserId(AuthUtil.getCurrentUserId());
+                        po.setModifyUserId(AuthUtil.getCurrentUserId());
+                        po.setModifyTime(TimeUtil.getNowForMysql());
+                        po.setIsDeleted("0");
+                        po.setId(StringUtil.getRandomUUID());
+                        po.setFileName(sheetName);
+                        po.setVersion(version);
+                        fileNameAll.add(sheetName);
+                        list.add(po);
+                    }
+                }
+            }
+        //}
+        }
+        if(ObjectUtil.isNotNull(list)){
+            SceneGeneralTemplatePO po=list.get(0);
+            po.setFileNameAll(fileNameAll);
+            mapper.deleteSceneGeneralTemplateAll(po);
+            mapper.saveSceneGeneralTemplateAll(list);
+            return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+        }
+        return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "模板解析失败,请检查模板");
+    }
+
+    public List<SceneGeneralTemplatePO> querySceneGeneralTemplateList(SceneGeneralTemplateParam po) {
+        List<SceneGeneralTemplatePO> list=mapper.querySceneGeneralTemplateList(po);
+     Map<String,String>  scenarioRoadTypeMap= dictService.getDictMapByType("scenarioRoadType");
+        Map<String,String>  scenarioWeatherMap= dictService.getDictMapByType("scenarioWeather");
+        for (SceneGeneralTemplatePO vo : list) {
+            vo.setScenarioRoadType(scenarioRoadTypeMap.get(vo.getScenarioRoadType()));
+            vo.setScenarioWeather(scenarioWeatherMap.get(vo.getScenarioWeather()));
+        }
+        return   list;
+
+    }
+    @SneakyThrows
+    public SceneGeneralTemplateVO querySceneGeneralTemplateById(String id){
+        SceneGeneralTemplatePO po=mapper.querySceneGeneralTemplateById(id);
+       String generalizationType =JsonUtil.stringToJson(po.getGeneralizationType());
+       po.setGeneralizationType(generalizationType);
+        SceneGeneralTemplateVO vo=new SceneGeneralTemplateVO();
+       //转换为vo
+        BeanUtils.copyProperties(po, vo);
+        List<SceneGeneralTemplateMbVO>  listMb=new ArrayList<>();
+        if(po.getObsStartX().indexOf(";")!=-1){
+            listMb= spliceVo(po);
+        }else{
+            SceneGeneralTemplateMbVO  mbVO=new SceneGeneralTemplateMbVO();
+            BeanUtils.copyProperties(po, mbVO);
+            mbVO.setGeneralizationType(po.getGeneralizationType());
+            listMb.add(mbVO);
+        }
+        vo.setListMb(listMb);
+        vo.setTemplateId(vo.getId());
+        return vo;
+
+    }
+
+    public   List<SceneGeneralTemplateMbVO> spliceVo(SceneGeneralTemplatePO po) throws JsonProcessingException {
+        List<SceneGeneralTemplateMbVO>  listMb=new ArrayList<>();
+        String[]  obsStartX= po.getObsStartX().split(";");
+        String[]  obsStartY= po.getObsStartY().split(";");
+        String[]  obsStartVelocity= po.getObsStartVelocity().split(";");
+        String[]  obsLateralAcceleration= po.getObsLateralAcceleration().split(";");
+        String[]  obsLongitudinalAcceleration= po.getObsLongitudinalAcceleration().split(";");
+        String[]  obsHeadingAngleRel= po.getObsHeadingAngleRel().split(";");
+        String[]  obsVelocityStatus= po.getObsVelocityStatus().split(";");
+        String[]  obsTrajectory= po.getObsTrajectory().split(";");
+        String[]  obsDurationTime= po.getObsDurationTime().split(";");
+        String[]  obsVelocityTime= po.getObsVelocityTime().split(";");
+        String[]  obsTrailTime= po.getObsTrailTime().split(";");
+
+        String generalizationType=po.getGeneralizationType();
+        List<String> list= Arrays.asList(obsStartX);
+        for (int i=0;i<list.size();i++){
+            SceneGeneralTemplateMbVO  mbVO=new SceneGeneralTemplateMbVO();
+            mbVO.setObsStartX(list.get(i));
+            mbVO.setObsStartY(obsStartY[i]);
+            mbVO.setObsStartVelocity(obsStartVelocity[i]);
+            mbVO.setObsLateralAcceleration(obsLateralAcceleration[i]);
+            mbVO.setObsLongitudinalAcceleration(obsLongitudinalAcceleration[i]);
+            mbVO.setObsHeadingAngleRel(obsHeadingAngleRel[i]);
+            mbVO.setObsVelocityStatus(obsVelocityStatus[i]);
+            mbVO.setObsTrajectory(obsTrajectory[i]);
+            mbVO.setObsDurationTime(obsDurationTime[i]);
+            mbVO.setObsVelocityTime(obsVelocityTime[i]);
+            mbVO.setObsTrailTime(obsTrailTime[i]);
+            Map<String,Integer> map=JsonUtil.jsonToMap(generalizationType);
+            for(Map.Entry<String,Integer> entry:map.entrySet()){
+                String value= entry.getValue().toString();
+                if(value.length()>1){
+              Integer values=Integer.parseInt(value.substring(i,i+1));
+                    map.put(entry.getKey(),values);
+                }
+            }
+            mbVO.setGeneralizationType(JsonUtil.beanToJson(map));
+            listMb.add(mbVO);
+        }
+        return listMb;
+
+    }
+
+
+    public  ResponseBodyVO<String> deleteSceneGeneralTemplateById(SceneGeneralTemplatePO po) {
+        po.setModifyUserId(AuthUtil.getCurrentUserId());
+        po.setModifyTime(TimeUtil.getNowForMysql());
+        mapper.deleteSceneGeneralTemplateAll(po);
+        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+
+
+    }
+
+}

+ 16 - 10
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/SceneNaturalService.java

@@ -48,10 +48,7 @@ public class SceneNaturalService {
         int end = param.getJsonAddress().lastIndexOf(".");
         String fileName = param.getJsonAddress().substring(idx + 1, end);
         param.setNaturalName(fileName);
-        List<SceneNaturalPO> list = sceneNaturalMapper.querySceneNaturaByName(param);
-        if (list != null && list.size() > 0) {
-            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "该场景编号" + fileName + "已存在,请检查");
-        }
+        String sceneId = sceneNaturalMapper.querySceneNaturaByName(fileName);
         Response download = fileDownService.download(MI);
         String json = download.body().toString();
         ObjectMapper objMap = new ObjectMapper();
@@ -109,13 +106,9 @@ public class SceneNaturalService {
                 .doubleFlashingCar(getSequenceNew(traffic, "双闪车辆"))
                 .selfBehavior(getSequenceNew(selfDrivingBehavior))
                 .targetBehavior(getSequenceNew(targetBehavior))
+                .maxTime(root.path("max_time").asText())
                 .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());
         }
@@ -135,7 +128,20 @@ public class SceneNaturalService {
             sceneNaturalPO.setVideoPreview(param.getVideoPreview());
         }
 
-        sceneNaturalMapper.saveSceneNatural(sceneNaturalPO);
+        if (ObjectUtil.isNull(sceneId)) {
+            // -------------------------------- 保存数据到 mysql --------------------------------
+            sceneNaturalPO.setCreateTime(TimeUtil.getNowForMysql());
+            sceneNaturalPO.setCreateUserId(AuthUtil.getCurrentUserId());
+            sceneNaturalPO.setModifyTime(TimeUtil.getNowForMysql());
+            sceneNaturalMapper.saveSceneNatural(sceneNaturalPO);
+          //  return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "该场景编号" + fileName + "已存在,请检查");
+        }else{
+            // -------------------------------- 修改数据到 mysql --------------------------------
+            sceneNaturalPO.setModifyUserId(AuthUtil.getCurrentUserId());
+            sceneNaturalPO.setModifyTime(TimeUtil.getNowForMysql());
+            sceneNaturalPO.setNaturalId(sceneId);
+            sceneNaturalMapper.updateSceneNatural(sceneNaturalPO);
+        }
         return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
     }
 

+ 6 - 3
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/ScenePackageService.java

@@ -304,8 +304,11 @@ public class ScenePackageService {
                 params.setCreateTime(TimeUtil.getNowForMysql());
                 params.setModifyTime(TimeUtil.getNowForMysql());
                 params.setCreateUserId(AuthUtil.getCurrentUserId());
-                String uuId = StringUtil.getRandomUUID();
-                params.setId(uuId);   //主键ID
+                //添加泛化后处理
+                if(ObjectUtil.isNull(parentVoList.get(i).getId())){
+                    String uuId = StringUtil.getRandomUUID();
+                    params.setId(uuId);   //主键ID
+                }
                 params.setIsDeleted("0");
                 params.setShare(share);
                 params.setPackageLevel(level);
@@ -315,7 +318,7 @@ public class ScenePackageService {
                 if (cvoList != null && cvoList.size() > 0) {
                     //继续查找下一节点
                     int b=level+1;
-                    instShareListTree(cvoList, uuId, rootId, poList, share,b);
+                    instShareListTree(cvoList, params.getId(), rootId, poList, share,b);
                 }
                 parentVoList.remove(parentVoList.get(i));
                 i--;

+ 20 - 10
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/StandardsRegulationsService.java

@@ -46,11 +46,7 @@ public class StandardsRegulationsService {
         ObjectMapper objMap = new ObjectMapper();
         JsonNode root = objMap.readTree(json);
         String sceneName = root.path("场景名称").asText();
-        param.setSceneName(sceneName);
-        List<StandardsRegulationsPO> list = standardsRegulationsMapper.queryStandardsRegulationsByName(param);
-        if (list != null && list.size() > 0) {
-            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "该场景名称" + sceneName + "已存在,请检查");
-        }
+       String sceneId = standardsRegulationsMapper.queryStandardsRegulationsByName(sceneName);
 
         StandardsRegulationsPO standardsRegulationsPO = null;
         standardsRegulationsPO = standardsRegulationsPO.builder()
@@ -58,12 +54,9 @@ public class StandardsRegulationsService {
                 .sceneName(sceneName)
                 .regulationType(root.path("法规类型").asText())
                 .standardType(root.path("标准类型").asText())
+                .maxTime(root.path("max_time").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());
         }
@@ -82,7 +75,24 @@ public class StandardsRegulationsService {
         if (null != param.getVideoPreview() && !param.getVideoPreview().equals("")) {
             standardsRegulationsPO.setVideoPreview(param.getVideoPreview());
         }
-        standardsRegulationsMapper.saveStandardsRegulations(standardsRegulationsPO);
+
+        if (ObjectUtil.isNull(sceneId)) {
+            // -------------------------------- 保存数据到 mysql --------------------------------
+            standardsRegulationsPO.setCreateTime(TimeUtil.getNowForMysql());
+            standardsRegulationsPO.setModifyTime(TimeUtil.getNowForMysql());
+            standardsRegulationsPO.setCreateUserId(AuthUtil.getCurrentUserId());
+            standardsRegulationsMapper.saveStandardsRegulations(standardsRegulationsPO);
+
+           // return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "该场景名称" + sceneName + "已存在,请检查");
+        }else{
+            // -------------------------------- 修改数据到 mysql --------------------------------
+            standardsRegulationsPO.setRegulationsId(sceneId);
+            standardsRegulationsPO.setModifyTime(TimeUtil.getNowForMysql());
+            standardsRegulationsPO.setModifyUserId(AuthUtil.getCurrentUserId());
+            standardsRegulationsMapper.updateStandardsRegulations(standardsRegulationsPO);
+
+        }
+
 
         return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
     }

+ 140 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/XmlParse.java

@@ -0,0 +1,140 @@
+package com.css.simulation.resource.scene.service;
+
+import java.io.*;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileItemFactory;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.springframework.stereotype.Service;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+@Slf4j
+@Service
+public class XmlParse {
+    //泛化模板解析需要用
+    public static FileItem createFileItem(String filePath, String fileName){
+        String fieldName = "file";
+        FileItemFactory factory = new DiskFileItemFactory();
+        FileItem item = factory.createItem(fieldName, "text/plain", false,fileName);
+        File newfile = new File(filePath);
+        int bytesRead = 0;
+        byte[] buffer = new byte[8192];
+        try (FileInputStream fis = new FileInputStream(newfile);
+             OutputStream os = item.getOutputStream()) {
+            while ((bytesRead = fis.read(buffer, 0, 8192))!= -1)
+            {
+                os.write(buffer, 0, bytesRead);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return item;
+    }
+    //解析xml获取属性地址
+    public static Map getUrl(String fileUrl) throws Exception {
+        //1-获取XML-IO流
+      //  File excelFile = new File(fileUrl); //创建文件对象
+        File excelFile = new File("D:\\GB_001_TargetIdentification_001_Right.xml"); //创建文件对象
+        InputStream xmlInputStream= new FileInputStream(excelFile); //文件流
+        //2-解析XML-IO流 ,获取Document 对象,以及Document对象 的根节点
+        Element rootElement = getRootElementFromIs(xmlInputStream);
+        //3~5-从根元素解析得到元素
+       Map map= parseElementFromRoot(rootElement);//控制台输出:   
+        System.out.println("xodrName-----"+map.get("xodrName"));
+        return map;
+    }
+
+    //1-获取XML-IO流
+    private static InputStream  getXmlInputStream(String xmlPath){
+        InputStream inputStream = null;
+        try {
+            //1-把要解析的 XML 文档转化为输入流,以便 DOM 解析器解析它
+            inputStream= new  FileInputStream(xmlPath);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return inputStream;
+    }
+    //2-解析XML-IO流 ,获取Document 对象,以及Document对象 的根节点
+    private static Element getRootElementFromIs(InputStream inputStream) throws Exception {
+        if(inputStream == null){
+            return  null;
+        }
+        /*
+         * javax.xml.parsers 包中的DocumentBuilderFactory用于创建DOM模式的解析器对象 ,
+         * DocumentBuilderFactory是一个抽象工厂类,它不能直接实例化,但该类提供了一个newInstance方法 ,
+         * 这个方法会根据本地平台默认安装的解析器,自动创建一个工厂的对象并返回。
+         */
+        //2-调用 DocumentBuilderFactory.newInstance() 方法得到创建 DOM 解析器的工厂
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        //3-调用工厂对象的 newDocumentBuilder方法得到 DOM 解析器对象。
+        DocumentBuilder docBuilder = factory.newDocumentBuilder();
+        //4-调用 DOM 解析器对象的 parse() 方法解析 XML 文档,得到代表整个文档的 Document 对象,进行可以利用DOM特性对整个XML文档进行操作了。
+        Document doc = docBuilder.parse(inputStream);
+        //5-得到 XML 文档的根节点
+        Element root =doc.getDocumentElement();
+        //6-关闭流
+        if(inputStream != null){
+            inputStream.close();
+        }
+        return root;
+    }
+
+    //3-从根元素解析得到元素
+    private static Map parseElementFromRoot(Element root) {
+        NodeList nl = root.getChildNodes();
+        for (int i = 0; i < nl.getLength(); i++) {
+            Node node = nl.item(i);
+            if("Layout".equals(node.getNodeName())){
+                if (node instanceof Element) {
+                    Element ele = (Element) node;
+                    //4-从元素解析得到属性值
+                    return getDataFromElement(ele);
+                //5-从元素解析特定子元素并解析(以property为例)
+               // getCertainElementFromParentElement(ele);
+                }
+            }
+
+        }
+        return null;
+    }
+
+    //4-从元素解析得到属性值
+    private static Map getDataFromElement(Element ele) {
+        Map map=new HashMap<>();
+        String osgbName = ele.getAttribute("Database");//根据属性名称读取属性值
+        String xodrName= ele.getAttribute("File");
+        map.put("osgbName",osgbName);
+        map.put("xodrName",xodrName);
+        return map;
+    }
+    /*//5-从元素解析特定子元素并解析(以property为例)
+    private static void getCertainElementFromParentElement(Element ele) {
+        NodeList propertyEleList = ele.getElementsByTagName("Database");//根据标签名称获取标签元素列表
+        for (int i = 0; i < propertyEleList.getLength(); i++) {
+            Node node = propertyEleList.item(i);
+            if (node instanceof Element) {
+                Element propertyEle = (Element) node;
+                String name = propertyEle.getAttribute("Database");
+                System.out.println("propertyEle: Database =88888888= " + name);
+                String value = propertyEle.getAttribute("File");
+                System.out.println("propertyEle: File ==888888--- " + value);
+            }
+        }
+
+    }
+*/
+
+
+
+
+
+}

+ 58 - 13
simulation-resource-server/src/main/resources/mapper/scene/SceneAccidentMapper.xml

@@ -9,18 +9,35 @@
         scence_resume,scene_time,scene_weather,
        create_user_id,create_time,modify_user_id,modify_time,
          is_deleted,share,video_preview,video_address,osgb_address,xml_address,xodr_address,
-        json_address)
+        json_address,max_time)
         values (#{accidentId,jdbcType=VARCHAR},#{sceneName,jdbcType=VARCHAR},#{selfDriving,jdbcType=VARCHAR}, #{targetDriving,jdbcType=VARCHAR},
         #{selfReaction,jdbcType=VARCHAR}, #{conflictBehavior,jdbcType=VARCHAR},#{conflictType,jdbcType=VARCHAR},
         #{scenceResume,jdbcType=VARCHAR}, #{sceneTime,jdbcType=VARCHAR},#{sceneWeather,jdbcType=VARCHAR},
-
-
        #{createUserId,jdbcType=VARCHAR},#{createTime},#{modifyUserId,jdbcType=VARCHAR},#{modifyTime},
         #{isDeleted,jdbcType=VARCHAR}, #{share,jdbcType=VARCHAR},#{videoPreview,jdbcType=VARCHAR},#{videoAddress,jdbcType=VARCHAR},#{osgbAddress,jdbcType=VARCHAR},
-        #{xmlAddress,jdbcType=VARCHAR}, #{xodrAddress,jdbcType=VARCHAR},#{jsonAddress,jdbcType=VARCHAR})
+        #{xmlAddress,jdbcType=VARCHAR}, #{xodrAddress,jdbcType=VARCHAR},#{jsonAddress,jdbcType=VARCHAR},#{maxTime,jdbcType=VARCHAR})
+    </insert>
+    <insert id="saveSceneAccidentList" parameterType="java.util.List">
+        insert into simulation.scene_accident
+        (accident_id,scene_name,self_driving,target_driving,
+        self_reaction,conflict_behavior,conflict_type,
+        scence_resume,scene_time,scene_weather,
+       create_user_id,create_time,modify_user_id,modify_time,
+         is_deleted,share,video_preview,video_address,osgb_address,xml_address,xodr_address,
+        json_address,max_time)
+        values
+        <foreach collection="list" index="index" item="item" separator=",">
+            (#{item.accidentId,jdbcType=VARCHAR},#{item.sceneName,jdbcType=VARCHAR},#{item.selfDriving,jdbcType=VARCHAR}, #{item.targetDriving,jdbcType=VARCHAR},
+            #{item.selfReaction,jdbcType=VARCHAR}, #{item.conflictBehavior,jdbcType=VARCHAR},#{item.conflictType,jdbcType=VARCHAR},
+            #{item.scenceResume,jdbcType=VARCHAR}, #{item.sceneTime,jdbcType=VARCHAR},#{item.sceneWeather,jdbcType=VARCHAR},
+            #{item.createUserId,jdbcType=VARCHAR},#{item.createTime},#{item.modifyUserId,jdbcType=VARCHAR},#{item.modifyTime},
+            #{item.isDeleted,jdbcType=VARCHAR}, #{item.share,jdbcType=VARCHAR},#{item.videoPreview,jdbcType=VARCHAR},#{item.videoAddress,jdbcType=VARCHAR},#{item.osgbAddress,jdbcType=VARCHAR},
+            #{item.xmlAddress,jdbcType=VARCHAR}, #{item.xodrAddress,jdbcType=VARCHAR},#{item.jsonAddress,jdbcType=VARCHAR},#{item.maxTime,jdbcType=VARCHAR})
+        </foreach>
     </insert>
 
 
+
     <select id="querySceneAccidentList" parameterType="api.common.pojo.param.scene.SceneAccidentParam"
             resultType="api.common.pojo.po.scene.SceneAccidentPO">
         select
@@ -29,7 +46,7 @@
         scence_resume,scene_time,scene_weather,
         create_user_id,create_time,modify_user_id,modify_time,
         is_deleted,share,video_address,video_preview,osgb_address,xml_address,xodr_address,
-        json_address
+        json_address,max_time
         from(
         select
         accident_id,scene_name,self_driving,target_driving,
@@ -37,7 +54,7 @@
         scence_resume,scene_time,scene_weather,
         create_user_id,create_time,modify_user_id,modify_time,
         is_deleted,share,video_address,video_preview,osgb_address,xml_address,xodr_address,
-        json_address
+        json_address,max_time
         from simulation.scene_accident
         <where>
             <if test="sceneName != null and sceneName != ''">
@@ -94,7 +111,7 @@
              scence_resume,scene_time,scene_weather,
             create_user_id,create_time,modify_user_id,modify_time,
             is_deleted,share,video_address,video_preview,osgb_address,xml_address,xodr_address,
-            json_address
+            json_address,max_time
             from simulation.scene_accident
             <where>
                 <if test="rearEndCollision != null and rearEndCollision!=''">
@@ -132,14 +149,14 @@
         scence_resume,scene_time,scene_weather,
         create_user_id,create_time,modify_user_id,modify_time,
         is_deleted,share,video_address,video_preview,osgb_address,xml_address,xodr_address,
-        json_address
+        json_address,max_time
         from( select
         accident_id,scene_name,self_driving,target_driving,
         self_reaction,conflict_behavior,conflict_type,
         scence_resume,scene_time,scene_weather,
         create_user_id,create_time,modify_user_id,modify_time,
         is_deleted,share,video_address,video_preview,osgb_address,xml_address,xodr_address,
-        json_address
+        json_address,max_time
         from simulation.scene_accident
         <where>
             <if test="rearEndCollision != null and rearEndCollision!=''">
@@ -174,7 +191,7 @@
         scence_resume,scene_time,scene_weather,
         create_user_id,create_time,modify_user_id,modify_time,
         is_deleted,share,video_address,video_preview,osgb_address,xml_address,xodr_address,
-        json_address
+        json_address,max_time
         from simulation.scene_accident
         <where>
             is_deleted = '0'
@@ -252,13 +269,41 @@
     </update>
 
 
-    <select id="querySceneAccidentByNmae" parameterType="java.lang.String"
-            resultType="java.lang.Integer">
+    <select id="querySceneAccidentByNmae" parameterType="java.lang.String" resultType="java.lang.String">
         select
-        count(scene_name)
+        accident_id  sceneId
         from simulation.scene_accident
         where
             is_deleted = '0'
                 and scene_name =#{sceneName,jdbcType=VARCHAR}
     </select>
+
+
+    <update id="updateSceneAccident" parameterType="api.common.pojo.po.scene.SceneAccidentPO">
+        update simulation.scene_accident
+       set scene_name=#{sceneName},self_driving=#{selfDriving},
+       target_driving=#{targetDriving},self_reaction=#{selfReaction},
+       conflict_behavior=#{conflictBehavior},conflict_type=#{conflictType},
+       scence_resume=#{scenceResume},scene_time=#{sceneTime},
+       scene_weather=#{sceneWeather},modify_time=#{modifyTime},
+       modify_user_id=#{modifyUserId},video_address=#{videoAddress},
+       osgb_address=#{osgbAddress},xml_address=#{xmlAddress},
+       xodr_address=#{xodrAddress},json_address=#{jsonAddress},max_time=#{maxTime}
+        where accident_id = #{accidentId,jdbcType=VARCHAR}
+    </update>
+
+    <update id="updateSceneAccidentList" parameterType="java.util.List">
+        <foreach collection="list" index="index" item="item" separator=";">
+        update simulation.scene_accident
+            set scene_name=#{item.sceneName},self_driving=#{item.selfDriving},
+            target_driving=#{item.targetDriving},self_reaction=#{item.selfReaction},
+            conflict_behavior=#{item.conflictBehavior},conflict_type=#{item.conflictType},
+            scence_resume=#{item.scenceResume},scene_time=#{item.sceneTime},
+            scene_weather=#{item.sceneWeather},modify_time=#{item.modifyTime},
+            modify_user_id=#{item.modifyUserId},video_address=#{item.videoAddress},
+            osgb_address=#{item.osgbAddress},xml_address=#{item.xmlAddress},
+            xodr_address=#{item.xodrAddress},json_address=#{item.jsonAddress},max_time=#{item.maxTime}
+            where accident_id = #{item.accidentId,jdbcType=VARCHAR}
+        </foreach>
+    </update>
 </mapper>

+ 52 - 0
simulation-resource-server/src/main/resources/mapper/scene/SceneGeneralDataMapper.xml

@@ -0,0 +1,52 @@
+<?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.SceneGeneralDataMapper">
+
+    <insert id="saveSceneGeneralDataAll" parameterType="java.util.List">
+
+        insert into simulation.scene_general_data
+        (id,scene_id,sublist_id,template_id,example_id,osgb_address,xodr_address,xosc_address,
+        create_user_id,create_time,modify_time,
+        is_deleted) values
+        <foreach collection="list" index="index" item="item" separator=",">
+            (#{item.id,jdbcType=VARCHAR},#{item.sceneId,jdbcType=VARCHAR},#{item.sublistId,jdbcType=VARCHAR},#{item.templateId,jdbcType=VARCHAR},#{item.exampleId,jdbcType=VARCHAR},#{item.osgbAddress,jdbcType=VARCHAR},#{item.xodrAddress,jdbcType=VARCHAR},
+             #{item.xoscAddress},
+            #{item.createUserId,jdbcType=VARCHAR},#{item.createTime},#{item.modifyTime},
+            #{item.isDeleted,jdbcType=VARCHAR})
+        </foreach>
+    </insert>
+
+    <select id="querySceneGeneralDataList" parameterType="api.common.pojo.po.scene.SceneGeneralDataPO"
+            resultType="api.common.pojo.po.scene.SceneGeneralDataPO">
+
+        select
+        id,scene_id,sublit_id,template_id,example_id,osgb_address,xodr_address,xosc_address
+        from simulation.scene_general_template
+        <where>
+        is_deleted = '0'
+            <if test="id != null and id != ''">
+                and id #{id,jdbcType=VARCHAR}
+            </if>
+            <if test="sublitId != null and sublitId != ''">
+                and sublit_id =#{sublitId,jdbcType=VARCHAR}
+            </if>
+            <if test="templateId != null and templateId != ''">
+                and template_id =#{templateId,jdbcType=VARCHAR}
+            </if>
+            <if test="exampleId != null and exampleId != ''">
+                and example_id =#{exampleId,jdbcType=VARCHAR}
+            </if>
+        order by modify_time desc
+        </where>
+    </select>
+    <select id="querySceneGeneralDataById" parameterType="java.lang.String"
+            resultType="api.common.pojo.po.scene.SceneGeneralDataPO">
+        select
+         id,scene_id,sublit_id,template_id,example_id,osgb_address,xodr_address,xosc_address
+        from simulation.scene_general_data
+        where id #{id,jdbcType=VARCHAR}
+
+    </select>
+
+
+</mapper>

+ 79 - 0
simulation-resource-server/src/main/resources/mapper/scene/SceneGeneralExampleMapper.xml

@@ -0,0 +1,79 @@
+<?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.SceneGeneralExampleMapper">
+
+    <insert id="saveSceneGeneralExampleAll" parameterType="java.util.List">
+
+        insert into simulation.scene_general_example
+        (id,scene_id,scenario_name,scenario_weather,scenario_time,
+        scenario_vehicle_model,scenario_road_type,scenario_radius_curvature,ego_start_x,ego_start_y,
+        ego_start_velocity,ego_heading_angle,ego_velocity_status,ego_trajectory,ego_duration_time,
+        ego_velocity_time,ego_trajectory_time,obs_start_x,obs_start_y,obs_start_velocity,
+        obs_lateral_acceleration,obs_longitudinal_acceleration,
+        obs_heading_angle_rel,obs_velocity_status,obs_trajectory,obs_duration_time,obs_velocity_time,
+        obs_trail_time,generalization_type,scenario_resume,scene_detailed_description,evaluating_indicator,
+        video_link,file_name,template_id,sublist_id,
+        create_user_id,create_time,modify_time,
+        is_deleted) values
+        <foreach collection="list" index="index" item="item" separator=",">
+            (#{item.id,jdbcType=VARCHAR},#{item.sceneId,jdbcType=VARCHAR},#{item.scenarioName,jdbcType=VARCHAR},#{item.scenarioWeather,jdbcType=VARCHAR},#{item.scenarioTime,jdbcType=VARCHAR},
+            #{item.scenarioVehicleModel,jdbcType=VARCHAR}, #{item.scenarioRoadType,jdbcType=VARCHAR}, #{item.scenarioRadiusCurvature,jdbcType=VARCHAR},#{item.egoStartX,jdbcType=VARCHAR}, #{item.egoStartY,jdbcType=VARCHAR},
+            #{item.egoStartVelocity,jdbcType=VARCHAR}, #{item.egoHeadingAngle,jdbcType=VARCHAR},#{item.egoVelocityStatus,jdbcType=VARCHAR},#{item.egoTrajectory,jdbcType=VARCHAR},#{item.egoDurationTime,jdbcType=VARCHAR},
+            #{item.egoVelocityTime,jdbcType=VARCHAR}, #{item.egoTrajectoryTime,jdbcType=VARCHAR},#{item.obsStartX,jdbcType=VARCHAR},#{item.obsStartY,jdbcType=VARCHAR},#{item.obsStartVelocity,jdbcType=VARCHAR},
+            #{item.obsLateralAcceleration,jdbcType=VARCHAR}, #{item.obsLongitudinalAcceleration,jdbcType=VARCHAR},
+            #{item.obsHeadingAngleRel,jdbcType=VARCHAR}, #{item.obsVelocityStatus,jdbcType=VARCHAR},#{item.obsTrajectory,jdbcType=VARCHAR},#{item.obsDurationTime,jdbcType=VARCHAR},#{item.obsVelocityTime,jdbcType=VARCHAR},
+            #{item.obsTrailTime,jdbcType=VARCHAR}, #{item.generalizationType,jdbcType=VARCHAR},#{item.scenarioResume,jdbcType=VARCHAR},#{item.sceneDetailedDescription},#{item.evaluatingIndicator,jdbcType=VARCHAR},
+            #{item.videoLink},#{item.fileName},#{item.templateId},#{item.sublistId},
+
+            #{item.createUserId,jdbcType=VARCHAR},#{item.createTime},#{item.modifyTime},
+            #{item.isDeleted,jdbcType=VARCHAR})
+        </foreach>
+    </insert>
+
+    <insert id="saveSceneGeneralExample" parameterType="api.common.pojo.po.scene.SceneGeneralExamplePO">
+
+        insert into simulation.scene_general_example
+        (id,scene_id,scenario_name,scenario_weather,scenario_time,
+        scenario_vehicle_model,scenario_road_type,scenario_radius_curvature,ego_start_x,ego_start_y,
+        ego_start_velocity,ego_heading_angle,ego_velocity_status,ego_trajectory,ego_duration_time,
+        ego_velocity_time,ego_trajectory_time,obs_start_x,obs_start_y,obs_start_velocity,
+        obs_lateral_acceleration,obs_longitudinal_acceleration,
+        obs_heading_angle_rel,obs_velocity_status,obs_trajectory,obs_duration_time,obs_velocity_time,
+        obs_trail_time,generalization_type,scenario_resume,scene_detailed_description,evaluating_indicator,
+        video_link,file_name,template_id,sublist_id,
+        create_user_id,create_time,modify_time,
+        is_deleted) values
+          (#{id,jdbcType=VARCHAR},#{sceneId,jdbcType=VARCHAR},#{scenarioName,jdbcType=VARCHAR},#{scenarioWeather,jdbcType=VARCHAR},#{scenarioTime,jdbcType=VARCHAR},
+            #{scenarioVehicleModel,jdbcType=VARCHAR}, #{scenarioRoadType,jdbcType=VARCHAR}, #{scenarioRadiusCurvature,jdbcType=VARCHAR},#{egoStartX,jdbcType=VARCHAR}, #{egoStartY,jdbcType=VARCHAR},
+            #{egoStartVelocity,jdbcType=VARCHAR}, #{egoHeadingAngle,jdbcType=VARCHAR},#{egoVelocityStatus,jdbcType=VARCHAR},#{egoTrajectory,jdbcType=VARCHAR},#{egoDurationTime,jdbcType=VARCHAR},
+            #{egoVelocityTime,jdbcType=VARCHAR}, #{egoTrajectoryTime,jdbcType=VARCHAR},#{obsStartX,jdbcType=VARCHAR},#{obsStartY,jdbcType=VARCHAR},#{obsStartVelocity,jdbcType=VARCHAR},
+            #{obsLateralAcceleration,jdbcType=VARCHAR}, #{obsLongitudinalAcceleration,jdbcType=VARCHAR},
+            #{obsHeadingAngleRel,jdbcType=VARCHAR}, #{obsVelocityStatus,jdbcType=VARCHAR},#{obsTrajectory,jdbcType=VARCHAR},#{obsDurationTime,jdbcType=VARCHAR},#{obsVelocityTime,jdbcType=VARCHAR},
+            #{obsTrailTime,jdbcType=VARCHAR}, #{generalizationType,jdbcType=VARCHAR},#{scenarioResume,jdbcType=VARCHAR},#{sceneDetailedDescription},#{evaluatingIndicator,jdbcType=VARCHAR},
+            #{videoLink},#{fileName},#{templateId},#{sublistId},
+
+            #{createUserId,jdbcType=VARCHAR},#{createTime},#{modifyTime},
+            #{isDeleted,jdbcType=VARCHAR})
+    </insert>
+
+
+    <select id="querySceneGeneralExampleById" parameterType="java.lang.String"
+            resultType="api.common.pojo.po.scene.SceneGeneralExamplePO">
+
+        select
+        id,scene_id,scenario_name,scenario_weather,scenario_time,
+        scenario_vehicle_model,scenario_road_type,scenario_radius_curvature,ego_start_x,ego_start_y,
+        ego_start_velocity,ego_heading_angle,ego_velocity_status,ego_trajectory,ego_duration_time,
+        ego_velocity_time,ego_trajectory_time,obs_start_x,obs_start_y,obs_start_velocity,
+        obs_lateral_acceleration,obs_longitudinal_acceleration,
+        obs_heading_angle_rel,obs_velocity_status,obs_trajectory,obs_duration_time,obs_velocity_time,
+        obs_trail_time,generalization_type,scenario_resume,scene_detailed_description,evaluating_indicator,
+        video_link,file_name,template_id,sublist_id,version,
+        create_user_id,create_time,modify_time
+        from simulation.scene_general_example
+        where id #{id,jdbcType=VARCHAR}
+
+    </select>
+
+
+</mapper>

+ 145 - 0
simulation-resource-server/src/main/resources/mapper/scene/SceneGeneralTemplateMapper.xml

@@ -0,0 +1,145 @@
+<?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.SceneGeneralTemplateMapper">
+
+    <insert id="saveSceneGeneralTemplateAll" parameterType="java.util.List">
+
+        insert into simulation.scene_general_template
+        (id,scene_id,scenario_name,scenario_weather,scenario_time,
+        scenario_vehicle_model,scenario_road_type,scenario_radius_curvature,ego_start_x,ego_start_y,
+        ego_start_velocity,ego_heading_angle,ego_velocity_status,ego_trajectory,ego_duration_time,
+        ego_velocity_time,ego_trajectory_time,obs_start_x,obs_start_y,obs_start_velocity,
+        obs_lateral_acceleration,obs_longitudinal_acceleration,
+        obs_heading_angle_rel,obs_velocity_status,obs_trajectory,obs_duration_time,obs_velocity_time,
+        obs_trail_time,generalization_type,scenario_resume,scene_detailed_description,evaluating_indicator,
+        video_link,file_name,version,
+        create_user_id,create_time,modify_time,
+        is_deleted) values
+        <foreach collection="list" index="index" item="item" separator=",">
+            (#{item.id,jdbcType=VARCHAR},#{item.sceneId,jdbcType=VARCHAR},#{item.scenarioName,jdbcType=VARCHAR},#{item.scenarioWeather,jdbcType=VARCHAR},#{item.scenarioTime,jdbcType=VARCHAR},
+            #{item.scenarioVehicleModel,jdbcType=VARCHAR}, #{item.scenarioRoadType,jdbcType=VARCHAR}, #{item.scenarioRadiusCurvature,jdbcType=VARCHAR},#{item.egoStartX,jdbcType=VARCHAR}, #{item.egoStartY,jdbcType=VARCHAR},
+            #{item.egoStartVelocity,jdbcType=VARCHAR}, #{item.egoHeadingAngle,jdbcType=VARCHAR},#{item.egoVelocityStatus,jdbcType=VARCHAR},#{item.egoTrajectory,jdbcType=VARCHAR},#{item.egoDurationTime,jdbcType=VARCHAR},
+            #{item.egoVelocityTime,jdbcType=VARCHAR}, #{item.egoTrajectoryTime,jdbcType=VARCHAR},#{item.obsStartX,jdbcType=VARCHAR},#{item.obsStartY,jdbcType=VARCHAR},#{item.obsStartVelocity,jdbcType=VARCHAR},
+            #{item.obsLateralAcceleration,jdbcType=VARCHAR}, #{item.obsLongitudinalAcceleration,jdbcType=VARCHAR},
+            #{item.obsHeadingAngleRel,jdbcType=VARCHAR}, #{item.obsVelocityStatus,jdbcType=VARCHAR},#{item.obsTrajectory,jdbcType=VARCHAR},#{item.obsDurationTime,jdbcType=VARCHAR},#{item.obsVelocityTime,jdbcType=VARCHAR},
+            #{item.obsTrailTime,jdbcType=VARCHAR}, #{item.generalizationType,jdbcType=VARCHAR},#{item.scenarioResume,jdbcType=VARCHAR},#{item.sceneDetailedDescription},#{item.evaluatingIndicator,jdbcType=VARCHAR},
+            #{item.videoLink},#{item.fileName},#{item.version},
+
+            #{item.createUserId,jdbcType=VARCHAR},#{item.createTime},#{item.modifyTime},
+            #{item.isDeleted,jdbcType=VARCHAR})
+        </foreach>
+    </insert>
+
+    <select id="querySceneGeneralTemplateList" parameterType="api.common.pojo.param.scene.SceneGeneralTemplateParam"
+            resultType="api.common.pojo.po.scene.SceneGeneralTemplatePO">
+
+        select
+        id,scene_id,scenario_name,scenario_weather,scenario_time,
+        scenario_vehicle_model,scenario_road_type,scenario_radius_curvature,ego_start_x,ego_start_y,
+        ego_start_velocity,ego_heading_angle,ego_velocity_status,ego_trajectory,ego_duration_time,
+        ego_velocity_time,ego_trajectory_time,obs_start_x,obs_start_y,obs_start_velocity,
+        obs_lateral_acceleration,obs_longitudinal_acceleration,
+        obs_heading_angle_rel,obs_velocity_status,obs_trajectory,obs_duration_time,obs_velocity_time,
+        obs_trail_time,generalization_type,scenario_resume,scene_detailed_description,evaluating_indicator,
+        video_link,file_name,version,
+        create_user_id,create_time,modify_time
+        from simulation.scene_general_template
+        <where>
+        is_deleted = '0'
+            <if test="id != null and id != ''">
+                and id #{id,jdbcType=VARCHAR}
+            </if>
+            <if test="sceneId != null and sceneId != ''">
+                and scene_id like CONCAT('%',#{sceneId,jdbcType=VARCHAR},'%')
+            </if>
+            <if test="scenarioWeather != null and scenarioWeather.size()>0 ">
+                and scenario_weather in
+                <foreach collection="scenarioWeather" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="fileName != null and fileName.size()>0 ">
+                and file_name in
+                <foreach collection="fileName" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="scenarioTime != null and scenarioTime != ''">
+                and scenario_time= #{scenarioTime,jdbcType=VARCHAR}
+            </if>
+            <if test="version != null and version != ''">
+                and version= #{version}
+            </if>
+        order by modify_time desc
+        </where>
+    </select>
+    <select id="querySceneGeneralTemplateById" parameterType="java.lang.String"
+            resultType="api.common.pojo.po.scene.SceneGeneralTemplatePO">
+
+        select
+        id,scene_id,scenario_name,scenario_weather,scenario_time,
+        scenario_vehicle_model,scenario_road_type,scenario_radius_curvature,ego_start_x,ego_start_y,
+        ego_start_velocity,ego_heading_angle,ego_velocity_status,ego_trajectory,ego_duration_time,
+        ego_velocity_time,ego_trajectory_time,obs_start_x,obs_start_y,obs_start_velocity,
+        obs_lateral_acceleration,obs_longitudinal_acceleration,
+        obs_heading_angle_rel,obs_velocity_status,obs_trajectory,obs_duration_time,obs_velocity_time,
+        obs_trail_time,generalization_type,scenario_resume,scene_detailed_description,evaluating_indicator,
+        video_link,file_name,version,
+        create_user_id,create_time,modify_time
+        from simulation.scene_general_template
+        where id = #{id,jdbcType=VARCHAR}
+
+    </select>
+
+    <select id="queryType"  resultType="java.lang.String">
+
+        select
+       file_name
+        from simulation.scene_general_template
+        where is_deleted = '0' group by file_name
+
+    </select>
+
+
+    <update id="deleteSceneGeneralTemplateAll" parameterType="api.common.pojo.po.scene.SceneGeneralTemplatePO">
+        update simulation.scene_general_template
+        <set>
+            <if test="modifyUserId != null and modifyUserId!=''">
+                modify_user_id = #{modifyUserId,jdbcType=VARCHAR},
+            </if>
+            <if test="modifyTime != null">
+                modify_time = #{modifyTime},
+            </if>
+            is_deleted = '1'
+        </set>
+        <where>
+            is_deleted = '0'
+            <if test="fileNameAll != null and fileNameAll.size()>0 ">
+                and file_name in
+                <foreach collection="fileNameAll" item="item" index="index"
+                         separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+
+        </where>
+
+    </update>
+
+    <update id="deleteSceneGeneralTemplateById" parameterType="api.common.pojo.po.scene.SceneGeneralTemplatePO">
+        update simulation.scene_general_template
+        <set>
+            <if test="modifyUserId != null and modifyUserId!=''">
+                modify_user_id = #{modifyUserId,jdbcType=VARCHAR},
+            </if>
+            <if test="modifyTime != null">
+                modify_time = #{modifyTime},
+            </if>
+            is_deleted = '1'
+        </set>
+        where id=#{id}
+    </update>
+
+</mapper>

+ 87 - 18
simulation-resource-server/src/main/resources/mapper/scene/SceneNaturalMapper.xml

@@ -15,7 +15,7 @@
         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_preview,video_address,osgb_address,xodr_address,xosc_address,
-        json_address)
+        json_address,max_time)
         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},
@@ -29,7 +29,40 @@
         #{targetBehavior,jdbcType=VARCHAR}, #{createUserId,jdbcType=VARCHAR},#{createTime},#{modifyUserId,jdbcType=VARCHAR},#{modifyTime},
 
         #{isDeleted,jdbcType=VARCHAR}, #{share,jdbcType=VARCHAR},#{videoPreview,jdbcType=VARCHAR},#{videoAddress,jdbcType=VARCHAR},#{osgbAddress,jdbcType=VARCHAR},
-        #{xodrAddress,jdbcType=VARCHAR}, #{xoscAddress,jdbcType=VARCHAR},#{jsonAddress,jdbcType=VARCHAR})
+        #{xodrAddress,jdbcType=VARCHAR}, #{xoscAddress,jdbcType=VARCHAR},#{jsonAddress,jdbcType=VARCHAR},#{maxTime,jdbcType=VARCHAR})
+    </insert>
+
+    <insert id="saveSceneNaturalList" parameterType="java.lang.String">
+        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_preview,video_address,osgb_address,xodr_address,xosc_address,
+        json_address,max_time)
+        values
+        <foreach collection="list" index="index" item="item" separator=",">
+            (#{item.naturalId,jdbcType=VARCHAR},#{item.naturalName,jdbcType=VARCHAR},#{item.weather,jdbcType=VARCHAR}, #{item.backlight,jdbcType=VARCHAR},
+            #{item.lightChange,jdbcType=VARCHAR}, #{item.roadType,jdbcType=VARCHAR},#{item.roadMatrrial,jdbcType=VARCHAR},#{item.drivewayNum,jdbcType=VARCHAR},
+            #{item.drivewayType,jdbcType=VARCHAR}, #{item.roadFlatness,jdbcType=VARCHAR},#{item.roadCurvature,jdbcType=VARCHAR},#{item.ramp,jdbcType=VARCHAR},
+            #{item.intersectionType,jdbcType=VARCHAR}, #{item.planeIntersection,jdbcType=VARCHAR},#{item.bridge,jdbcType=VARCHAR},#{item.tunnel,jdbcType=VARCHAR},
+            #{item.speedLimit,jdbcType=VARCHAR}, #{item.minSpeedLimit,jdbcType=VARCHAR},#{item.noEntry,jdbcType=VARCHAR},#{item.noStopping,jdbcType=VARCHAR},
+            #{item.leftLaneLine,jdbcType=VARCHAR}, #{item.rightLaneLine,jdbcType=VARCHAR},#{item.conductorMarking,jdbcType=VARCHAR},#{item.pedestrianCrossing,jdbcType=VARCHAR},
+            #{item.trafficLight,jdbcType=VARCHAR}, #{item.decelerationMarking,jdbcType=VARCHAR},#{item.pavementCondition,jdbcType=VARCHAR},#{item.naturalDisaster,jdbcType=VARCHAR},
+            #{item.roadSafetySigns,jdbcType=VARCHAR}, #{item.safetyWarningBoard,jdbcType=VARCHAR},#{item.trafficAccident,jdbcType=VARCHAR},#{item.patency,jdbcType=VARCHAR},
+            #{item.specialVehicleYield,jdbcType=VARCHAR}, #{item.violation,jdbcType=VARCHAR},#{item.doubleFlashingCar,jdbcType=VARCHAR},#{item.selfBehavior,jdbcType=VARCHAR},
+
+            #{item.targetBehavior,jdbcType=VARCHAR}, #{item.createUserId,jdbcType=VARCHAR},#{item.createTime},#{item.modifyUserId,jdbcType=VARCHAR},#{item.modifyTime},
+
+            #{item.isDeleted,jdbcType=VARCHAR}, #{item.share,jdbcType=VARCHAR},#{item.videoPreview,jdbcType=VARCHAR},#{item.videoAddress,jdbcType=VARCHAR},#{item.osgbAddress,jdbcType=VARCHAR},
+            #{item.xodrAddress,jdbcType=VARCHAR}, #{item.xoscAddress,jdbcType=VARCHAR},#{item.jsonAddress,jdbcType=VARCHAR},#{item.maxTime,jdbcType=VARCHAR})
+        </foreach>
     </insert>
 
 
@@ -45,7 +78,7 @@
         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,video_preview
+        xodr_address,xosc_address,json_address,video_preview,max_time
         from simulation.scene_natural
         <where>
             is_deleted = '0'
@@ -340,17 +373,10 @@
     </update>
 
 
-    <select id="querySceneNaturaByName" parameterType="api.common.pojo.param.scene.SceneNaturalParam"
-            resultType="api.common.pojo.po.scene.SceneNaturalPO">
-        select
-        natural_id,natural_name
+    <select id="querySceneNaturaByName" parameterType="java.lang.String" resultType="java.lang.String">
+        select natural_id
         from simulation.scene_natural
-        <where>
-            is_deleted = '0'
-            <if test="naturalName != null and naturalName != ''">
-                and natural_name =#{naturalName,jdbcType=VARCHAR}
-            </if>
-        </where>
+        where is_deleted = '0' and natural_name =#{naturalName}
     </select>
 
     <select id="querySceneNumBySy" parameterType="api.common.pojo.param.scene.SceneNaturalParam"
@@ -386,7 +412,7 @@
         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,video_preview
+        xodr_address,xosc_address,json_address,video_preview,max_time
         from (
         select
         natural_id,natural_name,weather,backlight,light_change,road_type,
@@ -398,7 +424,7 @@
         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,video_preview
+        xodr_address,xosc_address,json_address,video_preview,max_time
         from simulation.scene_natural
         <where>
             <if test="po.naturalName != null and po.naturalName != ''">
@@ -676,7 +702,7 @@
         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,video_preview
+        xodr_address,xosc_address,json_address,video_preview,max_time
         from simulation.scene_natural
         <where>
             <if test="poBq.naturalName != null and poBq.naturalName != ''">
@@ -967,7 +993,7 @@
         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,video_preview  from (
+        xodr_address,xosc_address,json_address,video_preview,max_time  from (
         select
         natural_id,natural_name,weather,backlight,light_change,road_type,
         road_matrrial,driveway_num,driveway_type,road_flatness,road_curvature,
@@ -978,7 +1004,7 @@
         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,video_preview
+        xodr_address,xosc_address,json_address,video_preview,max_time
         from simulation.scene_natural
         <where>
             <if test="poBq.naturalName != null and poBq.naturalName != ''">
@@ -1258,4 +1284,47 @@
             order by a.modify_time desc
         </where>
     </select>
+
+
+    <update id="updateSceneNatural" parameterType="api.common.pojo.po.scene.SceneNaturalPO">
+        update simulation.scene_natural
+        set natural_name=#{naturalName},weather=#{weather},backlight=#{backlight},
+        light_change=#{lightChange},road_type=#{roadType},road_matrrial=#{roadMatrrial},
+        driveway_num=#{drivewayNum},driveway_type=#{drivewayType},road_flatness=#{roadFlatness},
+        road_curvature=#{roadCurvature},ramp=#{ramp},intersection_type=#{intersectionType},
+        plane_intersection=#{planeIntersection},bridge=#{bridge},tunnel=#{tunnel},
+        speed_limit=#{speedLimit},min_speed_limit=#{minSpeedLimit},no_entry=#{noEntry},
+        no_stopping=#{noStopping},left_lane_line=#{leftLaneLine},right_lane_line=#{rightLaneLine},
+        conductor_marking=#{conductorMarking},pedestrian_crossing=#{pedestrianCrossing},traffic_light=#{trafficLight},
+        deceleration_marking=#{decelerationMarking},pavement_condition=#{pavementCondition},natural_disaster=#{naturalDisaster},
+        road_safety_signs=#{roadSafetySigns},safety_warning_board=#{safetyWarningBoard},traffic_accident=#{trafficAccident},
+        patency=#{patency},special_vehicle_yield=#{specialVehicleYield},violation=#{violation},
+        double_flashing_car=#{doubleFlashingCar},self_behavior=#{selfBehavior},target_behavior=#{targetBehavior},
+        modify_user_id=#{modifyUserId},modify_time=#{modifyTime},video_address=#{videoAddress},
+        osgb_address=#{osgbAddress},xodr_address=#{xodrAddress},xosc_address=#{xoscAddress},
+        json_address=#{jsonAddress},max_time=#{maxTime}
+        where natural_id = #{naturalId,jdbcType=VARCHAR}
+    </update>
+
+    <update id="updateSceneNaturalList" parameterType="java.util.List">
+        <foreach collection="list" index="index" item="item" separator=";">
+        update simulation.scene_natural
+            set natural_name=#{item.naturalName},weather=#{item.weather},backlight=#{item.backlight},
+            light_change=#{item.lightChange},road_type=#{item.roadType},road_matrrial=#{item.roadMatrrial},
+            driveway_num=#{item.drivewayNum},driveway_type=#{item.drivewayType},road_flatness=#{item.roadFlatness},
+            road_curvature=#{item.roadCurvature},ramp=#{item.ramp},intersection_type=#{item.intersectionType},
+            plane_intersection=#{item.planeIntersection},bridge=#{item.bridge},tunnel=#{item.tunnel},
+            speed_limit=#{item.speedLimit},min_speed_limit=#{item.minSpeedLimit},no_entry=#{item.noEntry},
+            no_stopping=#{item.noStopping},left_lane_line=#{item.leftLaneLine},right_lane_line=#{item.rightLaneLine},
+            conductor_marking=#{item.conductorMarking},pedestrian_crossing=#{item.pedestrianCrossing},traffic_light=#{item.trafficLight},
+            deceleration_marking=#{item.decelerationMarking},pavement_condition=#{item.pavementCondition},natural_disaster=#{item.naturalDisaster},
+            road_safety_signs=#{item.roadSafetySigns},safety_warning_board=#{item.safetyWarningBoard},traffic_accident=#{item.trafficAccident},
+            patency=#{item.patency},special_vehicle_yield=#{item.specialVehicleYield},violation=#{item.violation},
+            double_flashing_car=#{item.doubleFlashingCar},self_behavior=#{item.selfBehavior},target_behavior=#{item.targetBehavior},
+            modify_user_id=#{item.modifyUserId},modify_time=#{item.modifyTime},video_address=#{item.videoAddress},
+            osgb_address=#{item.osgbAddress},xodr_address=#{item.xodrAddress},xosc_address=#{item.xoscAddress},
+            json_address=#{item.jsonAddress},max_time=#{item.maxTime}
+            where natural_id = #{item.naturalId,jdbcType=VARCHAR}
+        </foreach>
+    </update>
 </mapper>

+ 19 - 5
simulation-resource-server/src/main/resources/mapper/scene/ScenePackageSublistMapper.xml

@@ -8,14 +8,15 @@
         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,tree_node)
+         is_deleted,share,tree_node,template_id,example_id)
         values (#{id,jdbcType=VARCHAR},#{sublistName,jdbcType=VARCHAR},#{weight,jdbcType=VARCHAR},#{ruleName,jdbcType=VARCHAR},
         #{packageAndRules,jdbcType=VARCHAR},
         #{sceneNaturalIds}, #{sceneTrafficIds}, #{sceneStatueIds}, #{sceneGeneralizationIds},
         #{sceneNum},#{parentId,jdbcType=VARCHAR},#{rootId,jdbcType=VARCHAR},#{seq},
          #{packageLevel},#{remarks},
          #{createUserId,jdbcType=VARCHAR},#{createTime},#{modifyUserId,jdbcType=VARCHAR},#{modifyTime},
-        #{isDeleted,jdbcType=VARCHAR}, #{share,jdbcType=VARCHAR}, #{treeNode,jdbcType=VARCHAR})
+        #{isDeleted,jdbcType=VARCHAR}, #{share,jdbcType=VARCHAR}, #{treeNode,jdbcType=VARCHAR},
+        #{templateId,jdbcType=VARCHAR},#{item.exampleId,jdbcType=VARCHAR})
     </insert>
 
 
@@ -26,7 +27,7 @@
         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,tree_node) values
+        is_deleted,share,tree_node,template_id,example_id) values
         <foreach collection="list" index="index" item="item" separator=",">
             (#{item.id,jdbcType=VARCHAR},#{item.sublistName,jdbcType=VARCHAR},#{item.weight,jdbcType=VARCHAR},#{item.ruleName,jdbcType=VARCHAR},
             #{item.packageAndRules,jdbcType=VARCHAR},
@@ -34,7 +35,8 @@
             #{item.sceneNum},#{item.parentId,jdbcType=VARCHAR},#{item.rootId,jdbcType=VARCHAR},#{index}+1,
             #{item.packageLevel},#{item.remarks},
             #{item.createUserId,jdbcType=VARCHAR},#{item.createTime},#{item.modifyUserId,jdbcType=VARCHAR},#{item.modifyTime},
-            #{item.isDeleted,jdbcType=VARCHAR}, #{item.share,jdbcType=VARCHAR}, #{item.treeNode,jdbcType=VARCHAR})
+            #{item.isDeleted,jdbcType=VARCHAR}, #{item.share,jdbcType=VARCHAR}, #{item.treeNode,jdbcType=VARCHAR},
+             #{item.templateId,jdbcType=VARCHAR},#{item.exampleId,jdbcType=VARCHAR})
         </foreach>
     </insert>
 
@@ -43,7 +45,7 @@
         select
         a.sublist_id 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,a.package_and_rules,
-        a.scene_natural_ids,a.scene_traffic_ids,a.scene_statue_ids,a.scene_generalization_ids,a.tree_node
+        a.scene_natural_ids,a.scene_traffic_ids,a.scene_statue_ids,a.scene_generalization_ids,a.tree_node,a.template_id,a.example_id
         from simulation.scene_package_sublist as a left join simulation.scoring_rules as b on
         a.package_and_rules=b.rules_id
         <where>
@@ -63,6 +65,12 @@
             <if test="rootId != null and rootId != ''">
                 and a.root_id = #{rootId}
             </if>
+            <if test="templateId != null and templateId != ''">
+                and a.template_id = #{templateId}
+            </if>
+            <if test="exampleId != null and exampleId != ''">
+                and a.example_id = #{exampleId}
+            </if>
             order by seq
         </where>
     </select>
@@ -92,6 +100,12 @@
             <if test="share != null and share != ''">
                 and share=#{share,jdbcType=VARCHAR}
             </if>
+            <if test="templateId != null and templateId != ''">
+                and a.template_id = #{templateId}
+            </if>
+            <if test="exampleId != null and exampleId != ''">
+                and a.example_id = #{exampleId}
+            </if>
         </where>
     </select>
 

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

@@ -8,12 +8,28 @@
         (regulations_id,scene_name,regulation_type,standard_type,
        create_user_id,create_time,modify_user_id,modify_time,
          is_deleted,share,video_preview,video_address,osgb_address,xml_address,xodr_address,
-        json_address)
+        json_address,max_time)
         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},#{videoPreview,jdbcType=VARCHAR},#{videoAddress,jdbcType=VARCHAR},#{osgbAddress,jdbcType=VARCHAR},
-        #{xmlAddress,jdbcType=VARCHAR}, #{xodrAddress,jdbcType=VARCHAR},#{jsonAddress,jdbcType=VARCHAR})
+        #{xmlAddress,jdbcType=VARCHAR}, #{xodrAddress,jdbcType=VARCHAR},#{jsonAddress,jdbcType=VARCHAR},#{maxTime,jdbcType=VARCHAR})
+    </insert>
+
+    <insert id="saveStandardsRegulationsList" parameterType="java.util.List">
+        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_preview,video_address,osgb_address,xml_address,xodr_address,
+        json_address,max_time)
+        values
+        <foreach collection="list" index="index" item="item" separator=",">
+            (#{item.regulationsId,jdbcType=VARCHAR},#{item.sceneName,jdbcType=VARCHAR},#{item.regulationType,jdbcType=VARCHAR}, #{item.standardType,jdbcType=VARCHAR},
+
+            #{item.createUserId,jdbcType=VARCHAR},#{item.createTime},#{item.modifyUserId,jdbcType=VARCHAR},#{item.modifyTime},
+            #{item.isDeleted,jdbcType=VARCHAR}, #{item.share,jdbcType=VARCHAR},#{item.videoPreview,jdbcType=VARCHAR},#{item.videoAddress,jdbcType=VARCHAR},#{item.osgbAddress,jdbcType=VARCHAR},
+            #{item.xmlAddress,jdbcType=VARCHAR}, #{item.xodrAddress,jdbcType=VARCHAR},#{item.jsonAddress,jdbcType=VARCHAR},#{item.maxTime,jdbcType=VARCHAR})
+        </foreach>
     </insert>
 
 
@@ -23,7 +39,7 @@
         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,video_preview
+        xml_address,xodr_address,json_address,video_preview,max_time
         from simulation.scene_standards_regulations
         <where>
         (is_deleted = '0'
@@ -75,7 +91,7 @@
         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,video_preview
+        xml_address,xodr_address,json_address,video_preview,max_time
         from simulation.scene_standards_regulations
         <where>
             is_deleted = '0'
@@ -114,16 +130,34 @@
         where regulations_id = #{regulationsId,jdbcType=VARCHAR}
     </update>
 
-    <select id="queryStandardsRegulationsByName" parameterType="api.common.pojo.param.scene.StandardsRegulationsParam"
-            resultType="api.common.pojo.po.scene.StandardsRegulationsPO">
+    <select id="queryStandardsRegulationsByName" parameterType="java.lang.String"
+            resultType="java.lang.String">
         select
-        regulations_id,scene_name
+        regulations_id
         from simulation.scene_standards_regulations
-        <where>
-            is_deleted = '0'
-            <if test="sceneName != null and sceneName != ''">
-                and scene_name =#{sceneName,jdbcType=VARCHAR}
-            </if>
-        </where>
+        where is_deleted = '0'
+     and scene_name =#{sceneName,jdbcType=VARCHAR}
+
     </select>
+
+    <update id="updateStandardsRegulations" parameterType="api.common.pojo.po.scene.StandardsRegulationsPO">
+        update simulation.scene_standards_regulations
+        set scene_name=#{sceneName},regulation_type=#{regulationType},
+        standard_type=#{standardType},modify_user_id=#{modifyUserId},
+        modify_time=#{modifyTime},video_address=#{videoAddress},
+        osgb_address=#{osgbAddress},xml_address=#{xmlAddress},
+        xodr_address=#{xodrAddress},json_address=#{jsonAddress},max_time=#{maxTime}
+        where regulations_id = #{regulationsId,jdbcType=VARCHAR}
+    </update>
+    <update id="updateStandardsRegulationsList" parameterType="java.util.List">
+        <foreach collection="list" index="index" item="item" separator=";">
+        update simulation.scene_standards_regulations
+            set scene_name=#{item.sceneName},regulation_type=#{item.regulationType},
+            standard_type=#{item.standardType},modify_user_id=#{item.modifyUserId},
+            modify_time=#{item.modifyTime},video_address=#{item.videoAddress},
+            osgb_address=#{item.osgbAddress},xml_address=#{item.xmlAddress},
+            xodr_address=#{item.xodrAddress},json_address=#{item.jsonAddress},max_time=#{item.maxTime}
+            where regulations_id = #{item.regulationsId,jdbcType=VARCHAR}
+        </foreach>
+    </update>
 </mapper>