Pārlūkot izejas kodu

完成进度加锁

root 2 gadi atpakaļ
vecāks
revīzija
2a171e92d1

+ 29 - 56
api-common/src/main/java/api/common/pojo/po/model/VehiclePO.java

@@ -7,61 +7,34 @@ import java.math.BigDecimal;
 
 @Data
 public class VehiclePO extends CommonPO {
+    private String id;  //主键id
+    private String vehicleName; //车辆名称
+    private String description; //车辆描述
+    private String vehicleType;    //车辆类型(字典代码)
+    private String modelLabel;    //车辆模型标签
+    private String share;    //是否分享
+    private String parameterType;    // 1 vtd 2 carsim
+    //* -------------------------------- vtd --------------------------------
+    private String vehicleCode; //车辆编码
+    private String vehicleFrontView;    //车辆前视图
+    private String vehicleTopView;    //车辆俯视图
+    private BigDecimal maxSpeed;    //最大速度(千米/小时)
+    private BigDecimal enginePower;    //发动机功率(千瓦)
+    private BigDecimal maxDeceleration;    //最大减速度(米/秒2)
+    private BigDecimal maxSteeringAngle;    //最大转角(度)
+    private BigDecimal mass;    //质量(千克)
+    private BigDecimal frontSurfaceEffective;    //前表面有效面积(平方米)
+    private BigDecimal airDragCoefficient;    //空气阻力系数
+    private BigDecimal rollingResistanceCoefficient;    //滚动阻力系数
+    private BigDecimal wheelDiameter;    //车轮直径(米)
+    private String wheelDrive;    //驱动方式
+    private BigDecimal overallEfficiency;    //总效率
+    private BigDecimal frontDistance;    //车前距(米)
+    private BigDecimal rearDistance;    //车后距(米)
+    private BigDecimal leftDistance;    //车左距(米)
+    private BigDecimal rightDistance;    //车右距(米)
+    private BigDecimal heightDistance;    //车高(米)
+    private BigDecimal wheelbase;    //轴距(米)
+    //* -------------------------------- carsim --------------------------------
 
-    //主键id
-    private String id;
-    //车辆编码
-    private String vehicleCode;
-    //车辆名称
-    private String vehicleName;
-    //车辆描述
-    private String description;
-    //车辆类型(字典代码)
-    private String vehicleType;
-    //车辆模型标签
-    private String modelLabel;
-    //车辆型号
-    /*private String vehicleModel;
-    //车辆颜色
-    private String vehicleColour;*/
-    //车辆前视图
-    private String vehicleFrontView;
-    //车辆俯视图
-    private String vehicleTopView;
-    //最大速度(千米/小时)
-    private BigDecimal maxSpeed;
-    //发动机功率(千瓦)
-    private BigDecimal enginePower;
-    //最大减速度(米/秒2)
-    private BigDecimal maxDeceleration;
-    //最大转角(度)
-    private BigDecimal maxSteeringAngle;
-    //质量(千克)
-    private BigDecimal mass;
-    //前表面有效面积(平方米)
-    private BigDecimal frontSurfaceEffective;
-    //空气阻力系数
-    private BigDecimal airDragCoefficient;
-    //滚动阻力系数
-    private BigDecimal rollingResistanceCoefficient;
-    //车轮直径(米)
-    private BigDecimal wheelDiameter;
-    //驱动方式
-    private String wheelDrive;
-    //总效率
-    private BigDecimal overallEfficiency;
-    //车前距(米)
-    private BigDecimal frontDistance;
-    //车后距(米)
-    private BigDecimal rearDistance;
-    //车左距(米)
-    private BigDecimal leftDistance;
-    //车右距(米)
-    private BigDecimal rightDistance;
-    //车高(米)
-    private BigDecimal heightDistance;
-    //轴距(米)
-    private BigDecimal wheelbase;
-    //是否分享
-    private String share;
 }

+ 40 - 60
api-common/src/main/java/api/common/pojo/vo/model/VehicleVO.java

@@ -6,65 +6,45 @@ import java.math.BigDecimal;
 
 @Data
 public class VehicleVO {
-
-    //主键id
-    private String id;
-    //车辆编码
-    private String vehicleCode;
-    //车辆名称
-    private String vehicleName;
-    //车辆描述
-    private String description;
-    //车辆模型
-    private String[] vehicleType;
-    //车辆模型标签
-    private String modelLabel;
-    //车辆模型字符串
-    private String vehicleTypeStr;
-    /*//车辆类型(字典代码)
-    private String vehicleType;
-    //车辆型号
-    private String vehicleModel;
-    //车辆颜色
-    private String vehicleColour;*/
-    //车辆前视图
+    private String id;  //主键id
+    private String vehicleName;  //车辆名称
+    private String description;  //车辆描述
+    private String[] vehicleType;   //车辆模型
+    private String modelLabel;  //车辆模型标签
+    private String share;    // 公有私有
+    private String parameterType;    // 1 vtd 2 carsim
+    //* -------------------------------- vtd --------------------------------
+    private String vehicleCode; //车辆编码
+    private String vehicleTypeStr;   //车辆模型字符串
     private String vehicleFrontView;
-    //车辆俯视图
-    private String vehicleTopView;
-    //最大速度(千米/小时)
-    private BigDecimal maxSpeed;
-    //发动机功率(千瓦)
-    private BigDecimal enginePower;
-    //最大减速度(米/秒2)
-    private BigDecimal maxDeceleration;
-    //最大转角(度)
-    private BigDecimal maxSteeringAngle;
-    //质量(千克)
-    private BigDecimal mass;
-    //前表面有效面积(平方米)
-    private BigDecimal frontSurfaceEffective;
-    //空气阻力系数
-    private BigDecimal airDragCoefficient;
-    //滚动阻力系数
-    private BigDecimal rollingResistanceCoefficient;
-    //车轮直径(米)
-    private BigDecimal wheelDiameter;
-    //驱动方式
-    private String wheelDrive;
-    //总效率
-    private BigDecimal overallEfficiency;
-    //车前距(米)
-    private BigDecimal frontDistance;
-    //车后距(米)
-    private BigDecimal rearDistance;
-    //车左距(米)
-    private BigDecimal leftDistance;
-    //车右距(米)
-    private BigDecimal rightDistance;
-    //车高(米)
-    private BigDecimal heightDistance;
-    //轴距(米)
-    private BigDecimal wheelbase;
-    //是否分享
-    private String share;
+    private String vehicleTopView;  //车辆俯视图
+    private BigDecimal maxSpeed;    //最大速度(千米/小时)
+    private BigDecimal enginePower;  //发动机功率(千瓦)
+    private BigDecimal maxDeceleration;  //最大减速度(米/秒2)
+    private BigDecimal maxSteeringAngle;     //最大转角(度)
+    private BigDecimal mass;     //质量(千克)
+    private BigDecimal frontSurfaceEffective;   //前表面有效面积(平方米)
+    private BigDecimal airDragCoefficient;  //空气阻力系数
+    private BigDecimal rollingResistanceCoefficient;    //滚动阻力系数
+    private BigDecimal wheelDiameter;     //车轮直径(米)
+    private String wheelDrive;   //驱动方式
+    private BigDecimal overallEfficiency;    //总效率
+    private BigDecimal frontDistance;    //车前距(米)
+    private BigDecimal rearDistance;    //车后距(米)
+    private BigDecimal leftDistance;    //车左距(米)
+    private BigDecimal rightDistance;    //车右距(米)
+    private BigDecimal heightDistance;    //车高(米)
+    private BigDecimal wheelbase;    //轴距(米)
+    //* -------------------------------- carsim --------------------------------
+//    private Double sprungMass;//簧上质量
+//    private Double vehicleWidth;//车辆宽度
+//    private Double rotationalInertiaX;//整车绕x轴转动惯量
+//    private Double rotationalInertiaY;//整车绕y轴转动惯量
+//    private Double rotationalInertiaZ;//整车绕z轴转动惯量
+//    private Double rotationalInertiaY;//整车绕y轴转动惯量
+//    private Double rotationalInertiaY;//整车绕y轴转动惯量
+//    private Double rotationalInertiaY;//整车绕y轴转动惯量
+//    private Double rotationalInertiaY;//整车绕y轴转动惯量
+//    private Double rotationalInertiaY;//整车绕y轴转动惯量
+//    private Double rotationalInertiaY;//整车绕y轴转动惯量
 }

+ 8 - 28
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/manager/TaskManager.java

@@ -2,7 +2,6 @@ package com.css.simulation.resource.scheduler.manager;
 
 import api.common.pojo.common.ResponseBodyVO;
 import api.common.pojo.constants.DictConstants;
-import api.common.pojo.dto.ProjectMessageDTO;
 import api.common.util.*;
 import com.css.simulation.resource.scheduler.feign.VideoService;
 import com.css.simulation.resource.scheduler.mapper.*;
@@ -12,6 +11,7 @@ import com.css.simulation.resource.scheduler.pojo.po.ProjectPO;
 import com.css.simulation.resource.scheduler.pojo.po.TaskPO;
 import com.css.simulation.resource.scheduler.pojo.to.PrefixTO;
 import com.css.simulation.resource.scheduler.pojo.to.ScoreTO;
+import com.css.simulation.resource.scheduler.resource.TaskLock;
 import com.css.simulation.resource.scheduler.util.MinioUtil;
 import com.css.simulation.resource.scheduler.util.ProjectUtil;
 import com.css.simulation.resource.scheduler.util.RedisUtil;
@@ -94,6 +94,8 @@ public class TaskManager {
     VideoService videoService;
     @Resource
     private SqlSessionFactory sqlSessionFactory;
+    @Resource
+    private TaskLock taskLock;
 
     public void batchInsertTask(List<TaskPO> taskPOList) {
         try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false)) {
@@ -110,6 +112,7 @@ public class TaskManager {
      */
     @SneakyThrows
     public boolean isProjectCompleted(PrefixTO redisPrefix, String projectId, String projectType, String maxSimulationTime, String taskId, String state, String podName) {
+        boolean result = false;
         String nodeName = projectUtil.getNodeNameOfPod(podName);
         if ("Running".equals(state)) {  // 运行中的 pod 无需删除
             // 将运行中的任务的 pod 名称放入 redis
@@ -149,7 +152,7 @@ public class TaskManager {
                     taskMapper.updateFailStateWithStopTime(taskId, state, TimeUtil.getNowForMysql(), DictConstants.TASK_ERROR_REASON_3);
                 } else if ("PendingAnalysis".equals(state)) {
                     taskMapper.updateSuccessStateWithStopTime(taskId, state, TimeUtil.getNowForMysql());
-                    // 查询项目是否使用 gpu 生成视频(0是1否)
+                    // 查询项目是否使用 gpu 生成视频(0是1否)
                     String isChoiceGpu = projectUtil.getProjectByProjectId(projectId).getIsChoiceGpu();
                     log.info("项目 " + projectId + " 是否需要生成 gpu 视频:" + isChoiceGpu);
                     if ("1".equals(isChoiceGpu)) {
@@ -158,31 +161,12 @@ public class TaskManager {
                     }
                 }
                 // -------------------------------- 判断项目是否结束 --------------------------------
-                ProjectMessageDTO projectMessageDTO = JsonUtil.jsonToBean(stringRedisTemplate.opsForValue().get(redisPrefix.getProjectRunningKey()), ProjectMessageDTO.class);
-                int taskTotal = projectMessageDTO.getTaskTotal();
-                int taskCompleted = projectMessageDTO.getTaskCompleted();
-                log.info("TaskManager--isProjectCompleted 项目 " + projectId + " 完成进度为:" + (taskCompleted + 1) + "/" + taskTotal);
-                if (taskCompleted + 1 == taskTotal) {
-                    return true;
-                } else {    // 项目没有完成
-                    projectMessageDTO.setTaskCompleted(taskCompleted + 1);  // 增加已完成任务数
-                    stringRedisTemplate.opsForValue().set(redisPrefix.getProjectRunningKey(), JsonUtil.beanToJson(projectMessageDTO));
-//                    int currentParallelism = projectMessageDTO.getCurrentParallelism();
-//                    if (taskTotal - taskCompleted <= currentParallelism) {
-//                        // 如果 taskTotal - taskCompleted 小于 currentParallelism ,则不启动下一个 pod,删除当前 pod 并归还一个并行度
-//                        projectUtil.deletePod(podName);
-//                        projectUtil.addOneParallelismToNode(nodeName);
-//                    } else {
-//                        projectUtil.createNextPod(projectId, nodeName, podName);  // 删除上一个 pod,并启动下一个 pod
-//                    }
-                    projectUtil.createNextPod2(projectId, nodeName, podName);
-                    return false;
-                }
+                result = taskLock.complete(redisPrefix, projectId, nodeName, podName);
             } catch (Exception exception) {
                 log.info("TaskManager--isCompleted 报错。", exception);
-                return false;
             }
         }
+        return result;
     }
 
 
@@ -191,11 +175,7 @@ public class TaskManager {
     }
 
     /**
-     * @param redisPrefix
-     * @param userId      项目创建用户的 id
-     * @param projectId
-     * @param projectType
-     * @param session
+     * @param userId 项目创建用户的 id
      */
     @SneakyThrows
     public void score(PrefixTO redisPrefix, String userId, String projectId, String projectType, ClientSession session) {

+ 56 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/resource/TaskLock.java

@@ -0,0 +1,56 @@
+package com.css.simulation.resource.scheduler.resource;
+
+import api.common.pojo.dto.ProjectMessageDTO;
+import api.common.util.JsonUtil;
+import com.css.simulation.resource.scheduler.pojo.to.PrefixTO;
+import com.css.simulation.resource.scheduler.util.ProjectUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+@Component
+@Slf4j
+public class TaskLock {
+    private final Lock lock = new ReentrantLock(); // 票数
+
+    @Resource
+    StringRedisTemplate stringRedisTemplate;
+    @Resource
+    ProjectUtil projectUtil;
+
+    /**
+     * 判断完成度
+     */
+
+    public boolean complete(
+            PrefixTO redisPrefix,
+            String projectId,
+            String nodeName,
+            String podName
+    ) {
+        boolean result = false;
+        lock.lock();
+        try {
+            ProjectMessageDTO projectMessageDTO = JsonUtil.jsonToBean(stringRedisTemplate.opsForValue().get(redisPrefix.getProjectRunningKey()), ProjectMessageDTO.class);
+            int taskTotal = projectMessageDTO.getTaskTotal();
+            int taskCompleted = projectMessageDTO.getTaskCompleted();
+            log.info("TaskManager--isProjectCompleted 项目 " + projectId + " 完成进度为:" + (taskCompleted + 1) + "/" + taskTotal);
+            if (taskCompleted + 1 == taskTotal) {
+                result = true;
+            } else {    // 项目没有完成
+                projectMessageDTO.setTaskCompleted(taskCompleted + 1);  // 增加已完成任务数
+                stringRedisTemplate.opsForValue().set(redisPrefix.getProjectRunningKey(), JsonUtil.beanToJson(projectMessageDTO));
+                projectUtil.createNextPod2(projectId, nodeName, podName);
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        } finally {
+            lock.unlock();
+        }
+        return result;
+    }
+}

+ 1 - 0
simulation-resource-scheduler/src/main/java/com/css/simulation/resource/scheduler/service/TaskService.java

@@ -50,6 +50,7 @@ public class TaskService {
         String userId = taskPO.getCreateUserId();   // 用户 id
         PrefixTO redisPrefix = projectUtil.getRedisPrefixByUserIdAndProjectIdAndTaskId(userId, projectId, taskId);  // 项目前缀
         //1 判断项目是否已完成
+
         boolean projectCompleted = taskManager.isProjectCompleted(redisPrefix, projectId, projectType, maxSimulationTime, taskId, state, podName);
         if (!projectCompleted) {
             return;

+ 8 - 18
simulation-resource-server/src/main/java/com/css/simulation/resource/model/ctrl/VehicleCtrl.java

@@ -8,29 +8,27 @@ import api.common.pojo.po.model.VehiclePO;
 import api.common.pojo.vo.model.VehicleVO;
 import api.common.util.ObjectUtil;
 import com.css.simulation.resource.model.service.VehicleService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import java.util.List;
 
-@Controller
+@RestController
 @RequestMapping(value = "/vehicle", name = LogConstants.MODULE_VEHICLE)
 public class VehicleCtrl {
 
-    @Autowired
+    @Resource
     VehicleService vehicleService;
 
     /**
      * 获取列表
      */
     @RequestMapping("/getVehicleList")
-    @ResponseBody
     public ResponseBodyVO<List<VehicleVO>> getVehicleList(@RequestBody VehicleParam vehicleParam) {
-        ResponseBodyVO<List<VehicleVO>> response = new ResponseBodyVO<List<VehicleVO>>(ResponseBodyVO.Response.SUCCESS);
+        ResponseBodyVO<List<VehicleVO>> response = new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
         response.setInfo(vehicleService.getVehicleList(vehicleParam));
         return response;
     }
@@ -39,7 +37,6 @@ public class VehicleCtrl {
      * 获取私有列表
      */
     @RequestMapping("/getMyVehicleList")
-    @ResponseBody
     public ResponseBodyVO<List<VehicleVO>> getMyVehicleList() {
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, vehicleService.getMyVehicleList());
     }
@@ -48,7 +45,6 @@ public class VehicleCtrl {
      * 根据id获取详情
      */
     @RequestMapping("/getVehicleInfo")
-    @ResponseBody
     public ResponseBodyVO<VehicleVO> getVehicleInfo(@RequestBody VehicleParam vehicleParam) {
         ResponseBodyVO<VehicleVO> response = new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
         response.setInfo(vehicleService.getVehicleInfo(vehicleParam));
@@ -59,11 +55,7 @@ public class VehicleCtrl {
      * 新增、修改、另存为
      */
     @RequestMapping("/saveVehicle")
-    @ResponseBody
     public ResponseBodyVO<VehiclePO> saveVehicle(@RequestBody VehicleVO vehicleVO) {
-        if (ObjectUtil.isNull(vehicleVO)) {
-            return new ResponseBodyVO<>(false, 500, "参数必传!", null);
-        }
         ResponseBodyVO<VehiclePO> response = new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
         VehiclePO po = vehicleService.saveVehicle(vehicleVO);
         if (ObjectUtil.isNull(po.getId())) {
@@ -77,7 +69,6 @@ public class VehicleCtrl {
      * 分享
      */
     @RequestMapping("/shareVehicle")
-    @ResponseBody
     @PreAuthorize("@AuthorityCheck.admin()")
     public ResponseBodyVO<VehiclePO> shareVehicle(@RequestBody VehicleVO vehicleVO) {
         if (ObjectUtil.isNull(vehicleVO)) {
@@ -96,13 +87,12 @@ public class VehicleCtrl {
      * 删除
      */
     @RequestMapping("/delVehicleById")
-    @ResponseBody
-    public ResponseBodyVO delVehicleById(@RequestBody VehiclePO vehiclePO) {
+    public ResponseBodyVO<String> delVehicleById(@RequestBody VehiclePO vehiclePO) {
         int i = vehicleService.delVehicleById(vehiclePO);
         if (i > 0) {
-            return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS);
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
         } else {
-            return new ResponseBodyVO(false, 500, "删除失败!", null);
+            return new ResponseBodyVO<>(false, 500, "删除失败!", null);
         }
     }
 }

+ 5 - 3
simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/VehicleService.java

@@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import javax.annotation.Resource;
 import java.sql.Timestamp;
 import java.util.Arrays;
 import java.util.List;
@@ -23,14 +24,13 @@ import java.util.List;
 @Service
 public class VehicleService {
 
-    @Autowired
+    @Resource
     VehicleMapper vehicleMapper;
 
     public List<VehicleVO> getVehicleList(@RequestBody VehicleParam vehicleParam) {
         vehicleParam.setCreateUserId(AuthUtil.getCurrentUserId());
         vehicleParam.setShare(null);
-        List<VehicleVO> list = vehicleMapper.getVehicleList(vehicleParam);
-        return list;
+        return vehicleMapper.getVehicleList(vehicleParam);
     }
 
     public List<VehicleVO> getMyVehicleList() {
@@ -46,6 +46,8 @@ public class VehicleService {
     }
 
     public VehiclePO saveVehicle(VehicleVO vehicleVO) {
+        //1 判断参数是 vtd 还是 carsim
+        String parameterType = vehicleVO.getParameterType();
         VehiclePO vehiclePO = new VehiclePO();
         ObjectUtil.voToPo(vehicleVO, vehiclePO);
         //车辆模型字段解析

+ 118 - 116
simulation-resource-server/src/main/java/com/css/simulation/resource/scene/service/SceneGeneralExampleService.java

@@ -18,81 +18,81 @@ import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.client.config.RequestConfig;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.io.File;
-import java.io.FileInputStream;
 import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 @Slf4j
 @Service
 public class SceneGeneralExampleService {
 
     @Resource
-    SceneGeneralExampleMapper exampleMapper;
+    private SceneGeneralExampleMapper exampleMapper;
     @Resource
-    SceneGeneralTemplateMapper templateMapper;
+    private SceneGeneralTemplateMapper templateMapper;
     @Resource
-    SceneGeneralDataMapper dataMapper;
+    private SceneGeneralDataMapper dataMapper;
     @Resource
-    SceneGeneralTemplateService sceneGeneralTemplateService;
+    private SceneGeneralTemplateService sceneGeneralTemplateService;
+    @Value("${general.url}")
+    private String generalUrl;
 
-       @SneakyThrows
-       public  ResponseBodyVO querySceneGeneralExampleById(String id) {
 
-        SceneGeneralExamplePO examplePo= exampleMapper.querySceneGeneralExampleById(id);
-        if(ObjectUtil.isNotNull(examplePo)){
-            SceneGeneralTemplatePO templatePO=templateMapper.querySceneGeneralTemplateById(examplePo.getTemplateId());
-            if(ObjectUtil.isNotNull(templatePO)&&templatePO.getIsDeleted().equals("1")){
+    @SneakyThrows
+    public ResponseBodyVO<SceneGeneralTemplateVO> querySceneGeneralExampleById(String id) {
+
+        SceneGeneralExamplePO examplePo = exampleMapper.querySceneGeneralExampleById(id);
+        if (ObjectUtil.isNotNull(examplePo)) {
+            SceneGeneralTemplatePO templatePO = templateMapper.querySceneGeneralTemplateById(examplePo.getTemplateId());
+            if (ObjectUtil.isNotNull(templatePO) && templatePO.getIsDeleted().equals("1")) {
                 examplePo.setIsTure("1");
             }
         }
-           String generalizationType =JsonUtil.stringToJson(examplePo.getGeneralizationType());
-           examplePo.setGeneralizationType(generalizationType);
-
-           //转换为vo
-           SceneGeneralTemplatePO po=new SceneGeneralTemplatePO();
-           BeanUtils.copyProperties(examplePo, po);
-           SceneGeneralTemplateVO vo=new SceneGeneralTemplateVO();
-           BeanUtils.copyProperties(po, vo);
-           List<SceneGeneralTemplateMbVO>  listMb=new ArrayList<>();
-           if(po.getObsStartX().indexOf(";")!=-1){
-               listMb= sceneGeneralTemplateService.spliceVo(po);
-           }else{
-               SceneGeneralTemplateMbVO  mbVO=new SceneGeneralTemplateMbVO();
-               BeanUtils.copyProperties(po, mbVO);
-               mbVO.setGeneralizationType(po.getGeneralizationType());
-               listMb.add(mbVO);
-           }
-           vo.setListMb(listMb);
-           vo.setTemplateId(examplePo.getTemplateId());
-           vo.setIsTure(examplePo.getIsTure());
-
-
-        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS, vo);
+        String generalizationType = JsonUtil.stringToJson(examplePo.getGeneralizationType());
+        examplePo.setGeneralizationType(generalizationType);
 
-    }
+        //转换为vo
+        SceneGeneralTemplatePO po = new SceneGeneralTemplatePO();
+        BeanUtils.copyProperties(examplePo, po);
+        SceneGeneralTemplateVO vo = new SceneGeneralTemplateVO();
+        BeanUtils.copyProperties(po, vo);
+        List<SceneGeneralTemplateMbVO> listMb = new ArrayList<>();
+        if (po.getObsStartX().contains(";")) {
+            listMb = sceneGeneralTemplateService.spliceVo(po);
+        } else {
+            SceneGeneralTemplateMbVO mbVO = new SceneGeneralTemplateMbVO();
+            BeanUtils.copyProperties(po, mbVO);
+            mbVO.setGeneralizationType(po.getGeneralizationType());
+            listMb.add(mbVO);
+        }
+        vo.setListMb(listMb);
+        vo.setTemplateId(examplePo.getTemplateId());
+        vo.setIsTure(examplePo.getIsTure());
 
-    public  ResponseBodyVO queryType() {
 
-        List<String> list= templateMapper.queryType();
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, vo);
 
-        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS, list);
+    }
 
+    public ResponseBodyVO<List<String>> queryType() {
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, templateMapper.queryType());
     }
 
     @SneakyThrows
-    public  ResponseBodyVO saveSceneGeneralExample(SceneGeneralTemplateVO vo) {
+    public ResponseBodyVO saveSceneGeneralExample(SceneGeneralTemplateVO vo) {
    /*        //测试用
         SceneGeneralTemplatePO po1=templateMapper.querySceneGeneralTemplateById(vo.getTemplateId());
         BeanUtils.copyProperties(po1, vo);*/
 
         //查询泛化标志位并赋值
-        SceneGeneralTemplatePO poV= templateMapper.querySceneGeneralTemplateById(vo.getTemplateId());
-        SceneGeneralExamplePO po=new SceneGeneralExamplePO();
+        SceneGeneralTemplatePO poV = templateMapper.querySceneGeneralTemplateById(vo.getTemplateId());
+        SceneGeneralExamplePO po = new SceneGeneralExamplePO();
         //转换为vo
         BeanUtils.copyProperties(vo, po);
         po.setGeneralizationType(poV.getGeneralizationType());
@@ -104,44 +104,45 @@ public class SceneGeneralExampleService {
         po.setUuId(StringUtil.getRandomUUID());
 
         //合并目标物
-        List<SceneGeneralTemplateMbVO> listMb=vo.getListMb();
-
-        String  obsStartX= "";
-        String  obsStartY="";;
-        String  obsStartVelocity= "";
-        String  obsLateralAcceleration="";
-        String  obsLongitudinalAcceleration= "";
-        String  obsHeadingAngleRel= "";
-        String  obsDurationTime= "";
-        String  obsVelocityTime= "";
-        String  obsTrailTime= "";
-        String  obsType= "";
-
-
-        int a=0;
-        for (SceneGeneralTemplateMbVO mbVo: listMb) {
-            if(a<1){
-                obsStartX=mbVo.getObsStartX();
-                obsStartY=mbVo.getObsStartY();
-                obsStartVelocity= mbVo.getObsStartVelocity();
-                obsLateralAcceleration=mbVo.getObsLateralAcceleration();
-                obsLongitudinalAcceleration=mbVo.getObsLongitudinalAcceleration();
-                obsHeadingAngleRel= mbVo.getObsHeadingAngleRel();
-                obsDurationTime= mbVo.getObsDurationTime();
-                obsVelocityTime=mbVo.getObsVelocityTime();
-                obsTrailTime=mbVo.getObsTrailTime();
-                obsType=mbVo.getObsType();
-            }else{
-                obsStartX=obsStartX+";"+mbVo.getObsStartX();
-                obsStartY=obsStartY+";"+mbVo.getObsStartY();
-                obsStartVelocity=obsStartVelocity+";"+mbVo.getObsStartVelocity();
-                obsLateralAcceleration=obsLateralAcceleration+";"+mbVo.getObsLateralAcceleration();
-                obsLongitudinalAcceleration=obsLongitudinalAcceleration+";"+mbVo.getObsLongitudinalAcceleration();
-                obsHeadingAngleRel=obsHeadingAngleRel +";"+mbVo.getObsHeadingAngleRel();
-                obsDurationTime=obsDurationTime +";"+mbVo.getObsDurationTime();
-                obsVelocityTime=obsVelocityTime+";"+mbVo.getObsVelocityTime();
-                obsTrailTime=obsTrailTime+";"+mbVo.getObsTrailTime();
-                obsType=obsType+";"+mbVo.getObsType();
+        List<SceneGeneralTemplateMbVO> listMb = vo.getListMb();
+
+        String obsStartX = "";
+        String obsStartY = "";
+        ;
+        String obsStartVelocity = "";
+        String obsLateralAcceleration = "";
+        String obsLongitudinalAcceleration = "";
+        String obsHeadingAngleRel = "";
+        String obsDurationTime = "";
+        String obsVelocityTime = "";
+        String obsTrailTime = "";
+        String obsType = "";
+
+
+        int a = 0;
+        for (SceneGeneralTemplateMbVO mbVo : listMb) {
+            if (a < 1) {
+                obsStartX = mbVo.getObsStartX();
+                obsStartY = mbVo.getObsStartY();
+                obsStartVelocity = mbVo.getObsStartVelocity();
+                obsLateralAcceleration = mbVo.getObsLateralAcceleration();
+                obsLongitudinalAcceleration = mbVo.getObsLongitudinalAcceleration();
+                obsHeadingAngleRel = mbVo.getObsHeadingAngleRel();
+                obsDurationTime = mbVo.getObsDurationTime();
+                obsVelocityTime = mbVo.getObsVelocityTime();
+                obsTrailTime = mbVo.getObsTrailTime();
+                obsType = mbVo.getObsType();
+            } else {
+                obsStartX = obsStartX + ";" + mbVo.getObsStartX();
+                obsStartY = obsStartY + ";" + mbVo.getObsStartY();
+                obsStartVelocity = obsStartVelocity + ";" + mbVo.getObsStartVelocity();
+                obsLateralAcceleration = obsLateralAcceleration + ";" + mbVo.getObsLateralAcceleration();
+                obsLongitudinalAcceleration = obsLongitudinalAcceleration + ";" + mbVo.getObsLongitudinalAcceleration();
+                obsHeadingAngleRel = obsHeadingAngleRel + ";" + mbVo.getObsHeadingAngleRel();
+                obsDurationTime = obsDurationTime + ";" + mbVo.getObsDurationTime();
+                obsVelocityTime = obsVelocityTime + ";" + mbVo.getObsVelocityTime();
+                obsTrailTime = obsTrailTime + ";" + mbVo.getObsTrailTime();
+                obsType = obsType + ";" + mbVo.getObsType();
             }
             a++;
         }
@@ -157,39 +158,39 @@ public class SceneGeneralExampleService {
         po.setObsTrailTime(obsTrailTime);
         po.setObsType(obsType);
         //远程调用接口
-        Map map=  beanToMap(po);
+        Map map = beanToMap(po);
         RequestConfig requestConfig = RequestConfig.custom()
-                .setSocketTimeout(2*60*1000)
-                .setConnectTimeout(2*60*1000)
-                .setConnectionRequestTimeout(2*6*10*1000)
+                .setSocketTimeout(2 * 60 * 1000)
+                .setConnectTimeout(2 * 60 * 1000)
+                .setConnectionRequestTimeout(2 * 6 * 10 * 1000)
                 .setRedirectsEnabled(false)
                 .setExpectContinueEnabled(false)
                 .build();
-       // log.info("测试是否调用成功---入参--"+map);
-        String post = HttpUtil.post(HttpUtil.getHttpClient(), requestConfig, "http://47.94.105.148:5000/test_1.0", null, map);
-       //log.info("测试是否调用成功-----"+post);
-
-        Boolean success= JsonUtil.readTree(post).get("success").asBoolean();
-       if(!success){
-           String message= JsonUtil.readTree(post).get("message").toString();
-           return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, message);
-       }
+        log.info("saveSceneGeneralExample()调用泛化接口--" + generalUrl + "--入参:" + map);
+        String post = HttpUtil.post(HttpUtil.getHttpClient(), requestConfig, generalUrl, null, map);
+        log.info("saveSceneGeneralExample()调用泛化接口--" + generalUrl + "--出参:" + post);
+
+        boolean success = JsonUtil.readTree(post).get("success").asBoolean();
+        if (!success) {
+            String message = JsonUtil.readTree(post).get("message").toString();
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, message);
+        }
         JsonNode params = JsonUtil.readTree(post).get("params");
 
         // 实例化 ObjectMapper 对象
         ObjectMapper objectMapper = new ObjectMapper();
         String newjson = objectMapper.writeValueAsString(params);
 
-        List<SceneGeneralDataPO>  list=JsonUtil.jsonToList(newjson,SceneGeneralDataPO.class);
-        log.info("测试是否调用成功---444--"+list.size());
-        String sceneGeneralizationIds=null;
+        List<SceneGeneralDataPO> list = JsonUtil.jsonToList(newjson, SceneGeneralDataPO.class);
+        log.info("测试是否调用成功---444--" + list.size());
+        String sceneGeneralizationIds = null;
         //生成指标id
-        String sublistId=StringUtil.getRandomUUID();
+        String sublistId = StringUtil.getRandomUUID();
         //生成实例主键id
-        String exampleId=StringUtil.getRandomUUID();
-        for (SceneGeneralDataPO datePo:list) {
+        String exampleId = StringUtil.getRandomUUID();
+        for (SceneGeneralDataPO datePo : list) {
             //生成主键id
-            String dataId=StringUtil.getRandomUUID();
+            String dataId = StringUtil.getRandomUUID();
             datePo.setId(dataId);
             datePo.setCreateTime(TimeUtil.getNowForMysql());
             datePo.setCreateUserId(AuthUtil.getCurrentUserId());
@@ -199,14 +200,14 @@ public class SceneGeneralExampleService {
             datePo.setTemplateId(po.getId());
             datePo.setExampleId(exampleId);
             datePo.setSublistId(sublistId);
-            if(ObjectUtil.isNotNull(sceneGeneralizationIds)){
-                sceneGeneralizationIds=  sceneGeneralizationIds+","+dataId;
-            }else{
-                sceneGeneralizationIds=dataId;
+            if (ObjectUtil.isNotNull(sceneGeneralizationIds)) {
+                sceneGeneralizationIds = sceneGeneralizationIds + "," + dataId;
+            } else {
+                sceneGeneralizationIds = dataId;
             }
         }
         dataMapper.saveSceneGeneralDataAll(list);
-       // po.setTemplateId(po.getId());  //前端需要帮忙赋值
+        // po.setTemplateId(po.getId());  //前端需要帮忙赋值
         po.setId(exampleId);
         po.setSublistId(sublistId);
         po.setCreateTime(TimeUtil.getNowForMysql());
@@ -216,25 +217,26 @@ public class SceneGeneralExampleService {
         po.setIsDeleted("0");
         //po.setGeneralizationType(generalizationType);
         exampleMapper.saveSceneGeneralExample(po);
-        Map map1=new HashMap();
-        map1.put("exampleId",exampleId);//实例id
-        map1.put("sceneNum",list.size());//场景数量
-        map1.put("templateId",po.getTemplateId()); //模板id
-        map1.put("sceneGeneralizationIds",sceneGeneralizationIds);//泛化场景数组
-        map1.put("sublistId",sublistId); //指标id
+        Map map1 = new HashMap();
+        map1.put("exampleId", exampleId);//实例id
+        map1.put("sceneNum", list.size());//场景数量
+        map1.put("templateId", po.getTemplateId()); //模板id
+        map1.put("sceneGeneralizationIds", sceneGeneralizationIds);//泛化场景数组
+        map1.put("sublistId", sublistId); //指标id
 
-        log.info("测试是否调用成功---555555--"+map1);
-        return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS, map1);
+        log.info("测试是否调用成功---555555--" + map1);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, map1);
 
     }
 
     /**
      * 对象转Map
+     *
      * @param object
      * @return
      * @throws IllegalAccessException
      */
-    public  Map beanToMap(Object object) throws IllegalAccessException {
+    public Map beanToMap(Object object) throws IllegalAccessException {
         Map<String, Object> map = new HashMap<String, Object>();
         Field[] fields = object.getClass().getDeclaredFields();
         for (Field field : fields) {