Explorar o código

车辆模型osgb

wangzhiqiang %!s(int64=2) %!d(string=hai) anos
pai
achega
da1500b3e3

+ 26 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/model/service/VehicleTempService.java

@@ -4,6 +4,7 @@ import api.common.pojo.common.ResponseBodyVO;
 import api.common.pojo.constants.LogConstants;
 import api.common.pojo.param.model.VehiclePageParam;
 import api.common.pojo.po.model.VehicleTempPO;
+import api.common.pojo.po.system.DictPO;
 import api.common.pojo.vo.model.VehicleDefaultValueVO;
 import api.common.pojo.vo.model.VehicleTempVO;
 import api.common.util.ObjectUtil;
@@ -13,6 +14,7 @@ import com.css.simulation.resource.common.utils.PoUtil;
 import com.css.simulation.resource.log.service.LogService;
 import com.css.simulation.resource.model.mapper.VehicleMapper;
 import com.css.simulation.resource.model.mapper.VehicleTempMapper;
+import com.css.simulation.resource.system.mapper.DictMapper;
 import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -32,6 +34,9 @@ public class VehicleTempService {
     VehicleMapper vehicleMapper;
     @Resource
     LogService logService;
+    @Resource
+    DictMapper dictMapper;
+
 
     public List getVehicleTempTree() {
         List<VehicleTempVO> list = vehicleTempMapper.getVehicleTempTree();
@@ -93,11 +98,22 @@ public class VehicleTempService {
         String id = newVehicle.getId();
         //常规字段赋值
         PoUtil.initAddPo(newVehicle);
+
+        DictPO dictPo=new DictPO();
+        PoUtil.initAddPo(dictPo);
         if (ObjectUtil.isNull(id)) {//新增
             newVehicle.setId(StringUtil.getRandomUUID());
             newVehicle.setVehicleCode(StringUtil.getRandomCode());
             newVehicle.setValid("1");
             vehicleTempMapper.insert(newVehicle);
+
+            //字典新增osgb文件
+            dictPo.setId(StringUtil.getRandomUUID());
+            dictPo.setDictCode("carType");
+            dictPo.setDictCode(newVehicle.getModelLabel());
+            dictPo.setDictName(newVehicle.getVehicleTopView());//osgb路径
+            dictPo.setDictOrder(1);
+            dictMapper.saveSystemDict(dictPo);
             logService.logVehicle(LogConstants.SYS_LOG_VEHICLE_INSERT, newVehicle);
         } else { //修改
             if (oldVehicle.getModelLabel().equals(newVehicle.getModelLabel())){
@@ -105,6 +121,9 @@ public class VehicleTempService {
                 vehicleMapper.updateModelLabel(oldVehicle.getModelLabel(),newVehicle.getModelLabel());
             }
             vehicleTempMapper.update(newVehicle);
+            dictPo.setDictCode(newVehicle.getModelLabel());
+            dictPo.setDictName(newVehicle.getVehicleTopView());//osgb路径
+            dictMapper.updateSystemDict(dictPo);
             logService.logVehicle(LogConstants.SYS_LOG_VEHICLE_UPDATE, newVehicle);
         }
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS, newVehicle);
@@ -113,6 +132,13 @@ public class VehicleTempService {
     public int delVehicleTempById(VehicleTempPO po) {
         PoUtil.initDelPo(po);
         logService.logVehicle(LogConstants.SYS_LOG_VEHICLE_DEL, po);
+        //删除字典车辆模型
+        VehiclePageParam param=new VehiclePageParam();
+        VehicleTempVO vehicleTempVO= vehicleTempMapper.getVehicleTempInfo(param);
+        DictPO dictPo=new DictPO();
+        dictPo.setDictCode(vehicleTempVO.getModelLabel());
+        PoUtil.initDelPo(dictPo);
+        dictMapper.deleteSystemDict(dictPo);
         return vehicleTempMapper.delVehicleTempById(po);
     }
 }

+ 4 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/system/mapper/DictMapper.java

@@ -1,6 +1,7 @@
 package com.css.simulation.resource.system.mapper;
 
 
+import api.common.pojo.po.system.DictPO;
 import api.common.pojo.vo.system.DictVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.springframework.stereotype.Repository;
@@ -12,5 +13,7 @@ import java.util.List;
 public interface DictMapper {
 
     List<DictVO> getDicts(List dictTypeList);
-
+    void saveSystemDict(DictPO po);
+    void updateSystemDict(DictPO po);
+    int deleteSystemDict(DictPO po);
 }

+ 49 - 0
simulation-resource-server/src/main/resources/mapper/system/DictMapper.xml

@@ -22,4 +22,53 @@
         order by d.dict_order
     </select>
 
+
+
+    <insert id="saveSystemDict" parameterType="api.common.pojo.po.system.DictPO">
+        INSERT INTO system_dict(
+            id,
+            dict_comment,
+            dict_type,
+            dict_name,
+            dict_code,
+            dict_order,
+            create_time,
+            modify_time,
+            create_user_id,
+            modify_user_id,
+            is_deleted
+        )
+        VALUES(
+            #{id,jdbcType=VARCHAR},
+            #{'三维视频车辆类型'},
+            #{dictType,jdbcType=VARCHAR},
+            #{dictName,jdbcType=VARCHAR},
+            #{dictCode,jdbcType=VARCHAR},
+            #{dictOrder,jdbcType=VARCHAR},
+            #{createTime,jdbcType=TIMESTAMP},
+            #{modifyTime,jdbcType=TIMESTAMP},
+            #{createUserId,jdbcType=VARCHAR},
+            #{modifyUserId,jdbcType=VARCHAR},
+            #{isDeleted,jdbcType=VARCHAR}
+        )
+    </insert>
+
+    <update id="updateSystemDict" parameterType="api.common.pojo.po.system.DictPO">
+        update system_dict set
+        dict_name = #{dictName,jdbcType=VARCHAR},
+        modify_time = #{modifyTime,jdbcType=TIMESTAMP},
+        modify_user_id = #{modifyUserId,jdbcType=VARCHAR}
+        where dict_code = #{dictCode,jdbcType=VARCHAR}
+        and dict_type='carType'
+        and is_deleted='0'
+    </update>
+    <update id="deleteSystemDict" parameterType="api.common.pojo.po.system.DictPO">
+        update system_dict set
+        is_deleted ='1',
+        modify_time = #{modifyTime,jdbcType=TIMESTAMP},
+        modify_user_id = #{modifyUserId,jdbcType=VARCHAR}
+        where dict_code = #{dictCode,jdbcType=VARCHAR}
+        and dict_type='carType'
+        and is_deleted='0'
+    </update>
 </mapper>

+ 63 - 5
simulation-resource-video/src/main/java/com/css/simulation/resource/video/controller/VideoController.java

@@ -1,17 +1,23 @@
 package com.css.simulation.resource.video.controller;
 
 import api.common.pojo.common.ResponseBodyVO;
+import api.common.pojo.vo.scene.SceneAccidentVO;
 import api.common.util.LinuxUtil;
 import com.css.simulation.resource.video.service.VideoService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-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.io.File;
 import java.io.IOException;
-
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+@Slf4j
 @RestController
 public class VideoController {
 
@@ -45,4 +51,56 @@ public class VideoController {
     }
 
 
+    @RequestMapping(value = "/uploadToLocal")
+    @ResponseBody
+    public ResponseBodyVO<Map<String,String>> uploadToLocal(@RequestBody MultipartFile file){
+        // 获取文件原本的名字
+        String originName = file.getOriginalFilename();
+       String fileName=originName.substring(0,originName.lastIndexOf("."));
+/*        // 判断文件是否是pdf文件
+        Set<String> set = new HashSet<>();
+        set.add(".pdf");
+        set.add(".doc");
+        set.add(".docx");*/
+        // 取出文件的后缀
+        /*int count = 0;
+        for(int i = 0; i < originName.length(); i++){
+            if(originName.charAt(i) == '.'){
+                count = i;
+                break;
+            }
+        }
+        String endName = originName.substring(count); //取出文件类型
+       // String fileType = originName.substring(count + 1); //文件类型
+        if(!".osgb".contains(endName)){
+            //return new String("上传的文件类型错误,只能上传osgb类型的文件");
+            return new ResponseBodyVO(ResponseBodyVO.Response.CLIENT_FAILURE, "上传的文件类型错误,只能上传osgb类型的文件");
+        }*/
+        // 创建保存路径
+       //日期格式
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS");
+        String format = sdf.format(new Date());
+       // String savePath = System.getProperty("user.dir") + "\\" + "files" +   "\\" + fileType + "\\" + format;
+       // 保存文件的文件夹
+       //String savePath="C:/Users/CSS/Desktop/ive转osgb/20220919";
+        String savePath="/root/disk1/simulation-cloud/esmini/resources/models/"+fileName+"/"+ format;
+        log.info("车辆模型对应osgb地址:" + savePath);
+        File folder = new File(savePath);
+        // 判断路径是否存在,不存在则自动创建
+        if(!folder.exists()){
+            folder.mkdirs();
+        }
+        String saveName = originName;
+        try {
+            file.transferTo(new File(folder,saveName));
+            Map<String,String> map =new HashMap<>();
+            String filePath = savePath + "/" + saveName;
+           // return new String("文件路径为:" + filePath);
+            map.put("filePath",filePath);
+            return new ResponseBodyVO(ResponseBodyVO.Response.SUCCESS, map);
+        } catch (IOException e){
+            return new ResponseBodyVO(ResponseBodyVO.Response.SERVER_FAILURE, e.getMessage());
+          //  return new String(e.getMessage());
+        }
+    }
 }

+ 17 - 2
simulation-resource-video/src/main/java/com/css/simulation/resource/video/service/VideoService.java

@@ -102,6 +102,14 @@ public class VideoService {
         String esminiCommandTemp = esminiCommand + " " + xoscPath + " " + pictureDirectoryPath + "/screenshot " + StringUtil.doubleToString(Double.parseDouble(maxSimulationTime), 2);
         LinuxUtil.execute2(XvfbCommand, esminiCommandTemp);
 //        String esminiResult = LinuxUtil.execute(esminiCommandTemp);
+        int num=15;
+        for (int i=0;i<num;i++ ) {
+            String remove="rm -f "+ pictureDirectoryPath + "/screenshot_0000"+i+".tga";
+            log.info("删除图片=="+remove);
+            LinuxUtil.execute( remove);
+        }
+
+
         //5 生成视频
         String videoTargetPathOfLinux = rootDirectoryPathOfLinux + "video/" + videoName;
         FileUtil.createParentDirectory(videoTargetPathOfLinux);
@@ -109,6 +117,7 @@ public class VideoService {
 
         String execute = LinuxUtil.execute("ffmpeg"
                 + " -f image2 -framerate 30 "
+                + "-start_number "+num
                 + " -i " + pictureDirectoryPath + "/screenshot_%05d.tga"
                 + " -c:v libx264 -vf format=yuv420p -crf 20 "
                 + videoTargetPathOfLinux
@@ -116,6 +125,10 @@ public class VideoService {
         //6 将视频上传到 minio
         MinioUtil.uploadFromFile(minioClient, videoTargetPathOfLinux, bucketName, videoTargetPathOfMinio);
         log.info("上传成功:" + videoTargetPathOfMinio);
+        //删除生成的临时文件
+        String removeAll="rm -rf "+ pictureDirectoryPath ;
+        log.info("删除图片=="+removeAll);
+        LinuxUtil.execute( removeAll);
         return new ResponseBodyVO<>(ResponseBodyVO.Response.SUCCESS);
     }
 
@@ -324,10 +337,12 @@ public class VideoService {
            // po.setModel3d("/root/disk1/simulation-cloud/esmini/resources/models/audia8.osgb");
         }*/
         //从字段取自车渲染osgb
-        String vehicleType=vehicleInfo.getVehicleType();
+      /*  String vehicleType=vehicleInfo.getVehicleType();
         String car = vehicleType.substring( vehicleType.indexOf(",")+1,vehicleType.lastIndexOf(","));
         log.info("VideoService--vehicleById 车辆类型为:" + car);
-        String carPath=dictMapper.getCarPath(car);
+    */
+      String car=vehicleInfo.getModelLabel();
+       String carPath=dictMapper.getCarPath(car);
         if(null!=carPath&&!carPath.equals("")){
             po.setVehicleCategory(car);
             po.setModel3d(carPath);