package com.fdkankan.contro.controller; 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.IAppCameraFailLogService; 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.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.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.validation.Valid; 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; /** * 场景文件上传之前先获取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 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("uploadCustom") public ResultData uploadCustom(@RequestParam(value = "file") MultipartFile file, String path) throws Exception { return sceneFileBuildService.uploadFileCustom(file, path); } /** * 国际八目相机调用 * @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); } /** * 记录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(); } /** * 计算理光相机格式场景 * @return */ @PostMapping("uploadLiguang") public ResultData uploadLiguang(String num, String snCode, String ossPath) throws Exception { return sceneFileBuildService.uploadLiguang(num, snCode, ossPath); } }