RemovePortraitServiceImpl.java 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package com.fdkankan.scene.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.io.FileUtil;
  4. import cn.hutool.core.util.CharsetUtil;
  5. import cn.hutool.core.util.StrUtil;
  6. import cn.hutool.core.util.ZipUtil;
  7. import com.alibaba.fastjson.JSON;
  8. import com.alibaba.fastjson.JSONObject;
  9. import com.fdkankan.common.constant.*;
  10. import com.fdkankan.common.exception.BusinessException;
  11. import com.fdkankan.common.util.FileUtils;
  12. import com.fdkankan.fyun.face.FYunFileServiceInterface;
  13. import com.fdkankan.model.constants.ConstantFilePath;
  14. import com.fdkankan.model.constants.UploadFilePath;
  15. import com.fdkankan.model.utils.CreateObjUtil;
  16. import com.fdkankan.model.utils.SceneUtil;
  17. import com.fdkankan.scene.entity.SceneAsynOperLog;
  18. import com.fdkankan.scene.entity.ScenePlus;
  19. import com.fdkankan.scene.entity.ScenePlusExt;
  20. import com.fdkankan.scene.service.*;
  21. import com.fdkankan.scene.vo.UploadPanoramaVO;
  22. import com.fdkankan.web.response.ResultData;
  23. import lombok.extern.slf4j.Slf4j;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.stereotype.Service;
  26. import javax.annotation.Resource;
  27. import java.io.File;
  28. import java.util.*;
  29. import java.util.concurrent.CompletableFuture;
  30. import java.util.stream.Collectors;
  31. @Slf4j
  32. @Service
  33. public class RemovePortraitServiceImpl implements IRemovePortraitService {
  34. @Autowired
  35. private IScenePlusService scenePlusService;
  36. @Autowired
  37. private IScenePlusExtService scenePlusExtService;
  38. @Resource
  39. private FYunFileServiceInterface fileServiceInterface;
  40. @Autowired
  41. private ISceneEditInfoService sceneEditInfoService;
  42. @Resource
  43. private FYunFileServiceInterface fYunFileService;
  44. @Autowired
  45. private ISceneAsynOperLogService sceneAsynOperLogService;
  46. @Override
  47. public void removePortrait(JSONObject param) throws Exception {
  48. String num = param.getString("num");
  49. ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
  50. if(scenePlus.getRemovePortrait() == CommonOperStatus.WAITING.code()){
  51. return;
  52. }
  53. ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
  54. String bucket = scenePlusExt.getYunFileBucket();
  55. //原始计算根目录
  56. String uuid = UUID.randomUUID().toString();
  57. //全景图计算根目录
  58. String target = String.format(ConstantFilePath.SCENE_USER_PATH_V4, num) + uuid;
  59. //解压缩文件存放目录
  60. String targetImagesPath = target + "/extras/images/";
  61. //更新状态为进行中
  62. scenePlus.setRemovePortrait(CommonOperStatus.WAITING.code());
  63. scenePlusService.updateById(scenePlus);
  64. try {
  65. //下载文件
  66. String cacheImagesPath = String.format(UploadFilePath.scene_result_data_path, num) + "caches/images/";
  67. List<String> imagesList = fileServiceInterface.listRemoteFiles(cacheImagesPath);
  68. if(CollUtil.isEmpty(imagesList)){
  69. return;
  70. }
  71. imagesList.stream().forEach(key->{
  72. if(key.endsWith(".jpg")){
  73. fileServiceInterface.downloadFile(key, targetImagesPath + FileUtil.getName(key));
  74. }
  75. });
  76. String imgViewPath = String.format(UploadFilePath.IMG_VIEW_PATH, num);
  77. fileServiceInterface.downloadFile(imgViewPath + "vision.txt", target + File.separator + "extras" + File.separator + "vision.txt");
  78. //data.json增加extras为执行重建算法
  79. JSONObject floorplanJson = new JSONObject();
  80. floorplanJson.put("has_source_images", true);
  81. floorplanJson.put("has_vision_txt", true);
  82. JSONObject dataJson = new JSONObject();
  83. dataJson.put("extras", floorplanJson);
  84. dataJson.put("split_type", "SPLIT_V28");
  85. //V5表示不需要生成high,low文件
  86. String skyboxType = "SKYBOX_V6";
  87. if(scenePlusExt.getSceneScheme() == 11){
  88. skyboxType = "SKYBOX_V7";
  89. }
  90. //sceneScheme为3切成瓦片图
  91. if(scenePlusExt.getSceneScheme() == 3){
  92. if("4k".equals(scenePlusExt.getSceneResolution())){
  93. skyboxType = "SKYBOX_V14";
  94. }else{
  95. skyboxType = "SKYBOX_V13";
  96. }
  97. }
  98. dataJson.put("skybox_type", skyboxType);
  99. FileUtil.writeUtf8String(dataJson.toJSONString(), target + File.separator+"data.json");
  100. sceneEditInfoService.uploadPanoramaHandler(num,bucket,target,imgViewPath,new ArrayList<>(),targetImagesPath, "removePortrait");
  101. scenePlus.setRemovePortrait(CommonOperStatus.SUCCESS.code());
  102. //清除全景图异步操作记录,防止再次下载的时候请求到旧的压缩包
  103. sceneAsynOperLogService.cleanLog(num, SceneAsynModuleType.UPLOAD_DOWNLOAD.code(), SceneAsynFuncType.PANORAMIC_IMAGE.code());
  104. }catch (Exception e){
  105. log.error("抹除人像失败,num:{}", num, e);
  106. scenePlus.setRemovePortrait(CommonOperStatus.FAILD.code());
  107. }finally {
  108. FileUtil.del(target);
  109. scenePlusService.updateById(scenePlus);
  110. }
  111. }
  112. }