IFdkkLaserServiceImpl.java 11 KB

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