package com.fdkankan.contro.controller; import cn.hutool.core.util.StrUtil; 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.bean.SendCallAlgorithmDetail; import com.fdkankan.contro.service.IAppCameraFailLogService; import com.fdkankan.contro.service.IJmgaService; import com.fdkankan.contro.service.ISceneFileBuildService; import com.fdkankan.contro.service.ISceneUploadCountService; import com.fdkankan.contro.vo.ReportFailLogVO; import com.fdkankan.contro.vo.ResponseSceneFile; import com.fdkankan.contro.vo.SceneUploadCountParamVO; import com.fdkankan.contro.vo.SendCallAlgorithmParam; import com.fdkankan.fyun.face.FYunFileServiceInterface; import com.fdkankan.web.response.ResultData; import lombok.extern.log4j.Log4j2; 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 javax.validation.Valid; import java.io.File; import java.io.IOException; 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; @Autowired private ISceneUploadCountService sceneUploadCountService; @Autowired private IAppCameraFailLogService appCameraFailLogService; @Autowired private IJmgaService jmgaService; /** * 场景文件上传之前先获取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, @RequestParam(value = "from", defaultValue = "api") String from) throws IOException { return sceneFileBuildService.rebuildScene(num,force,deleteExtras, from); } /** * 国际八目相机调用 * @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, @RequestParam(value = "dir", defaultValue = "") String dir) throws Exception { return sceneFileBuildService.uploadFile(file, params,dir); } /** * 单个文件上传 * @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("sendCallAlgorithm") public ResultData uploadFile(@RequestBody @Validated SendCallAlgorithmParam param) throws Exception { return sceneFileBuildService.uploadFile(param); } @PostMapping("/noticeBuild") public ResultData noticeBuild(SendCallAlgorithmDetail detail) throws Exception { if(StrUtil.isEmpty(detail.getUuid())){ throw new RuntimeException("uuid不能为空"); } return sceneFileBuildService.noticeBuild(detail.getUuid()); } @PostMapping("/send_bd") public ResultData noticeBuildBd(String ossHost, String uuid, String dir) throws Exception { jmgaService.noticeBuildBd(ossHost, uuid, dir); return ResultData.ok(); } /** * 记录app触发上传场景 * @param param * @return */ @PostMapping("/increSceneUploadCount") public ResultData increSceneUploadCount(@RequestBody @Valid SceneUploadCountParamVO param){ sceneUploadCountService.increSceneUploadCount(param); return ResultData.ok(); } @PostMapping("/reportFailLog") public ResultData reportFailLog(@RequestBody @Valid ReportFailLogVO param){ appCameraFailLogService.reportFailLog(param); return ResultData.ok(); } }