MjServiceImpl.java 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package com.fdkankan.contro.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.exceptions.ExceptionUtil;
  4. import cn.hutool.core.io.FileUtil;
  5. import cn.hutool.core.util.ZipUtil;
  6. import com.alibaba.fastjson.JSON;
  7. import com.alibaba.fastjson.JSONObject;
  8. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  9. import com.fdkankan.common.constant.CommonSuccessStatus;
  10. import com.fdkankan.common.constant.RecStatus;
  11. import com.fdkankan.common.constant.SceneStatus;
  12. import com.fdkankan.common.util.CmdUtils;
  13. import com.fdkankan.common.util.SnowflakeIdGenerator;
  14. import com.fdkankan.contro.entity.SceneFileBuild;
  15. import com.fdkankan.contro.entity.SceneOrigBd;
  16. import com.fdkankan.contro.entity.ScenePlus;
  17. import com.fdkankan.contro.httpclient.CustomHttpClient;
  18. import com.fdkankan.contro.service.*;
  19. import com.fdkankan.fyun.config.FYunFileConfig;
  20. import com.fdkankan.fyun.local.constant.LocalConstants;
  21. import com.fdkankan.model.constants.ConstantFilePath;
  22. import com.fdkankan.model.utils.SceneUtil;
  23. import com.fdkankan.redis.util.RedisLockUtil;
  24. import lombok.extern.slf4j.Slf4j;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.stereotype.Service;
  27. import javax.annotation.Resource;
  28. import java.io.File;
  29. import java.util.Date;
  30. import java.util.List;
  31. import java.util.Objects;
  32. import java.util.UUID;
  33. @Slf4j
  34. @Service
  35. public class MjServiceImpl implements MjService {
  36. @Resource
  37. private FYunFileConfig fYunFileConfig;
  38. @Autowired
  39. private ISceneFileBuildService sceneFileBuildService;
  40. @Autowired
  41. private ISceneOrigBdService sceneOrigBdService;
  42. @Autowired
  43. private IScenePlusService scenePlusService;
  44. @Autowired
  45. private ISceneFilenameService sceneFilenameService;
  46. @Resource
  47. private CustomHttpClient httpClient;
  48. @Autowired
  49. private IHaixinService haixinService;
  50. @Resource
  51. private RedisLockUtil redisLockUtil;
  52. @Override
  53. public void bd() {
  54. List<SceneOrigBd> list = sceneOrigBdService.list(new LambdaQueryWrapper<SceneOrigBd>().eq(SceneOrigBd::getStatus, CommonSuccessStatus.WAITING.code()));
  55. if (CollUtil.isEmpty(list)) {
  56. return;
  57. }
  58. for (SceneOrigBd v : list) {
  59. String uuid = UUID.randomUUID().toString();
  60. String fileUrl = v.getFileUrl();
  61. String zipName = FileUtil.getName(fileUrl);
  62. String zipDir = ConstantFilePath.BUILD_MODEL_PATH + "bd/" + uuid + "/";
  63. String taskId = v.getTaskId();
  64. String kNo = v.getKNo();
  65. String lockKey = "sceneOrigBd:taskNo:" + v.getTaskNo();
  66. boolean lock = redisLockUtil.lock(lockKey, 30 * 60);
  67. if(!lock){
  68. continue;
  69. }
  70. try {
  71. ScenePlus scenePlus = scenePlusService.getByTaskId(taskId);
  72. if(Objects.nonNull(scenePlus) && scenePlus.getSceneStatus() == SceneStatus.wait.code()){
  73. continue;
  74. }
  75. FileUtil.mkdir(zipDir);
  76. String downloadCmd = "wget -O " + zipDir + zipName + " " + fileUrl;
  77. CmdUtils.callLineSh(downloadCmd);
  78. // httpClient.downloadFile(fileUrl, zipDir, zipName);
  79. // String unzipCmd = "unzip -O GBK " + zipDir + zipName + " -d " + zipDir;
  80. // CmdUtils.callLine(unzipCmd);
  81. ZipUtil.unzip(new File(zipDir + zipName), new File(zipDir));
  82. //解压后删除压缩包
  83. FileUtil.del(zipDir + zipName);
  84. String dataFdagePath = zipDir + "data.fdage";
  85. JSONObject dataFdageJson = JSON.parseObject(FileUtil.readUtf8String(dataFdagePath));
  86. JSONObject camJson = dataFdageJson.getJSONObject("cam");
  87. String snCode = camJson.getString("uuid");
  88. String uuidtime = dataFdageJson.getString("uuidtime");
  89. String unicode = snCode + "_" + uuidtime;
  90. SceneFileBuild sceneFileBuild = sceneFileBuildService.getOne(new LambdaQueryWrapper<SceneFileBuild>().eq(SceneFileBuild::getTaskId, taskId));
  91. String fileId = null;
  92. if (Objects.isNull(sceneFileBuild)) {
  93. fileId = String.valueOf(new SnowflakeIdGenerator(0, 0).nextId());
  94. sceneFileBuild = new SceneFileBuild();
  95. sceneFileBuild.setFileId(fileId);
  96. sceneFileBuild.setUnicode(unicode);
  97. sceneFileBuild.setChildName(snCode);
  98. sceneFileBuild.setCreateTime(new Date());
  99. sceneFileBuild.setRecStatus(RecStatus.VALID.code());
  100. sceneFileBuild.setTaskId(taskId);
  101. sceneFileBuild.setKNo(kNo);
  102. sceneFileBuildService.save(sceneFileBuild);
  103. } else {
  104. fileId = sceneFileBuild.getFileId();
  105. }
  106. String realDataSource = ConstantFilePath.BUILD_MODEL_PATH + snCode + "/" + fileId + "/" + unicode;
  107. String realOssHomePath = SceneUtil.getHomePath(realDataSource);
  108. String realOssHomeAbsolutePath = LocalConstants.BASE_PATH + fYunFileConfig.getBucket() + "/" + realOssHomePath;
  109. FileUtil.loopFiles(zipDir).stream().forEach(file -> {
  110. FileUtil.copy(file.getAbsolutePath(), file.getAbsolutePath().replace(zipDir, realOssHomeAbsolutePath), true);
  111. });
  112. sceneFileBuildService.noticeBuild(unicode, v.getId(), realDataSource, "zip");
  113. haixinService.syncRenderStatus(v.getId(), 1, null, null);
  114. } catch (Exception e) {
  115. haixinService.syncRenderStatus(v.getId(), -1, 0, ExceptionUtil.stacktraceToString(e, 5000));
  116. }finally {
  117. redisLockUtil.unlock(lockKey);
  118. }
  119. }
  120. }
  121. public static void main(String[] args) {
  122. // ZipUtil.unzip(new File("D:\\Downloads\\916ed6689_202501101516307030\\916ed6689_202501101516307030.zip"), new File("D:\\Downloads\\aaa\\bbb"));
  123. String substring = "/mnt/data/bd/0ef1b470-4f3a-49b4-bd66-7e0584cce660/".substring(0, "/mnt/data/bd/0ef1b470-4f3a-49b4-bd66-7e0584cce660/".lastIndexOf("/"));
  124. System.out.println(substring);
  125. }
  126. }