李春阳 před 1 rokem
rodič
revize
f83b8a5745

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

@@ -61,6 +61,8 @@ public class DictConstants {
     public static final String SCENE_IMPORT_STATUS = "sceneImportStatus";//场景上传状态
     public static final String ALGORITHM_FILE = "algorithmFile";    //算法文件上传type
     public static final String VEHICLE_IMG_FILE = "vehicleImg";    //车辆图片上传type
+    // 场景评价规则脚本类型
+    public static final String SCENE_EVALUATION_RULE_PY_FILE = "evaluationPy";
 
     // 算法镜像上传类型
     public static final String ALGORITHM_UPLOAD_MODE_FILE = "1";    // 文件上传
@@ -88,8 +90,15 @@ public class DictConstants {
     public static final String SCENE_GENERAL = "4";    // 泛化场景
 
     // 基准场景库
-    public static final String REFERENCE_SCENE_LIB = "5";
-
+    public static final String SCENE_REFERENCE_LIB = "5";
+    // 复杂度
+    public static final String COMPLEXITY = "1";
+    // 危险度
+    public static final String RISK = "2";
+    // 暴露率
+    public static final String EXPOSURE_RATE = "3";
+    // 覆盖率
+    public static final String COVERAGE = "4";
 
 
     public static final String PROJECT_WAITING = "10"; // 项目执行状态,待执行

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

@@ -32,6 +32,8 @@ public class SceneEvaluationRulePO implements Serializable {
     private String scriptName;
     // 脚本路径
     private String scriptPath;
+    // 是否重新上传文件
+    private Boolean uploadNewFile;
     // 是否删除
     private String isDeleted;
     // 创建时间

+ 2 - 1
simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/controller/SceneImportController.java

@@ -77,7 +77,8 @@ public class SceneImportController {
                 break;
             case DictConstants.SCENE_ACCIDENT:  // 交通事故
                 sceneService.saveSceneAccidentBatch(param);
-            case DictConstants.REFERENCE_SCENE_LIB:  // 基准场景库
+                break;
+            case DictConstants.SCENE_REFERENCE_LIB:  // 基准场景库
                 sceneService.saveSceneAccidentBatch(param);
         }
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);

+ 1 - 1
simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/service/SceneImportService.java

@@ -49,7 +49,7 @@ public class SceneImportService {
             sceneName = "标准法规场景";
         } else if (DictConstants.SCENE_ACCIDENT.equals(sceneType)) {
             sceneName = "交通事故场景";
-        } else if (DictConstants.REFERENCE_SCENE_LIB.equals(sceneType)) {
+        } else if (DictConstants.SCENE_REFERENCE_LIB.equals(sceneType)) {
             sceneName = "基准场景库";
         }
         else {

+ 7 - 31
simulation-resource-server/src/main/java/com/css/simulation/resource/server/adapter/controller/scene_library/score_rule/ScoreRuleController.java

@@ -172,38 +172,15 @@ public class ScoreRuleController {
     }
 
 
-    @RequestMapping(value = "/uploadPyScript")
-    public ResponseBodyVO<Map<String, String>> uploadPyScript(@RequestPart("file") MultipartFile file) {
-        String roleCode = AuthUtil.getCurrentUserRoleCode();
-        if (!DictConstants.ROLE_CODE_ADMIN.equals(roleCode) && !DictConstants.ROLE_CODE_SYSADMIN.equals(roleCode)) {
-            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "非管理员禁止上传文件");
-        }
-        return scoringRulesService.uploadPyScript(file);
-    }
-
     /**
      * 新增场景评价规则
      */
     @PostMapping("/saveSceneEvaluationRule")
-    public ResponseBodyVO<String> saveSceneEvaluationRule(@RequestBody SceneEvaluationRulePO sceneEvaluationRulePO) {
-        // 判断 ruleId 是否为空
-        if (StringUtil.isEmpty(sceneEvaluationRulePO.getRuleId())) {
-            // 检查私有是否存在同名平分规则
-            SceneEvaluationRulePO serPO = scoringRulesService.querySceneEvaluationRuleOnly(sceneEvaluationRulePO.getRuleName(), AuthUtil.getCurrentUserId());
-            if (ObjectUtil.isNotNull(serPO)) {
-                return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "场景规则 " + serPO.getRuleName() + " 已存在,请重新命名。");
-            }
-            // 创建
-            // todo 校验文件是否存在
-//            if () {
-//
-//            }
-//            scoringRulesService.saveSceneEvaluationRule(sceneEvaluationRulePO);
-        } else {
-            // 修改
-//            scoringRulesService.updateSceneEvaluationRule(sceneEvaluationRulePO);
+    public ResponseBodyVO<String> saveSceneEvaluationRule(@RequestParam("file") MultipartFile file, @RequestBody SceneEvaluationRulePO sceneEvaluationRulePO) {
+        if (ObjectUtil.isNull(sceneEvaluationRulePO.getRuleName())) {
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "参数 RulesName 不能为空,请检查");
         }
-        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
+        return scoringRulesService.uploadPyScriptAndSaveRule(file, sceneEvaluationRulePO);
     }
 
 
@@ -213,11 +190,10 @@ public class ScoreRuleController {
     @PostMapping("/querySceneEvaluationRuleList")
     public ResponseBodyVO<PageInfo<SceneEvaluationRuleVO>> querySceneEvaluationRuleList(@RequestBody SceneEvaluationRuleParam params) {
         PageUtil.setPageInfo(params);
-//        List<ScoringRulesPO> list = scoringRulesService.querySceneEvaluationRule(params);
-        List<SceneEvaluationRulePO> list = new ArrayList<>();
+        List<SceneEvaluationRulePO> list = scoringRulesService.querySceneEvaluationRuleList(params);
         PageInfo<SceneEvaluationRulePO> sceneEvaluationRulePOPageInfo = new PageInfo<>(list);
         List<SceneEvaluationRuleVO> list1 = new ArrayList<>();
-        //po转vo
+        // po  vo
         for (SceneEvaluationRulePO po : list) {
             SceneEvaluationRuleVO vo = new SceneEvaluationRuleVO();
             BeanUtils.copyProperties(po, vo);
@@ -233,7 +209,7 @@ public class ScoreRuleController {
      */
     @PostMapping("/querySceneComplexityScript")
     public ResponseBodyVO<List<SceneEvaluationRuleVO>> querySceneComplexityScript(@RequestBody ScoringRulesParam params) {
-//        List<ScoringRulesPO> list = scoringRulesService.querySceneEvaluationRule(params);
+//        List<ScoringRulesPO> list = scoringRulesService.querySceneEvaluationRuleList(params);
         List<SceneEvaluationRulePO> list = new ArrayList<>();
         List<SceneEvaluationRuleVO> list1 = new ArrayList<>();
         //po转vo

+ 81 - 30
simulation-resource-server/src/main/java/com/css/simulation/resource/server/app/service/ScoringRulesService.java

@@ -2,13 +2,12 @@ package com.css.simulation.resource.server.app.service;
 
 import api.common.pojo.common.ResponseBodyVO;
 import api.common.pojo.constants.DictConstants;
+import api.common.pojo.param.scene.SceneEvaluationRuleParam;
 import api.common.pojo.param.scene.ScoringRulesParam;
 import api.common.pojo.po.scene.SceneEvaluationRulePO;
 import api.common.pojo.po.scene.ScoringRulesPO;
-import api.common.util.LogUtil;
-import api.common.util.PythonUtil;
-import api.common.util.StringUtil;
-import api.common.util.TimeUtil;
+import api.common.util.*;
+import com.css.simulation.resource.server.infra.db.mysql.mapper.SceneEvaluationRuleMapper;
 import com.css.simulation.resource.server.infra.db.mysql.mapper.ScenePackageMapper;
 import com.css.simulation.resource.server.infra.db.mysql.mapper.ScoringRulesMapper;
 import com.css.simulation.resource.server.infra.feign.service.FileDownService;
@@ -30,6 +29,8 @@ public class ScoringRulesService {
     private ScoringRulesMapper scoringRulesMapper;
     @Resource
     private ScenePackageMapper scenePackageMapper;
+    @Resource
+    private SceneEvaluationRuleMapper sceneEvaluationRuleMapper;
 
     @Resource
     private FileDownService fileDownService;
@@ -91,9 +92,8 @@ public class ScoringRulesService {
     }
 
     @SneakyThrows
-    public SceneEvaluationRulePO querySceneEvaluationRuleOnly(String ruleName, String createUserId) {
-//        return scoringRulesMapper.querySceneEvaluationRuleOnly(ruleName, createUserId);
-        return new SceneEvaluationRulePO();
+    public int querySceneEvaluationRuleOnly(String ruleName, String ruleId) {
+        return sceneEvaluationRuleMapper.querySceneEvaluationRuleOnly(ruleName, ruleId);
     }
 
     @SneakyThrows
@@ -170,34 +170,85 @@ public class ScoringRulesService {
 
 
     @SneakyThrows
-    public ResponseBodyVO<Map<String, String>> uploadPyScript(MultipartFile file) {
-        // 检查文件内容是否合规
-        String pyStr = new String(file.getBytes(), StandardCharsets.UTF_8);
-        //1 校验 python 语法错误
-        String pylint = PythonUtil.pylint(pyStr, PythonUtil.C, PythonUtil.R, PythonUtil.W, PythonUtil.E0401, PythonUtil.E0601);
-        if (!pylint.contains(PythonUtil.PASS)) {
-            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "代码格式错误,请检查。");
+    public ResponseBodyVO<String> uploadPyScriptAndSaveRule(MultipartFile file, SceneEvaluationRulePO sceneEvaluationRulePO) {
+
+        boolean hasRuleId = StringUtil.isEmpty(sceneEvaluationRulePO.getRuleId());
+
+        // 检查是否存在同名场景评价规则
+        int repeatPyScriptAndSaveRuleCount = querySceneEvaluationRuleOnly(sceneEvaluationRulePO.getRuleName(),
+                hasRuleId ? null : sceneEvaluationRulePO.getRuleId());
+        if (repeatPyScriptAndSaveRuleCount > 0) {
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "场景规则 " + sceneEvaluationRulePO.getRuleName() + " 已存在,请重新命名。");
         }
-        // 获取文件原本的名字
-        String originName = file.getOriginalFilename();
-        if (null == originName) {
-            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "文件名为空,请检查!");
+        // 新建或者是编辑时重新上传文件
+        if ((hasRuleId) || sceneEvaluationRulePO.getUploadNewFile()) {
+            String roleCode = AuthUtil.getCurrentUserRoleCode();
+            if (!DictConstants.ROLE_CODE_ADMIN.equals(roleCode) && !DictConstants.ROLE_CODE_SYSADMIN.equals(roleCode)) {
+                return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "非管理员禁止上传文件");
+            }
+            // 检查文件内容是否合规
+            String pyStr = new String(file.getBytes(), StandardCharsets.UTF_8);
+            //1 校验 python 语法错误
+            String pylint = PythonUtil.pylint(pyStr, PythonUtil.C, PythonUtil.R, PythonUtil.W, PythonUtil.E0401, PythonUtil.E0601);
+            if (!pylint.contains(PythonUtil.PASS)) {
+                return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "代码格式错误,请检查。");
+            }
+            // 获取文件原本的名字
+            String originName = file.getOriginalFilename();
+            if (null == originName) {
+                return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "文件名为空,请检查!");
+            }
+            String fileName = originName.substring(0, originName.lastIndexOf("."));
+            Integer nowTime = TimeUtil.getRq(new Date(), 0);
+            String randomCode = StringUtil.getRandomCode();
+            fileName = "/" + DictConstants.SCENE_EVALUATION_RULE_PY_FILE + "/" + nowTime + "/" + randomCode + "/" + fileName;
+            ResponseBodyVO<String> response = fileDownService.upload(file, fileName);
+            if (response.isStatus()) {
+                String previewUrl = response.getInfo();
+                sceneEvaluationRulePO.setScriptName(fileName);
+                sceneEvaluationRulePO.setScriptPath(previewUrl);
+            }
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "上传失败!");
         }
-        String fileName = originName.substring(0, originName.lastIndexOf("."));
-        Integer nowTime = TimeUtil.getRq(new Date(), 0);
-        String randomCode = StringUtil.getRandomCode();
-        fileName = "/" + DictConstants.VEHICLE_IMG_FILE + "/" + nowTime + "/" + randomCode + "/" + fileName;
-        ResponseBodyVO<String> response = fileDownService.upload(file, fileName);
-        if (response.isStatus()) {
-            String previewUrl = response.getInfo();
-            Map<String, String> map = new HashMap<>();
-            map.put("previewUrl", previewUrl);
-            map.put("fileName", fileName);
-            return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, map);
+
+        // 判断 ruleId 是否为空
+        if (StringUtil.isEmpty(sceneEvaluationRulePO.getRuleId())) {
+            // 创建
+            saveSceneEvaluationRule(sceneEvaluationRulePO);
+        } else {
+            // 修改
+            updateSceneEvaluationRule(sceneEvaluationRulePO);
         }
-        return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "上传失败!");
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
+    }
+
+    /**
+     * 查询场景评价规则列表
+     */
+    @SneakyThrows
+    public List<SceneEvaluationRulePO> querySceneEvaluationRuleList(SceneEvaluationRuleParam params) {
+        return sceneEvaluationRuleMapper.querySceneEvaluationRuleList(params);
+    }
+
 
+    @SneakyThrows
+    public void saveSceneEvaluationRule(SceneEvaluationRulePO params) {
+        params.setCreateTime(TimeUtil.getNowForMysql());
+        params.setModifyTime(TimeUtil.getNowForMysql());
+        params.setRuleId(StringUtil.getRandomUUID());
+        params.setRuleCode(StringUtil.getRandomCode());
+        params.setCreateUserId(AuthUtil.getCurrentUserId());
+        params.setIsDeleted("0");
+        sceneEvaluationRuleMapper.saveSceneEvaluationRule(params);
+        LogUtil.insert();
     }
 
+    @SneakyThrows
+    public void updateSceneEvaluationRule(SceneEvaluationRulePO params) {
+        params.setModifyTime(TimeUtil.getNowForMysql());
+        params.setModifyUserId(AuthUtil.getCurrentUserId());
+        sceneEvaluationRuleMapper.updateSceneEvaluationRule(params);
+        LogUtil.update();
+    }
 
 }

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

@@ -0,0 +1,33 @@
+package com.css.simulation.resource.server.infra.db.mysql.mapper;
+
+import api.common.pojo.param.scene.SceneEvaluationRuleParam;
+import api.common.pojo.po.scene.SceneEvaluationRulePO;
+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;
+
+
+@Mapper
+@Repository
+public interface SceneEvaluationRuleMapper {
+
+    void saveSceneEvaluationRule(SceneEvaluationRulePO params);
+
+    void updateSceneEvaluationRule(SceneEvaluationRulePO params);
+
+    List<SceneEvaluationRulePO> querySceneEvaluationRuleList(SceneEvaluationRuleParam params);
+
+    @Select("<script>" +
+            "select rule_name\n" +
+            "from scene_evaluation_rule\n" +
+            "where rule_name = #{ruleName}  \n" +
+            "<if test='ruleId != null'>" +
+            " AND rule_id != #{ruleId}" +
+            "</if>" +
+            "</script>")
+    int querySceneEvaluationRuleOnly(@Param("ruleName") String ruleName, @Param("ruleId") String ruleId);
+
+}

+ 74 - 0
simulation-resource-server/src/main/resources/mysql/mapper/SceneEvaluationRuleMapper.xml

@@ -0,0 +1,74 @@
+<?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.server.infra.db.mysql.mapper.ScoringRulesMapper">
+
+    <insert id="saveSceneEvaluationRule" parameterType="api.common.pojo.po.scene.SceneEvaluationRulePO">
+        insert into simulation.scene_evaluation_rule
+        (rule_id, rule_code, rule_name, rule_description, rule_type, script_name, script_path,
+         create_user_id, create_time, modify_user_id, modify_time,
+         is_deleted)
+        values (#{ruleId,jdbcType=VARCHAR}, #{ruleCode,jdbcType=VARCHAR}, #{ruleName,jdbcType=VARCHAR},
+                #{ruleDescription,jdbcType=VARCHAR}, #{ruleType,jdbcType=VARCHAR}, #{scriptName,jdbcType=VARCHAR},
+                #{scriptPath,jdbcType=VARCHAR},
+                #{createUserId,jdbcType=VARCHAR}, #{createTime}, #{modifyUserId,jdbcType=VARCHAR}, #{modifyTime},
+                #{isDeleted,jdbcType=VARCHAR})
+    </insert>
+
+    <update id="updateSceneEvaluationRule" parameterType="api.common.pojo.po.scene.SceneEvaluationRulePO">
+        update simulation.scene_evaluation_rule
+        <set>
+            <if test="isDeleted != null and isDeleted!=''">
+                is_deleted = #{isDeleted,jdbcType=VARCHAR},
+            </if>
+            <if test="ruleName != null and ruleName!=''">
+                rule_name = #{ruleName,jdbcType=VARCHAR},
+            </if>
+            <if test="ruleDescription != null and ruleDescription!=''">
+                rule_description = #{ruleDescription,jdbcType=VARCHAR},
+            </if>
+            <if test="scriptName != null and scriptName!=''">
+                script_name = #{scriptName,jdbcType=VARCHAR},
+            </if>
+            <if test="scriptPath != null and scriptPath!=''">
+                script_path = #{scriptPath,jdbcType=VARCHAR},
+            </if>
+            <if test="modifyUserId != null and modifyUserId!=''">
+                modify_user_id = #{modifyUserId,jdbcType=VARCHAR},
+            </if>
+            <if test="modifyTime != null">
+                modify_time = #{modifyTime},
+            </if>
+        </set>
+        where rule_id = #{ruleId,jdbcType=VARCHAR}
+    </update>
+
+    <select id="querySceneEvaluationRuleList" parameterType="api.common.pojo.param.scene.SceneEvaluationRuleParam"
+            resultType="api.common.pojo.po.scene.SceneEvaluationRulePO">
+        select
+        rule_id,rule_code,rule_name, rule_description,rule_type,script_name,script_path,
+        create_user_id,create_time,modify_user_id,modify_time,
+        is_deleted
+        from simulation.scene_evaluation_rule
+        <where>
+            is_deleted = '0'
+            <if test="ruleId != null and ruleId != ''">
+                and rule_id = #{ruleId,jdbcType=VARCHAR}
+            </if>
+            <if test="ruleCode != null and ruleCode != ''">
+                and rule_code = #{ruleCode,jdbcType=VARCHAR}
+            </if>
+            <if test="ruleName != null and ruleName != ''">
+                and rule_name like CONCAT('%',#{ruleName,jdbcType=VARCHAR},'%')
+            </if>
+            <if test="ruleDescription != null and ruleDescription != ''">
+                and rule_description like CONCAT('%',#{ruleDescription},'%')
+            </if>
+            <if test="createUserId != null and createUserId != ''">
+                and create_user_id=#{createUserId,jdbcType=VARCHAR}
+            </if>
+            order by modify_time desc
+        </where>
+
+    </select>
+
+</mapper>