李春阳 1 anno fa
parent
commit
1b9e27a58e

+ 19 - 5
simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/controller/SceneImportController.java

@@ -10,6 +10,7 @@ import api.common.util.StringUtil;
 import api.common.util.TimeUtil;
 import com.css.simulation.resource.scene.common.oauth.AuthorizationHolder;
 import com.css.simulation.resource.scene.common.feign.SceneService;
+import com.css.simulation.resource.scene.common.utils.AuthUtil;
 import com.css.simulation.resource.scene.service.SceneImportService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Controller;
@@ -104,12 +105,12 @@ public class SceneImportController {
             sceneImportService.updateSceneEvaluationRule(sceneEvaluationRulePO);
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE);
         }
+        Integer nowTime = TimeUtil.getRq(new Date(), 0);
+        String randomCode = StringUtil.getRandomCode();
+        String objectPath = "场景评价可执行文件/" + nowTime + "/" + randomCode + "/";
         try {
             //* -------------------------------- 上传到 minio --------------------------------
-            log.info("上传到minio " + po.getLocalPath());
-            Integer nowTime = TimeUtil.getRq(new Date(), 0);
-            String randomCode = StringUtil.getRandomCode();
-            String objectPath = "场景评价可执行文件/" + nowTime + "/" + randomCode + "/";
+            log.info("上传到minio " + objectPath);
             String fileName = file.getName();
             boolean uploadSuccess = sceneImportService.startUploadEvaluationScript(objectPath, fileName, po.getLocalPath());
             if (!uploadSuccess) {
@@ -118,14 +119,27 @@ public class SceneImportController {
                 sceneImportService.updateSceneEvaluationRule(sceneEvaluationRulePO);
                 return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE);
             }
+            // 删除历史可执行文件
+            SceneEvaluationRulePO oldSceneEvaluationRule = sceneImportService.querySceneEvaluationRuleById(po.getRuleId());
+            if (oldSceneEvaluationRule != null && StringUtil.isNotEmpty(oldSceneEvaluationRule.getScriptPath())) {
+                try {
+                    sceneImportService.deleteOldSceneEvaluationRuleFile(oldSceneEvaluationRule.getScriptPath());
+                } catch (Exception e) {
+                    sceneEvaluationRulePO.setErrorMsg("删除历史场景评价文件失败");
+                }
+            }
             sceneEvaluationRulePO.setScriptName(fileName);
             sceneEvaluationRulePO.setScriptPath(objectPath + fileName);
             sceneEvaluationRulePO.setStatus(DictConstants.SCENE_IMPORT_STATUS_2);
+            sceneEvaluationRulePO.setErrorMsg("");
             sceneImportService.updateSceneEvaluationRule(sceneEvaluationRulePO);
         } catch (Exception e) {
-            log.error("上传可执行文件失败:" + po.getRuleId());
+            log.error("上传可执行文件失败:" + po.getRuleId(), e);
+            sceneImportService.deleteOldSceneEvaluationRuleFile(objectPath);
             sceneEvaluationRulePO.setStatus(DictConstants.SCENE_IMPORT_STATUS_0);
             sceneEvaluationRulePO.setErrorMsg("上传失败");
+            sceneEvaluationRulePO.setModifyTime(TimeUtil.getNowForMysql());
+            sceneEvaluationRulePO.setModifyUserId(AuthUtil.getCurrentUserId());
             sceneImportService.updateSceneEvaluationRule(sceneEvaluationRulePO);
             return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE);
         }

+ 5 - 0
simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/mapper/SceneEvaluationRuleMapper.java

@@ -2,6 +2,8 @@ package com.css.simulation.resource.scene.mapper;
 
 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;
 
 
@@ -10,4 +12,7 @@ import org.springframework.stereotype.Repository;
 public interface SceneEvaluationRuleMapper {
 
     void updateSceneEvaluationRule(SceneEvaluationRulePO params);
+
+    @Select("SELECT rule_id, script_path FROM scene_evaluation_rule WHERE rule_id = #{id} AND is_deleted = '0'")
+    SceneEvaluationRulePO querySceneEvaluationRuleById(@Param("id") String id);
 }

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

@@ -11,6 +11,7 @@ import com.css.simulation.resource.scene.mapper.SceneEvaluationRuleMapper;
 import com.css.simulation.resource.scene.mapper.SceneImportMapper;
 import com.css.simulation.resource.scene.common.utils.PoUtil;
 import io.minio.MinioClient;
+import io.minio.RemoveObjectArgs;
 import io.minio.UploadObjectArgs;
 import lombok.SneakyThrows;
 import org.springframework.beans.factory.annotation.Value;
@@ -108,4 +109,13 @@ public class SceneImportService {
         return true;
     }
 
+    public SceneEvaluationRulePO querySceneEvaluationRuleById(String id) {
+        return sceneEvaluationRuleMapper.querySceneEvaluationRuleById(id);
+    }
+
+    @SneakyThrows
+    public void deleteOldSceneEvaluationRuleFile(String path) {
+        minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(path).build());
+    }
+
 }

+ 5 - 5
simulation-resource-scene/src/main/resources/mapper/SceneEvaluationRuleMapper.xml

@@ -1,6 +1,6 @@
 <?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.SceneEvaluationRuleMapper">
+<mapper namespace="com.css.simulation.resource.scene.mapper.SceneEvaluationRuleMapper">
     <update id="updateSceneEvaluationRule" parameterType="api.common.pojo.po.scene.SceneEvaluationRulePO">
         update simulation.scene_evaluation_rule
         <set>
@@ -25,11 +25,11 @@
             <if test="modifyTime != null">
                 modify_time = #{modifyTime},
             </if>
-            <if test="status != null">
-                status = #{status},
+            <if test="status != null and status !=''">
+                status = #{status,jdbcType=VARCHAR},
             </if>
-            <if test="error_msg != null">
-                error_msg = #{errorMsg},
+            <if test="errorMsg != null">
+                error_msg = #{errorMsg,jdbcType=VARCHAR},
             </if>
         </set>
         where rule_id = #{ruleId,jdbcType=VARCHAR}

+ 1 - 1
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/infra/runnable/SceneEvaluationComputeRunnable.java

@@ -224,6 +224,6 @@ public class SceneEvaluationComputeRunnable implements Runnable {
             }
         }
         // 删除临时文件
-//        FileUtil.deleteFolder(linuxTempPath + "scene/evaluation/" + sceneEvaluationComputeParams.get(0).getTaskId());   // 删除临时文件
+        FileUtil.deleteFolder(sceneEvaluationComputeParam.getLinuxTempPath() + "scene/evaluation/" + sceneEvaluationComputeParam.getTaskId());   // 删除临时文件
     }
 }

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

@@ -32,6 +32,7 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -201,11 +202,11 @@ public class ScoreRuleController {
      * 新增场景评价规则支持传入路径
      */
     @PostMapping("/saveSceneEvaluationRuleByPath")
-    public ResponseBodyVO<String> saveSceneEvaluationRule(@RequestBody SceneEvaluationRulePO sceneEvaluationRulePO) {
+    public ResponseBodyVO<String> saveSceneEvaluationRule(@RequestBody SceneEvaluationRulePO sceneEvaluationRulePO, HttpServletRequest request) {
         if (ObjectUtil.isNull(sceneEvaluationRulePO.getRuleName())) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "参数 RulesName 不能为空,请检查");
         }
-        return sceneEvaluationRuleService.uploadPyScriptAndSaveRuleByPath(sceneEvaluationRulePO);
+        return sceneEvaluationRuleService.uploadPyScriptAndSaveRuleByPath(sceneEvaluationRulePO, request);
     }
 
     /**

+ 19 - 5
simulation-resource-server/src/main/java/com/css/simulation/resource/server/app/service/SceneEvaluationRuleService.java

@@ -3,6 +3,7 @@ package com.css.simulation.resource.server.app.service;
 import api.common.pojo.common.ResponseBodyVO;
 import api.common.pojo.constants.DictConstants;
 import api.common.pojo.enums.SceneEvaluationEnum;
+import api.common.pojo.param.MinioParameter;
 import api.common.pojo.param.scene.*;
 import api.common.pojo.po.scene.SceneComplexityPO;
 import api.common.pojo.po.scene.SceneEvaluationOperatePO;
@@ -21,6 +22,7 @@ import com.css.simulation.resource.server.infra.db.mysql.mapper.SceneRiskMapper;
 import com.css.simulation.resource.server.infra.feign.service.FileDownService;
 import com.css.simulation.resource.server.infra.feign.service.SceneService;
 import com.css.simulation.resource.server.infra.feign.service.SchedulerService;
+import com.css.simulation.resource.server.infra.oauth.AuthorizationHolder;
 import com.css.simulation.resource.server.infra.util.AuthUtil;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
@@ -28,14 +30,14 @@ import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
-import static api.common.pojo.constants.DictConstants.SCENE_IMPORT_STATUS_1;
-import static api.common.pojo.constants.DictConstants.SCENE_IMPORT_STATUS_2;
+import static api.common.pojo.constants.DictConstants.*;
 
 @Slf4j
 @Service
@@ -122,7 +124,7 @@ public class SceneEvaluationRuleService {
 
 
     @SneakyThrows
-    public ResponseBodyVO<String> uploadPyScriptAndSaveRuleByPath(SceneEvaluationRulePO sceneEvaluationRulePO) {
+    public ResponseBodyVO<String> uploadPyScriptAndSaveRuleByPath(SceneEvaluationRulePO sceneEvaluationRulePO, HttpServletRequest request) {
         if (ObjectUtil.isNull(sceneEvaluationRulePO)) {
             return new ResponseBodyVO<>(false, 500, "参数错误!", null);
         }
@@ -144,7 +146,7 @@ public class SceneEvaluationRuleService {
             if (!DictConstants.ROLE_CODE_ADMIN.equals(roleCode) && !DictConstants.ROLE_CODE_SYSADMIN.equals(roleCode)) {
                 return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "非管理员禁止上传文件");
             }
-            sceneEvaluationRulePO.setStatus(SCENE_IMPORT_STATUS_1);
+            sceneEvaluationRulePO.setStatus(SCENE_IMPORT_STATUS_0);
             // 判断 ruleId 是否为空
             if (StringUtil.isEmpty(sceneEvaluationRulePO.getRuleId())) {
                 // 创建
@@ -157,6 +159,8 @@ public class SceneEvaluationRuleService {
             SceneEvaluationRuleScriptPO sceneEvaluationRuleScriptPO = new SceneEvaluationRuleScriptPO();
             sceneEvaluationRuleScriptPO.setRuleId(sceneEvaluationRulePO.getRuleId());
             sceneEvaluationRuleScriptPO.setLocalPath(sceneEvaluationRulePO.getLocalPath());
+            String authorization = request.getHeader("Authorization");
+            AuthorizationHolder.setAuthorization(authorization);
             sceneService.startImportEvaluationScript(sceneEvaluationRuleScriptPO);
             return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
         }
@@ -167,11 +171,21 @@ public class SceneEvaluationRuleService {
 
     @SneakyThrows
     public void deleteSceneEvaluationRule(SceneEvaluationRulePO params) {
-        // todo 如果是复杂度脚本需要校验是否有自然/交通等模板有引用
+        // 先查
+        SceneEvaluationRulePO oldSceneEvaluationRule = sceneEvaluationRuleMapper.querySceneEvaluationPyById(params.getRuleId());
+        String scriptPath = null;
+        if (oldSceneEvaluationRule != null) {
+            scriptPath = oldSceneEvaluationRule.getScriptPath();
+        }
         params.setIsDeleted("1");
         params.setModifyTime(TimeUtil.getNowForMysql());
         params.setModifyUserId(AuthUtil.getCurrentUserId());
         sceneEvaluationRuleMapper.updateSceneEvaluationRule(params);
+        if (StringUtil.isNotEmpty(scriptPath)) {
+            MinioParameter minioParameter = new MinioParameter();
+            minioParameter.setObjectName(scriptPath);
+            fileDownService.remove(minioParameter);
+        }
         // 同步把使用该评分规则的测试包设为禁用
         scenePackageMapper.updateIsUnavailableBySceneEvaluationRuleId(params);
         LogUtil.delete();

+ 5 - 2
simulation-resource-server/src/main/resources/mysql/mapper/SceneEvaluationRuleMapper.xml

@@ -6,12 +6,12 @@
         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, status)
+         is_deleted, status, local_path)
         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}, #{status,jdbcType=VARCHAR})
+                #{isDeleted,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR}, #{localPath,jdbcType=VARCHAR})
     </insert>
 
     <update id="updateSceneEvaluationRule" parameterType="api.common.pojo.po.scene.SceneEvaluationRulePO">
@@ -35,6 +35,9 @@
             <if test="modifyUserId != null and modifyUserId!=''">
                 modify_user_id = #{modifyUserId,jdbcType=VARCHAR},
             </if>
+            <if test="localPath != null and localPath!=''">
+                local_path = #{localPath,jdbcType=VARCHAR},
+            </if>
             <if test="modifyTime != null">
                 modify_time = #{modifyTime},
             </if>