package com.fdkankan.contro.controller; import cn.hutool.core.util.ZipUtil; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.fdkankan.common.constant.ErrorCode; import com.fdkankan.common.exception.BusinessException; import com.fdkankan.common.util.FileUtils; import com.fdkankan.contro.entity.User; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.fdkankan.common.constant.ErrorCode; import com.fdkankan.common.exception.BusinessException; import com.fdkankan.contro.service.ISceneFileBuildService; import com.fdkankan.contro.vo.ResponseSceneFile; import com.fdkankan.contro.vo.SendCallAlgorithmParam; import com.fdkankan.fyun.face.FYunFileServiceInterface; import com.fdkankan.model.constants.ConstantFilePath; import com.fdkankan.fyun.face.FYunFileServiceInterface; import com.fdkankan.web.response.ResultData; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.bind.annotation.*; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 场景文件上传模块 */ @Log4j2 @RestController @RequestMapping("/api/scene/file") public class SceneFileController{ @Autowired private ISceneFileBuildService sceneFileBuildService; @Autowired private FYunFileServiceInterface fYunFileService; /** * 场景文件上传之前先获取fileId * @param params * @return * @throws Exception */ @PostMapping("preUpload") public ResponseSceneFile preUpload(String params) throws Exception { return sceneFileBuildService.preUpload(params); } /** * 更新fileid文件的上传状态 - 后端八目上传逻辑 * * @param params * @return */ @PostMapping("uploadSuccessBuild") public ResultData uploadSuccessBuild(String params) throws Exception { return sceneFileBuildService.uploadSuccessBuild(params); } /** * * * @param params * @return */ @PostMapping("turntableUploadSuccess") public ResultData turntableUploadSuccess(String params) throws Exception { return sceneFileBuildService.turntableUploadSuccess(params); } @GetMapping("rebuildScene") public ResultData rebuildScene(@RequestParam(value = "num") String num,@RequestParam(value = "force",defaultValue = "false") Boolean force ,@RequestParam(value = "deleteExtras",defaultValue = "true") Boolean deleteExtras) throws IOException { return sceneFileBuildService.rebuildScene(num,force,deleteExtras); } /** * 国际八目相机调用 * @param params * @return * @throws Exception */ @PostMapping("getS3UploadUrl") public ResultData getS3UploadUrl(String params) throws Exception { log.info("getS3UploadUrl 参数:{}",params); if (StringUtils.isEmpty(params)) { throw new BusinessException(ErrorCode.PARAM_ERROR,"params为空。"); } JSONObject jsonObject = JSON.parseObject(params); if(jsonObject == null){ throw new BusinessException(ErrorCode.PARAM_ERROR,"params为空。"); } JSONArray files = jsonObject.getJSONArray("Files"); if(files == null){ throw new BusinessException(ErrorCode.PARAM_ERROR,"params为空。"); } List urls = new ArrayList<>(); for(int i = 0, len = files.size(); i < len; i++){ urls.add(files.getJSONObject(i).getString("filename")); } Map uploadS3Url = getUploadS3Url(urls); return ResultData.ok(uploadS3Url); } private Map getUploadS3Url(List urls) { if(urls == null || urls.size() <= 0){ return null; } Map map = new HashMap(); for(String path : urls){ map.put(path, fYunFileService.getPresignedUrl(path).toString()); } return map; } // @GetMapping("copyDataAndBuild") // public ResultData copyDataAndBuild(@RequestParam(value = "dataSource") String dataSource,@RequestParam(value = "sceneVer") String sceneVer, // @RequestParam(value = "sourceBucket") String sourceBucket) throws Exception { // return sceneFileBuildService.copyDataAndBuild(sourceBucket,dataSource ,sceneVer); // } /** * 单个文件上传 * @param file * @param params * @return */ @PostMapping("upload") public ResultData upload(@RequestParam(value = "file",required = false) MultipartFile file, String params) throws Exception { return sceneFileBuildService.uploadFile(file, params); } /** * 单个文件上传 * @param file * @param params * @return */ @PostMapping("testUpload") public ResultData testUpload(@RequestParam(value = "file",required = false) MultipartFile file, String params) throws Exception { file.transferTo(new File("/home/backend/tomcat/modeling-control/logs/" + file.getOriginalFilename())); return ResultData.ok(); } /** * 本地上传相机原始资源压缩包,通知计算 * @return * @throws Exception */ @PostMapping("sendCallAlgorithm") public ResultData sendCallAlgorithm(@RequestBody @Validated SendCallAlgorithmParam param) throws Exception { return sceneFileBuildService.sendCallAlgorithm(param); } /** * 本地上传相机原始资源压缩包,通知计算 * @param params * @return * @throws Exception */ @PostMapping("test1") public ResultData test1(@RequestBody Map params) throws Exception { log.info("test1场景计算进度:{}", JSON.toJSONString(params)); return ResultData.ok(); } /** * 本地上传相机原始资源压缩包,通知计算 * @param params * @return * @throws Exception */ @PostMapping("test2") public ResultData test2(@RequestBody Map params) throws Exception { log.info("test2场景计算进度:{}", JSON.toJSONString(params)); return ResultData.ok(); } // @PostMapping("upload_bd") // public ResultData uploadBd(MultipartFile file){ // // } @PostMapping("uploadFile") public ResultData uploadFile(@RequestBody @Validated SendCallAlgorithmParam param) throws Exception { return sceneFileBuildService.uploadFile(param); } @PostMapping("/noticeBuild") public ResultData noticeBuild(String uuid) throws Exception { return sceneFileBuildService.noticeBuild(uuid); } @PostMapping("/noticeBuild_bd") public ResultData noticeBuildBd(String uuid) throws Exception { HttpUtil.post("http://localhost:8085/api/scene/file/noticeBuild", uuid); return ResultData.ok(); } }