Explorar el Código

王耀栋--工作台模块代码提交

wangyaodong hace 3 años
padre
commit
034f43cc48
Se han modificado 48 ficheros con 3269 adiciones y 0 borrados
  1. 2 0
      api-common/src/main/java/api/common/pojo/constants/DictConstants.java
  2. 16 0
      api-common/src/main/java/api/common/pojo/param/project/PageParam.java
  3. 18 0
      api-common/src/main/java/api/common/pojo/param/project/ProjectTaskParam.java
  4. 24 0
      api-common/src/main/java/api/common/pojo/param/project/SceneScoreParam.java
  5. 24 0
      api-common/src/main/java/api/common/pojo/param/project/SimulationManualProjectKafkaParam.java
  6. 100 0
      api-common/src/main/java/api/common/pojo/param/project/SimulationManualProjectParam.java
  7. 54 0
      api-common/src/main/java/api/common/pojo/po/project/BasePo.java
  8. 102 0
      api-common/src/main/java/api/common/pojo/po/project/ManualProjectTaskPo.java
  9. 80 0
      api-common/src/main/java/api/common/pojo/po/project/SimulationManualProjectPo.java
  10. 22 0
      api-common/src/main/java/api/common/pojo/po/project/SimulationMptFirstTargetScorePo.java
  11. 27 0
      api-common/src/main/java/api/common/pojo/po/project/SimulationMptLastTargetScorePo.java
  12. 33 0
      api-common/src/main/java/api/common/pojo/po/project/SimulationMptSceneScorePo.java
  13. 23 0
      api-common/src/main/java/api/common/pojo/vo/project/AlgorithmBaseInfoVo.java
  14. 30 0
      api-common/src/main/java/api/common/pojo/vo/project/AlgorithmScoreVo.java
  15. 15 0
      api-common/src/main/java/api/common/pojo/vo/project/ConfigSensorVo.java
  16. 21 0
      api-common/src/main/java/api/common/pojo/vo/project/ConfigVehicleVO.java
  17. 18 0
      api-common/src/main/java/api/common/pojo/vo/project/DropDownTypeVo.java
  18. 22 0
      api-common/src/main/java/api/common/pojo/vo/project/DropDownVo.java
  19. 40 0
      api-common/src/main/java/api/common/pojo/vo/project/ManualProjectTaskVo.java
  20. 15 0
      api-common/src/main/java/api/common/pojo/vo/project/PageInfoVo.java
  21. 73 0
      api-common/src/main/java/api/common/pojo/vo/project/ProjectDetailsVo.java
  22. 47 0
      api-common/src/main/java/api/common/pojo/vo/project/ProjectReportVo.java
  23. 21 0
      api-common/src/main/java/api/common/pojo/vo/project/ProjectRunResultRatioNumVo.java
  24. 21 0
      api-common/src/main/java/api/common/pojo/vo/project/ProjectRunStateNumVo.java
  25. 89 0
      api-common/src/main/java/api/common/pojo/vo/project/ProjectTaskDetailsVo.java
  26. 35 0
      api-common/src/main/java/api/common/pojo/vo/project/SceneBaseInfoVo.java
  27. 18 0
      api-common/src/main/java/api/common/pojo/vo/project/ScenePackageBaseVo.java
  28. 61 0
      api-common/src/main/java/api/common/pojo/vo/project/ScenePackageSubListVO.java
  29. 27 0
      api-common/src/main/java/api/common/pojo/vo/project/SceneScoreInfoVo.java
  30. 39 0
      api-common/src/main/java/api/common/pojo/vo/project/SceneScoreVo.java
  31. 14 0
      api-common/src/main/java/api/common/pojo/vo/project/SensorBaseInfoVo.java
  32. 38 0
      api-common/src/main/java/api/common/pojo/vo/project/SimulationManualProjectSingleVo.java
  33. 39 0
      api-common/src/main/java/api/common/pojo/vo/project/SimulationManualProjectVo.java
  34. 16 0
      api-common/src/main/java/api/common/pojo/vo/project/SystemUserVo.java
  35. 22 0
      api-common/src/main/java/api/common/pojo/vo/project/VehicleBaseInfoVo.java
  36. 19 0
      api-common/src/main/java/api/common/pojo/vo/project/VehicleSensorVo.java
  37. 11 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/constants/ProjectConstants.java
  38. 132 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/ctrl/SimulationProjectCtrl.java
  39. 36 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/enums/EvaluationLevelEnum.java
  40. 37 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/enums/ProjectRunStateEnum.java
  41. 36 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/enums/SceneTypeEnum.java
  42. 34 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/enums/WhetherEnum.java
  43. 25 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/feign/KafkaService.java
  44. 18 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/feign/fallback/KafkaServiceFallback.java
  45. 1032 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/impl/SimulationProjectServiceImpl.java
  46. 95 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/mapper/SimulationProjectMapper.java
  47. 28 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/project/service/SimulationProjectService.java
  48. 520 0
      simulation-resource-server/src/main/resources/mapper/project/SimulationProjectMapper.xml

+ 2 - 0
api-common/src/main/java/api/common/pojo/constants/DictConstants.java

@@ -18,6 +18,8 @@ public class DictConstants {
     public static final String SELF_REACTION = "selfReaction"; // 自车反应行为
     public static final String CONFLICT_BEHAVIOR = "conflictBehavior"; // 冲突行为
     public static final String CONFLICT_TYPE = "conflictType"; // 冲突类型
+    public static final String EVALUATION_LEVEL = "evaluationLevel";//项目评测等级
+    public static final String PROJECT_RUN_STATE = "projectRunState";//项目运行状态
 
 
 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

+ 95 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/mapper/SimulationProjectMapper.java

@@ -0,0 +1,95 @@
+package com.css.simulation.resource.project.mapper;
+
+import api.common.pojo.param.project.ProjectTaskParam;
+import api.common.pojo.param.project.SceneScoreParam;
+import api.common.pojo.param.project.SimulationManualProjectParam;
+import api.common.pojo.po.project.*;
+import api.common.pojo.vo.project.*;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface SimulationProjectMapper {
+
+    int add(SimulationManualProjectPo po);
+
+    int update(SimulationManualProjectPo po);
+
+    SimulationManualProjectPo selectLastProjectId(Integer nowRq);
+
+    List<SimulationManualProjectPo> selectProject(SimulationManualProjectParam param);
+
+    List<SimulationManualProjectVo> selectProjectList(SimulationManualProjectParam param);
+
+    SimulationManualProjectPo selectProjectById(SimulationManualProjectParam param);
+
+    List<SimulationManualProjectPo> selectProjectByName(SimulationManualProjectParam param);
+
+    SimulationManualProjectPo selectProjectBaseById(SimulationManualProjectParam param);
+
+    int deleteProject(String[] ids);
+
+    int updateProjectNowRunState(SimulationManualProjectParam param);
+
+    List<AlgorithmBaseInfoVo> selectAlgorithmBaseInfoById(String id);
+
+    List<VehicleBaseInfoVo> selectVehicleBaseInfoById(String id);
+
+    List<ScenePackageBaseVo> selectScenePackageBaseById(String id);
+
+    List<VehicleSensorVo> selectVehicleSensor(String id);
+
+    SensorBaseInfoVo selectSensorCamera(String id);
+
+    SensorBaseInfoVo selectSensorOgt(String id);
+
+    SensorBaseInfoVo selectSensorLidar(String id);
+
+    SensorBaseInfoVo selectSensorRadar(String id);
+
+    SensorBaseInfoVo selectSensorGps(String id);
+
+    SceneBaseInfoVo selectSceneAccidentById(String id);
+
+    SceneBaseInfoVo selectSceneNatural(String id);
+
+    SceneBaseInfoVo selectSceneStandardsRegulations(String id);
+
+    List<ManualProjectTaskPo> selectprojectTaskByQuery(ProjectTaskParam vo);
+
+    List<ProjectRunStateNumVo> selectRunStateCount(String id);
+
+    List<ProjectRunResultRatioNumVo> selectRunResultCount(String id);
+
+    List<ScenePackageSubListVO> selectSubSceneByPid(String id);
+
+    List<ScenePackageSubListVO> selectSubListByPid(String id);
+
+    int insertSimulationMptLastTargetScorePo(SimulationMptLastTargetScorePo po);
+
+    int insertSimulationMptSceneScorePo(SimulationMptSceneScorePo po);
+
+    int insertSimulationMptFirstTargetScorePo(SimulationMptFirstTargetScorePo po);
+
+    SimulationMptLastTargetScorePo selectLastTargetScore(SimulationMptLastTargetScorePo po);
+
+    SimulationMptFirstTargetScorePo selectFirstTargetScore(SimulationMptFirstTargetScorePo po);
+
+    SimulationMptSceneScorePo selectSceneScore(SimulationMptSceneScorePo po);
+
+    List<SceneScoreVo> selectSceneScoreByIds(SceneScoreParam param);
+
+    SceneScoreVo selectSceneScoreNumQuery(SimulationMptSceneScorePo po);
+
+    SystemUserVo selectUserById(String id);
+
+    List<ConfigVehicleVO> selectConfigVehicle(String id);
+
+    List<ConfigSensorVo> selectConfigSensor(String id);
+
+    List<SimulationManualProjectPo> selectProjectNowRunState(String[] ids);
+
+}

+ 28 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/project/service/SimulationProjectService.java

@@ -0,0 +1,28 @@
+package com.css.simulation.resource.project.service;
+
+import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.param.project.SimulationManualProjectParam;
+
+public interface SimulationProjectService {
+
+    ResponseBodyVO addOrUpdateProject(SimulationManualProjectParam param);
+
+    ResponseBodyVO selectProject(SimulationManualProjectParam param);
+
+    ResponseBodyVO selectProjectById(SimulationManualProjectParam param);
+
+    ResponseBodyVO deleteProjectByids(SimulationManualProjectParam param);
+
+    ResponseBodyVO updateProjectNowRunState(SimulationManualProjectParam param);
+
+    ResponseBodyVO selectProjectDetailsById(SimulationManualProjectParam param);
+
+    ResponseBodyVO selectProjectReportById(SimulationManualProjectParam param);
+
+    ResponseBodyVO selectDropDownByType(SimulationManualProjectParam param);
+
+    ResponseBodyVO selectProjectTaskById(SimulationManualProjectParam param);
+
+    ResponseBodyVO selectMaxParallelism();
+
+}

+ 520 - 0
simulation-resource-server/src/main/resources/mapper/project/SimulationProjectMapper.xml

@@ -0,0 +1,520 @@
+<?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.project.mapper.SimulationProjectMapper" >
+
+
+    <!--添加-->
+    <insert id="add" parameterType="api.common.pojo.po.project.SimulationManualProjectPo">
+        insert into simulation_manual_project
+        (
+        id,
+        project_date,
+        project_num,
+        project_id,
+        project_name,
+        project_describe,
+        algorithm,
+        vehicle,
+        scene,
+        operation_cycle,
+        parallelism,
+        rule_view,
+        is_choice_gpu,
+        automatic_run_times,
+        last_run_time,
+        automatic_run_state,
+        now_run_state,
+        evaluation_level,
+        finish_time,
+        max_simulation_time,
+        create_time,
+        create_user_id,
+        modify_time,
+        modify_user_id,
+        is_deleted
+        )
+        values
+        (
+        #{id,jdbcType=VARCHAR},
+        #{projectDate,jdbcType=INTEGER},
+        #{projectNum,jdbcType=INTEGER},
+        #{projectId,jdbcType=VARCHAR},
+        #{projectName,jdbcType=VARCHAR},
+        #{projectDescribe,jdbcType=VARCHAR},
+        #{algorithm,jdbcType=VARCHAR},
+        #{vehicle,jdbcType=VARCHAR},
+        #{scene,jdbcType=VARCHAR},
+        #{operationCycle,jdbcType=VARCHAR},
+        #{parallelism,jdbcType=VARCHAR},
+        #{ruleView,jdbcType=VARCHAR},
+        #{isChoiceGpu,jdbcType=VARCHAR},
+        #{automaticRunTimes,jdbcType=BIGINT},
+        #{lastRunTime,jdbcType=TIMESTAMP},
+        #{automaticRunState,jdbcType=VARCHAR},
+        #{nowRunState,jdbcType=VARCHAR},
+        #{evaluationLevel,jdbcType=VARCHAR},
+        #{finishTime,jdbcType=TIMESTAMP},
+        #{maxSimulationTime,jdbcType=BIGINT},
+        #{createTime,jdbcType=TIMESTAMP},
+        #{createUserId,jdbcType=VARCHAR},
+        #{modifyTime,jdbcType=TIMESTAMP},
+        #{modifyUserId,jdbcType=VARCHAR},
+        #{isDeleted,jdbcType=VARCHAR}
+        )
+    </insert>
+
+    <!--修改-->
+    <update id="update" parameterType="api.common.pojo.po.project.SimulationManualProjectPo">
+        update simulation_manual_project
+        set
+        project_name = #{projectName,jdbcType=VARCHAR},
+        project_describe = #{projectDescribe,jdbcType=VARCHAR},
+        algorithm = #{algorithm,jdbcType=VARCHAR},
+        vehicle = #{vehicle,jdbcType=VARCHAR},
+        scene = #{scene,jdbcType=VARCHAR},
+        max_simulation_time = #{maxSimulationTime,jdbcType=BIGINT},
+        parallelism = #{parallelism,jdbcType=VARCHAR},
+        is_choice_gpu = #{isChoiceGpu,jdbcType=VARCHAR}
+        where id = #{id,jdbcType=VARCHAR} and is_deleted = '0'
+    </update>
+
+
+    <!--查询项目最新id-->
+    <select id="selectLastProjectId" resultType="api.common.pojo.po.project.SimulationManualProjectPo">
+        select project_date, project_num, project_id
+        from simulation_manual_project
+        where project_date=#{nowRq,jdbcType=INTEGER} and is_deleted = '0'
+        order by project_date desc, project_num desc
+        limit 1
+    </select>
+
+    <!--查询项目列表-->
+    <select id="selectProject" parameterType="api.common.pojo.param.project.SimulationManualProjectParam" resultType="api.common.pojo.po.project.SimulationManualProjectPo">
+        select * from simulation_manual_project
+        <where>
+            is_deleted = '0'
+            <if test="projectId != null and projectId != ''">
+                and project_id like CONCAT('%',#{project_id,jdbcType=VARCHAR},'%')
+            </if>
+            <if test="projectName != null and projectName != ''">
+                and project_name like CONCAT('%',#{project_name,jdbcType=VARCHAR},'%')
+            </if>
+            <if test="nowRunState != null and nowRunState != ''">
+                and now_run_state = #{nowRunState}
+            </if>
+            <if test="evaluationLevel != null and evaluationLevel != ''">
+                and evaluation_level = #{evaluationLevel}
+            </if>
+            <if test="createTimeStart != null">
+                and create_time &gt;= #{createTimeStart,jdbcType=TIMESTAMP}
+            </if>
+            <if test="createTimeEnd != null">
+                and create_time &lt;= #{createTimeEnd,jdbcType=TIMESTAMP}
+            </if>
+            <if test="finishTimeStart != null">
+                and finish_time &gt;= #{finishTimeStart,jdbcType=TIMESTAMP}
+            </if>
+            <if test="finishTimeEnd != null">
+                and finish_time &lt;= #{finishTimeEnd,jdbcType=TIMESTAMP}
+            </if>
+            <if test="isDeleted != null and isDeleted != ''">
+                and is_deleted = #{isDeleted,jdbcType=VARCHAR}
+            </if>
+        </where>
+        order by project_date desc, project_num desc, modify_time desc
+    </select>
+
+    <!--查询项目列表-->
+    <select id="selectProjectList" parameterType="api.common.pojo.param.project.SimulationManualProjectParam" resultType="api.common.pojo.vo.project.SimulationManualProjectVo">
+        select * from simulation_manual_project
+        <where>
+            is_deleted = '0'
+            <if test="projectId != null and projectId != ''">
+                and project_id like CONCAT('%',#{project_id,jdbcType=VARCHAR},'%')
+            </if>
+            <if test="projectName != null and projectName != ''">
+                and project_name like CONCAT('%',#{project_name,jdbcType=VARCHAR},'%')
+            </if>
+            <if test="nowRunState != null and nowRunState != ''">
+                and now_run_state = #{nowRunState}
+            </if>
+            <if test="evaluationLevel != null and evaluationLevel != ''">
+                and evaluation_level = #{evaluationLevel}
+            </if>
+            <if test="createTimeStart != null">
+                and create_time &gt;= #{createTimeStart,jdbcType=TIMESTAMP}
+            </if>
+            <if test="createTimeEnd != null">
+                and create_time &lt;= #{createTimeEnd,jdbcType=TIMESTAMP}
+            </if>
+            <if test="finishTimeStart != null">
+                and finish_time &gt;= #{finishTimeStart,jdbcType=TIMESTAMP}
+            </if>
+            <if test="finishTimeEnd != null">
+                and finish_time &lt;= #{finishTimeEnd,jdbcType=TIMESTAMP}
+            </if>
+            <if test="isDeleted != null and isDeleted != ''">
+                and is_deleted = #{isDeleted,jdbcType=VARCHAR}
+            </if>
+        </where>
+        order by project_date desc, project_num desc, modify_time desc
+    </select>
+
+    <!--根据id查询-->
+    <select id="selectProjectById" parameterType="api.common.pojo.param.project.SimulationManualProjectParam" resultType="api.common.pojo.po.project.SimulationManualProjectPo">
+        select * from simulation_manual_project where id = #{id,jdbcType=VARCHAR} and is_deleted = '0'
+    </select>
+
+    <!--根据项目名查询工作信息-->
+    <select id="selectProjectByName" parameterType="api.common.pojo.param.project.SimulationManualProjectParam" resultType="api.common.pojo.po.project.SimulationManualProjectPo">
+        select *
+        from simulation_manual_project
+        where project_name = #{projectName,jdbcType=VARCHAR} and is_deleted = '0'
+    </select>
+
+    <!--根据id查询基本信息-->
+    <select id="selectProjectBaseById" parameterType="api.common.pojo.param.project.SimulationManualProjectParam" resultType="api.common.pojo.po.project.SimulationManualProjectPo">
+        select id,algorithm,scene,algorithm_score
+        from simulation_manual_project where id = #{id,jdbcType=VARCHAR} and is_deleted = '0'
+    </select>
+
+    <!--删除-->
+    <update id="deleteProject">
+        update simulation_manual_project
+        set is_deleted='1'
+        where id in
+        <foreach collection="array" open="(" separator="," close=")" item="id">
+            #{id,jdbcType=VARCHAR}
+        </foreach>
+
+    </update>
+
+    <!--查询项目状态-->
+    <select id="selectProjectNowRunState" resultType="api.common.pojo.po.project.SimulationManualProjectPo">
+        select now_run_state
+        from simulation_manual_project
+        where
+        is_deleted='0' and
+        id in
+        <foreach collection="array" open="(" separator="," close=")" item="id">
+            #{id,jdbcType=VARCHAR}
+        </foreach>
+    </select>
+
+    <!--修改运行状态-->
+    <update id="updateProjectNowRunState" parameterType="api.common.pojo.param.project.SimulationManualProjectParam">
+        update simulation_manual_project
+        <set>
+            <if test="nowRunState != null and nowRunState != ''">
+                now_run_state = #{nowRunState,jdbcType=VARCHAR},
+            </if>
+            <if test="nowRunState == '10'">
+                start_time=#{startTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="nowRunState == '30'">
+                finish_time=#{finishTime,jdbcType=TIMESTAMP},
+            </if>
+        </set>
+        where id = #{id,jdbcType=VARCHAR} and is_deleted = '0'
+    </update>
+
+    <!--获取算法基本信息-->
+    <select id="selectAlgorithmBaseInfoById" parameterType="string" resultType="api.common.pojo.vo.project.AlgorithmBaseInfoVo">
+        select a.id, a.algorithm_name, a.description
+        from algorithm a
+        where is_deleted = '0'
+        <if test="id != null and id != ''">
+            and a.id = #{id,jdbcType=VARCHAR}
+        </if>
+    </select>
+
+    <!--获取车辆基本信息-->
+    <select id="selectVehicleBaseInfoById" parameterType="string" resultType="api.common.pojo.vo.project.VehicleBaseInfoVo">
+        select a.id, a.vehicle_name, a.description
+        from model_vehicle a
+        where is_deleted = '0'
+        <if test="id != null and id != ''">
+            and a.id = #{id,jdbcType=VARCHAR}
+        </if>
+    </select>
+
+    <!--获取车辆配置信息-->
+    <select id="selectConfigVehicle" parameterType="string" resultType="api.common.pojo.vo.project.ConfigVehicleVO">
+        select id, config_name, vehicle_id
+        from model_config
+        where is_deleted = '0'
+        <if test="id != null and id != ''">
+            and id = #{id,jdbcType=VARCHAR}
+        </if>
+    </select>
+
+    <!--查询车辆配置传感器信息-->
+    <select id="selectConfigSensor" parameterType="string" resultType="api.common.pojo.vo.project.ConfigSensorVo">
+        select sensor_type
+        from relation_config_sensor
+        where is_deleted = '0'
+        <if test="id != null and id != ''">
+            and config_id = #{id,jdbcType=VARCHAR}
+        </if>
+        group by sensor_type
+    </select>
+
+    <!--获取场景包基本信息-->
+    <select id="selectScenePackageBaseById" parameterType="string" resultType="api.common.pojo.vo.project.ScenePackageBaseVo">
+        select a.package_id,a.package_name, a.scene_num
+        from scene_package a
+        where is_deleted = '0'
+        <if test="id != null and id != ''">
+            and a.id = #{id,jdbcType=VARCHAR}
+        </if>
+    </select>
+
+    <!--查询车辆与传感器关联信息-->
+    <select id="selectVehicleSensor" parameterType="string" resultType="api.common.pojo.vo.project.VehicleSensorVo">
+        select sensor_id, sensor_type
+        from relation_config_sensor
+        where config_id = #{id,jdbcType=VARCHAR} and is_deleted = '0'
+    </select>
+
+    <!--摄像头基本信息-->
+    <select id="selectSensorCamera" parameterType="string" resultType="api.common.pojo.vo.project.SensorBaseInfoVo">
+        select a.name
+        from model_sensor_camera a
+        where a.id = #{id,jdbcType=VARCHAR} and is_deleted = '0'
+    </select>
+
+    <!--完美传感器基本信息-->
+    <select id="selectSensorOgt" parameterType="string" resultType="api.common.pojo.vo.project.SensorBaseInfoVo">
+        select a.name
+        from model_sensor_ogt a
+        where a.id = #{id,jdbcType=VARCHAR} and is_deleted = '0'
+    </select>
+
+    <!--激光雷达基本信息-->
+    <select id="selectSensorLidar" parameterType="string" resultType="api.common.pojo.vo.project.SensorBaseInfoVo">
+        select a.name
+        from model_sensor_lidar a
+        where a.id = #{id,jdbcType=VARCHAR} and is_deleted = '0'
+    </select>
+    <!--毫米波雷达基本信息-->
+    <select id="selectSensorRadar" parameterType="string" resultType="api.common.pojo.vo.project.SensorBaseInfoVo">
+        select a.name
+        from model_sensor_radar a
+        where a.id = #{id,jdbcType=VARCHAR} and is_deleted = '0'
+    </select>
+    <!--gps基本信息-->
+    <select id="selectSensorGps" parameterType="string" resultType="api.common.pojo.vo.project.SensorBaseInfoVo">
+        select a.name
+        from model_sensor_gps a
+        where a.id = #{id,jdbcType=VARCHAR} and is_deleted = '0'
+    </select>
+
+    <!--查询交通事故场景信息-->
+    <select id="selectSceneAccidentById" parameterType="string" resultType="api.common.pojo.vo.project.SceneBaseInfoVo">
+        select scene_name
+        from scene_accident
+        where accident_id = #{id,jdbcType=VARCHAR} and is_deleted = '0'
+    </select>
+    <!--查询自然场景信息-->
+    <select id="selectSceneNatural" parameterType="string" resultType="api.common.pojo.vo.project.SceneBaseInfoVo">
+        select natural_name
+        from scene_natural
+        where natural_id = #{id,jdbcType=VARCHAR} and is_deleted = '0'
+
+    </select>
+    <!--查询标准法规场景信息-->
+    <select id="selectSceneStandardsRegulations" parameterType="string" resultType="api.common.pojo.vo.project.SceneBaseInfoVo">
+        select scene_name
+        from scene_standards_regulations
+        where regulations_id = #{id,jdbcType=VARCHAR} and is_deleted = '0'
+    </select>
+    <!--查询任务列表-->
+    <select id="selectprojectTaskByQuery" parameterType="api.common.pojo.param.project.ProjectTaskParam" resultType="api.common.pojo.po.project.ManualProjectTaskPo">
+        select *
+        from simulation_manual_project_task
+        <where>
+            is_deleted = '0'
+            <if test="id != null and id != ''">
+                and id = #{id,jdbcType=VARCHAR}
+            </if>
+            <if test="pId != null and pId != ''">
+                and p_id = #{pId,jdbcType=VARCHAR}
+            </if>
+            <if test="sceneId != null and sceneId != ''">
+                and scene_id = #{sceneId,jdbcType=VARCHAR}
+            </if>
+        </where>
+    </select>
+
+    <!--根据任务运行状态分组查询统计数量-->
+    <select id="selectRunStateCount" parameterType="string" resultType="api.common.pojo.vo.project.ProjectRunStateNumVo">
+        select run_state as stateName, count(*) as num
+        from simulation_manual_project_task
+        where p_id = #{id,jdbcType=VARCHAR} and is_deleted = '0'
+        group by run_state
+    </select>
+
+    <!--根据任务运行状态分组查询统计数量-->
+    <select id="selectRunResultCount" parameterType="string" resultType="api.common.pojo.vo.project.ProjectRunResultRatioNumVo">
+        select run_result as resultName, count(*) as num
+        from simulation_manual_project_task
+        where p_id = #{id,jdbcType=VARCHAR} and is_deleted = '0'
+        group by run_result
+    </select>
+
+    <!--根据场景包id获取场景子集-->
+    <select id="selectSubSceneByPid" parameterType="string" resultType="api.common.pojo.vo.project.ScenePackageSubListVO">
+        select sublist_id,sublist_name,scene_num,weight,parent_id
+        from scene_package_sublist
+        where parent_id = #{id,jdbcType=VARCHAR} and is_deleted = '0'
+        order by seq desc
+    </select>
+
+    <!--查询场景包id下最后一级所有指标和场景-->
+    <select id="selectSubListByPid" parameterType="string" resultType="api.common.pojo.vo.project.ScenePackageSubListVO">
+        select
+        sublist_id,
+        sublist_name,
+        scene_num,
+        scene_natural_ids,
+        scene_traffic_ids,
+        scene_statue_ids,
+        scene_generalization_ids
+        from scene_package_sublist
+        where package_and_rules != null
+        and package_and_rules != ''
+        and root_id = #{id,jdbcType=VARCHAR}
+        and is_deleted = '0'
+    </select>
+
+    <!--保存项目最后一级指标信息-->
+    <insert id="insertSimulationMptLastTargetScorePo" parameterType="api.common.pojo.po.project.SimulationMptLastTargetScorePo">
+        insert into simulation_mpt_last_target_score
+        (
+        id,
+        p_id,
+        target,
+        create_time,
+        create_user_id,
+        modify_time,
+        modify_user_id,
+        is_deleted
+        )
+        values
+        (
+        #{id,jdbcType=VARCHAR}
+        #{pId,jdbcType=VARCHAR}
+        #{target,jdbcType=VARCHAR}
+        #{createTime,jdbcType=TIMESTAMP},
+        #{createUserId,jdbcType=VARCHAR},
+        #{modifyTime,jdbcType=TIMESTAMP},
+        #{modifyUserId,jdbcType=VARCHAR},
+        #{isDeleted,jdbcType=VARCHAR}
+        )
+    </insert>
+
+    <!--保存第一级指标信息-->
+    <insert id="insertSimulationMptFirstTargetScorePo" parameterType="api.common.pojo.po.project.SimulationMptFirstTargetScorePo">
+        insert into simulation_mpt_last_target_score
+        (
+        id,
+        p_id,
+        target,
+        create_time,
+        create_user_id,
+        modify_time,
+        modify_user_id,
+        is_deleted
+        )
+        values
+        (
+        #{id,jdbcType=VARCHAR}
+        #{pId,jdbcType=VARCHAR}
+        #{target,jdbcType=VARCHAR}
+        #{createTime,jdbcType=TIMESTAMP},
+        #{createUserId,jdbcType=VARCHAR},
+        #{modifyTime,jdbcType=TIMESTAMP},
+        #{modifyUserId,jdbcType=VARCHAR},
+        #{isDeleted,jdbcType=VARCHAR}
+        )
+    </insert>
+
+    <!--保存项目场景信息-->
+    <insert id="insertSimulationMptSceneScorePo" parameterType="api.common.pojo.po.project.SimulationMptSceneScorePo">
+        insert into simulation_mpt_scene_score
+        (
+        id,
+        p_id,
+        scene_id,
+        scene_type,
+        score,
+        create_time,
+        create_user_id,
+        modify_time,
+        modify_user_id,
+        is_deleted
+        )
+        values
+        (
+        #{id,jdbcType=VARCHAR},
+        #{p_id,jdbcType=VARCHAR},
+        #{scene_id,jdbcType=VARCHAR},
+        #{scene_type,jdbcType=VARCHAR},
+        #{score,jdbcType=DOUBLE},
+        #{createTime,jdbcType=TIMESTAMP},
+        #{createUserId,jdbcType=VARCHAR},
+        #{modifyTime,jdbcType=TIMESTAMP},
+        #{modifyUserId,jdbcType=VARCHAR},
+        #{isDeleted,jdbcType=VARCHAR}
+        )
+    </insert>
+
+    <!--查询最后一级指标得分-->
+    <select id="selectLastTargetScore" parameterType="api.common.pojo.po.project.SimulationMptLastTargetScorePo" resultType="api.common.pojo.po.project.SimulationMptLastTargetScorePo">
+        select not_standard_scene_num, score
+        from simulation_mpt_last_target_score
+        where p_id = #{pId,jdbcType=VARCHAR} and target = #{target,jdbcType=VARCHAR} and is_deleted = '0'
+    </select>
+
+    <!--查询第一级指标得分-->
+    <select id="selectFirstTargetScore" parameterType="api.common.pojo.po.project.SimulationMptFirstTargetScorePo" resultType="api.common.pojo.po.project.SimulationMptFirstTargetScorePo">
+        select score
+        from simulation_mpt_first_target_score
+        where p_id = #{pId,jdbcType=VARCHAR} and target = #{target,jdbcType=VARCHAR} and is_deleted = '0'
+    </select>
+
+    <!--查询场景得分-->
+    <select id="selectSceneScore" parameterType="api.common.pojo.po.project.SimulationMptSceneScorePo" resultType="api.common.pojo.po.project.SimulationMptSceneScorePo">
+        select score, target_evaluate
+        from simulation_mpt_scene_score
+        where p_id = #{pId,jdbcType=VARCHAR} and scene_id = #{sceneId,jdbcType=VARCHAR} and is_deleted = '0'
+    </select>
+
+    <!--查询场景不等于0的得分的数量-->
+    <select id="selectSceneScoreNumQuery" parameterType="api.common.pojo.po.project.SimulationMptSceneScorePo" resultType="api.common.pojo.vo.project.SceneScoreVo">
+        select count(*) as num
+        from simulation_mpt_scene_score
+        where p_id = #{pId,jdbcType=VARCHAR}
+        and score != 0 and is_deleted = '0'
+    </select>
+
+    <!--批量查询场景得分-->
+    <select id="selectSceneScoreByIds" parameterType="api.common.pojo.param.project.SceneScoreParam" resultType="api.common.pojo.vo.project.SceneScoreVo">
+        select id, scene_id, scene_type,score, target_evaluate, return_scene_id, score_explain
+        from simulation_manual_project_task
+        where p_id = #{pId,jdbcType=VARCHAR} and  scene_type = #{sceneType,jdbcType=VARCHAR}
+        and last_targer_id = #{lastTargerId,jdbcType=VARCHAR} and is_deleted = '0'
+        and scene_id in
+        <foreach collection="sceneIds" open="(" separator="," close=")" item="id">
+            #{id,jdbcType=VARCHAR}
+        </foreach>
+    </select>
+
+    <!--获取人员信息-->
+    <select id="selectUserById" resultType="api.common.pojo.vo.project.SystemUserVo">
+        select *
+        from system_user
+        where id = #{id,jdbcType=VARCHAR}
+    </select>
+
+</mapper>