Scene3dfamilyServiceImpl.java 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. package com.fdkankan.scene.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  4. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5. import com.fdkankan.common.constant.ErrorCode;
  6. import com.fdkankan.common.constant.RecStatus;
  7. import com.fdkankan.common.constant.ZipStatus;
  8. import com.fdkankan.common.exception.BusinessException;
  9. import com.fdkankan.common.response.ResultData;
  10. import com.fdkankan.common.util.CreateObjUtil;
  11. import com.fdkankan.common.util.FileUtils;
  12. import com.fdkankan.common.util.UploadToOssUtil;
  13. import com.fdkankan.scene.entity.Scene3dfamily;
  14. import com.fdkankan.scene.mapper.IScene3dfamilyMapper;
  15. import com.fdkankan.scene.service.IScene3dfamilyService;
  16. import com.fdkankan.scene.service.ISceneProService;
  17. import com.fdkankan.scene.vo.Scene3dfamilyVO;
  18. import com.fdkankan.scene.vo.SceneProVO;
  19. import com.fdkankan.scene.vo.SceneVO;
  20. import lombok.extern.slf4j.Slf4j;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.beans.factory.annotation.Qualifier;
  23. import org.springframework.beans.factory.annotation.Value;
  24. import org.springframework.stereotype.Service;
  25. import java.io.File;
  26. import java.util.Date;
  27. import java.util.HashMap;
  28. import java.util.Map;
  29. import java.util.Objects;
  30. /**
  31. * <p>
  32. * 三维家表 服务实现类
  33. * </p>
  34. *
  35. * @author dengsixing
  36. * @since 2021-12-23
  37. */
  38. @Slf4j
  39. @Service
  40. public class Scene3dfamilyServiceImpl extends ServiceImpl<IScene3dfamilyMapper, Scene3dfamily> implements IScene3dfamilyService {
  41. private static String DIR_NAME = "downloads/furnished/";
  42. @Value("${oss.prefix.ali}")
  43. private String prefixAli;
  44. @Autowired
  45. ISceneProService sceneProService;
  46. @Autowired
  47. @Qualifier("uploadToOssUtil")
  48. UploadToOssUtil uploadToOssUtil;
  49. @Override
  50. public ResultData createZip(SceneProVO sceneProVo) {
  51. Scene3dfamily scene3dfamily =
  52. baseMapper.findSceneCodeByCode(
  53. Scene3dfamilyVO
  54. .builder()
  55. .sceneCode(sceneProVo.getSceneCode())
  56. .zipStatus(ZipStatus.DOING.code())
  57. .build());
  58. String path = sceneProVo.getDataSource() + "_3df" + File.separator + sceneProVo.getSceneCode();
  59. try {
  60. if(scene3dfamily == null){
  61. throw new BusinessException(ErrorCode.FAILURE_CODE_5032);
  62. }
  63. log.info("三维家 信息保存 路径 : " + path);
  64. //创建文件夹
  65. FileUtils.createDir(path);
  66. //生成vision.json
  67. sceneProService.downloadVisionData(sceneProVo.getSceneCode());
  68. //拉取data
  69. CreateObjUtil.ossUtilCp("data" + File.separator + "data" + sceneProVo.getSceneCode() + File.separator,
  70. path + File.separator + "scene" + File.separator + "data" + File.separator + "data" + sceneProVo.getSceneCode());
  71. //写入 scene.json 改名为 getinfo.json
  72. SceneVO sceneVo = sceneProService.getInfo(sceneProVo.getSceneCode());
  73. JSONObject dataJson = (JSONObject) JSONObject.toJSON(sceneVo);
  74. FileUtils.writeFile(path + File.separator + "scene" + File.separator + "data" + File.separator + "data"
  75. + sceneProVo.getSceneCode() + File.separator + "getinfo.json", dataJson.toString());
  76. //拉取images
  77. CreateObjUtil.ossUtilCp("images" + File.separator + "images" + sceneProVo.getSceneCode() + File.separator + "floorLogoImg.png",
  78. path + File.separator + "scene" + File.separator + "images" + File.separator + "images" + sceneProVo.getSceneCode());
  79. CreateObjUtil.ossUtilCp("images" + File.separator + "images" + sceneProVo.getSceneCode() + File.separator + "floorplan.png",
  80. path + File.separator + "scene" + File.separator + "images" + File.separator + "images" + sceneProVo.getSceneCode());
  81. CreateObjUtil.ossUtilCp("images" + File.separator + "images" + sceneProVo.getSceneCode() + File.separator + "logo-main.png",
  82. path + File.separator + "scene" + File.separator + "images" + File.separator + "images" + sceneProVo.getSceneCode());
  83. CreateObjUtil.ossUtilCp("images" + File.separator + "images" + sceneProVo.getSceneCode() + File.separator + "logo-main-en.png",
  84. path + File.separator + "scene" + File.separator + "images" + File.separator + "images" + sceneProVo.getSceneCode());
  85. CreateObjUtil.ossUtilCp("images" + File.separator + "images" + sceneProVo.getSceneCode() + File.separator + "smallPic.jpg",
  86. path + File.separator + "scene" + File.separator + "images" + File.separator + "images" + sceneProVo.getSceneCode());
  87. CreateObjUtil.ossUtilCp("images" + File.separator + "images" + sceneProVo.getSceneCode() + File.separator + "thumbBigImg.jpg",
  88. path + File.separator + "scene" + File.separator + "images" + File.separator + "images" + sceneProVo.getSceneCode());
  89. CreateObjUtil.ossUtilCp("images" + File.separator + "images" + sceneProVo.getSceneCode() + File.separator + "thumbSmallImg.jpg",
  90. path + File.separator + "scene" + File.separator + "images" + File.separator + "images" + sceneProVo.getSceneCode());
  91. CreateObjUtil.ossUtilCp("images" + File.separator + "images" + sceneProVo.getSceneCode() + File.separator + "pan",
  92. path + File.separator + "scene" + File.separator + "images" + File.separator + "images" + sceneProVo.getSceneCode());
  93. //拉取video
  94. CreateObjUtil.ossUtilCp("video" + File.separator + "video" + sceneProVo.getSceneCode() + File.separator,
  95. path + File.separator + "scene" + File.separator + "video" + File.separator + "video" + sceneProVo.getSceneCode());
  96. //拉取voice
  97. CreateObjUtil.ossUtilCp("voice" + File.separator + "voice" + sceneProVo.getSceneCode() + File.separator,
  98. path + File.separator + "scene" + File.separator + "voice" + File.separator + "voice" + sceneProVo.getSceneCode());
  99. //压缩zip
  100. FileUtils.zipFile(path + ".zip", path);
  101. log.info("三维家 zip完成 : " + path);
  102. //上传oss
  103. // 上传到阿里云sso
  104. uploadToOssUtil.upload(path + ".zip", DIR_NAME + sceneProVo.getSceneCode() + ".zip");
  105. log.info("upload success");
  106. String url = prefixAli + DIR_NAME + sceneProVo.getSceneCode() + ".zip";
  107. log.info("upload url: {}" + url);
  108. scene3dfamily.setZipLink(url);
  109. scene3dfamily.setZipStatus(ZipStatus.SUCCESS.code());
  110. scene3dfamily.setZipEndTime(new Date());
  111. scene3dfamily.setUpdateTime(new Date());
  112. baseMapper.updateById(scene3dfamily);
  113. }catch (Exception e){
  114. scene3dfamily.setZipStatus(ZipStatus.FAILD.code());
  115. scene3dfamily.setZipEndTime(new Date());
  116. scene3dfamily.setUpdateTime(new Date());
  117. baseMapper.updateById(scene3dfamily);
  118. log.error("场景打包失败", e);
  119. }finally {
  120. FileUtils.deleteDirectory(path);
  121. FileUtils.deleteDirectory(path + ".zip");
  122. }
  123. return ResultData.ok();
  124. }
  125. @Override
  126. public Scene3dfamily findSceneNumByNum(Scene3dfamilyVO scene3dfamilyVO) {
  127. return baseMapper.findSceneCodeByCode(scene3dfamilyVO);
  128. }
  129. @Override
  130. public Map<String, String> findSceneNumByNum2(Scene3dfamilyVO scene3dfamilyVO) {
  131. Map<String, String> result = new HashMap<>();
  132. result.put("url","");
  133. result.put("status",ZipStatus.OTHER.code().toString());
  134. Scene3dfamily scene3dfamily = baseMapper.findSceneCodeByCode(scene3dfamilyVO);
  135. if(Objects.nonNull(scene3dfamily)){
  136. result.put("url",scene3dfamily.getZipLink() == null ?"":scene3dfamily.getZipLink());
  137. result.put("status",scene3dfamily.getZipStatus().toString());
  138. }
  139. //验证是否在打包
  140. return result;
  141. }
  142. @Override
  143. public void updateSceneNumByNum(Scene3dfamily scene3dfamily) {
  144. this.update(new LambdaUpdateWrapper<Scene3dfamily>()
  145. .eq(Scene3dfamily::getSceneCode, scene3dfamily.getSceneCode())
  146. .set(Scene3dfamily::getRecStatus, RecStatus.DISABLE.code()));
  147. }
  148. }