夜得朦胧 1 yıl önce
ebeveyn
işleme
6db0bd7696

+ 10 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/server/adapter/controller/job_manage/JobManageController.java

@@ -331,6 +331,16 @@ public class JobManageController {
     return multiSimulationProjectService.deleteMultiSimulationProject(param);
   }
 
+  @RequestMapping("/updateMultiSimulationProjectStatus")
+  public ResponseBodyVO updateMultiSimulationProjectStatus(@RequestBody MultiSimulationProjectParam param) {
+    return multiSimulationProjectService.updateMultiSimulationProjectStatus(param);
+  }
+
+  @RequestMapping("/submitMultiSimulationProjectDetail")
+  public ResponseBodyVO submitMultiSimulationProjectDetail(@RequestBody MultiSimulationProjectParam param) {
+    return multiSimulationProjectService.submitMultiSimulationProjectDetail(param);
+  }
+
   @RequestMapping("/updateMultiSimulationProjectDetail")
   public ResponseBodyVO<String> updateMultiSimulationProjectDetail(@RequestBody MultiSimulationProjectParam param) {
     return multiSimulationProjectService.updateMultiSimulationProject(param);

+ 7 - 4
simulation-resource-server/src/main/java/com/css/simulation/resource/server/adapter/controller/job_manage/SimulationMapController.java

@@ -11,10 +11,8 @@ import com.css.simulation.resource.server.app.service.job_manage.MultiSimulation
 import com.css.simulation.resource.server.app.service.job_manage.SimulationMapService;
 import com.css.simulation.resource.server.app.service.job_manage.SimulationProjectService;
 import com.github.pagehelper.PageInfo;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import java.util.List;
@@ -60,4 +58,9 @@ public class SimulationMapController {
     return mapService.deleteSimulationMap(param);
   }
 
+  @RequestMapping("/uploadSimulationMap")
+  public ResponseBodyVO<SimulationMapVO> uploadSimulationMap(@RequestParam("fileJson") MultipartFile fileJson, @RequestParam("fileDriver") MultipartFile fileDriver, @RequestPart("content") SimulationMapParam param) {
+    return mapService.uploadSimulationMap(fileJson, fileDriver, param);
+  }
+
 }

+ 66 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/server/app/impl/MultiSimulationProjectServiceImpl.java

@@ -117,6 +117,72 @@ public class MultiSimulationProjectServiceImpl implements MultiSimulationProject
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SERVER_FAILURE);
     }
 
+    @Override
+    @SneakyThrows
+    public ResponseBodyVO updateMultiSimulationProjectStatus(MultiSimulationProjectParam param){
+        String projectId = param.getProjectId();
+        MultiSimulationProjectVO projectVO = multiSimulationProjectMapper.selectMultiSimulationProjectById(projectId);
+        if (Objects.isNull(projectVO)){
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "未查询到可用的任务");
+        }
+        Integer projectStatus = projectVO.getProjectStatus();
+        Integer status = param.getProjectStatus();
+        int res = 0;
+        if (projectStatus == MultiSimulationStatusEnum.INIT_STATUS.getProjectStatus() || projectStatus == MultiSimulationStatusEnum.TERMINATED_STATUS.getProjectStatus()){
+            if (status != MultiSimulationStatusEnum.RUN_STATUS.getProjectStatus()){
+                return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "当前任务状态不允许执行此操作");
+            }
+            // 校验参数
+            MultiSimulationSceneParam multiSimulationSceneParam = new MultiSimulationSceneParam();
+            multiSimulationSceneParam.setProjectId(projectId);
+            List<MultiSimulationSceneVO> multiSimulationSceneVOS = simulationSceneMapper.selectSceneList(multiSimulationSceneParam);
+            ResponseBodyVO responseBodyVO = checkAllScene(multiSimulationSceneVOS);
+            if (responseBodyVO.getCode() != ResponseBodyVO.Response.SUCCESS.getCode()){
+                return responseBodyVO;
+            }
+            for (MultiSimulationSceneVO sceneVo: multiSimulationSceneVOS) {
+                String sceneVoId = sceneVo.getId();
+                MultiSimulationSceneCarParam sceneCarParam = new MultiSimulationSceneCarParam();
+                sceneCarParam.setSceneId(sceneVoId);
+                List<MultiSimulationSceneCarVO> multiSimulationSceneCarVOS = sceneCarMapper.selectSceneCarList(sceneCarParam);
+                ResponseBodyVO sceneCars = checkAllSceneCars(multiSimulationSceneCarVOS, sceneVoId);
+                if (sceneCars.getCode() != ResponseBodyVO.Response.SUCCESS.getCode()){
+                    return sceneCars;
+                }
+            }
+            // TODO 发送kafka
+            res = multiSimulationProjectMapper.updateMultiSimulationProjectStatus(param);
+        } else if (projectStatus == MultiSimulationStatusEnum.COMPLETED_STATUS.getProjectStatus()) {
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "当前状态已完成,不允许操作");   
+        } else if (projectStatus == MultiSimulationStatusEnum.RUN_STATUS.getProjectStatus()) {
+            if (status != MultiSimulationStatusEnum.TERMINATED_STATUS.getProjectStatus()){
+                return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "当前任务状态不允许执行此操作");
+            }
+            // TODO 发送kafka
+            res = multiSimulationProjectMapper.updateMultiSimulationProjectStatus(param);
+        }
+        if (res > 0){
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
+        }
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE);
+    }
+
+    public ResponseBodyVO<MultiSimulationProjectVO> submitMultiSimulationProjectDetail(MultiSimulationProjectParam param){
+        // 先更新
+        multiSimulationProjectMapper.updateMultiSimulationProject(param);
+        Integer status = param.getProjectStatus();
+        if (status != MultiSimulationStatusEnum.INIT_STATUS.getProjectStatus()){
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "当前任务状态不允许执行此操作");
+        }
+        ResponseBodyVO responseBodyVO = updateMultiSimulationProjectStatus(param);
+        if (responseBodyVO.getCode() != ResponseBodyVO.Response.SUCCESS.getCode()){
+            return responseBodyVO;
+        }
+        MultiSimulationProjectVO build = MultiSimulationProjectVO.builder().projectId(param.getProjectId()).projectStatus(MultiSimulationStatusEnum.RUN_STATUS.getProjectStatus())
+            .projectStatusValue(MultiSimulationStatusEnum.RUN_STATUS.getProjectStatusValue()).build();
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, build);
+    }
+
     @Override
     @SneakyThrows
     public ResponseBodyVO<String> updateMultiSimulationProject(MultiSimulationProjectParam param) {

+ 97 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/server/app/impl/SimulationMapServiceImpl.java

@@ -2,33 +2,47 @@ package com.css.simulation.resource.server.app.impl;
 
 import api.common.pojo.common.PageVO;
 import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.constants.DictConstants;
 import api.common.pojo.enums.MultiSimulationStatusEnum;
 import api.common.pojo.param.map.SimulationMapParam;
+import api.common.pojo.param.map.SimulationMapPathParam;
 import api.common.pojo.param.project.MultiSimulationProjectParam;
 import api.common.pojo.param.project.MultiSimulationSceneCarParam;
 import api.common.pojo.param.project.MultiSimulationSceneParam;
 import api.common.pojo.po.algorithm.AlgorithmPO;
+import api.common.pojo.po.map.SimulationMapPO;
+import api.common.pojo.po.map.SimulationMapPathPO;
 import api.common.pojo.po.model.ConfigPO;
 import api.common.pojo.po.project.MultiSimulationProjectPO;
 import api.common.pojo.po.project.MultiSimulationScenePO;
+import api.common.pojo.vo.map.SimulationMapPathVO;
 import api.common.pojo.vo.map.SimulationMapVO;
 import api.common.pojo.vo.project.MultiSimulationProjectDetailVO;
 import api.common.pojo.vo.project.MultiSimulationProjectVO;
 import api.common.pojo.vo.project.MultiSimulationSceneCarVO;
 import api.common.pojo.vo.project.MultiSimulationSceneVO;
 import api.common.util.StringUtil;
+import api.common.util.TimeUtil;
 import com.alibaba.cloud.commons.lang.StringUtils;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.css.simulation.resource.server.app.service.job_manage.MultiSimulationProjectService;
 import com.css.simulation.resource.server.app.service.job_manage.SimulationMapService;
 import com.css.simulation.resource.server.infra.db.mysql.mapper.*;
+import com.css.simulation.resource.server.infra.feign.service.FileDownService;
 import com.css.simulation.resource.server.infra.util.PageUtil;
 import com.github.pagehelper.PageInfo;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 
@@ -38,6 +52,12 @@ public class SimulationMapServiceImpl implements SimulationMapService {
 
     @Resource
     private SimulationMapMapper mapMapper;
+
+    @Resource
+    private FileDownService fileDownService;
+    
+    @Resource
+    private SimulationMapPathMapper mapPathMapper;
     @Override
     @SneakyThrows
     public ResponseBodyVO<PageInfo<SimulationMapVO>> selectMultiSimulationMap(SimulationMapParam param){
@@ -76,6 +96,30 @@ public class SimulationMapServiceImpl implements SimulationMapService {
         if (Objects.isNull(simulationMapVO)){
             return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "未找到有效的id");
         }
+        SimulationMapPathParam simulationMapPathParam = new SimulationMapPathParam();
+        simulationMapPathParam.setMapId(param.getMapId());
+        List<SimulationMapPathVO> simulationMapPathPOS = mapPathMapper.selectSimulationMapPathList(simulationMapPathParam);
+        if (CollectionUtils.isEmpty(simulationMapPathPOS)){
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "查询地图详情失败");
+        }
+        for (SimulationMapPathVO pathDetail: simulationMapPathPOS) {
+            String pathStartPoint = pathDetail.getPathStartPoint();
+            String pathEndPoint = pathDetail.getPathEndPoint();
+            List<JSONObject> startArr = new ArrayList<>();
+            List<JSONObject> endArr = new ArrayList<>();
+            JSONArray arrayStart = JSONArray.parseArray(pathStartPoint);
+            JSONArray arrayEnd = JSONArray.parseArray(pathEndPoint);
+            for (int i = 0; i < arrayStart.size(); i++) {
+                startArr.add(arrayStart.getJSONObject(i));
+            }
+            for (int i = 0; i < arrayEnd.size(); i++) {
+                endArr.add(arrayEnd.getJSONObject(i));
+            }
+            pathDetail.setStartPoints(startArr);
+            pathDetail.setEndPoints(endArr);
+        }
+        simulationMapVO.setPath(simulationMapPathPOS);
+        simulationMapVO.setMapJsonPathNum(simulationMapPathPOS.size());
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS,  simulationMapVO);
     }
 
@@ -107,6 +151,59 @@ public class SimulationMapServiceImpl implements SimulationMapService {
         }
         return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE);
     }
+
+    @SneakyThrows
+    @Transactional
+    public ResponseBodyVO uploadSimulationMap(MultipartFile fileJson, MultipartFile fileDriver, SimulationMapParam param){
+        String mapName = param.getMapName();
+        String mapJson = new String(fileJson.getBytes(), StandardCharsets.UTF_8);
+        if (StringUtils.isBlank(mapJson) || param.getPathNum() == null || StringUtils.isBlank(mapName)){
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE);
+        }
+        // map.json文件
+        JSONObject object = JSONObject.parseObject(mapJson);
+        String originName = fileDriver.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();
+        String fileType = originName.substring(originName.lastIndexOf("."));
+        fileName = "/" + DictConstants.MAP_DRIVER_FILE + "/" + nowTime + "/" + randomCode + "/" + fileName + fileType;
+        ResponseBodyVO<String> response = fileDownService.upload(fileDriver, fileName);
+        if (!response.isStatus()){
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "上传失败");
+        }
+
+        String previewUrl = response.getInfo();
+        SimulationMapPO simulationMapPO = new SimulationMapPO();
+        simulationMapPO.setMapPath(previewUrl).setMapName(param.getMapName()).setMapDescription(param.getMapDescription())
+            .setMapJson(object.toJSONString()).setPathNum(param.getPathNum()).setMapCode("").setId(StringUtil.getRandomUUID());
+        int i = mapMapper.addSimulationMap(simulationMapPO);
+        if (i <= 0){
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "添加失败");
+        }
+        String mapPOId = simulationMapPO.getId();
+        JSONArray jsonArray = object.getJSONArray("path");
+        if (jsonArray ==null || jsonArray.size() == 0){
+            return new ResponseBodyVO<>(ResponseBodyVO.Response.CLIENT_FAILURE, "未解析出详细轨迹");
+        }
+        for (int j = 0; j < jsonArray.size(); j++) {
+            JSONObject jsonObject = jsonArray.getJSONObject(j);
+            SimulationMapPathPO simulationMapPathPO = new SimulationMapPathPO();
+            simulationMapPathPO.setId(StringUtil.getRandomUUID()).setMapId(mapPOId).setPathSort(j).setPathDetail(jsonObject.getString("roadIds"))
+                .setStartPointNum(jsonObject.getInteger("numOfStartPoints")).setPathStartPoint(jsonObject.getJSONArray("startPoints").toJSONString())
+                .setEndPointNum(jsonObject.getInteger("numOfEndPoints")).setPathEndPoint(jsonObject.getJSONArray("endPoints").toJSONString());
+            int i1 = mapPathMapper.addSimulationMap(simulationMapPathPO);
+            if (i1 <= 0){
+                throw new RuntimeException("处理地图详情失败");
+            }
+        }
+        SimulationMapVO simulationMapVO = new SimulationMapVO();
+        simulationMapVO.setMapId(mapPOId);
+        return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, simulationMapVO);
+    }
     private void setPage(Integer pageNum, Integer pageSize) {
         PageVO pageVO = new PageVO();
         pageVO.setCurrentPage(pageNum);

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

@@ -14,6 +14,10 @@ public interface MultiSimulationProjectService {
 
     ResponseBodyVO<String> deleteMultiSimulationProject(MultiSimulationProjectParam param);
 
+    ResponseBodyVO updateMultiSimulationProjectStatus(MultiSimulationProjectParam param);
+
+    ResponseBodyVO submitMultiSimulationProjectDetail(MultiSimulationProjectParam param);
+
     ResponseBodyVO<String> updateMultiSimulationProject(MultiSimulationProjectParam param);
 
     ResponseBodyVO<MultiSimulationProjectVO> getMultiSimulationProjectDetail(MultiSimulationProjectParam param);

+ 5 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/server/app/service/job_manage/SimulationMapService.java

@@ -4,6 +4,9 @@ import api.common.pojo.common.ResponseBodyVO;
 import api.common.pojo.param.map.SimulationMapParam;
 import api.common.pojo.vo.map.SimulationMapVO;
 import com.github.pagehelper.PageInfo;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
@@ -17,4 +20,6 @@ public interface SimulationMapService {
 
     ResponseBodyVO deleteSimulationMap(SimulationMapParam param);
 
+    ResponseBodyVO uploadSimulationMap(MultipartFile fileJson, MultipartFile fileDriver, SimulationMapParam param);
+
 }

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

@@ -49,6 +49,10 @@ public interface MultiSimulationProjectMapper {
         "project_max_seconds = #{projectMaxSeconds} where id = #{projectId}")
     int updateMultiSimulationProject(MultiSimulationProjectParam param);
 
+    @Update("update multi_simulation_project set project_status = #{projectStatus} " +
+        "where id = #{projectId}")
+    int updateMultiSimulationProjectStatus(MultiSimulationProjectParam param);
+
     @Select("select id,project_key,project_name,project_status,create_time,project_description from multi_simulation_project where deleted = 0 " +
         "and id = #{id} limit 1")
     MultiSimulationProjectVO selectMultiSimulationProjectById(@Param("id") String projectId);

+ 5 - 7
simulation-resource-server/src/main/java/com/css/simulation/resource/server/infra/db/mysql/mapper/SimulationMapMapper.java

@@ -2,20 +2,18 @@ package com.css.simulation.resource.server.infra.db.mysql.mapper;
 
 import api.common.pojo.param.map.SimulationMapParam;
 import api.common.pojo.param.project.MultiSimulationProjectParam;
+import api.common.pojo.po.map.SimulationMapPO;
 import api.common.pojo.vo.map.SimulationMapVO;
 import api.common.pojo.vo.project.MultiSimulationProjectVO;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-import org.apache.ibatis.annotations.Select;
-import org.apache.ibatis.annotations.Update;
+import org.apache.ibatis.annotations.*;
 
 import java.util.List;
 
 @Mapper
 public interface SimulationMapMapper {
-//    @Insert("insert into multi_simulation_scene (id,project_id) values" +
-//        "(#{id},#{projectId})")
-//    int addMultiSimulationScene(MultiSimulationScenePO scenePO);
+    @Insert("insert into simulation_map (id,map_code,map_name,map_json,map_path,map_description,path_num) values" +
+        "(#{id},#{mapCode},#{mapName},#{mapJson},#{mapPath},#{mapDescription},#{pathNum})")
+    int addSimulationMap(SimulationMapPO scenePO);
 
     @Select("select id,path_num,map_name,map_description,create_time from simulation_map where id = #{id} and deleted = 0")
     SimulationMapVO selectMapByMapId(@Param("id") String mapId);

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

@@ -0,0 +1,43 @@
+package com.css.simulation.resource.server.infra.db.mysql.mapper;
+
+import api.common.pojo.param.map.SimulationMapParam;
+import api.common.pojo.param.map.SimulationMapPathParam;
+import api.common.pojo.po.map.SimulationMapPO;
+import api.common.pojo.po.map.SimulationMapPathPO;
+import api.common.pojo.vo.map.SimulationMapPathVO;
+import api.common.pojo.vo.map.SimulationMapVO;
+import org.apache.ibatis.annotations.*;
+
+import java.util.List;
+
+@Mapper
+public interface SimulationMapPathMapper {
+    @Insert("insert into simulation_map_path (id,map_id,path_sort,path_detail,path_start_point,path_end_point,start_point_num,end_point_num) values" +
+        "(#{id},#{mapId},#{pathSort},#{pathDetail},#{pathStartPoint},#{pathEndPoint},#{startPointNum},#{endPointNum})")
+    int addSimulationMap(SimulationMapPathPO simulationMapPathPO);
+
+//    @Select("select id,path_num,map_name,map_description,create_time from simulation_map where id = #{id} and deleted = 0")
+//    SimulationMapVO selectMapByMapId(@Param("id") String mapId);
+//
+//    @Update("update simulation_map set deleted = 1 where id = #{mapId}")
+//    int deleteMultiSimulationScene(SimulationMapParam param);
+//
+//    @Update("update simulation_map set map_path = #{mapPath},map_description = #{mapDescription} where id = #{mapId}")
+//    int updateMultiSimulationScene(SimulationMapParam param);
+
+
+//
+//    @Select("<script>" +
+//        "select id,project_id,scene_name,map_id,create_time from multi_simulation_scene where deleted = 0 " +
+//        "and project_id = #{projectId}" +
+//        "order by create_time desc" +
+//        "</script>")
+//    List<MultiSimulationSceneVO> selectSceneList(MultiSimulationSceneParam param);
+
+    @Select("<script>" +
+        "select id,map_id,path_sort,path_detail,path_start_point,path_end_point,start_point_num,end_point_num from simulation_map_path where deleted = 0 and map_id =#{mapId} " +
+        "order by path_sort asc" +
+        "</script>")
+    List<SimulationMapPathVO> selectSimulationMapPathList(SimulationMapPathParam param);
+
+}