package com.fdkankan.fusion.controller; import cn.hutool.core.io.FileUtil; import com.fdkankan.fusion.common.FilePath; import com.fdkankan.fusion.common.OssPath; import com.fdkankan.fusion.common.ResultCode; import com.fdkankan.fusion.common.ResultData; import com.fdkankan.fusion.common.util.ShellUtil; import com.fdkankan.fusion.common.util.UploadToOssUtil; import com.fdkankan.fusion.config.CacheUtil; import com.fdkankan.fusion.entity.CommonUpload; import com.fdkankan.fusion.entity.Dict; import com.fdkankan.fusion.entity.DictFile; import com.fdkankan.fusion.entity.Model; import com.fdkankan.fusion.exception.BusinessException; import com.fdkankan.fusion.request.DictFileParam; import com.fdkankan.fusion.response.FileInfoVo; import com.fdkankan.fusion.service.ICommonUploadService; import com.fdkankan.fusion.service.IDictFileService; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.OutputStream; /** *

* 前端控制器 *

* * @author * @since 2024-12-02 */ @RestController @RequestMapping("/dictFile") public class DictFileController extends BaseController{ @Autowired IDictFileService dictFileService; @Autowired ICommonUploadService commonUploadService; @Autowired UploadToOssUtil uploadToOssUtil; @Value("${upload.query-path}") private String queryPath; @PostMapping("/pageList/{typeKey}") public ResultData pageList(@RequestBody DictFileParam param, @PathVariable String typeKey){ param.setTypeKey(typeKey); return ResultData.ok(dictFileService.pageList(param)); } @PostMapping("/addOrUpdate/{typeKey}") public ResultData addOrUpdate(@RequestBody DictFile dictFile, @PathVariable String typeKey){ dictFile.setTypeKey(typeKey); if(dictFile.getId() != null && StringUtils.isNotBlank(dictFile.getName())){ commonUploadService.updateFileName(dictFile.getUploadId(),dictFile.getName()); } dictFileService.addOrUpdate(dictFile); return ResultData.ok(); } @PostMapping("/del/{typeKey}") public ResultData del(@RequestBody DictFile dictFile,@PathVariable String typeKey){ dictFileService.del(dictFile); return ResultData.ok(); } @GetMapping("/downFile") public ResultData downFile(@RequestParam(required = false) Integer dictFileId) { if(dictFileId == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } DictFile dictFile = dictFileService.getById(dictFileId); if(dictFile == null){ throw new BusinessException(ResultCode.FILE_NOT_EXIST); } if(StringUtils.isNotBlank(dictFile.getDownUrl())){ return ResultData.ok(dictFile.getDownUrl()); } CommonUpload commonUpload = commonUploadService.getById(dictFile.getUploadId()); if(commonUpload == null){ throw new BusinessException(ResultCode.FILE_NOT_EXIST); } if(StringUtils.isBlank(commonUpload.getFileUrl())){ throw new BusinessException(ResultCode.FILE_NOT_EXIST); } String sceneObjPath = commonUpload.getFileUrl().replace(queryPath,""); String foName = new File(sceneObjPath).getName(); if(!"las".equals(commonUpload.getFileFormat()) && !"laz".equals(commonUpload.getFileFormat()) && !"ply".equals(commonUpload.getFileFormat()) && !"obj".equals(commonUpload.getFileFormat()) && !"osgb".equals(commonUpload.getFileFormat()) && !"b3dm".equals(commonUpload.getFileFormat())){ dictFileService.setDownUrl(dictFileId,commonUpload.getFileUrl(),0); return ResultData.ok(commonUpload.getFileUrl()); } if("obj".equals(commonUpload.getFileFormat()) || "osgb".equals(commonUpload.getFileFormat()) || "b3dm".equals(commonUpload.getFileFormat())){ File parentFile = new File(sceneObjPath).getParentFile(); sceneObjPath = parentFile.getPath(); foName = parentFile.getName(); } String filePath = String.format(CacheUtil.basePath+OssPath.MANAGE_FILE_DOWN_PATH ,dictFileId) ; String ossPath = String.format(OssPath.MANAGE_FILE_DOWN_PATH ,dictFileId +"/"+dictFileId +".zip") ; ShellUtil.yunDownload(sceneObjPath,filePath); ShellUtil.zip(dictFileId+".zip",filePath+"/"+foName); ShellUtil.yunUpload(filePath +"/"+foName +"/"+dictFileId +".zip",ossPath); FileUtil.del(filePath); String downUrl = queryPath + ossPath; dictFileService.setDownUrl(dictFileId,downUrl,0); return ResultData.ok(downUrl); } @GetMapping("/downHash") public ResultData downHash(@RequestParam(required = false) Integer dictFileId) { if(dictFileId == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } DictFile dictFile = dictFileService.getById(dictFileId); if(dictFile == null){ throw new BusinessException(ResultCode.FILE_NOT_EXIST); } if(StringUtils.isNotBlank(dictFile.getHashUrl())){ return ResultData.ok(dictFile.getHashUrl()); } CommonUpload commonUpload = commonUploadService.getById(dictFile.getUploadId()); if(commonUpload == null){ throw new BusinessException(ResultCode.FILE_NOT_EXIST); } if(StringUtils.isBlank(commonUpload.getFileUrl())){ throw new BusinessException(ResultCode.FILE_NOT_EXIST); } String sceneObjPath = commonUpload.getFileUrl().replace(queryPath,""); if("las".equals(commonUpload.getFileFormat()) || "laz".equals(commonUpload.getFileFormat()) || "ply".equals(commonUpload.getFileFormat())){ sceneObjPath = sceneObjPath+"/cloud.js"; } FileInfoVo fileInfo = uploadToOssUtil.getFileInfo(sceneObjPath); if(fileInfo == null){ throw new BusinessException(ResultCode.FILE_NOT_EXIST); } fileInfo.setSize(Long.valueOf(commonUpload.getFileSize())); String filePath = String.format(CacheUtil.basePath+OssPath.MANAGE_FILE_DOWN_PATH ,dictFileId) ; String ossPath = String.format(OssPath.MANAGE_FILE_DOWN_PATH ,dictFileId +"/"+ dictFileId + "_hash.txt") ; File file = new File(filePath +"/"+dictFileId + "_hash.txt"); FileUtil.writeString(fileInfo.toString(),file,"UTF-8"); ShellUtil.yunUpload(file.getPath(),ossPath); FileUtil.del(file); String downUrl = queryPath + ossPath; dictFileService.setDownUrl(dictFileId,downUrl,1); return ResultData.ok(downUrl); } }