TaskService.java 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. package com.fdkankan.manage_jp.task;
  2. import cn.hutool.core.io.FileUtil;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.fdkankan.fyun.face.FYunFileServiceInterface;
  5. import com.fdkankan.manage_jp.config.ManageConfig;
  6. import com.fdkankan.manage_jp.entity.*;
  7. import com.fdkankan.manage_jp.httpClient.service.LaserService;
  8. import com.fdkankan.manage_jp.service.IProjectSceneGpsService;
  9. import com.fdkankan.manage_jp.service.IScenePlusExtService;
  10. import com.fdkankan.manage_jp.service.IScenePlusService;
  11. import com.fdkankan.manage_jp.service.ISceneProService;
  12. import com.fdkankan.manage_jp.vo.response.SceneGpsDb;
  13. import lombok.extern.slf4j.Slf4j;
  14. import org.apache.commons.lang3.StringUtils;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.scheduling.annotation.Scheduled;
  17. import org.springframework.stereotype.Service;
  18. import java.util.*;
  19. import java.util.stream.Collectors;
  20. @Service
  21. @Slf4j
  22. public class TaskService {
  23. @Autowired
  24. IProjectSceneGpsService projectSceneGpsService;
  25. @Autowired
  26. LaserService laserService;
  27. @Autowired
  28. ISceneProService sceneProService;
  29. @Autowired
  30. IScenePlusService scenePlusService;
  31. @Autowired
  32. IScenePlusExtService scenePlusExtService;
  33. @Scheduled(initialDelay = 2000, fixedDelay = 1000 * 60 )
  34. public void run() {
  35. addLaserData();
  36. }
  37. private void addLaserData() {
  38. List<SceneGpsDb> sceneGpsDbs1 = projectSceneGpsService.getNotGpsScene();
  39. if(sceneGpsDbs1.isEmpty()){
  40. log.debug("没有需要更新GPS数据的场景");
  41. return;
  42. }
  43. List<ProjectSceneGps> laserssList = new ArrayList<>();
  44. List<ProjectSceneGps> lasersgList = new ArrayList<>();
  45. for (SceneGpsDb sceneGpsDb : sceneGpsDbs1) {
  46. ProjectSceneGps sceneGps = projectSceneGpsService.addGps(sceneGpsDb);
  47. if(sceneGps != null){
  48. log.debug("num:{}gps:{}",sceneGpsDb.getNum(),sceneGps);
  49. if(sceneGps.getSceneSource() == 4 ) {
  50. laserssList.add(sceneGps);
  51. }else if( sceneGps.getSceneSource() == 5){
  52. lasersgList.add(sceneGps);
  53. }
  54. }
  55. }
  56. addLaserList(laserssList,4);
  57. addLaserList(lasersgList,5);
  58. }
  59. private void addLaserList(List<ProjectSceneGps> laserssList,Integer sceneSource) {
  60. List<String> sceneMapShowList = new ArrayList<>();
  61. if(!laserssList.isEmpty()){
  62. List<String> numList1 = laserssList.stream().map(ProjectSceneGps::getNum).collect(Collectors.toList());
  63. HashMap<String, JSONObject> ssSceneMap = laserService.list(numList1,sceneSource);
  64. for (ProjectSceneGps sceneGps : laserssList) {
  65. JSONObject ssObj = ssSceneMap.get(sceneGps.getNum());
  66. if(ssObj!=null ){
  67. sceneGps.setWebSite(ssObj.getString("webSite"));
  68. projectSceneGpsService.save(sceneGps);
  69. if(sceneGps.getGpsSource() == 2){
  70. sceneMapShowList.add(sceneGps.getNum());
  71. }
  72. }
  73. }
  74. }
  75. sceneProService.openMapShow(sceneMapShowList);
  76. }
  77. @Autowired
  78. ManageConfig manageConfig;
  79. @Autowired
  80. FYunFileServiceInterface fYunFileServiceInterface;
  81. @Scheduled(initialDelay = 3000,fixedDelay = 1000 * 60 * 60 *24)
  82. public void delScene() {
  83. List<ScenePro> scenePros = sceneProService.getDelSceneNumV3();
  84. for (ScenePro scenePro : scenePros) {
  85. if(StringUtils.isBlank(scenePro.getNum())){
  86. continue;
  87. }
  88. delSource(scenePro.getNum(),scenePro.getDataSource());
  89. sceneProService.updateDelSourceV3(scenePro.getNum());
  90. }
  91. List<ScenePlus> scenePluses = sceneProService.getDelSceneNumV4();
  92. for (ScenePlus scenePlus : scenePluses) {
  93. if(StringUtils.isBlank(scenePlus.getNum())){
  94. continue;
  95. }
  96. delSource(scenePlus.getNum(),scenePlus.getDataSource());
  97. sceneProService.updateDelSourceV4(scenePlus.getNum());
  98. }
  99. }
  100. /**
  101. * 删除场景nas和oss数据
  102. * oss
  103. * 正式:laser_p_data/场景码
  104. * 测试:laser_u_data/场景码
  105. * 原始资源 v3 v4
  106. * 查看资源 scene_view_data v4
  107. * 编辑资源 scene_edit_data v4
  108. * 缓存资源 scene_result_data v4
  109. * data/data<num> v3
  110. * images/images<num> v3
  111. * video/video<num> v3
  112. * voice/voice<num> v3
  113. * scene/<num>
  114. * downloads/scene/<num>
  115. * downloads/scenes/<num>.zip
  116. * downloads/extras/<num>_extras.zip
  117. * downloads/extras/<num>_mesh.zip
  118. */
  119. public static List<String> meshOssPath = Arrays.asList(
  120. "scene_view_data/%s",
  121. "scene_edit_data/%s",
  122. "data/data%s",
  123. "images/images%s",
  124. "video/video%s",
  125. "voice/voice%s",
  126. "scene/%s",
  127. "downloads/scene/%s",
  128. "downloads/scenes/%s.zip",
  129. "downloads/extras/%s_extras.zip",
  130. "downloads/extras/%s_mesh.zip"
  131. );
  132. public static List<String> meshNasDataSourcePath = Arrays.asList(
  133. "%s_images",
  134. "%s_laser_obj",
  135. "%s_obj2Tiles",
  136. "%s_obj2txt"
  137. );
  138. public static List<String> meshNasNumPath = Arrays.asList(
  139. "/mnt/4Dkankan/scene_v4/%s",
  140. "/mnt/4Dkankan/scene/data/data%s",
  141. "/mnt/4Dkankan/scene/images/images%s",
  142. "/mnt/4Dkankan/scene/voice/voice%s"
  143. );
  144. private void delSource(String num,String dataSource){
  145. try {
  146. if(StringUtils.isBlank(num)){
  147. return;
  148. }
  149. ScenePro scenePro = sceneProService.getByNum(num);
  150. ScenePlus scenePlus = scenePlusService.getByNum(num);
  151. if(scenePro != null || scenePlus != null){
  152. return;
  153. }
  154. String active = manageConfig.getActive();
  155. String laserOssPath = "laser_u_data/"+ num;
  156. if(active.contains("prod")){
  157. laserOssPath= "laser_p_data/"+ num;
  158. }
  159. log.info("del-scene:{},oss-path:{}",num,laserOssPath);
  160. fYunFileServiceInterface.deleteFolder(laserOssPath);
  161. for (String meshPath : meshOssPath) {
  162. log.info("del-scene:{},oss-path:{}",num,String.format(meshPath,num));
  163. if(meshPath.contains(".zip")){
  164. fYunFileServiceInterface.deleteFile(String.format(meshPath,num));
  165. }else {
  166. fYunFileServiceInterface.deleteFolder(String.format(meshPath,num));
  167. }
  168. }
  169. for (String meshPath : meshNasNumPath) {
  170. log.info("del-scene:{},nas-path:{}",num,String.format(meshPath,num));
  171. FileUtil.del(String.format(meshPath,num));
  172. }
  173. if(checkDataSource(dataSource)){
  174. List<ScenePro> scenePros = sceneProService.getDataSource(dataSource);
  175. List<ScenePlusExt> scenePlusExts = scenePlusExtService.getDataSource(dataSource);
  176. if(!scenePros.isEmpty() || !scenePlusExts.isEmpty()){
  177. return;
  178. }
  179. String origPath = dataSource.replace("/mnt/data","home");
  180. log.info("del-scene:{},oss-orig-path:{}",num,origPath);
  181. fYunFileServiceInterface.deleteFolder(origPath);
  182. log.info("del-scene:{},nas-path:{}",num,dataSource);
  183. FileUtil.del(dataSource);
  184. for (String meshPath : meshNasDataSourcePath) {
  185. log.info("del-scene:{},nas-path:{}",num,String.format(meshPath,dataSource));
  186. FileUtil.del(String.format(meshPath,dataSource));
  187. }
  188. }
  189. }catch (Exception e){
  190. log.info("删除失败:{}",e);
  191. }
  192. }
  193. public static boolean checkDataSource(String dataSource) {
  194. if(StringUtils.isBlank(dataSource)){
  195. return false;
  196. }
  197. return dataSource.contains("/mnt/data") && dataSource.split("/").length >4;
  198. }
  199. }