Pārlūkot izejas kodu

首次提交,完成需求 2.1 和 2.2 部分逻辑

李春阳 1 gadu atpakaļ
vecāks
revīzija
00c6b251eb
14 mainītis faili ar 306 papildinājumiem un 19 dzēšanām
  1. 3 0
      api-common/src/main/java/api/common/pojo/constants/DictConstants.java
  2. 41 0
      api-common/src/main/java/api/common/pojo/param/scene/SceneEvaluationRuleParam.java
  3. 46 0
      api-common/src/main/java/api/common/pojo/po/scene/SceneEvaluationRulePO.java
  4. 2 0
      api-common/src/main/java/api/common/pojo/po/system/SceneImportPO.java
  5. 42 0
      api-common/src/main/java/api/common/pojo/vo/scene/SceneEvaluationRuleVO.java
  6. 2 0
      simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/controller/SceneImportController.java
  7. 6 3
      simulation-resource-scene/src/main/java/com/css/simulation/resource/scene/service/SceneImportService.java
  8. 1 6
      simulation-resource-server/src/main/java/com/css/simulation/resource/server/adapter/controller/scene_library/general/SceneGeneralController.java
  9. 94 8
      simulation-resource-server/src/main/java/com/css/simulation/resource/server/adapter/controller/scene_library/score_rule/ScoreRuleController.java
  10. 5 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/server/adapter/controller/system_manage/scene_upload/SceneUploadController.java
  11. 3 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/server/app/service/SceneGeneralTemplateService.java
  12. 7 1
      simulation-resource-server/src/main/java/com/css/simulation/resource/server/app/service/SceneImportService.java
  13. 4 0
      simulation-resource-server/src/main/java/com/css/simulation/resource/server/app/service/SceneNaturalService.java
  14. 50 1
      simulation-resource-server/src/main/java/com/css/simulation/resource/server/app/service/ScoringRulesService.java

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

@@ -87,6 +87,9 @@ public class DictConstants {
     public static final String SCENE_ACCIDENT = "3";    // 交通事故
     public static final String SCENE_GENERAL = "4";    // 泛化场景
 
+    // 基准场景库
+    public static final String REFERENCE_SCENE_LIB = "5";
+
 
 
     public static final String PROJECT_WAITING = "10"; // 项目执行状态,待执行

+ 41 - 0
api-common/src/main/java/api/common/pojo/param/scene/SceneEvaluationRuleParam.java

@@ -0,0 +1,41 @@
+package api.common.pojo.param.scene;
+
+import api.common.pojo.common.PageVO;
+import lombok.*;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 场景评价规则
+ *
+ * @author lcy
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneEvaluationRuleParam extends PageVO implements Serializable {
+
+    // 场景评价规则 Id
+    private String ruleId;
+    // 场景评价规则 code
+    private String ruleCode;
+    // 场景评价规则名称
+    private String ruleName;
+    // 场景评价规则描述
+    private String ruleDescription;
+    // 场景评价规则类型
+    private String ruleType;
+    // 脚本名称
+    private String scriptName;
+    // 脚本路径
+    private String scriptPath;
+    // 是否删除
+    private String isDeleted;
+    // 创建人
+    public String createUserId;
+    // 修改人
+    public String modifyUserId;
+}

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

@@ -0,0 +1,46 @@
+package api.common.pojo.po.scene;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 场景评分规则
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneEvaluationRulePO implements Serializable {
+
+
+    // 场景评价规则 Id
+    private String ruleId;
+    // 场景评价规则 code
+    private String ruleCode;
+    // 场景评价规则名称
+    private String ruleName;
+    // 场景评价规则描述
+    private String ruleDescription;
+    // 场景评价规则类型
+    private String ruleType;
+    // 脚本名称
+    private String scriptName;
+    // 脚本路径
+    private String scriptPath;
+    // 是否删除
+    private String isDeleted;
+    // 创建时间
+    public Timestamp createTime;
+    // 创建人
+    public String createUserId;
+    // 修改时间
+    public Timestamp modifyTime;
+    // 修改人
+    public String modifyUserId;
+
+}

+ 2 - 0
api-common/src/main/java/api/common/pojo/po/system/SceneImportPO.java

@@ -25,4 +25,6 @@ public class SceneImportPO extends CommonPO implements Serializable {
     private String errorMessage;    //错误信息
     private String totalTime;   //总用时长
     private String sceneNames;
+    // 场景评价规则 id
+    private String sceneEvaluationRuleId;
 }

+ 42 - 0
api-common/src/main/java/api/common/pojo/vo/scene/SceneEvaluationRuleVO.java

@@ -0,0 +1,42 @@
+package api.common.pojo.vo.scene;
+
+import api.common.pojo.common.PageVO;
+import lombok.*;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+/**
+ * 场景评价规则
+ *
+ * @author lcy
+ */
+@EqualsAndHashCode()
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SceneEvaluationRuleVO extends PageVO implements Serializable {
+
+    // 场景评价规则 Id
+    private String ruleId;
+    // 场景评价规则 code
+    private String ruleCode;
+    // 场景评价规则名称
+    private String ruleName;
+    // 场景评价规则描述
+    private String ruleDescription;
+    // 场景评价规则类型
+    private String ruleType;
+    // 脚本名称
+    private String scriptName;
+    // 脚本路径
+    private String scriptPath;
+    // 是否删除
+    private String isDeleted;
+    // 创建时间
+    public Timestamp createTime;
+    // 创建人
+    public String createUserId;
+
+}

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

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

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

@@ -49,14 +49,17 @@ public class SceneImportService {
             sceneName = "标准法规场景";
         } else if (DictConstants.SCENE_ACCIDENT.equals(sceneType)) {
             sceneName = "交通事故场景";
-        }else{
+        } else if (DictConstants.REFERENCE_SCENE_LIB.equals(sceneType)) {
+            sceneName = "基准场景库";
+        }
+        else {
             return false;
         }
         String objectPath = sceneName + "/" + nowTime + "/" + randomCode + "/";
         //数据上传
         String dataDirectory = po.getDataDirectory();
         List<String> list = FileUtil.list(dataDirectory);
-        for (String fileName: list) {
+        for (String fileName : list) {
             //minio路径完善
             String objectName = fileName.replace(dataDirectory, objectPath).replaceAll("\\\\", "/");
             minioClient.uploadObject(UploadObjectArgs.builder()
@@ -74,7 +77,7 @@ public class SceneImportService {
             String dataDirectory = po.getDataDirectory() + File.separator + subDirectory;
             List<String> ls = FileUtil.ls(dataDirectory);
             return ObjectUtil.isNotNull(ls);
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             return false;
         }

+ 1 - 6
simulation-resource-server/src/main/java/com/css/simulation/resource/server/adapter/controller/scene_library/general/SceneGeneralController.java

@@ -11,13 +11,9 @@ import api.common.pojo.vo.scene.SceneGeneralTemplateVO;
 import api.common.util.ObjectUtil;
 import api.common.util.StringUtil;
 import api.common.util.TimeUtil;
+import com.css.simulation.resource.server.app.service.*;
 import com.css.simulation.resource.server.infra.util.PageUtil;
 import com.css.simulation.resource.server.infra.feign.service.FileDownService;
-import com.css.simulation.resource.server.app.service.LogService;
-import com.css.simulation.resource.server.app.service.SceneGeneralExampleService;
-import com.css.simulation.resource.server.app.service.SceneGeneralTemplateService;
-import com.css.simulation.resource.server.app.service.DictService;
-import com.css.simulation.resource.server.app.service.SceneImportService;
 import com.github.pagehelper.PageInfo;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -205,7 +201,6 @@ public class SceneGeneralController {
 
     /**
      * 对象转Map
-     *
      */
     public static Map beanToMap(Object object) throws IllegalAccessException {
         Map<String, Object> map = new HashMap<String, Object>();

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

@@ -1,20 +1,25 @@
 package com.css.simulation.resource.server.adapter.controller.scene_library.score_rule;
 
 import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.constants.DictConstants;
 import api.common.pojo.constants.LogConstants;
 import api.common.pojo.param.scene.ScoringRulesParam;
+import api.common.pojo.po.scene.SceneEvaluationRulePO;
 import api.common.pojo.po.scene.ScoringRulesPO;
+import api.common.pojo.vo.scene.SceneEvaluationRuleVO;
 import api.common.pojo.vo.scene.ScoringRulesVO;
 import api.common.util.ObjectUtil;
 import api.common.util.PythonUtil;
 import api.common.util.StringUtil;
+import com.css.simulation.resource.server.app.service.ScoringRulesService;
 import com.css.simulation.resource.server.infra.util.AuthUtil;
 import com.css.simulation.resource.server.infra.util.PageUtil;
-import com.css.simulation.resource.server.app.service.ScoringRulesService;
 import com.github.pagehelper.PageInfo;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
@@ -22,6 +27,7 @@ import java.util.List;
 import java.util.Map;
 
 //打分规则
+@Slf4j
 @RestController
 @RequestMapping(value = "/ScoringRules", name = LogConstants.MODULE_SCORING)
 public class ScoreRuleController {
@@ -76,13 +82,7 @@ public class ScoreRuleController {
     @PostMapping("/saveScoringRules")
     public ResponseBodyVO<String> saveScoringRules(@RequestBody ScoringRulesPO scoringRulesPO) {
         //1 校验 python 语法错误
-        String pylint = PythonUtil.pylint(scoringRulesPO.getRuleDetails(),
-                PythonUtil.C,
-                PythonUtil.R,
-                PythonUtil.W,
-                PythonUtil.E0401,
-                PythonUtil.E0601
-        );
+        String pylint = PythonUtil.pylint(scoringRulesPO.getRuleDetails(), PythonUtil.C, PythonUtil.R, PythonUtil.W, PythonUtil.E0401, PythonUtil.E0601);
         if (!pylint.contains(PythonUtil.PASS)) {
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "代码格式错误,请检查。");
         }
@@ -171,4 +171,90 @@ 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);
+        }
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
+    }
+
+
+    /**
+     * 查询场景评分规则列表
+     */
+    @PostMapping("/querySceneEvaluationRule")
+    public ResponseBodyVO<PageInfo<SceneEvaluationRuleVO>> querySceneEvaluationRule(@RequestBody ScoringRulesParam params) {
+        PageUtil.setPageInfo(params);
+//        List<ScoringRulesPO> list = scoringRulesService.querySceneEvaluationRule(params);
+        List<SceneEvaluationRulePO> list = new ArrayList<>();
+        PageInfo<SceneEvaluationRulePO> sceneEvaluationRulePOPageInfo = new PageInfo<>(list);
+        List<SceneEvaluationRuleVO> list1 = new ArrayList<>();
+        //po转vo
+        for (SceneEvaluationRulePO po : list) {
+            SceneEvaluationRuleVO vo = new SceneEvaluationRuleVO();
+            BeanUtils.copyProperties(po, vo);
+            list1.add(vo);
+        }
+        PageInfo<SceneEvaluationRuleVO> pageInfo = new PageInfo<>(list1);
+        pageInfo.setTotal(sceneEvaluationRulePOPageInfo.getTotal());
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, pageInfo);
+    }
+
+    /**
+     * 查询复杂度脚本
+     */
+    @PostMapping("/querySceneComplexityScript")
+    public ResponseBodyVO<List<SceneEvaluationRuleVO>> querySceneComplexityScript(@RequestBody ScoringRulesParam params) {
+//        List<ScoringRulesPO> list = scoringRulesService.querySceneEvaluationRule(params);
+        List<SceneEvaluationRulePO> list = new ArrayList<>();
+        List<SceneEvaluationRuleVO> list1 = new ArrayList<>();
+        //po转vo
+        for (SceneEvaluationRulePO po : list) {
+            SceneEvaluationRuleVO vo = new SceneEvaluationRuleVO();
+            BeanUtils.copyProperties(po, vo);
+            list1.add(vo);
+        }
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, list1);
+    }
+
+    /**
+     * 删除场景评分规则
+     */
+    @PostMapping("/deleteSceneEvaluationRule")
+    public ResponseBodyVO<String> deleteSceneEvaluationRule(@RequestBody SceneEvaluationRulePO params) {
+        String roleCode = AuthUtil.getCurrentUserRoleCode();
+        if (!DictConstants.ROLE_CODE_ADMIN.equals(roleCode) && !DictConstants.ROLE_CODE_SYSADMIN.equals(roleCode)) {
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "非管理员禁止删除");
+        }
+//        scoringRulesService.deleteSceneEvaluationRule(params);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
+    }
+
 }

+ 5 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/server/adapter/controller/system_manage/scene_upload/SceneUploadController.java

@@ -63,6 +63,11 @@ public class SceneUploadController {
         if (ObjectUtil.isNull(po.getId())) {
             return new ResponseBodyVO<>(false, 500, "任务名称重复!", null);
         }
+        // 判断是否选择复杂度脚本 todo
+        String sceneEvaluationRuleId = po.getSceneEvaluationRuleId();
+//        if (ObjectUtil.isNotNull(sceneEvaluationRuleId) && !scoringRulesService.checkSceneEvaluationScript(sceneEvaluationRuleId)) {
+//            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "复杂度脚本类型错误,请检查脚本类型.");
+//        }
         ResponseBodyVO<SceneImportPO> response = new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
         response.setInfo(po);
         //异步-启动上传

+ 3 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/server/app/service/SceneGeneralTemplateService.java

@@ -223,6 +223,9 @@ public class SceneGeneralTemplateService {
                 po.setFileNameAll(fileNameAll);
                 mapper.deleteSceneGeneralTemplateAll(po);
                 mapper.saveSceneGeneralTemplateAll(list);
+
+                // todo 遍历一下 list 调用 py 脚本计算复杂度 需要参数和返回结果写入 最好走 kafka
+
                 sceneImportPO.setStatus(DictConstants.SCENE_IMPORT_STATUS_4);
                 sceneImportPO.setSuccessNum(list.size());
                 sceneImportPO.setSceneNames(CollectionUtil.listToSequence(sceneNames));

+ 7 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/server/app/service/SceneImportService.java

@@ -41,7 +41,8 @@ public class SceneImportService {
     private SceneAccidentService sceneAccidentService;
     @Resource
     private SceneGeneralTemplateService sceneGeneralTemplateService;
-
+    @Resource
+    private ScoringRulesService scoringRulesService;
 
     public SceneImportPO saveTask(SceneImportPO po) {
         // 名称校验
@@ -50,6 +51,11 @@ public class SceneImportService {
             po.setId(null);
             return po;
         }
+        // 判断是否选择复杂度脚本 todo
+        String sceneEvaluationRuleId = po.getSceneEvaluationRuleId();
+//        if (ObjectUtil.isNotNull(sceneEvaluationRuleId) && !scoringRulesService.checkSceneEvaluationScript(sceneEvaluationRuleId)) {
+//            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "复杂度脚本类型错误,请检查脚本类型.");
+//        }
         // 常规字段赋值
         PoUtil.initAddPo(po);
         String id = po.getId();

+ 4 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/server/app/service/SceneNaturalService.java

@@ -645,6 +645,8 @@ public class SceneNaturalService {
                                     sceneNaturalPO.setModifyTime(TimeUtil.getNowForMysql());
                                     sceneNaturalPO.setModifyUserId(AuthUtil.getCurrentUserId());
                                     sceneNaturalMapper.updateSceneNatural(sceneNaturalPO);
+
+                                    // todo 调用 py 脚本计算复杂度 需要参数和返回结果写入 最好走 kafka
                                 });
                             } else {
                                 // -------------------------------- 保存数据到 mysql --------------------------------
@@ -655,6 +657,8 @@ public class SceneNaturalService {
                                 sceneNaturalPO.setCreateUserId(AuthUtil.getCurrentUserId());
                                 sceneNaturalPO.setModifyTime(TimeUtil.getNowForMysql());
                                 sceneNaturalMapper.saveSceneNatural(sceneNaturalPO);
+
+                                // todo 调用 py 脚本计算复杂度 需要参数和返回结果写入 最好走 kafka
                             }
                             successNum = successNum + 1;
 

+ 50 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/server/app/service/ScoringRulesService.java

@@ -1,18 +1,25 @@
 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.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 com.css.simulation.resource.server.infra.util.AuthUtil;
 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;
+import com.css.simulation.resource.server.infra.util.AuthUtil;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import java.nio.charset.StandardCharsets;
 import java.util.*;
 
 @Slf4j
@@ -24,6 +31,9 @@ public class ScoringRulesService {
     @Resource
     private ScenePackageMapper scenePackageMapper;
 
+    @Resource
+    private FileDownService fileDownService;
+
     /**
      * 打分规则数据录入:
      */
@@ -80,6 +90,12 @@ public class ScoringRulesService {
         return scoringRulesMapper.querySelfOnly(ruleName, createUserId);
     }
 
+    @SneakyThrows
+    public SceneEvaluationRulePO querySceneEvaluationRuleOnly(String ruleName, String createUserId) {
+//        return scoringRulesMapper.querySceneEvaluationRuleOnly(ruleName, createUserId);
+        return new SceneEvaluationRulePO();
+    }
+
     @SneakyThrows
     public void updateScoringRules(ScoringRulesPO params) {
         params.setModifyTime(TimeUtil.getNowForMysql());
@@ -90,6 +106,7 @@ public class ScoringRulesService {
 
     /**
      * 删除打分规则
+     *
      * @param params 参数
      */
     @SneakyThrows
@@ -151,4 +168,36 @@ public class ScoringRulesService {
         return treeList;
     }
 
+
+    @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, "代码格式错误,请检查。");
+        }
+        // 获取文件原本的名字
+        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.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);
+        }
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "上传失败!");
+
+    }
+
+
 }