SceneFileController.java 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. package com.fdkankan.contro.controller;
  2. import cn.hutool.core.io.FileUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import cn.hutool.core.util.ZipUtil;
  5. import cn.hutool.http.HttpUtil;
  6. import com.alibaba.fastjson.JSON;
  7. import com.alibaba.fastjson.JSONObject;
  8. import com.fdkankan.common.constant.ErrorCode;
  9. import com.fdkankan.common.exception.BusinessException;
  10. import com.fdkankan.common.util.FileUtils;
  11. import com.fdkankan.contro.bean.SendCallAlgorithmDetail;
  12. import com.fdkankan.contro.entity.User;
  13. import com.alibaba.fastjson.JSON;
  14. import com.alibaba.fastjson.JSONArray;
  15. import com.alibaba.fastjson.JSONObject;
  16. import com.fdkankan.common.constant.ErrorCode;
  17. import com.fdkankan.common.exception.BusinessException;
  18. import com.fdkankan.contro.service.IAppCameraFailLogService;
  19. import com.fdkankan.contro.service.ISceneFileBuildService;
  20. import com.fdkankan.contro.service.ISceneUploadCountService;
  21. import com.fdkankan.contro.vo.ReportFailLogVO;
  22. import com.fdkankan.contro.vo.ResponseSceneFile;
  23. import com.fdkankan.contro.vo.SendCallAlgorithmParam;
  24. import com.fdkankan.fyun.face.FYunFileServiceInterface;
  25. import com.fdkankan.model.constants.ConstantFilePath;
  26. import com.fdkankan.contro.vo.SceneUploadCountParamVO;
  27. import com.fdkankan.fyun.face.FYunFileServiceInterface;
  28. import com.fdkankan.web.response.ResultData;
  29. import lombok.extern.log4j.Log4j2;
  30. import org.apache.commons.lang3.ObjectUtils;
  31. import org.apache.commons.lang3.StringUtils;
  32. import org.springframework.beans.factory.annotation.Autowired;
  33. import org.springframework.validation.annotation.Validated;
  34. import org.springframework.web.bind.annotation.*;
  35. import org.springframework.web.multipart.MultipartFile;
  36. import org.springframework.web.bind.annotation.*;
  37. import java.io.File;
  38. import javax.validation.Valid;
  39. import java.io.IOException;
  40. import java.util.Date;
  41. import java.util.Map;
  42. import java.util.concurrent.CompletableFuture;
  43. import java.util.ArrayList;
  44. import java.util.HashMap;
  45. import java.util.List;
  46. import java.util.Map;
  47. import java.util.stream.Collectors;
  48. /**
  49. * 场景文件上传模块
  50. */
  51. @Log4j2
  52. @RestController
  53. @RequestMapping("/api/scene/file")
  54. public class SceneFileController{
  55. @Autowired
  56. private ISceneFileBuildService sceneFileBuildService;
  57. @Autowired
  58. private FYunFileServiceInterface fYunFileService;
  59. @Autowired
  60. private ISceneUploadCountService sceneUploadCountService;
  61. @Autowired
  62. private IAppCameraFailLogService appCameraFailLogService;
  63. /**
  64. * 场景文件上传之前先获取fileId
  65. * @param params
  66. * @return
  67. * @throws Exception
  68. */
  69. @PostMapping("preUpload")
  70. public ResponseSceneFile preUpload(String params) throws Exception {
  71. return sceneFileBuildService.preUpload(params);
  72. }
  73. /**
  74. * 更新fileid文件的上传状态 - 后端八目上传逻辑
  75. *
  76. * @param params
  77. * @return
  78. */
  79. @PostMapping("uploadSuccessBuild")
  80. public ResultData uploadSuccessBuild(String params) throws Exception {
  81. return sceneFileBuildService.uploadSuccessBuild(params);
  82. }
  83. /**
  84. *
  85. *
  86. * @param params
  87. * @return
  88. */
  89. @PostMapping("turntableUploadSuccess")
  90. public ResultData turntableUploadSuccess(String params) throws Exception {
  91. return sceneFileBuildService.turntableUploadSuccess(params);
  92. }
  93. @GetMapping("rebuildScene")
  94. public ResultData rebuildScene(@RequestParam(value = "num") String num,
  95. @RequestParam(value = "force",defaultValue = "false") Boolean force ,
  96. @RequestParam(value = "deleteExtras",defaultValue = "true") Boolean deleteExtras,
  97. @RequestParam(value = "from", defaultValue = "api") String from) throws IOException {
  98. return sceneFileBuildService.rebuildScene(num,force,deleteExtras, from);
  99. }
  100. /**
  101. * 国际八目相机调用
  102. * @param params
  103. * @return
  104. * @throws Exception
  105. */
  106. @PostMapping("getS3UploadUrl")
  107. public ResultData getS3UploadUrl(String params) throws Exception {
  108. log.info("getS3UploadUrl 参数:{}",params);
  109. if (StringUtils.isEmpty(params)) {
  110. throw new BusinessException(ErrorCode.PARAM_ERROR,"params为空。");
  111. }
  112. JSONObject jsonObject = JSON.parseObject(params);
  113. if(jsonObject == null){
  114. throw new BusinessException(ErrorCode.PARAM_ERROR,"params为空。");
  115. }
  116. JSONArray files = jsonObject.getJSONArray("Files");
  117. if(files == null){
  118. throw new BusinessException(ErrorCode.PARAM_ERROR,"params为空。");
  119. }
  120. List<String> urls = new ArrayList<>();
  121. for(int i = 0, len = files.size(); i < len; i++){
  122. urls.add(files.getJSONObject(i).getString("filename"));
  123. }
  124. Map<String, String> uploadS3Url = getUploadS3Url(urls);
  125. return ResultData.ok(uploadS3Url);
  126. }
  127. private Map<String, String> getUploadS3Url(List<String> urls) {
  128. if(urls == null || urls.size() <= 0){
  129. return null;
  130. }
  131. Map<String, String> map = new HashMap();
  132. for(String path : urls){
  133. map.put(path, fYunFileService.getPresignedUrl(path).toString());
  134. }
  135. return map;
  136. }
  137. // @GetMapping("copyDataAndBuild")
  138. // public ResultData copyDataAndBuild(@RequestParam(value = "dataSource") String dataSource,@RequestParam(value = "sceneVer") String sceneVer,
  139. // @RequestParam(value = "sourceBucket") String sourceBucket) throws Exception {
  140. // return sceneFileBuildService.copyDataAndBuild(sourceBucket,dataSource ,sceneVer);
  141. // }
  142. /**
  143. * 单个文件上传
  144. * @param file
  145. * @param params
  146. * @return
  147. */
  148. @PostMapping("upload")
  149. public ResultData upload(@RequestParam(value = "file",required = false) MultipartFile file,
  150. String params) throws Exception {
  151. return sceneFileBuildService.uploadFile(file, params);
  152. }
  153. /**
  154. * 单个文件上传
  155. * @param file
  156. * @param params
  157. * @return
  158. */
  159. @PostMapping("testUpload")
  160. public ResultData testUpload(@RequestParam(value = "file",required = false) MultipartFile file,
  161. String params) throws Exception {
  162. file.transferTo(new File("/home/backend/tomcat/modeling-control/logs/" + file.getOriginalFilename()));
  163. return ResultData.ok();
  164. }
  165. // /**
  166. // * 本地上传相机原始资源压缩包,通知计算
  167. // * @return
  168. // * @throws Exception
  169. // */
  170. // @PostMapping("sendCallAlgorithm")
  171. // public ResultData sendCallAlgorithm(@RequestBody @Validated SendCallAlgorithmParam param) throws Exception {
  172. // return sceneFileBuildService.sendCallAlgorithm(param);
  173. // }
  174. /**
  175. * 本地上传相机原始资源压缩包,通知计算
  176. * @param params
  177. * @return
  178. * @throws Exception
  179. */
  180. @PostMapping("test1")
  181. public ResultData test1(@RequestBody Map<String,Object> params) throws Exception {
  182. log.info("test1场景计算进度:{}", JSON.toJSONString(params));
  183. return ResultData.ok();
  184. }
  185. /**
  186. * 本地上传相机原始资源压缩包,通知计算
  187. * @param params
  188. * @return
  189. * @throws Exception
  190. */
  191. @PostMapping("test2")
  192. public ResultData test2(@RequestBody Map<String,Object> params) throws Exception {
  193. log.info("test2场景计算进度:{}", JSON.toJSONString(params));
  194. return ResultData.ok();
  195. }
  196. // @PostMapping("upload_bd")
  197. // public ResultData uploadBd(MultipartFile file){
  198. //
  199. // }
  200. @PostMapping("sendCallAlgorithm")
  201. public ResultData uploadFile(@RequestBody @Validated SendCallAlgorithmParam param) throws Exception {
  202. return sceneFileBuildService.uploadFile(param);
  203. }
  204. @PostMapping("/noticeBuild")
  205. public ResultData noticeBuild(SendCallAlgorithmDetail detail) throws Exception {
  206. if(StrUtil.isEmpty(detail.getUuid())){
  207. throw new RuntimeException("uuid不能为空");
  208. }
  209. return sceneFileBuildService.noticeBuild(detail.getUuid());
  210. }
  211. @PostMapping("/send_bd")
  212. public ResultData noticeBuildBd(String ossHost, String uuid, String dir) throws Exception {
  213. String prefix = "http://" + ossHost + "/";
  214. String path = "/oss/4dkankan/bd_server/" + dir;
  215. List<File> files = FileUtil.loopFiles(path).stream().filter(file -> !file.getAbsolutePath().contains("backup")).collect(Collectors.toList());
  216. files.parallelStream().forEach(file ->{
  217. String url = prefix.concat(file.getAbsolutePath().substring(1).replace("/4dkankan",""));
  218. SendCallAlgorithmDetail detail = new SendCallAlgorithmDetail();
  219. detail.setFileName(FileUtil.getName(file.getAbsolutePath()));
  220. detail.setUuid(uuid);
  221. SendCallAlgorithmParam param = new SendCallAlgorithmParam();
  222. param.setFilepath(url);
  223. param.setDetails(detail);
  224. HttpUtil.post("http://localhost:8085/api/scene/file/sendCallAlgorithm", JSON.toJSONString(param));
  225. });
  226. return ResultData.ok();
  227. }
  228. /**
  229. * 记录app触发上传场景
  230. * @param param
  231. * @return
  232. */
  233. @PostMapping("/increSceneUploadCount")
  234. public ResultData increSceneUploadCount(@RequestBody @Valid SceneUploadCountParamVO param){
  235. sceneUploadCountService.increSceneUploadCount(param);
  236. return ResultData.ok();
  237. }
  238. @PostMapping("/reportFailLog")
  239. public ResultData reportFailLog(@RequestBody @Valid ReportFailLogVO param){
  240. appCameraFailLogService.reportFailLog(param);
  241. return ResultData.ok();
  242. }
  243. }