root 2 vuotta sitten
vanhempi
commit
281dd5822f

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

@@ -2,6 +2,10 @@ package api.common.pojo.constants;
 
 public class DictConstants {
 
+    // 场景测试包是否被禁用
+    public static final String SCENE_PACKAGE_UNAVAILABLE = "1";
+    public static final String SCENE_PACKAGE_AVAILABLE = "0";
+
     //字典缓存目录key
     public static final String BASE_KEY = "DICT:";
     public static final String LIST_KEY = "LIST:";
@@ -49,6 +53,7 @@ public class DictConstants {
 
     public static final String IS_SHARED = "1";//是
     public static final String IS_DELETED = "1";//是
+    public static final String IS_NOT_DELETED = "0";
     public static final String IS_NOT_SHARED = "0";//否
 
     public static final String SCENE_NATURAL = "1"; // 自然驾驶

+ 5 - 3
simulation-resource-server/src/main/java/com/css/simulation/resource/model/controller/VehicleCtrl.java

@@ -25,7 +25,7 @@ import java.util.Map;
 public class VehicleCtrl {
 
     @Resource
-    VehicleService vehicleService;
+    private VehicleService vehicleService;
 
     /**
      * 获取列表
@@ -44,19 +44,21 @@ public class VehicleCtrl {
     public ResponseBodyVO<List<VehicleVO>> getMyVehicleList() {
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, vehicleService.getMyVehicleList());
     }
+
     /**
      * 获取公私有列表
      */
     @RequestMapping("/getMyVehicleListNew")
-    public ResponseBodyVO<List<VehicleGSVO> > getMyVehicleListNew() {
+    public ResponseBodyVO<List<VehicleGSVO>> getMyVehicleListNew() {
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, vehicleService.getMyVehicleListNew());
     }
+
     /**
      * 根据id获取详情
      */
     @RequestMapping("/getVehicleInfo")
     public ResponseBodyVO<VehicleVO> getVehicleInfo(@RequestBody VehicleParam vehicleParam) {
-        return  new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS,vehicleService.getVehicleInfo(vehicleParam));
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, vehicleService.getVehicleInfo(vehicleParam));
     }
 
     /**

+ 5 - 4
simulation-resource-server/src/main/java/com/css/simulation/resource/project/ctrl/SimulationProjectCtrl.java

@@ -53,7 +53,7 @@ public class SimulationProjectCtrl {
      */
     @RequestMapping("selectProjectById")
     @ResponseBody
-    public ResponseBodyVO selectProjectById(@RequestBody SimulationManualProjectParam param) {
+    public ResponseBodyVO<SimulationManualProjectSingleVo> selectProjectById(@RequestBody SimulationManualProjectParam param) {
         return service.selectProjectById(param);
     }
 
@@ -67,7 +67,8 @@ public class SimulationProjectCtrl {
     }
 
     /**
-     * 修改工作运行状态
+     * 1. 第一次运行项目
+     * 2. 重新运行项目
      */
     @RequestMapping("updateProjectNowRunState")
     @ResponseBody
@@ -132,9 +133,9 @@ public class SimulationProjectCtrl {
      */
     @RequestMapping("selectMaxParallelism")
     @ResponseBody
-    public ResponseBodyVO<Integer> selectMaxParallelism() {
+    public ResponseBodyVO<String> selectMaxParallelism() {
         Integer licenseNum = clusterService.getLicenseNum();
-        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, null, licenseNum);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, null, licenseNum + "");
     }
 
     /**

+ 52 - 88
simulation-resource-server/src/main/java/com/css/simulation/resource/project/impl/SimulationProjectServiceImpl.java

@@ -34,7 +34,6 @@ import com.css.simulation.resource.project.mapper.*;
 import com.css.simulation.resource.project.service.SimulationProjectService;
 import com.css.simulation.resource.scene.mapper.ScenePackageMapper;
 import com.css.simulation.resource.system.service.DictService;
-import com.css.simulation.resource.util.ApacheKafkaUtil;
 import com.css.simulation.resource.util.ProjectUtil;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.github.pagehelper.PageInfo;
@@ -248,7 +247,6 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
         if (i > 0) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
         }
-
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE, "删除失败。");
     }
 
@@ -259,87 +257,64 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
     @Override
     public ResponseBodyVO<String> updateProjectNowRunState(SimulationManualProjectParam param) {
 
-
-        //1 根据 id 查询项目信息
-        if (isEmpty(param.getId()) || isEmpty(param.getNowRunState())) {
-            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE);
-        }
-        SimulationManualProjectPo po = simulationProjectMapper.selectProjectById(param);
-        if (po == null) {
-            return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE, "数据没有找到。");
-        }
-
-        // 已经完成的项目再次运行
-        if (DictConstants.PROJECT_COMPLETED.equals(po.getNowRunState())) {
-            //1 查询场景测试包是否被禁用
-            String isUnavailable = scenePackageMapper.selectIsUnavailableByPackageId(po.getScene());
-            if("1".equals(isUnavailable)){
-                return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "包已经动过了,不能运行,编辑测试包后可重新运行。");
-            }
-            po.createPo(AuthUtil.getCurrentUserId());
-            // 生成id
-            createProjectId(po);
-            // 初始化数据
-            po.setNowRunState(param.getNowRunState());
-            po.setEvaluationLevel("");
-            po.setStartTime(new Date());
-            po.setFinishTime(null);
-            int add = simulationProjectMapper.add(po);
-            if (add <= 0) {
-                return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE, "生成新工作失败。");
-            }
-            // 查询项目详情信息并保存,固定项目最原始的运行数据
-            String projectId = po.getId();
-            ProjectDetailsVo info = selectProjectDetailsByIdBackUp(
-                    SimulationManualProjectParam.builder()
-                            .id(projectId)
-                            .projectType(DictConstants.PROJECT_TYPE_MANUAL)
-                            .build()
-            ).getInfo();
-            String infoJson = JsonUtil.beanToJson(info);
-            simulationProjectMapper.updateDetailsById(projectId, infoJson);
-            // Kafka推送消息
-            projectRunToKafka(po);
-        } else if (DictConstants.PROJECT_TERMINATED.equals(param.getNowRunState())) {   // 项目终止,推送到kafka
-            String projectId = param.getId();
-            ApacheKafkaUtil.deleteTopic(kafkaAdminClient, projectId);
+        //1 查询项目详细信息
+        SimulationManualProjectPo po = projectUtil.getProjectInfo(param);
+        //2 项目终止信息直接推送
+        if (DictConstants.PROJECT_TERMINATED.equals(param.getNowRunState())) {
             projectStopToKafka(po);
             simulationProjectMapper.updateProjectNowRunState(param);
-        } else {    // 创建新的项目或者重新运行被终止的项目
-            //1 查询场景测试包是否被禁用
-            String isUnavailable = scenePackageMapper.selectIsUnavailableByPackageId(po.getScene());
-            if("1".equals(isUnavailable)){
-                return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "包已经动过了,不能运行,编辑测试包后可重新运行。");
-            }
-            // 查询项目详情信息并保存
-            String projectId = param.getId();
-            ProjectDetailsVo info = selectProjectDetailsByIdBackUp(
-                    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 ("20".equals(param.getNowRunState())) {
-                //设置开始时间
-                param.setStartTime(new Date());
-                //Kafka推送消息
+        } else {
+            //3 校验项目的信息是否可用
+            projectUtil.checkProject(DictConstants.PROJECT_TYPE_MANUAL, po.getId(), po.getAlgorithm(), po.getVehicle(),
+                    po.getScene());
+            // 已经完成的项目再次运行
+            if (DictConstants.PROJECT_COMPLETED.equals(po.getNowRunState())) {
+                po.createPo(AuthUtil.getCurrentUserId());
+                // 生成id
+                createProjectId(po);
+                // 初始化数据
+                po.setNowRunState(param.getNowRunState());
+                po.setEvaluationLevel("");
+                po.setStartTime(new Date());
+                po.setFinishTime(null);
+                int add = simulationProjectMapper.add(po);
+                if (add <= 0) {
+                    return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE, "生成新工作失败。");
+                }
+                // 查询项目详情信息并保存,固定项目最原始的运行数据
+                String projectId = po.getId();
+                ProjectDetailsVo info = selectProjectDetailsByIdBackUp(SimulationManualProjectParam.builder()
+                        .id(projectId).projectType(DictConstants.PROJECT_TYPE_MANUAL).build()).getInfo();
+                String infoJson = JsonUtil.beanToJson(info);
+                simulationProjectMapper.updateDetailsById(projectId, infoJson);
+                // Kafka推送消息
                 projectRunToKafka(po);
-            } else if ("30".equals(param.getNowRunState())) {
-                //设置完成时间
-                param.setFinishTime(new Date());
+            } else {    // 创建新的项目或者重新运行被终止的项目
+                // 查询项目详情信息并保存
+                String projectId = param.getId();
+                ProjectDetailsVo info = selectProjectDetailsByIdBackUp(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 ("20".equals(param.getNowRunState())) {
+                    //设置开始时间
+                    param.setStartTime(new Date());
+                    //Kafka推送消息
+                    projectRunToKafka(po);
+                } else if ("30".equals(param.getNowRunState())) {
+                    //设置完成时间
+                    param.setFinishTime(new Date());
+                }
+                simulationProjectMapper.updateProjectNowRunState(param);
             }
-            simulationProjectMapper.updateProjectNowRunState(param);
         }
-
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
     }
 
     private void projectRunToKafka(SimulationManualProjectPo po) {
         try {
-            log.info("projectRunToKafka() 准备发送项目消息:"+po);
+            log.info("projectRunToKafka() 准备发送项目消息:" + po);
             SimulationManualProjectKafkaParam kafkaParam = new SimulationManualProjectKafkaParam();
             kafkaParam.setProjectId(po.getId());
             kafkaParam.setAlgorithmId(po.getAlgorithm());
@@ -1292,17 +1267,6 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
         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());
-    }
-
     @Override
     public String getDictName(String type, String code) {
         Map<String, String> stringStringMap = getDictByType(type);
@@ -4466,7 +4430,6 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
     }
 
 
-
     /**
      * 查询算法下拉列表
      *
@@ -4516,7 +4479,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
             algorithmListSy = getOtherAlgorithmInfo(urlParam);
 
         }
-        List<DropDownNewVo> listGSy=new ArrayList<>();
+        List<DropDownNewVo> listGSy = new ArrayList<>();
         DropDownNewVo dropDownNewSyVo = new DropDownNewVo();
         dropDownNewSyVo.setLabel("私有");
         dropDownNewSyVo.setOptions(algorithmListSy);
@@ -4585,7 +4548,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
 
             vehicleGyList.add(dropDownVo);
         }
-        List<DropDownNewVo> listGSy=new ArrayList<>();
+        List<DropDownNewVo> listGSy = new ArrayList<>();
         DropDownNewVo dropDownNewSyVo = new DropDownNewVo();
         dropDownNewSyVo.setLabel("私有");
         dropDownNewSyVo.setOptions(vehicleSyList);
@@ -4599,6 +4562,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
         dropDownTypeNewVo.setType("2");
         result.add(dropDownTypeNewVo);
     }
+
     private void setScenePackageDropDownNew(List<DropDownTypeNewVo> result) {
         ScenePackagePO scenePackagePO = new ScenePackagePO();
         scenePackagePO.setCreateUserId(AuthUtil.getCurrentUserId());
@@ -4622,7 +4586,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
             dropDownVo.setShare(v.getShare());
             scenePackageGyList.add(dropDownVo);
         }
-        List<DropDownNewVo> listGSy=new ArrayList<>();
+        List<DropDownNewVo> listGSy = new ArrayList<>();
         DropDownNewVo dropDownNewSyVo = new DropDownNewVo();
         dropDownNewSyVo.setLabel("私有");
         dropDownNewSyVo.setOptions(scenePackageSyList);

+ 1 - 4
simulation-resource-server/src/main/java/com/css/simulation/resource/project/service/SimulationProjectService.java

@@ -14,7 +14,7 @@ public interface SimulationProjectService {
 
     ResponseBodyVO<PageInfo<SimulationManualProjectVo>> selectProject(SimulationManualProjectParam param);
 
-    ResponseBodyVO selectProjectById(SimulationManualProjectParam param);
+    ResponseBodyVO<SimulationManualProjectSingleVo> selectProjectById(SimulationManualProjectParam param);
 
     ResponseBodyVO<String> deleteProjectByids(SimulationManualProjectParam param);
 
@@ -28,9 +28,6 @@ public interface SimulationProjectService {
     ResponseBodyVO<List<DropDownTypeNewVo>> selectDropDownByTypeNew(SimulationManualProjectParam param);
 
     ResponseBodyVO<ProjectTaskDetailsVo> selectProjectTaskById(SimulationManualProjectParam param);
-
-    ResponseBodyVO selectMaxParallelism();
-
     String getDictName(String type, String code);
 
     ResponseBodyVO analysisVehicleCoord() throws Exception;

+ 9 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/mapper/ScoringRulesMapper.java

@@ -4,6 +4,7 @@ import api.common.pojo.param.scene.ScoringRulesParam;
 import api.common.pojo.po.scene.ScoringRulesPO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -17,14 +18,21 @@ public interface ScoringRulesMapper {
 
     ScoringRulesPO queryScoringRulesByRuleName(ScoringRulesParam params);
 
-    ScoringRulesPO querySelfOnly(@Param("ruleName")String ruleName,@Param("createUserId")String createUserId);
+    ScoringRulesPO querySelfOnly(@Param("ruleName") String ruleName, @Param("createUserId") String createUserId);
 
     List<ScoringRulesPO> queryScoringRulesList(ScoringRulesParam params);
+
     Integer queryCsbById(ScoringRulesParam params);
+
     ScoringRulesPO queryScoringRules(ScoringRulesParam params);
 
     void updateScoringRules(ScoringRulesPO params);
 
     void deleteScoringRules(ScoringRulesPO params);
 
+    @Select("select rules_id\n" +
+            "from scoring_rules\n" +
+            "where is_deleted = '1'\n" +
+            "  and rules_id in (select rules_id from scene_package_sublist where root_id = #{packageId})")
+    List<String> selectDeletedRulesByPackageId(@Param("packageId") String scenePackageId);
 }

+ 60 - 8
simulation-resource-server/src/main/java/com/css/simulation/resource/util/ProjectUtil.java

@@ -1,25 +1,40 @@
 package com.css.simulation.resource.util;
 
 import api.common.pojo.constants.DictConstants;
+import api.common.pojo.param.project.SimulationManualProjectParam;
 import api.common.pojo.po.project.SchedulerProjectPO;
+import api.common.pojo.po.project.SimulationManualProjectPo;
+import api.common.util.CollectionUtil;
+import api.common.util.StringUtil;
+import com.css.simulation.resource.algorithm.mapper.AlgorithmMapper;
 import com.css.simulation.resource.project.mapper.AutoSubProjectMapper;
 import com.css.simulation.resource.project.mapper.ManualProjectMapper;
+import com.css.simulation.resource.project.mapper.SimulationProjectMapper;
+import com.css.simulation.resource.scene.mapper.ScenePackageMapper;
+import com.css.simulation.resource.scene.mapper.ScoringRulesMapper;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
+import java.util.List;
+
 @Component
 @Slf4j
 public class ProjectUtil {
 
-    ManualProjectMapper manualProjectMapper;
-    AutoSubProjectMapper autoSubProjectMapper;
+    @Resource
+    private ManualProjectMapper manualProjectMapper;
+    @Resource
+    private AutoSubProjectMapper autoSubProjectMapper;
+    @Resource
+    private SimulationProjectMapper simulationProjectMapper;
+    @Resource
+    private ScenePackageMapper scenePackageMapper;
+    @Resource
+    private AlgorithmMapper algorithmMapper;
+    @Resource
+    private ScoringRulesMapper scoringRulesMapper;
 
-    @Autowired
-    public ProjectUtil(ManualProjectMapper manualProjectMapper, AutoSubProjectMapper autoSubProjectMapper) {
-        this.manualProjectMapper = manualProjectMapper;
-        this.autoSubProjectMapper = autoSubProjectMapper;
-    }
 
     public String getProjectTypeByProjectId(String projectId) {
         String projectType = null;
@@ -44,4 +59,41 @@ public class ProjectUtil {
             return DictConstants.REPORT_LEVEL_P;
         }
     }
+
+
+    public SimulationManualProjectPo getProjectInfo(SimulationManualProjectParam param) {
+        if (StringUtil.isEmpty(param.getId()) || StringUtil.isEmpty(param.getNowRunState())) {
+            throw new RuntimeException("参数为空。");
+        } else {
+            SimulationManualProjectPo po = simulationProjectMapper.selectProjectById(param);
+            if (po == null) {
+                throw new RuntimeException("手动项目" + param.getId() + "不存在。");
+            }
+            return po;
+        }
+    }
+
+    public void checkProject(String projectType, String projectId, String algorithmId, String vehicleConfigId,
+                             String scenePackageId) {
+        //1 检查算法是否被删除
+        if (DictConstants.IS_DELETED.equals(algorithmMapper.selectIsDeletedById(algorithmId))) {
+            throw new RuntimeException("项目所使用算法已被删除。");
+        }
+        //2 查询场景测试包是否被禁用
+        String isUnavailable = scenePackageMapper.selectIsUnavailableByPackageId(scenePackageId);
+        if (DictConstants.SCENE_PACKAGE_UNAVAILABLE.equals(isUnavailable)) {
+            throw new RuntimeException("场景测试包已被禁用,编辑场景测试包后可重新运行。");
+        }
+        //3 查询评分规则是否被删除
+        final List<String> rules = scoringRulesMapper.selectDeletedRulesByPackageId(scenePackageId);
+        if (CollectionUtil.isNotEmpty(rules)) {
+            throw new RuntimeException("评分规则 " + rules + " 已被删除。");
+        }
+        //4 查询场景测试包是否有场景
+
+        if (DictConstants.PROJECT_TYPE_MANUAL.equals(projectType)) {
+            final SchedulerProjectPO schedulerProjectPO = manualProjectMapper.selectById(projectId);
+
+        }
+    }
 }