夜得朦胧 1 жил өмнө
parent
commit
f093d3e1a7

+ 5 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/server/adapter/controller/job_manage/JobManageController.java

@@ -401,4 +401,9 @@ public class JobManageController {
     return multiSimulationProjectService.copyMultiSimulationScene(param);
   }
 
+  @RequestMapping("/viewMultiSimulationProjectResult")
+  public ResponseBodyVO<MultiSimulationSceneResultVO> viewMultiSimulationProjectResult(@RequestBody MultiSimulationSceneParam param) {
+    return multiSimulationProjectService.viewMultiSimulationProjectResult(param);
+  }
+
 }

+ 174 - 120
simulation-resource-server/src/main/java/com/css/simulation/resource/server/app/impl/MultiSimulationProjectServiceImpl.java

@@ -2,8 +2,10 @@ package com.css.simulation.resource.server.app.impl;
 
 import api.common.pojo.common.PageVO;
 import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.enums.MultiSimulationResultTypeEnum;
 import api.common.pojo.enums.MultiSimulationStatusEnum;
 import api.common.pojo.param.project.MultiSimulationProjectParam;
+import api.common.pojo.param.project.MultiSimulationProjectResultParam;
 import api.common.pojo.param.project.MultiSimulationSceneCarParam;
 import api.common.pojo.param.project.MultiSimulationSceneParam;
 import api.common.pojo.po.algorithm.AlgorithmPO;
@@ -13,6 +15,7 @@ import api.common.pojo.po.project.MultiSimulationScenePO;
 import api.common.pojo.vo.map.SimulationMapVO;
 import api.common.pojo.vo.project.*;
 import api.common.util.StringUtil;
+import api.common.util.TimeUtil;
 import com.alibaba.cloud.commons.lang.StringUtils;
 import com.alibaba.fastjson.JSONObject;
 import com.css.simulation.resource.server.app.service.job_manage.MultiSimulationProjectService;
@@ -48,28 +51,31 @@ public class MultiSimulationProjectServiceImpl implements MultiSimulationProject
     @Resource
     private SimulationManualProjectMapper simulationManualProjectMapper;
 
+    @Resource
+    private MultiSimulationProjectResultMapper resultMapper;
+
     @Override
     @SneakyThrows
-    public ResponseBodyVO<PageInfo<MultiSimulationProjectVO>> selectMultiSimulationProject(MultiSimulationProjectParam param){
-        if (Objects.isNull(param.getPageNum())){
+    public ResponseBodyVO<PageInfo<MultiSimulationProjectVO>> selectMultiSimulationProject(MultiSimulationProjectParam param) {
+        if (Objects.isNull(param.getPageNum())) {
             param.setPageNum(1);
         }
-        if (Objects.isNull(param.getPageSize())){
+        if (Objects.isNull(param.getPageSize())) {
             param.setPageSize(10);
         }
-        if (StringUtils.isBlank(param.getProjectName())){
+        if (StringUtils.isBlank(param.getProjectName())) {
             param.setProjectName(null);
         }
-        if (StringUtils.isBlank(param.getProjectKey())){
+        if (StringUtils.isBlank(param.getProjectKey())) {
             param.setProjectKey(null);
         }
-        if (StringUtils.isBlank(param.getProjectId())){
+        if (StringUtils.isBlank(param.getProjectId())) {
             param.setProjectId(null);
         }
         setPage(param.getPageNum(), param.getPageSize());
         List<MultiSimulationProjectVO> multiSimulationProjectVOS = multiSimulationProjectMapper.selectProjectList(param);
-        if (!CollectionUtils.isEmpty(multiSimulationProjectVOS)){
-            for (MultiSimulationProjectVO project: multiSimulationProjectVOS) {
+        if (!CollectionUtils.isEmpty(multiSimulationProjectVOS)) {
+            for (MultiSimulationProjectVO project : multiSimulationProjectVOS) {
                 String id = project.getId();
                 project.setProjectStatusValue(MultiSimulationStatusEnum.matchStatusEnumByStatus(project.getProjectStatus()).getProjectStatusValue());
                 int i = simulationSceneMapper.selectSceneNumsByProjectId(id);
@@ -79,25 +85,26 @@ public class MultiSimulationProjectServiceImpl implements MultiSimulationProject
         PageInfo<MultiSimulationProjectVO> pageInfo = new PageInfo<>(multiSimulationProjectVOS);
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, pageInfo);
     }
+
     @Override
     @SneakyThrows
-    public ResponseBodyVO<MultiSimulationProjectDetailVO> addMultiSimulationProject(MultiSimulationProjectParam param){
+    public ResponseBodyVO<MultiSimulationProjectDetailVO> addMultiSimulationProject(MultiSimulationProjectParam param) {
         String name = param.getProjectName();
 
         MultiSimulationProjectVO multiSimulationProjectVO = multiSimulationProjectMapper.selectMultiSimulationProjectByName(StringUtils.isBlank(name) ? "" : name);
-        if (!Objects.isNull(multiSimulationProjectVO)){
-            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE,"添加失败,存在同名的多模式仿真任务");
+        if (!Objects.isNull(multiSimulationProjectVO)) {
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "添加失败,存在同名的多模式仿真任务");
         }
         MultiSimulationProjectPO build = MultiSimulationProjectPO.builder()
             .id(StringUtil.getRandomUUID())
-            .projectName(param.getProjectName()== null ? "": param.getProjectName())
-            .projectMaxSeconds(param.getProjectMaxSeconds() == null ? 0: param.getProjectMaxSeconds())
+            .projectName(param.getProjectName() == null ? "" : param.getProjectName())
+            .projectMaxSeconds(param.getProjectMaxSeconds() == null ? 0 : param.getProjectMaxSeconds())
             .projectKey(param.getProjectKey() == null ? "" : param.getProjectKey())
-            .projectDescription(param.getProjectDescription() == null ? "": param.getProjectDescription())
+            .projectDescription(param.getProjectDescription() == null ? "" : param.getProjectDescription())
             .projectStatus(MultiSimulationStatusEnum.INIT_STATUS.getProjectStatus())
             .build();
         int i = multiSimulationProjectMapper.addMultiSimulationProject(build);
-        if (i > 0){
+        if (i > 0) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, MultiSimulationProjectDetailVO.builder().projectId(build.getId()).build());
         }
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE);
@@ -105,50 +112,53 @@ public class MultiSimulationProjectServiceImpl implements MultiSimulationProject
 
     @Override
     @SneakyThrows
-    public ResponseBodyVO<String> deleteMultiSimulationProject(MultiSimulationProjectParam param){
+    public ResponseBodyVO<String> deleteMultiSimulationProject(MultiSimulationProjectParam param) {
         int i = multiSimulationProjectMapper.deleteMultiSimulationProject(param.getProjectId());
-        if (i > 0){
+        if (i > 0) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, null);
         }
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE);
     }
+
     @Override
     @SneakyThrows
-    public ResponseBodyVO<String> updateMultiSimulationProject(MultiSimulationProjectParam param){
-        if (StringUtils.isBlank(param.getProjectId())){
+    public ResponseBodyVO<String> updateMultiSimulationProject(MultiSimulationProjectParam param) {
+        if (StringUtils.isBlank(param.getProjectId())) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "项目id不能为空");
         }
         param.setProjectName(StringUtils.isBlank(param.getProjectName()) ? "" : param.getProjectName());
         param.setProjectDescription(StringUtils.isBlank(param.getProjectDescription()) ? "" : param.getProjectDescription());
         param.setProjectMaxSeconds(Objects.isNull(param.getProjectMaxSeconds()) ? 0 : param.getProjectMaxSeconds());
         int i = multiSimulationProjectMapper.updateMultiSimulationProject(param);
-        if (i > 0){
+        if (i > 0) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, null);
         }
         return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE);
     }
+
     @Override
     @SneakyThrows
-    public ResponseBodyVO<MultiSimulationProjectVO> getMultiSimulationProjectDetail(MultiSimulationProjectParam param){
-        if (StringUtils.isBlank(param.getProjectId())){
+    public ResponseBodyVO<MultiSimulationProjectVO> getMultiSimulationProjectDetail(MultiSimulationProjectParam param) {
+        if (StringUtils.isBlank(param.getProjectId())) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "项目id不能为空");
         }
         MultiSimulationProjectVO multiSimulationProjectVO = multiSimulationProjectMapper.selectMultiSimulationProjectById(param.getProjectId());
-        if (Objects.isNull(multiSimulationProjectVO)){
+        if (Objects.isNull(multiSimulationProjectVO)) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "未查询出有效的项目");
         }
         multiSimulationProjectVO.setProjectStatusValue(MultiSimulationStatusEnum.matchStatusEnumByStatus(multiSimulationProjectVO.getProjectStatus()).getProjectStatusValue());
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, multiSimulationProjectVO);
     }
+
     @Override
     @SneakyThrows
-    public ResponseBodyVO<MultiSimulationSceneVO> addMultiSimulationScene(MultiSimulationSceneParam param){
-        if (StringUtils.isBlank(param.getProjectId())){
+    public ResponseBodyVO<MultiSimulationSceneVO> addMultiSimulationScene(MultiSimulationSceneParam param) {
+        if (StringUtils.isBlank(param.getProjectId())) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "项目id不能为空");
         }
         MultiSimulationScenePO build = MultiSimulationScenePO.builder().id(StringUtil.getRandomUUID()).projectId(param.getProjectId()).build();
         int i = simulationSceneMapper.addMultiSimulationScene(build);
-        if (i > 0){
+        if (i > 0) {
             MultiSimulationSceneVO sceneVO = MultiSimulationSceneVO.builder().sceneId(build.getId()).build();
             return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, sceneVO);
         }
@@ -156,15 +166,14 @@ public class MultiSimulationProjectServiceImpl implements MultiSimulationProject
     }
 
 
-
     @Override
     @SneakyThrows
-    public ResponseBodyVO deleteMultiSimulationScene(MultiSimulationSceneParam param){
-        if (StringUtils.isBlank(param.getSceneId())){
+    public ResponseBodyVO deleteMultiSimulationScene(MultiSimulationSceneParam param) {
+        if (StringUtils.isBlank(param.getSceneId())) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "删除失败,场景id不能为空");
         }
         int i = simulationSceneMapper.deleteMultiSimulationScene(param);
-        if (i > 0){
+        if (i > 0) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, "删除成功");
         }
         return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE);
@@ -172,29 +181,29 @@ public class MultiSimulationProjectServiceImpl implements MultiSimulationProject
 
     @Override
     @SneakyThrows
-    public ResponseBodyVO<PageInfo<MultiSimulationSceneVO>> selectMultiSimulationSceneList(MultiSimulationSceneParam param){
-        if (StringUtils.isBlank(param.getProjectId())){
+    public ResponseBodyVO<PageInfo<MultiSimulationSceneVO>> selectMultiSimulationSceneList(MultiSimulationSceneParam param) {
+        if (StringUtils.isBlank(param.getProjectId())) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "查询失败,id为空");
         }
-        if (Objects.isNull(param.getPageNum())){
+        if (Objects.isNull(param.getPageNum())) {
             param.setPageNum(1);
         }
-        if (Objects.isNull(param.getPageSize())){
+        if (Objects.isNull(param.getPageSize())) {
             param.setPageSize(10);
         }
         setPage(param.getPageNum(), param.getPageSize());
         List<MultiSimulationSceneVO> multiSimulationSceneVOS = simulationSceneMapper.selectSceneList(param);
-        if (!CollectionUtils.isEmpty(multiSimulationSceneVOS)){
-            for (MultiSimulationSceneVO scene: multiSimulationSceneVOS) {
+        if (!CollectionUtils.isEmpty(multiSimulationSceneVOS)) {
+            for (MultiSimulationSceneVO scene : multiSimulationSceneVOS) {
                 String sceneId = scene.getSceneId();
                 int i = sceneCarMapper.selectSceneCarNumsBySceneId(sceneId);
                 scene.setCarNums(i);
                 String mapId = scene.getMapId();
-                if (StringUtils.isBlank(mapId)){
+                if (StringUtils.isBlank(mapId)) {
                     continue;
                 }
                 SimulationMapVO simulationMapVO = mapMapper.selectMapByMapId(mapId);
-                if (Objects.isNull(simulationMapVO)){
+                if (Objects.isNull(simulationMapVO)) {
                     continue;
                 }
                 scene.setMapName(simulationMapVO.getMapName());
@@ -206,20 +215,20 @@ public class MultiSimulationProjectServiceImpl implements MultiSimulationProject
 
     @Override
     @SneakyThrows
-    public ResponseBodyVO<MultiSimulationSceneVO> getMultiSimulationSceneDetail(MultiSimulationSceneParam param){
-        if (StringUtils.isBlank(param.getSceneId())){
+    public ResponseBodyVO<MultiSimulationSceneVO> getMultiSimulationSceneDetail(MultiSimulationSceneParam param) {
+        if (StringUtils.isBlank(param.getSceneId())) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "查询失败,场景id为空");
         }
         MultiSimulationSceneVO sceneVO = simulationSceneMapper.selectSceneDetailBySceneId(param.getSceneId());
-        if (Objects.isNull(sceneVO)){
+        if (Objects.isNull(sceneVO)) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "查询失败,未找到有效的场景");
         }
         String mapId = sceneVO.getMapId();
-        if (StringUtils.isNotBlank(mapId)){
+        if (StringUtils.isNotBlank(mapId)) {
             SimulationMapVO simulationMapVO = mapMapper.selectMapByMapId(mapId);
-            if (Objects.isNull(simulationMapVO)){
+            if (Objects.isNull(simulationMapVO)) {
                 sceneVO.setMapId("");
-            }else {
+            } else {
                 sceneVO.setMapName(simulationMapVO.getMapName());
                 sceneVO.setMapImgUrl(simulationMapVO.getMapImgUrl());
             }
@@ -229,37 +238,37 @@ public class MultiSimulationProjectServiceImpl implements MultiSimulationProject
 
     @Override
     @SneakyThrows
-    public ResponseBodyVO<PageInfo<MultiSimulationSceneCarVO>> getMultiSimulationSceneCarList(MultiSimulationSceneCarParam param){
+    public ResponseBodyVO<PageInfo<MultiSimulationSceneCarVO>> getMultiSimulationSceneCarList(MultiSimulationSceneCarParam param) {
         String sceneId = param.getSceneId();
-        if (StringUtils.isBlank(sceneId)){
+        if (StringUtils.isBlank(sceneId)) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "查询失败,场景id为空");
         }
-        if (Objects.isNull(param.getPageNum())){
+        if (Objects.isNull(param.getPageNum())) {
             param.setPageNum(1);
         }
-        if (Objects.isNull(param.getPageSize())){
+        if (Objects.isNull(param.getPageSize())) {
             param.setPageSize(10);
         }
         setPage(param.getPageNum(), param.getPageSize());
         List<MultiSimulationSceneCarVO> multiSimulationSceneCarVOS = sceneCarMapper.selectSceneCarList(param);
-        if (!CollectionUtils.isEmpty(multiSimulationSceneCarVOS)){
-            for (MultiSimulationSceneCarVO car: multiSimulationSceneCarVOS) {
+        if (!CollectionUtils.isEmpty(multiSimulationSceneCarVOS)) {
+            for (MultiSimulationSceneCarVO car : multiSimulationSceneCarVOS) {
                 String algorithmId = car.getAlgorithmId();
                 String carId = car.getCarId();
-                if (StringUtils.isNotBlank(carId)){
+                if (StringUtils.isNotBlank(carId)) {
                     ConfigPO configPO = simulationManualProjectMapper.selectConfigVehicleById(carId);
-                    if (!Objects.isNull(configPO)){
+                    if (!Objects.isNull(configPO)) {
                         car.setCarName(configPO.getConfigName());
-                    }else {
+                    } else {
                         log.info("根据carId未查出有效的车辆信息carId:{}", carId);
                         car.setCarId("");
                     }
                 }
-                if (StringUtils.isNotBlank(algorithmId)){
+                if (StringUtils.isNotBlank(algorithmId)) {
                     AlgorithmPO algorithmPO = simulationManualProjectMapper.selectAvailableAlgorithmById(algorithmId);
-                    if (!Objects.isNull(algorithmPO)){
+                    if (!Objects.isNull(algorithmPO)) {
                         car.setAlgorithmName(algorithmPO.getAlgorithmName());
-                    }else {
+                    } else {
                         log.info("根据算法id未查出有效的算法信息algorithmId:{}", algorithmId);
                         car.setAlgorithmId("");
                     }
@@ -270,20 +279,20 @@ public class MultiSimulationProjectServiceImpl implements MultiSimulationProject
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, pageInfo);
     }
 
-    public ResponseBodyVO deleteMultiSimulationSceneCar(MultiSimulationSceneCarParam param){
+    public ResponseBodyVO deleteMultiSimulationSceneCar(MultiSimulationSceneCarParam param) {
         int i = sceneCarMapper.deleteMultiSimulationSceneCar(param);
-        if (i > 0){
+        if (i > 0) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
         }
         MultiSimulationSceneCarVO multiSimulationSceneCarVO = sceneCarMapper.selectSceneCarById(param);
-        if (Objects.isNull(multiSimulationSceneCarVO)){
+        if (Objects.isNull(multiSimulationSceneCarVO)) {
             log.info("该id未查出有效的场景车辆信息:{}", param.getSceneCarId());
             return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
         }
         return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE);
     }
 
-    public ResponseBodyVO<MultiSimulationSceneCarVO> addOrUpdateMultiSimulationSceneCar(MultiSimulationSceneCarParam param){
+    public ResponseBodyVO<MultiSimulationSceneCarVO> addOrUpdateMultiSimulationSceneCar(MultiSimulationSceneCarParam param) {
         param.setCarId(StringUtils.isBlank(param.getCarId()) ? "" : param.getCarId());
         param.setAlgorithmId(StringUtils.isBlank(param.getAlgorithmId()) ? "" : param.getAlgorithmId());
         param.setPathId(StringUtils.isBlank(param.getPathId()) ? "" : param.getPathId());
@@ -293,20 +302,20 @@ public class MultiSimulationProjectServiceImpl implements MultiSimulationProject
         param.setPathEndPoint(StringUtils.isBlank(param.getPathEndPoint()) ? "" : param.getPathEndPoint());
         param.setCarSort(Objects.isNull(param.getCarSort()) ? 0 : param.getCarSort());
 
-        if (StringUtils.isBlank(param.getSceneCarId())){
+        if (StringUtils.isBlank(param.getSceneCarId())) {
             param.setSceneCarId(StringUtil.getRandomUUID());
-            if (StringUtils.isBlank(param.getSceneId())){
+            if (StringUtils.isBlank(param.getSceneId())) {
                 return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "场景id为空");
             }
             // 新增时默认不是仿真视角
             param.setIsSimulationCar(0);
             int i = sceneCarMapper.addMultiSimulationSceneCar(param);
-            if (i > 0){
+            if (i > 0) {
                 return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, MultiSimulationSceneCarVO.builder().sceneCarId(param.getSceneCarId()).build());
             }
-        }else {
+        } else {
             int i = sceneCarMapper.updateMultiSimulationSceneCar(param);
-            if (i > 0){
+            if (i > 0) {
                 return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, MultiSimulationSceneCarVO.builder().sceneCarId(param.getSceneCarId()).build());
             }
         }
@@ -314,22 +323,22 @@ public class MultiSimulationProjectServiceImpl implements MultiSimulationProject
     }
 
     @Transactional
-    public ResponseBodyVO<List<MultiSimulationSceneCarVO>> addOrUpdateMultiSimulationSceneCarList(List<MultiSimulationSceneCarParam> paramList){
-        if (CollectionUtils.isEmpty(paramList)){
+    public ResponseBodyVO<List<MultiSimulationSceneCarVO>> addOrUpdateMultiSimulationSceneCarList(List<MultiSimulationSceneCarParam> paramList) {
+        if (CollectionUtils.isEmpty(paramList)) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "数据为空");
         }
-        for (MultiSimulationSceneCarParam param: paramList) {
-            if (StringUtils.isNotBlank(param.getSceneCarId())){
+        for (MultiSimulationSceneCarParam param : paramList) {
+            if (StringUtils.isNotBlank(param.getSceneCarId())) {
                 MultiSimulationSceneCarVO multiSimulationSceneCarVO = sceneCarMapper.selectSceneCarById(param);
-                if (Objects.isNull(multiSimulationSceneCarVO)){
+                if (Objects.isNull(multiSimulationSceneCarVO)) {
                     return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "存在无效的车辆id");
                 }
             }
         }
         List<MultiSimulationSceneCarVO> ids = new ArrayList<>();
-        for (MultiSimulationSceneCarParam param: paramList) {
+        for (MultiSimulationSceneCarParam param : paramList) {
             ResponseBodyVO<MultiSimulationSceneCarVO> responseBodyVO = addOrUpdateMultiSimulationSceneCar(param);
-            if (responseBodyVO.getCode() != 200){
+            if (responseBodyVO.getCode() != 200) {
                 throw new RuntimeException("操作失败");
             }
             ids.add(responseBodyVO.getInfo());
@@ -337,28 +346,28 @@ public class MultiSimulationProjectServiceImpl implements MultiSimulationProject
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, ids);
     }
 
-    public ResponseBodyVO setMultiSimulationSceneCarView(MultiSimulationSceneCarParam param){
-        if (StringUtils.isBlank(param.getSceneCarId())){
+    public ResponseBodyVO setMultiSimulationSceneCarView(MultiSimulationSceneCarParam param) {
+        if (StringUtils.isBlank(param.getSceneCarId())) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "参数为空");
         }
         MultiSimulationSceneCarVO multiSimulationSceneCarVO = sceneCarMapper.selectSceneCarById(param);
-        if (Objects.isNull(multiSimulationSceneCarVO)){
+        if (Objects.isNull(multiSimulationSceneCarVO)) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "未找到有效的车辆配置");
         }
         String sceneId = multiSimulationSceneCarVO.getSceneId();
-        if (StringUtils.isBlank(sceneId)){
+        if (StringUtils.isBlank(sceneId)) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "未找到对应的场景");
         }
         param.setSceneId(sceneId);
         List<MultiSimulationSceneCarVO> multiSimulationSceneCarVOS = sceneCarMapper.selectSceneCarList(param);
-        for (MultiSimulationSceneCarVO car: multiSimulationSceneCarVOS) {
+        for (MultiSimulationSceneCarVO car : multiSimulationSceneCarVOS) {
             Integer isSimulationCar = car.getIsSimulationCar();
-            if (isSimulationCar == 1 && !StringUtils.equals(car.getId(), param.getSceneCarId())){
+            if (isSimulationCar == 1 && !StringUtils.equals(car.getId(), param.getSceneCarId())) {
                 sceneCarMapper.updateMultiSimulationSceneCarView(car.getId(), 0);
             }
         }
         int i = sceneCarMapper.updateMultiSimulationSceneCarView(param.getSceneCarId(), 1);
-        if (i > 0){
+        if (i > 0) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
         }
         return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE);
@@ -366,19 +375,19 @@ public class MultiSimulationProjectServiceImpl implements MultiSimulationProject
 
     @Override
     @Transactional
-    public ResponseBodyVO<MultiSimulationProjectVO> saveAsMultiSimulationProjectDetail(MultiSimulationProjectParam param){
+    public ResponseBodyVO<MultiSimulationProjectVO> saveAsMultiSimulationProjectDetail(MultiSimulationProjectParam param) {
         String oldProjectId = param.getProjectId();
         MultiSimulationProjectVO projectVO = multiSimulationProjectMapper.selectMultiSimulationProjectById(oldProjectId);
-        if (Objects.isNull(projectVO)){
+        if (Objects.isNull(projectVO)) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "请先保存当前的多模式仿真任务");
         }
         MultiSimulationProjectParam multiSimulationProjectParam = buildProjectParam(projectVO);
         multiSimulationProjectParam.setProjectName(param.getProjectNewName());
 
-        String newProjectId =  multiSimulationProjectParam.getProjectId();
+        String newProjectId = multiSimulationProjectParam.getProjectId();
         ResponseBodyVO<MultiSimulationProjectDetailVO> responseBodyVO = addMultiSimulationProject(multiSimulationProjectParam);
         log.info("插入仿真任务主表返回结果:{}", JSONObject.toJSONString(responseBodyVO));
-        if (responseBodyVO.getCode() != ResponseBodyVO.Response.SUCCESS.getCode()){
+        if (responseBodyVO.getCode() != ResponseBodyVO.Response.SUCCESS.getCode()) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE);
         }
         // 返回的数据
@@ -388,62 +397,62 @@ public class MultiSimulationProjectServiceImpl implements MultiSimulationProject
         MultiSimulationSceneParam multiSimulationSceneParam = new MultiSimulationSceneParam();
         multiSimulationSceneParam.setProjectId(oldProjectId);
         List<MultiSimulationSceneVO> multiSimulationSceneVOS = simulationSceneMapper.selectSceneList(multiSimulationSceneParam);
-        if (CollectionUtils.isEmpty(multiSimulationSceneVOS)){
+        if (CollectionUtils.isEmpty(multiSimulationSceneVOS)) {
             return multiSimulationProjectVOResponseBodyVO;
         }
-        for (MultiSimulationSceneVO sceneVO: multiSimulationSceneVOS) {
+        for (MultiSimulationSceneVO sceneVO : multiSimulationSceneVOS) {
             MultiSimulationScenePO multiSimulationScenePO = buildScenePO(sceneVO, newProjectId);
             int i = simulationSceneMapper.addMultiSimulationSceneAll(multiSimulationScenePO);
-            if (i > 0){
+            if (i > 0) {
                 // 新的场景id
                 String id = multiSimulationScenePO.getId();
                 // 使用旧id查询列表
                 MultiSimulationSceneCarParam multiSimulationSceneCarParam = new MultiSimulationSceneCarParam();
                 multiSimulationSceneCarParam.setSceneId(sceneVO.getId());
                 List<MultiSimulationSceneCarVO> multiSimulationSceneCarVOS = sceneCarMapper.selectSceneCarList(multiSimulationSceneCarParam);
-                if (!CollectionUtils.isEmpty(multiSimulationSceneCarVOS)){
-                    for (MultiSimulationSceneCarVO car: multiSimulationSceneCarVOS) {
+                if (!CollectionUtils.isEmpty(multiSimulationSceneCarVOS)) {
+                    for (MultiSimulationSceneCarVO car : multiSimulationSceneCarVOS) {
                         MultiSimulationSceneCarParam carParam = buildSceneCarParam(car, id);
                         int add = sceneCarMapper.addMultiSimulationSceneCar(carParam);
-                        if (add <=0 ){
+                        if (add <= 0) {
                             throw new RuntimeException("新增车辆信息失败");
                         }
                     }
                 }
-            }else {
+            } else {
                 throw new RuntimeException("新增场景失败");
             }
         }
         return multiSimulationProjectVOResponseBodyVO;
     }
 
-    public ResponseBodyVO<MultiSimulationSceneVO> copyMultiSimulationScene(MultiSimulationSceneParam param){
-        if (StringUtils.isBlank(param.getSceneId())){
+    public ResponseBodyVO<MultiSimulationSceneVO> copyMultiSimulationScene(MultiSimulationSceneParam param) {
+        if (StringUtils.isBlank(param.getSceneId())) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "参数异常");
         }
         MultiSimulationSceneVO sceneVO = simulationSceneMapper.selectSceneDetailBySceneId(param.getSceneId());
         ResponseBodyVO responseBodyVO = checkScene(sceneVO);
-        if (responseBodyVO.getCode() != ResponseBodyVO.Response.SUCCESS.getCode()){
+        if (responseBodyVO.getCode() != ResponseBodyVO.Response.SUCCESS.getCode()) {
             return responseBodyVO;
         }
         MultiSimulationSceneCarParam multiSimulationSceneCarParam = new MultiSimulationSceneCarParam();
         multiSimulationSceneCarParam.setSceneId(param.getSceneId());
         List<MultiSimulationSceneCarVO> multiSimulationSceneCarVOS = sceneCarMapper.selectSceneCarList(multiSimulationSceneCarParam);
         ResponseBodyVO sceneCars = checkAllSceneCars(multiSimulationSceneCarVOS, param.getSceneId());
-        if (sceneCars.getCode() != ResponseBodyVO.Response.SUCCESS.getCode()){
+        if (sceneCars.getCode() != ResponseBodyVO.Response.SUCCESS.getCode()) {
             return sceneCars;
         }
         // 插入场景
         MultiSimulationScenePO multiSimulationScenePO = buildScenePO(sceneVO, sceneVO.getProjectId());
         int i = simulationSceneMapper.addMultiSimulationSceneAll(multiSimulationScenePO);
-        if (i <= 0){
+        if (i <= 0) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "新增失败,请检查参数");
         }
         String sceneNewId = multiSimulationScenePO.getId();
-        for (MultiSimulationSceneCarVO carVO: multiSimulationSceneCarVOS) {
+        for (MultiSimulationSceneCarVO carVO : multiSimulationSceneCarVOS) {
             MultiSimulationSceneCarParam sceneCarParam = buildSceneCarParam(carVO, sceneNewId);
             int sceneCarRes = sceneCarMapper.addMultiSimulationSceneCar(sceneCarParam);
-            if (sceneCarRes <= 0){
+            if (sceneCarRes <= 0) {
                 throw new RuntimeException("新增车辆失败");
             }
         }
@@ -451,72 +460,117 @@ public class MultiSimulationProjectServiceImpl implements MultiSimulationProject
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, build);
     }
 
+    public ResponseBodyVO<MultiSimulationSceneResultVO> viewMultiSimulationProjectResult(MultiSimulationSceneParam param) {
+        MultiSimulationSceneVO sceneVO = simulationSceneMapper.selectSceneDetailBySceneId(param.getSceneId());
+        if (Objects.isNull(sceneVO)) {
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "未查到有效的场景记录");
+        }
+        String projectId = sceneVO.getProjectId();
+        MultiSimulationProjectVO projectVO = multiSimulationProjectMapper.selectMultiSimulationProjectById(projectId);
+        if (Objects.isNull(projectVO)) {
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "多模式仿真任务未找到");
+        }
+        Integer projectStatus = projectVO.getProjectStatus();
+        if (projectStatus != MultiSimulationStatusEnum.COMPLETED_STATUS.getProjectStatus()) {
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "任务不是已完成状态");
+        }
+        List<MultiSimulationProjectResultVO> collisionDetail = new ArrayList<>();
+
+        List<MultiSimulationProjectResultVO> abnormalParkingDetail = new ArrayList<>();
+
+        List<MultiSimulationProjectResultVO> outOfPavementDetail = new ArrayList<>();
+        MultiSimulationProjectResultParam resultParam = new MultiSimulationProjectResultParam();
+        resultParam.setSceneId(param.getSceneId());
+        List<MultiSimulationProjectResultVO> multiSimulationProjectResultVOS = resultMapper.selectProjectResultList(resultParam);
+        if (!CollectionUtils.isEmpty(multiSimulationProjectResultVOS)) {
+            for (MultiSimulationProjectResultVO result : multiSimulationProjectResultVOS) {
+                Integer abnormalType = result.getAbnormalType();
+                Integer abnormalTime = result.getAbnormalTime();
+                String s = TimeUtil.changeTimeFormat(abnormalTime);
+                result.setAbnormalTimeDescription(s);
+                if (abnormalType == MultiSimulationResultTypeEnum.COLLISION.getResultType()){
+                    collisionDetail.add(result);
+                } else if (abnormalType == MultiSimulationResultTypeEnum.ABNORMAL_PARKING.getResultType()) {
+                    abnormalParkingDetail.add(result);
+                } else if (abnormalType == MultiSimulationResultTypeEnum.OUT_OF_PAVEMENT.getResultType()) {
+                    outOfPavementDetail.add(result);
+                }
+            }
+        }
+        MultiSimulationSceneResultVO multiSimulationSceneResultVO = new MultiSimulationSceneResultVO();
+        multiSimulationSceneResultVO.setId(param.getSceneId()).setProjectId(sceneVO.getProjectId()).setProjectResultSimulationUrl(sceneVO.getProjectResultSimulationUrl())
+            .setProjectResultOverallUrl(sceneVO.getProjectResultOverallUrl()).setSceneName(sceneVO.getSceneName()).setCollisionTimes(collisionDetail.size())
+            .setAbnormalParkingTimes(abnormalParkingDetail.size()).setOutOfPavementTimes(outOfPavementDetail.size())
+            .setCollisionDetail(collisionDetail).setAbnormalParkingDetail(abnormalParkingDetail).setOutOfPavementDetail(outOfPavementDetail);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, multiSimulationSceneResultVO);
+    }
 
-    public ResponseBodyVO checkAllScene(List<MultiSimulationSceneVO> sceneVOList){
-        if (CollectionUtils.isEmpty(sceneVOList)){
+
+    public ResponseBodyVO checkAllScene(List<MultiSimulationSceneVO> sceneVOList) {
+        if (CollectionUtils.isEmpty(sceneVOList)) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "有效场景为空");
         }
-        for (MultiSimulationSceneVO scene: sceneVOList) {
+        for (MultiSimulationSceneVO scene : sceneVOList) {
             ResponseBodyVO responseBodyVO = checkScene(scene);
-            if (responseBodyVO.getCode() != ResponseBodyVO.Response.SUCCESS.getCode()){
+            if (responseBodyVO.getCode() != ResponseBodyVO.Response.SUCCESS.getCode()) {
                 return responseBodyVO;
             }
         }
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
     }
-    public ResponseBodyVO checkScene(MultiSimulationSceneVO sceneVO){
-        if (Objects.isNull(sceneVO)){
+
+    public ResponseBodyVO checkScene(MultiSimulationSceneVO sceneVO) {
+        if (Objects.isNull(sceneVO)) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "未查出有效的场景");
         }
         String mapId = sceneVO.getMapId();
-        if (StringUtils.isBlank(mapId)){
+        if (StringUtils.isBlank(mapId)) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "原始场景未配置地图");
         }
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
     }
 
-    public ResponseBodyVO checkAllSceneCars(List<MultiSimulationSceneCarVO> multiSimulationSceneCarVOS, String sceneId){
-        if (CollectionUtils.isEmpty(multiSimulationSceneCarVOS)){
+    public ResponseBodyVO checkAllSceneCars(List<MultiSimulationSceneCarVO> multiSimulationSceneCarVOS, String sceneId) {
+        if (CollectionUtils.isEmpty(multiSimulationSceneCarVOS)) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "场景id:" + sceneId + "场景未查出有效的车辆");
         }
-        for (MultiSimulationSceneCarVO carVo: multiSimulationSceneCarVOS) {
+        for (MultiSimulationSceneCarVO carVo : multiSimulationSceneCarVOS) {
             ResponseBodyVO responseBodyVO = checkSceneCar(carVo);
-            if (responseBodyVO.getCode() != ResponseBodyVO.Response.SUCCESS.getCode()){
+            if (responseBodyVO.getCode() != ResponseBodyVO.Response.SUCCESS.getCode()) {
                 return responseBodyVO;
             }
         }
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
     }
 
-    public ResponseBodyVO checkSceneCar(MultiSimulationSceneCarVO carVO){
-        if (StringUtils.isBlank(carVO.getCarId())){
+    public ResponseBodyVO checkSceneCar(MultiSimulationSceneCarVO carVO) {
+        if (StringUtils.isBlank(carVO.getCarId())) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "车辆id:" + carVO.getId() + "未配置车辆");
         }
-        if (StringUtils.isBlank(carVO.getAlgorithmId())){
+        if (StringUtils.isBlank(carVO.getAlgorithmId())) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "车辆id:" + carVO.getId() + "未配置算法");
         }
-        if (StringUtils.isBlank(carVO.getPathId())){
+        if (StringUtils.isBlank(carVO.getPathId())) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "车辆id:" + carVO.getId() + "未配置轨迹");
         }
-        if (StringUtils.isBlank(carVO.getPathStart())){
+        if (StringUtils.isBlank(carVO.getPathStart())) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "车辆id:" + carVO.getId() + "未配置轨迹起点");
         }
-        if (StringUtils.isBlank(carVO.getPathEnd())){
+        if (StringUtils.isBlank(carVO.getPathEnd())) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "车辆id:" + carVO.getId() + "未配置轨迹终点");
         }
 
-        if (StringUtils.isBlank(carVO.getPathStartPoint())){
+        if (StringUtils.isBlank(carVO.getPathStartPoint())) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "车辆id:" + carVO.getId() + "未配置轨迹起点朝向");
         }
-        if (StringUtils.isBlank(carVO.getPathEndPoint())){
+        if (StringUtils.isBlank(carVO.getPathEndPoint())) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "车辆id:" + carVO.getId() + "未配置轨迹终点朝向");
         }
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
     }
 
 
-
-    public static MultiSimulationScenePO buildScenePO(MultiSimulationSceneVO sceneVO, String projectId){
+    public static MultiSimulationScenePO buildScenePO(MultiSimulationSceneVO sceneVO, String projectId) {
         MultiSimulationScenePO build = MultiSimulationScenePO.builder()
             .projectId(projectId).sceneName(sceneVO.getSceneName()).id(StringUtil.getRandomUUID())
             .mapId(sceneVO.getMapId())
@@ -524,7 +578,7 @@ public class MultiSimulationProjectServiceImpl implements MultiSimulationProject
         return build;
     }
 
-    public static MultiSimulationProjectParam buildProjectParam(MultiSimulationProjectVO projectVO){
+    public static MultiSimulationProjectParam buildProjectParam(MultiSimulationProjectVO projectVO) {
         MultiSimulationProjectParam multiSimulationProjectParam = new MultiSimulationProjectParam();
         multiSimulationProjectParam.setProjectId(StringUtil.getRandomUUID()).setProjectKey(projectVO.getProjectKey())
             .setProjectDescription(projectVO.getProjectDescription()).setProjectMaxSeconds(projectVO.getProjectMaxSeconds())
@@ -532,7 +586,7 @@ public class MultiSimulationProjectServiceImpl implements MultiSimulationProject
         return multiSimulationProjectParam;
     }
 
-    public static MultiSimulationSceneCarParam buildSceneCarParam(MultiSimulationSceneCarVO carVO, String newSceneId){
+    public static MultiSimulationSceneCarParam buildSceneCarParam(MultiSimulationSceneCarVO carVO, String newSceneId) {
         MultiSimulationSceneCarParam multiSimulationSceneCarParam = new MultiSimulationSceneCarParam();
         multiSimulationSceneCarParam.setSceneCarId(carVO.getId()).setSceneId(newSceneId)
             .setCarId(carVO.getCarId()).setAlgorithmId(carVO.getAlgorithmId()).setPathId(carVO.getPathId())

+ 2 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/server/app/service/job_manage/MultiSimulationProjectService.java

@@ -43,4 +43,6 @@ public interface MultiSimulationProjectService {
 
     ResponseBodyVO<MultiSimulationSceneVO> copyMultiSimulationScene(MultiSimulationSceneParam param);
 
+    ResponseBodyVO<MultiSimulationSceneResultVO> viewMultiSimulationProjectResult(MultiSimulationSceneParam param);
+
 }

+ 21 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/server/infra/db/mysql/mapper/MultiSimulationProjectResultMapper.java

@@ -0,0 +1,21 @@
+package com.css.simulation.resource.server.infra.db.mysql.mapper;
+
+import api.common.pojo.param.project.MultiSimulationProjectParam;
+import api.common.pojo.param.project.MultiSimulationProjectResultParam;
+import api.common.pojo.po.project.MultiSimulationProjectPO;
+import api.common.pojo.vo.project.MultiSimulationProjectResultVO;
+import api.common.pojo.vo.project.MultiSimulationProjectVO;
+import org.apache.ibatis.annotations.*;
+
+import java.util.List;
+
+@Mapper
+public interface MultiSimulationProjectResultMapper {
+    @Select("<script>" +
+        "select id,scene_id,abnormal_type,abnormal_time from multi_simulation_project_result where deleted = 0 " +
+        "and scene_id = #{sceneId}" +
+        "order by abnormal_time,create_time desc" +
+        "</script>")
+    List<MultiSimulationProjectResultVO> selectProjectResultList(MultiSimulationProjectResultParam param);
+
+}

+ 1 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/server/infra/db/mysql/mapper/MultiSimulationSceneMapper.java

@@ -33,7 +33,7 @@ public interface MultiSimulationSceneMapper {
     List<MultiSimulationSceneVO> selectSceneList(MultiSimulationSceneParam param);
 
     @Select("<script>" +
-        "select id,project_id,scene_name,map_id,create_time from multi_simulation_scene where deleted = 0 " +
+        "select id,project_id,scene_name,map_id,create_time,project_result_overall_url,project_result_simulation_url from multi_simulation_scene where deleted = 0 " +
         "and id = #{sceneId}" +
         "</script>")
     MultiSimulationSceneVO selectSceneDetailBySceneId(String sceneId);