IFdkkLaserServiceImpl.java 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. package com.fdkankan.contro.service.impl;
  2. import cn.hutool.core.io.FileUtil;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.fdkankan.common.constant.CommonStatus;
  5. import com.fdkankan.common.constant.SceneVersionType;
  6. import com.fdkankan.common.util.DateUtil;
  7. import com.fdkankan.common.util.FileUtils;
  8. import com.fdkankan.contro.entity.Camera;
  9. import com.fdkankan.contro.entity.ScenePlus;
  10. import com.fdkankan.contro.entity.ScenePlusExt;
  11. import com.fdkankan.contro.entity.ScenePro;
  12. import com.fdkankan.contro.service.IFdkkLaserService;
  13. import com.fdkankan.contro.service.IScenePlusExtService;
  14. import com.fdkankan.contro.service.IScenePlusService;
  15. import com.fdkankan.contro.service.ISceneProService;
  16. import com.fdkankan.fyun.face.FYunFileServiceInterface;
  17. import com.fdkankan.rabbitmq.util.RabbitMqProducer;
  18. import lombok.extern.slf4j.Slf4j;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.beans.factory.annotation.Value;
  21. import org.springframework.stereotype.Service;
  22. import org.springframework.util.ObjectUtils;
  23. import javax.annotation.Resource;
  24. import java.io.File;
  25. import java.io.IOException;
  26. import java.util.*;
  27. @Service
  28. @Slf4j
  29. public class IFdkkLaserServiceImpl implements IFdkkLaserService {
  30. @Autowired
  31. private ISceneProService sceneProService;
  32. @Autowired
  33. private IScenePlusService scenePlusService;
  34. @Autowired
  35. private IScenePlusExtService scenePlusExtService;
  36. @Autowired
  37. private RabbitMqProducer rabbitMqProducer;
  38. @Value("${queue.application.laser.update-scene}")
  39. private String updateScene;
  40. @Value("${queue.application.laser.init-scene:laser-init-scene}")
  41. private String initScene;
  42. @Value("${queue.application.laser.update-build-status}")
  43. private String updateBuildStatus;
  44. @Value("${queue.application.laser.cloud-point-build}")
  45. private String cloudPointBuild;
  46. @Value("${4dkk.laserService.bucket}")
  47. private String bucket;
  48. @Value("${4dkk.laserService.cloud-point-fyun-path}")
  49. private String cloudPointFyunPath;
  50. @Resource
  51. private FYunFileServiceInterface fYunFileService;
  52. public void syncBuildResult(String num) {
  53. log.info("激光转台相机构建结果 同步 请求 ");
  54. try {
  55. String dataSource = null;
  56. Integer sceneStatus = null;
  57. Date createTime = null;
  58. Integer shootCount = null;
  59. Integer payStatus = null;
  60. Boolean mixture = false;
  61. String version = SceneVersionType.V4.code();
  62. ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
  63. if(Objects.nonNull(scenePlus)){
  64. ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
  65. dataSource = scenePlusExt.getDataSource();
  66. sceneStatus = scenePlus.getSceneStatus();
  67. createTime = scenePlus.getCreateTime();
  68. shootCount = scenePlusExt.getShootCount();
  69. payStatus = scenePlus.getPayStatus();
  70. mixture = scenePlusExt.getMixture() == CommonStatus.NO.code().intValue() ? false : true;
  71. }else{
  72. ScenePro scenePro = sceneProService.getByNum(num);
  73. dataSource = scenePro.getDataSource();
  74. sceneStatus = scenePro.getStatus();
  75. version = SceneVersionType.V3.code();
  76. createTime = scenePro.getCreateTime();
  77. shootCount = scenePro.getShootCount();
  78. payStatus = scenePro.getPayStatus();
  79. }
  80. String jgPath = dataSource;
  81. //创建目录
  82. if (dataSource.lastIndexOf("/") != -1) {
  83. jgPath = jgPath + "_laserData";
  84. } else {
  85. jgPath = jgPath.substring(0, jgPath.length() - 1) + "_laserData";
  86. }
  87. FileUtils.createDir(jgPath + "/extras");
  88. log.info("生成 激光相机目录 " + jgPath);
  89. //生成data.json
  90. JSONObject jgDataJson = new JSONObject();
  91. jgDataJson.put("split_type", "SPLIT_V15");
  92. jgDataJson.put("skybox_type", "SKYBOX_V5");
  93. jgDataJson.put("extras", null);
  94. FileUtils.writeFile(jgPath + File.separator + "data.json", jgDataJson.toString());
  95. // result/mesh/mesh.obj --> jgPath/laserData/laser.obj
  96. log.info("开始拷贝obj文件");
  97. FileUtils.copyDirectiory(dataSource + "/results/mesh", jgPath + "/laserData/mesh");
  98. FileUtils.copyDirectiory(dataSource + "/results/laserData/cover", jgPath + "/extras");
  99. //删除旧的深度图
  100. if(FileUtil.exist( jgPath+"/laserData/depthmap/")){
  101. FileUtil.del(jgPath+"/laserData/depthmap/");
  102. }
  103. FileUtils.copyFile(dataSource + "/results/laserData", jgPath, true);
  104. // updateSceneStatus(scenePlus, scenePlusExt, jgPath + File.separator + "laserData",createTime, algorithmTime, scenePlusExt);
  105. Map<String, Object> params = new HashMap<>();
  106. params.put("sceneCode", num);
  107. params.put("status", sceneStatus);
  108. params.put("version",version);
  109. params.put("createTime", DateUtil.date2String(createTime, null));
  110. params.put("algorithmTime", DateUtil.date2String(Calendar.getInstance().getTime(), null));
  111. if (!ObjectUtils.isEmpty(jgPath)) {
  112. params.put("path", jgPath);
  113. }
  114. params.put("shootCount", shootCount);
  115. params.put("payStatus", payStatus);
  116. params.put("mixture", mixture);
  117. rabbitMqProducer.sendByWorkQueue(updateScene, params);
  118. } catch (Exception e) {
  119. log.error("激光转台相机同步失败", e);
  120. }
  121. }
  122. @Override
  123. public void pushBuildStatusToLaserSystem(String projectNum, String laserObjFilePath, Integer buildObjStatus) {
  124. Map<String, Object> params = new HashMap<>();
  125. params.put("sceneCode", projectNum);
  126. params.put("objPath", laserObjFilePath);
  127. params.put("buildObjStatus", buildObjStatus);
  128. rabbitMqProducer.sendByWorkQueue(updateBuildStatus, params);
  129. }
  130. public void saveScene(ScenePlus scenePlus, JSONObject fdageJson, Camera cameraEntity, String phone, boolean rebuild, Integer payStatus) {
  131. Map<String, Object> params = new HashMap<>();
  132. params.put("childName", cameraEntity.getChildName());
  133. params.put("createTime", DateUtil.date2String(scenePlus.getCreateTime(), null));
  134. params.put("phone", phone);
  135. params.put("sceneCode", scenePlus.getNum());
  136. params.put("snCode", cameraEntity.getSnCode());
  137. params.put("status", scenePlus.getSceneStatus());
  138. if (!rebuild) {
  139. if(Objects.nonNull(fdageJson)){
  140. params.put("password", fdageJson.getString("pwd"));
  141. }
  142. } else {
  143. params.put("status", 4);
  144. }
  145. params.put("version",getSceneVersion(scenePlus.getNum()));
  146. params.put("title", scenePlus.getTitle());
  147. params.put("userId", scenePlus.getUserId());
  148. params.put("sceneSource", scenePlus.getSceneSource());
  149. params.put("payStatus", scenePlus.getPayStatus());
  150. if(Objects.nonNull(fdageJson)){
  151. params.put("location", fdageJson.getInteger("location"));
  152. }
  153. params.put("payStatus", payStatus);
  154. rabbitMqProducer.sendByWorkQueue(initScene, params);
  155. }
  156. public void saveScene(ScenePro scenePro, String scenePassword, Camera cameraEntity, String phone, boolean rebuild, Integer payStatus) {
  157. Map<String, Object> params = new HashMap<>();
  158. params.put("childName", cameraEntity.getChildName());
  159. if(ObjectUtils.isEmpty(scenePro.getCreateTime())){
  160. scenePro.setCreateTime(new Date());
  161. }
  162. params.put("createTime", DateUtil.date2String(scenePro.getCreateTime(), null));
  163. params.put("phone", phone);
  164. params.put("sceneCode", scenePro.getNum());
  165. params.put("snCode", cameraEntity.getSnCode());
  166. params.put("status", scenePro.getStatus());
  167. if (!rebuild) {
  168. params.put("password", scenePassword);
  169. } else {
  170. params.put("status", 4);
  171. }
  172. params.put("version",getSceneVersion(scenePro.getNum()));
  173. params.put("title", scenePro.getSceneName());
  174. params.put("userId", scenePro.getUserId());
  175. params.put("payStatus", payStatus);
  176. rabbitMqProducer.sendByWorkQueue(initScene, params);
  177. }
  178. private String getSceneVersion(String num) {
  179. String version = "V3";
  180. ScenePro scenepro = sceneProService.getByNum(num);
  181. if (scenepro == null || scenepro.getIsUpgrade() == 1) {
  182. ScenePlus plus = scenePlusService.getScenePlusByNum(num);
  183. if (plus != null) {
  184. version = "V4";
  185. }
  186. }
  187. return version;
  188. }
  189. @Override
  190. public void cloudPointBuild(String sceneCode, String path) {
  191. log.info("开始同步点云编辑文件");
  192. // 删除旧的文件及目录
  193. try {
  194. fYunFileService.deleteFile(cloudPointFyunPath + "vision_edit.txt");
  195. fYunFileService.deleteFolder(cloudPointFyunPath + "uuidcloud");
  196. } catch (IOException e) {
  197. log.error("删除文件失败", e);
  198. e.printStackTrace();
  199. }
  200. // 上传点云编辑文件,并通知激光系统
  201. log.info("开始上传点云文件,bucket:{}", bucket);
  202. fYunFileService.uploadFile(bucket,path + "/results/laserData/vision_edit.txt", String.format(cloudPointFyunPath,sceneCode,sceneCode) + "vision_edit.txt");
  203. fYunFileService.uploadFileByCommand(bucket,path + "/results/laserData/uuidcloud", String.format(cloudPointFyunPath,sceneCode,sceneCode) + "uuidcloud");
  204. Map<String, Object> params = new HashMap<>();
  205. params.put("sceneNum", sceneCode);
  206. params.put("businessType", 0);
  207. rabbitMqProducer.sendByWorkQueue(cloudPointBuild, params);
  208. }
  209. }