Bladeren bron

项目运行逻辑修改

LingxinMeng 2 jaren geleden
bovenliggende
commit
657082be80

+ 1 - 0
api-common/src/main/java/api/common/pojo/po/project/SimulationManualProjectPO.java

@@ -40,4 +40,5 @@ public class SimulationManualProjectPO extends BasePO {
     private String vehicleArray;    //车辆模型数组(公私有)
     private String sceneArray;  //场景测试包数组(公私有)
     private String newId;  // 用于重新运行时修改项目id
+
 }

+ 82 - 124
simulation-resource-server/src/main/java/com/css/simulation/resource/project/service/impl/SimulationProjectServiceImpl.java

@@ -133,7 +133,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
             if (add > 0) {
                 return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, ResponseBodyVO.Response.SUCCESS.getMessage(), po.getId());
             }
-            return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE, "添加失败");
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE, "添加失败");
         } else {
             // 取工作状态,仅未开始的才可以修改信息
             SimulationManualProjectPO simulationManualProjectPo = simulationProjectMapper.selectProjectById(param);
@@ -260,60 +260,49 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
      * 2. 手动项目:终止项目 20 -> 40
      * 3. 手动项目:重新运行项目 40 -> 20
      */
-    @SneakyThrows
     @Override
     public ResponseBodyVO<String> updateProjectNowRunState(SimulationManualProjectParam param) {
-
-        // 1 查询项目详细信息
-        SimulationManualProjectPO po = projectUtil.getProjectInfo(param);
-        if (DictConstants.PROJECT_TERMINATED.equals(param.getNowRunState())) {  // 2 项目终止信息直接推送
-            projectStopToKafka(po);
-            simulationProjectMapper.updateProjectNowRunState(param);
-        } else {
-            // 校验项目的信息是否可用
-            projectUtil.checkProject(po.getAlgorithm(), po.getVehicle(), po.getScene());
-
-            if (DictConstants.PROJECT_COMPLETED.equals(po.getNowRunState())) {  //3 已经完成的项目再次运行
-                //1 查询项目详情信息并保存,固定项目最原始的运行数据
-                final ProjectDetailsVO projectDetailsVO = selectProjectDetailsByIdBeforeRunning(SimulationManualProjectParam.builder().id(po.getId()).projectType(DictConstants.PROJECT_TYPE_MANUAL).build()).getInfo();
-                projectDetailsVO.setAlgorithmScoreList(new ArrayList<>());
-                projectDetailsVO.setNowRunState(DictConstants.PROJECT_RUNNING);
-                po.setDetails(JsonUtil.beanToJson(projectDetailsVO));
-                //2 初始化数据
-                po.setNowRunState(param.getNowRunState());
-                po.setEvaluationLevel("");
-                po.setStartTime(new Date());
-                po.setFinishTime(null);
-                po.createPo(AuthUtil.getCurrentUserId());
-                createProjectId(po);
-                //3 保存
-                simulationProjectMapper.add(po);
-                //4 Kafka推送消息
-                projectRunToKafka(po);
-            } else { //4 创建新的项目或者重新运行被终止的项目
-                // 查询项目详情信息并保存
-                String projectId = param.getId();
-                ProjectDetailsVO info = selectProjectDetailsByIdBeforeRunning(SimulationManualProjectParam.builder().id(projectId).projectType(DictConstants.PROJECT_TYPE_MANUAL).build()).getInfo();
-                String infoJson = JsonUtil.beanToJson(info);
-                log.info("项目 " + projectId + " 的详情信息为:" + infoJson);
-                // 保存项目详情信息
-                simulationProjectMapper.updateDetailsById(projectId, infoJson);
-                if (DictConstants.PROJECT_RUNNING.equals(param.getNowRunState())) {
-                    if (DictConstants.PROJECT_TERMINATED.equals(info.getNowRunState())) {
-                        // 如果是重新运行的项目,修改项目ID
-                        SimulationManualProjectPO simulationManualProjectPO = new SimulationManualProjectPO();
-                        simulationManualProjectPO.setId(projectId);
-                        final String newId = StringUtil.getRandomUUID();
-                        simulationManualProjectPO.setNewId(newId);
-                        po.setId(newId);
-                        param.setId(newId);
-                        simulationProjectMapper.updateIdById(simulationManualProjectPO);    //此处注意事务
-                    }
-                    param.setStartTime(new Date());
-                    simulationProjectMapper.updateProjectNowRunState(param);
-                    projectRunToKafka(po);
+        // 1 查询项目详细信息,即使是新创建的任务也是保存了信息后再执行
+        SimulationManualProjectPO projectPO = projectUtil.getProjectInfo(param);
+        final String oldState = projectPO.getNowRunState();
+        final String newState = param.getNowRunState();
+        final String projectId = param.getId();
+        if (DictConstants.PROJECT_RUNNING.equals(newState)) {// 2 项目终止信息直接推送
+            //1 校验项目的信息是否可用
+            projectUtil.checkProject(projectPO.getAlgorithm(), projectPO.getVehicle(), projectPO.getScene());
+            //2 查询项目详情信息,固定项目最原始的运行数据
+            ProjectDetailsVO projectDetailsVO = selectProjectDetailsByIdBeforeRunning(SimulationManualProjectParam.builder().id(projectId).projectType(DictConstants.PROJECT_TYPE_MANUAL).build()).getInfo();
+            projectDetailsVO.setAlgorithmScoreList(new ArrayList<>());
+            projectDetailsVO.setNowRunState(DictConstants.PROJECT_RUNNING);
+            String infoJson = JsonUtil.beanToJson(projectDetailsVO);
+            log.info("项目 " + projectId + " 的详情信息为:" + infoJson);
+            projectPO.setDetails(infoJson);
+            if (DictConstants.PROJECT_COMPLETED.equals(oldState)) {  // 已经完成的项目再次运行
+                //1 初始化数据
+                projectPO.setNowRunState(DictConstants.PROJECT_RUNNING);
+                projectPO.setEvaluationLevel("");
+                projectPO.setStartTime(new Date());
+                projectPO.setFinishTime(null);
+                projectPO.createPo(AuthUtil.getCurrentUserId());
+                createProjectId(projectPO);
+                //2 保存
+                simulationProjectMapper.add(projectPO);
+            } else { // 创建新的项目或者重新运行被终止的项目
+                if (DictConstants.PROJECT_TERMINATED.equals(oldState)) { //重新运行被终止的项目需要修改新的ID
+                    // 如果是重新运行的项目,修改项目ID
+                    SimulationManualProjectPO simulationManualProjectPO = new SimulationManualProjectPO();
+                    simulationManualProjectPO.setId(projectId);
+                    final String newId = StringUtil.getRandomUUID();
+                    simulationManualProjectPO.setNewId(newId);
+                    projectPO.setId(newId);
+                    param.setId(newId);
+                    simulationProjectMapper.updateIdById(simulationManualProjectPO);    //此处注意事务
                 }
+                simulationProjectMapper.updateDetailsById(projectId, infoJson);
             }
+            param.setStartTime(new Date());
+            simulationProjectMapper.updateProjectNowRunState(param);
+            projectRunToKafka(projectPO); // 项目终止信息直接推送
         }
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
     }
@@ -567,7 +556,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
         ProjectDetailsVO projectDetailsVO = new ProjectDetailsVO();
 
         // 封装要使用到的数据
-        SimulationManualProjectPO poParam = new SimulationManualProjectPO();
+        SimulationManualProjectPO projectPO = new SimulationManualProjectPO();
 
         if (DictConstants.PROJECT_TYPE_MANUAL.equals(param.getProjectType())) { // 手动运行任务
             // 项目基本信息
@@ -575,30 +564,30 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
             if (po == null) {
                 return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE, "没有获取到数据");
             }
-            poParam = po;
+            projectPO = po;
         } else if (DictConstants.PROJECT_TYPE_AUTO_SUB.equals(param.getProjectType())) {
             SimulationManualProjectVO po = simulationAutomaticSubProjectMapper.selectProjectInfo(param);
             if (po == null) {
                 return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE, "没有获取到数据");
             }
-            BeanUtils.copyProperties(po, poParam);
+            BeanUtils.copyProperties(po, projectPO);
 
         }
 
         // 获取场景包信息
-        ScenePackagePO scenePackagePO = simulationProjectMapper.selectScenePackageInfoById(poParam.getScene());
+        ScenePackagePO scenePackagePO = simulationProjectMapper.selectScenePackageInfoById(projectPO.getScene());
 
         projectDetailsVO.setPackageName(scenePackagePO.getPackageName());
 
         // 算法配置
-        AlgorithmPO algorithmBaseInfoVo = getAlgorithmInfo(poParam);
+        AlgorithmPO algorithmBaseInfoVo = getAlgorithmInfo(projectPO);
         // 获取测试得分列表
         List<AlgorithmScoreVO> firstTargetScore = getFirstTargetScore(param.getId());
         projectDetailsVO.setAlgorithmScoreList(firstTargetScore);
 
         // 车辆配置
         VehiclePO vehicleBaseInfoVo = null;
-        String vehicleConfigId = poParam.getVehicle();
+        String vehicleConfigId = projectPO.getVehicle();
 
         ConfigPO configPO = new ConfigPO();
         configPO.setId(vehicleConfigId);
@@ -677,44 +666,14 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
             }
         }
 
-//        // 任务信息
-//        ProjectTaskParam projectTaskParam = new ProjectTaskParam();
-//        projectTaskParam.setPId(poParam.getId());
-//        List<ProjectRunResultRatioNumVo> projectRunResultRatioNumVos = null;
-//
-//        // 任务运行状态统计
-//        List<ProjectRunStateNumVo> projectRunStateNumVos = null;
-//
-//        // 任务运行结果统计
-//        List<ProjectRunResultRatioNumVo> resultScoreList = null;
-
-//        Integer size = simulationProjectTaskMapper.selectProjectTaskNumByProjectId(projectTaskParam);
-//        if (size > 0) {
-//            projectRunStateNumVos = simulationProjectTaskMapper.selectRunStateCount(poParam.getId());
-//            taskRunState(projectRunStateNumVos, size);
-//
-//            projectRunResultRatioNumVos = simulationProjectTaskMapper.selectRunResultCount(poParam.getId());
-//            taskResultState(projectRunResultRatioNumVos, size);
-//
-//            resultScoreList = simulationProjectTaskMapper.selectScoreCount(poParam.getId());
-//
-//            // 未完成得分为”“的改为0
-//            if (!isEmpty(resultScoreList) && resultScoreList.size() == 1 && isEmpty(resultScoreList.get(0).getResultName())) {
-//                ProjectRunResultRatioNumVo projectRunResultRatioNumVo = resultScoreList.get(0);
-//                projectRunResultRatioNumVo.setResultName("0");
-//            }
-//            taskScore(resultScoreList, size);
-//
-//        }
-
-        projectDetailsVO.setProjectId(poParam.getProjectId());
-        projectDetailsVO.setProjectName(poParam.getProjectName());
-        projectDetailsVO.setProjectDescribe(poParam.getProjectDescribe());
-        projectDetailsVO.setStartTime(getRqStr(poParam.getStartTime(), 1));
-        projectDetailsVO.setFinishTime(getRqStr(poParam.getFinishTime(), 1));
-        projectDetailsVO.setNowRunState(poParam.getNowRunState());
-        projectDetailsVO.setNowRunStateName(getDictName(DictConstants.PROJECT_RUN_STATE, poParam.getNowRunState()));
-        projectDetailsVO.setEvaluationLevel(getDictName(DictConstants.EVALUATION_LEVEL, poParam.getEvaluationLevel()));
+        projectDetailsVO.setProjectId(projectPO.getProjectId());
+        projectDetailsVO.setProjectName(projectPO.getProjectName());
+        projectDetailsVO.setProjectDescribe(projectPO.getProjectDescribe());
+        projectDetailsVO.setStartTime(getRqStr(projectPO.getStartTime(), 1));
+        projectDetailsVO.setFinishTime(getRqStr(projectPO.getFinishTime(), 1));
+        projectDetailsVO.setNowRunState(projectPO.getNowRunState());
+        projectDetailsVO.setNowRunStateName(getDictName(DictConstants.PROJECT_RUN_STATE, projectPO.getNowRunState()));
+        projectDetailsVO.setEvaluationLevel(getDictName(DictConstants.EVALUATION_LEVEL, projectPO.getEvaluationLevel()));
         if (algorithmBaseInfoVo != null) {
             projectDetailsVO.setAlgorithmName(algorithmBaseInfoVo.getAlgorithmName());
             projectDetailsVO.setAlgorithmDescribe(algorithmBaseInfoVo.getDescription());
@@ -734,9 +693,9 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
 //        projectDetailsVO.setResultList(projectRunResultRatioNumVos);
 //        projectDetailsVO.setResultScoreList(resultScoreList);
 
-        projectDetailsVO.setParallelism(poParam.getParallelism());
-        projectDetailsVO.setMaxSimulationTime(poParam.getMaxSimulationTime());
-        String isChoiceGpu = poParam.getIsChoiceGpu();
+        projectDetailsVO.setParallelism(projectPO.getParallelism());
+        projectDetailsVO.setMaxSimulationTime(projectPO.getMaxSimulationTime());
+        String isChoiceGpu = projectPO.getIsChoiceGpu();
         String g = "";
         if ("0".equals(isChoiceGpu)) {
             g = "是";
@@ -885,28 +844,28 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
     public ResponseBodyVO<ProjectReportVO> selectProjectReportByIdForScheduler(SimulationManualProjectParam param) {
         String projectType = param.getProjectType();
         // 封装要使用到的数据
-        SimulationManualProjectPO poParam = new SimulationManualProjectPO();
+        SimulationManualProjectPO projectPO = new SimulationManualProjectPO();
 
         if (DictConstants.PROJECT_TYPE_MANUAL.equals(projectType)) {
             // 项目基本信息
-            poParam = simulationProjectMapper.selectProjectBaseById(param);
+            projectPO = simulationProjectMapper.selectProjectBaseById(param);
         } else if (DictConstants.PROJECT_TYPE_AUTO_SUB.equals(projectType)) {
             SimulationManualProjectVO po = simulationAutomaticSubProjectMapper.selectProjectInfo(param);
-            BeanUtils.copyProperties(po, poParam);
+            BeanUtils.copyProperties(po, projectPO);
         }
 
         // 算法配置
-        AlgorithmPO algorithmBaseInfoVo = getAlgorithmInfo(poParam);
+        AlgorithmPO algorithmBaseInfoVo = getAlgorithmInfo(projectPO);
         ProjectReportVO projectReportVO = new ProjectReportVO();
-        projectReportVO.setProjectId(poParam.getProjectId());
-        projectReportVO.setProjectName(poParam.getProjectName());
+        projectReportVO.setProjectId(projectPO.getProjectId());
+        projectReportVO.setProjectName(projectPO.getProjectName());
         projectReportVO.setAlgorithmName(algorithmBaseInfoVo.getAlgorithmName());
         projectReportVO.setAlgorithmDescribe(algorithmBaseInfoVo.getDescription());
 
         // 添加开始时间
         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        if (poParam.getStartTime() != null) {
-            projectReportVO.setStartTime(dateFormat.format(poParam.getStartTime()));
+        if (projectPO.getStartTime() != null) {
+            projectReportVO.setStartTime(dateFormat.format(projectPO.getStartTime()));
         }
 
         String sceneNames;
@@ -920,7 +879,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
 
         // 获取得分表一级指标信息
         SimulationMptFirstTargetScorePO par = new SimulationMptFirstTargetScorePO();
-        par.setPId(poParam.getId());
+        par.setPId(projectPO.getId());
         List<SimulationMptFirstTargetScorePO> pos = simulationMptFirstTargetScoreMapper.selectFirstTargetByPid(par);
 
         List<AlgorithmScoreVO> algorithmScoreVOList = new ArrayList<>();
@@ -944,7 +903,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
             Double score = firstTargetScorePo.getScore();
             totalScore += BigDecimal.valueOf(score).multiply(BigDecimal.valueOf(weightDouble).divide(BigDecimal.valueOf(100))).doubleValue();
             // 获取得分不为 0 的场景数量
-            Integer scoreNum = getSetScoreNum(firstTargetScorePo.getSublistId(), poParam.getId());
+            Integer scoreNum = getSetScoreNum(firstTargetScorePo.getSublistId(), projectPO.getId());
             totalSceneScoreNum += scoreNum;
 
             totalScoreRatio += Double.valueOf(scoreNum) / Double.valueOf(sceneNum) * 100;
@@ -977,7 +936,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
         algorithmScoreVOList.add(algorithmScoreVo);
         projectReportVO.setScoreRatio(saveTwoDecimalPlaces(totalScoreRatio));
         projectReportVO.setAlgorithmScore(saveTwoDecimalPlaces(totalScore));
-        evaluationLevelReport = poParam.getEvaluationLevel();
+        evaluationLevelReport = projectPO.getEvaluationLevel();
         if (DictConstants.EVALUATION_LEVEL_G.equals(evaluationLevelReport)) {
             projectReportVO.setEvaluationLevel(DictConstants.EVALUATION_LEVEL_G_DESCRIPTION);
             projectReportVO.setEvaluationGrade(DictConstants.EVALUATION_LEVEL_G_DESCRIPTION);
@@ -996,12 +955,12 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
         projectReportVO.setAlgorithmEvaluation(algorithmBaseInfoVo.getAlgorithmName() + "经测试获得" + projectReportVO.getEvaluationLevel() + "级评价," + "(" + sceneNames + ")得分率达到了" + projectReportVO.getScoreRatio() + "%。");
         projectReportVO.setAlgorithmScoreList(algorithmScoreVOList);
         // 指标得分列表
-        Map<String, Object> stringObjectMap = selectScenePackageSubListAndSetScore(poParam.getScene(), poParam.getId());
+        Map<String, Object> stringObjectMap = selectScenePackageSubListAndSetScore(projectPO.getScene(), projectPO.getId());
         projectReportVO.setSubListScoreLiTitle((List<Map>) stringObjectMap.get("headerList"));
         projectReportVO.setSubListScoreLi((List<SubScListVo>) stringObjectMap.get("result"));
 
         // 场景得分列表
-        Map<String, Object> maps = selectSceneScore2(poParam.getScene(), poParam.getId(), null, projectReportVO);
+        Map<String, Object> maps = selectSceneScore2(projectPO.getScene(), projectPO.getId(), null, projectReportVO);
         projectReportVO.setSceneScoreLiTitle((List<Map>) maps.get("headerList"));
         projectReportVO.setSceneScoreLi((List<SceneScListVo>) maps.get("result"));
 
@@ -1113,17 +1072,17 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
         resultVo.setFinishState(po.getRunResult()); // Completed
         resultVo.setSceneDescribe(""); // 场景描述设置为空
         // -------------------------------- 获取任务得分详情 --------------------------------
-        SimulationManualProjectPO poParam = new SimulationManualProjectPO();
+        SimulationManualProjectPO projectPO = new SimulationManualProjectPO();
         if (DictConstants.PROJECT_TYPE_MANUAL.equals(projectType)) {
             SimulationManualProjectPO spo = simulationProjectMapper.selectProjectBaseById(param);
             Optional.ofNullable(spo).orElseThrow(() -> new RuntimeException("没有获取到数据。"));
-            poParam = spo;
+            projectPO = spo;
         } else if (DictConstants.PROJECT_TYPE_AUTO_SUB.equals(projectType)) {
             SimulationManualProjectVO spo = simulationAutomaticSubProjectMapper.selectProjectInfo(param);
             Optional.ofNullable(spo).orElseThrow(() -> new RuntimeException("没有获取到数据。"));
-            BeanUtils.copyProperties(spo, poParam);
+            BeanUtils.copyProperties(spo, projectPO);
         }
-        Map<String, Object> stringObjectMap = selectSceneScore(poParam.getScene(), poParam.getId(), taskId);
+        Map<String, Object> stringObjectMap = selectSceneScore(projectPO.getScene(), projectPO.getId(), taskId);
         resultVo.setSceneScoreLiTitle((List<Map>) stringObjectMap.get("headerList"));
         resultVo.setSceneScoreLi((List<SceneScListVo>) stringObjectMap.get("result"));
         // 1.获取仿真结果文件
@@ -1749,7 +1708,6 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
             po.setProjectNum(po1.getProjectNum() + 1);
         }
         po.setProjectId(po.getProjectDate() + "-" + po.getProjectNum());
-
     }
 
     private void createProjectId(SimulationAutomaticProjectPO po) {
@@ -2552,10 +2510,10 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
     }
 
     private void setLastTargetScore(ScenePackageSubListVO vo, String pId) {
-        SimulationMptLastTargetScorePO poParam = new SimulationMptLastTargetScorePO();
-        poParam.setPId(pId);
-        poParam.setTarget(vo.getSublistId());
-        SimulationMptLastTargetScorePO po = simulationMptLastTargetScoreMapper.selectLastTargetScore(poParam);
+        SimulationMptLastTargetScorePO projectPO = new SimulationMptLastTargetScorePO();
+        projectPO.setPId(pId);
+        projectPO.setTarget(vo.getSublistId());
+        SimulationMptLastTargetScorePO po = simulationMptLastTargetScoreMapper.selectLastTargetScore(projectPO);
         if (po != null) {
             vo.setNotStandardSceneNum(po.getNotStandardSceneNum());
             vo.setScore(po.getScore());
@@ -2565,10 +2523,10 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
     }
 
     private void setFirstTargetScore(ScenePackageSubListVO vo, String pId) {
-        SimulationMptFirstTargetScorePO poParam = new SimulationMptFirstTargetScorePO();
-        poParam.setPId(pId);
-        poParam.setTarget(vo.getSublistId());
-        SimulationMptFirstTargetScorePO po = simulationMptFirstTargetScoreMapper.selectFirstTargetScore(poParam);
+        SimulationMptFirstTargetScorePO projectPO = new SimulationMptFirstTargetScorePO();
+        projectPO.setPId(pId);
+        projectPO.setTarget(vo.getSublistId());
+        SimulationMptFirstTargetScorePO po = simulationMptFirstTargetScoreMapper.selectFirstTargetScore(projectPO);
         if (po != null) {
             vo.setScore(po.getScore());
         }