package com.vci.web.util.file.clientutil; import com.vci.dto.VciFileObjectDTO; import com.vci.dto.VciFileShareDTO; import com.vci.dto.VciFileShareHasClassifyDTO; import com.vci.pagemodel.VciFileObjectVO; import com.vci.pagemodel.VciFileShareResultVO; import com.vci.properties.VciFileTransProperties; import com.vci.provider.VciFileDownloadProvider; import com.vci.provider.VciFileQueryProvider; import com.vci.provider.VciFileUploadProvider; import com.vci.starter.web.exception.VciBaseException; import com.vci.starter.web.pagemodel.BaseModelVO; import com.vci.starter.web.pagemodel.BaseResult; import com.vci.starter.web.util.BeanUtil; import com.vci.starter.web.util.LangBaseUtil; import com.vci.starter.web.util.LocalFileUtil; import com.vci.starter.web.util.VciBaseUtil; import com.vci.web.util.file.VciZipUtil; import net.lingala.zip4j.core.ZipFile; import net.lingala.zip4j.exception.ZipException; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.commons.CommonsMultipartFile; import java.io.*; import java.util.*; import java.util.stream.Collectors; /** * @author ludc * @date 2024/7/16 14:43 */ @Component public class VciFileServerClientUtil { public static final int BLOCKSIZE = 1048576; @Autowired( required = false ) private VciFileUploadProvider vciFileUploadProvider; @Autowired( required = false ) private VciFileDocClassifyClientUtil fileDocClassifyClientUtil; @Autowired private VciFileTransProperties vciFileTransProperties; @Autowired( required = false ) private VciFileQueryProvider vciFileQueryProvider; @Autowired( required = false ) private VciFileDownloadProvider vciFileDownloadProvider; @Autowired private VciZipUtil zipUtil; public VciFileServerClientUtil() { } public String getFileExtension(String fileName) { String fileExtension = ""; if (fileName.indexOf(".") > -1) { fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1); } return fileExtension; } public String getFileNameNoExtension(String fileName) { String fileNameNoExtension = fileName.substring(0, fileName.lastIndexOf(".")); return fileNameNoExtension; } private void getFileFromFolder(File folderFile, Set sourceFileSet) { File[] fileArr = folderFile.listFiles(); File[] var4 = fileArr; int var5 = fileArr.length; for(int var6 = 0; var6 < var5; ++var6) { File file = var4[var6]; if (file.isFile()) { sourceFileSet.add(file); } if (file.isDirectory()) { this.getFileFromFolder(file, sourceFileSet); } } } public String getFileDocClassifyName(String classifyId) throws VciBaseException { return this.fileDocClassifyClientUtil.selectDocClassifyNameById(classifyId); } public BaseResult uploadFile(VciFileObjectDTO fileObjectDTO) throws VciBaseException { VciBaseUtil.alertNotNull(new Object[]{fileObjectDTO, "文件传输对象", fileObjectDTO.getOwnbizOid(), "业务数据主键", fileObjectDTO.getOwnBtmname(), "业务数据业务类型", fileObjectDTO.getSourceFilePath(), "文件路径", fileObjectDTO.getFileDocClassify(), "文档类型编号"}); List vciFileObjectDTOS = new ArrayList(); Map sourceFileMap = new HashMap(); String sourceFilePath = fileObjectDTO.getSourceFilePath(); File sourceFile = new File(sourceFilePath); if (!sourceFile.exists()) { throw new VciBaseException("fileNotFound", new String[]{sourceFile.getName()}); } else { String _key; if (StringUtils.isNotBlank(fileObjectDTO.getFileDocClassify()) && StringUtils.isBlank(fileObjectDTO.getFileDocClassifyName())) { _key = this.getFileDocClassifyName(fileObjectDTO.getFileDocClassify()); fileObjectDTO.setFileDocClassifyName(_key); } fileObjectDTO.setFileExtension(this.getFileExtension(sourceFile.getName())); if (StringUtils.isBlank(fileObjectDTO.getName())) { fileObjectDTO.setName(this.getFileNameNoExtension(sourceFile.getName())); } if (StringUtils.isBlank(fileObjectDTO.getId())) { fileObjectDTO.setId(fileObjectDTO.getName()); } fileObjectDTO.setFileSize(sourceFile.length()); vciFileObjectDTOS.add(fileObjectDTO); _key = fileObjectDTO.getId() + "{##$$}" + fileObjectDTO.getName(); sourceFileMap.put(_key, sourceFile); Map resultMap = this.uploadFile((List)vciFileObjectDTOS, (Map)sourceFileMap); BaseResult result = new BaseResult(); if (resultMap != null && resultMap.size() > 0) { List resultList = (List)resultMap.values().stream().collect(Collectors.toList()); result.setData(resultList); result.setMsg("uploadSuccess"); result.setObj(resultMap.get(sourceFilePath)); result.setSuccess(true); } else { result.setMsg("uploadFail"); } return result; } } public Map batchUploadFiles(List fileObjectDTOS) throws VciBaseException { Iterator var2 = fileObjectDTOS.iterator(); while(var2.hasNext()) { VciFileObjectDTO vciFileObjectDTO = (VciFileObjectDTO)var2.next(); VciBaseUtil.alertNotNull(new Object[]{vciFileObjectDTO, "文件传输对象", vciFileObjectDTO.getOwnbizOid(), "业务数据主键", vciFileObjectDTO.getOwnBtmname(), "业务数据业务类型", vciFileObjectDTO.getSourceFilePath(), "文件路径", vciFileObjectDTO.getFileDocClassify(), "文档类型编号"}); } Map sourceFileMap = new HashMap(); Iterator var9 = fileObjectDTOS.iterator(); while(var9.hasNext()) { VciFileObjectDTO vciFileObjectDTO = (VciFileObjectDTO)var9.next(); String sourceFilePath = vciFileObjectDTO.getSourceFilePath(); File sourceFile = new File(sourceFilePath); if (!sourceFile.exists()) { throw new VciBaseException("fileNotFound", new String[]{sourceFile.getName()}); } String _key; if (StringUtils.isNotBlank(vciFileObjectDTO.getFileDocClassify()) && StringUtils.isBlank(vciFileObjectDTO.getFileDocClassifyName())) { _key = this.getFileDocClassifyName(vciFileObjectDTO.getFileDocClassify()); vciFileObjectDTO.setFileDocClassifyName(_key); } vciFileObjectDTO.setFileExtension(this.getFileExtension(sourceFile.getName())); if (StringUtils.isBlank(vciFileObjectDTO.getName())) { vciFileObjectDTO.setName(this.getFileNameNoExtension(sourceFile.getName())); } if (StringUtils.isBlank(vciFileObjectDTO.getId())) { vciFileObjectDTO.setId(vciFileObjectDTO.getName()); } vciFileObjectDTO.setFileSize(sourceFile.length()); _key = vciFileObjectDTO.getId() + "{##$$}" + vciFileObjectDTO.getName(); sourceFileMap.put(_key, sourceFile); } return this.uploadFile((List)fileObjectDTOS, (Map)sourceFileMap); } public Map uploadFileForFolder(VciFileObjectDTO fileObjectDTO) throws VciBaseException { VciBaseUtil.alertNotNull(new Object[]{fileObjectDTO, "文件数据传输对象", fileObjectDTO.getOwnbizOid(), "业务数据主键", fileObjectDTO.getOwnBtmname(), "业务数据的类型", fileObjectDTO.getDirPath(), "文件夹", fileObjectDTO.getFileDocClassify(), "文档类型"}); Map sourceFileMap = new HashMap(); List vciFileObjectDTOS = new ArrayList(); String dirPath = fileObjectDTO.getDirPath(); File dirFile = new File(dirPath); if (!dirFile.isDirectory()) { throw new VciBaseException("isNotFolder", new String[]{dirFile.getName()}); } else if (!dirFile.exists()) { throw new VciBaseException("folderNotExist", new String[]{dirFile.getName()}); } else { Set sourceFileSet = new HashSet(); this.getFileFromFolder(dirFile, sourceFileSet); if (StringUtils.isNotBlank(fileObjectDTO.getFileDocClassify()) && StringUtils.isBlank(fileObjectDTO.getFileDocClassifyName())) { String classifyName = this.getFileDocClassifyName(fileObjectDTO.getFileDocClassify()); fileObjectDTO.setFileDocClassifyName(classifyName); } Iterator var11 = sourceFileSet.iterator(); while(var11.hasNext()) { File file = (File)var11.next(); VciFileObjectDTO tempDTO = new VciFileObjectDTO(); BeanUtil.convert(fileObjectDTO, tempDTO); tempDTO.setFileExtension(this.getFileExtension(file.getName())); tempDTO.setName(this.getFileNameNoExtension(file.getName())); tempDTO.setId(this.getFileNameNoExtension(file.getName())); tempDTO.setFileSize(file.length()); vciFileObjectDTOS.add(tempDTO); String _key = tempDTO.getId() + "{##$$}" + tempDTO.getName(); sourceFileMap.put(_key, file); } return this.uploadFile((List)vciFileObjectDTOS, (Map)sourceFileMap); } } private Map uploadFile(List vciFileObjectDTOS, Map sourceFileMap) throws VciBaseException { VciFileObjectDTO parameterObject = new VciFileObjectDTO(); parameterObject.setVciFileObjectDTOList(vciFileObjectDTOS); BaseResult baseResult = this.vciFileUploadProvider.initUploadFileInfo(parameterObject); if (baseResult.getData() != null && baseResult.getData().size() != 0) { Map resultMap = new HashMap(); Iterator var6 = baseResult.getData().iterator(); while(var6.hasNext()) { VciFileObjectVO vciFileObjectVO = (VciFileObjectVO)var6.next(); String _key = vciFileObjectVO.getId() + "{##$$}" + vciFileObjectVO.getName(); File sourceFile = (File)sourceFileMap.get(_key); String sourceFilePath = sourceFile.getAbsolutePath(); String tempFolder = sourceFile.getParent() + File.separator + VciBaseUtil.getPk(); File tempFolderFile = new File(tempFolder); if (!tempFolderFile.exists()) { tempFolderFile.mkdirs(); } BaseResult tempBaseResult = null; long fileSize = vciFileObjectVO.getFileSize(); FileInputStream in = null; try { in = new FileInputStream(sourceFile); byte[] buffer = new byte[1048576]; int temp; for(temp = 0; (long)temp < fileSize - 1048576L; temp += 1048576) { in.read(buffer, 0, 1048576); MultipartFile multipartFile = this.getMultipartFile(buffer, tempFolderFile); tempBaseResult = this.vciFileUploadProvider.uploadFileForOtherService(multipartFile, (long)temp, vciFileObjectVO.getOid()); if (!tempBaseResult.isSuccess()) { throw new VciBaseException(tempBaseResult.getMsg()); } } int remainSize = (int)(fileSize - (long)temp); buffer = new byte[remainSize]; in.read(buffer, 0, remainSize); MultipartFile multipartFile = this.getMultipartFile(buffer, tempFolderFile); tempBaseResult = this.vciFileUploadProvider.uploadFileForOtherService(multipartFile, (long)temp, vciFileObjectVO.getOid()); if (!tempBaseResult.isSuccess()) { throw new VciBaseException(tempBaseResult.getMsg()); } resultMap.put(sourceFilePath, (VciFileObjectVO)tempBaseResult.getObj()); } catch (FileNotFoundException var30) { throw new VciBaseException("fileNotFound", new String[]{sourceFile.getName()}); } catch (IOException var31) { throw new VciBaseException("fileReadFail", new String[]{var31.getMessage()}); } catch (Exception var32) { throw new VciBaseException("uploadFail", new String[]{var32.getMessage()}); } finally { if (in != null) { try { in.close(); } catch (IOException var29) { var29.printStackTrace(); } } LocalFileUtil.deleteFile(tempFolderFile); } } return resultMap; } else { throw new VciBaseException("fileInfoInitFail"); } } public MultipartFile getMultipartFile(byte[] buffer, File tempFolderFile) { FileItemFactory factory = new DiskFileItemFactory(10240, tempFolderFile); FileItem item = factory.createItem("file", "multipart/form-data", true, VciBaseUtil.getPk()); OutputStream os = null; try { os = item.getOutputStream(); os.write(buffer); os.close(); } catch (IOException var10) { var10.printStackTrace(); } finally { IOUtils.closeQuietly(os); } MultipartFile mfile = new CommonsMultipartFile(item); return mfile; } public BaseResult uploadFileByZip(String zipFilePath, VciFileObjectDTO fileObjectDTO) throws VciBaseException { if (StringUtils.isBlank(zipFilePath)) { throw new VciBaseException("fileNull"); } else { File zipFile = new File(zipFilePath); if (!zipFile.exists()) { throw new VciBaseException("fileNotFound", new String[]{zipFile.getName()}); } else { return this.uploadFileByZip(zipFile, fileObjectDTO); } } } public BaseResult uploadFileByZip(File zipFile, VciFileObjectDTO fileObjectDTO) throws VciBaseException { if (zipFile != null && zipFile.exists()) { ZipFile zipFileObj = null; try { zipFileObj = new ZipFile(zipFile); if (!zipFileObj.isValidZipFile()) { throw new VciBaseException("zipFileError"); } } catch (ZipException var5) { throw new VciBaseException("zipFileReadError"); } return this.uploadFileByZip(zipFileObj, fileObjectDTO); } else { throw new VciBaseException("fileNotFound", new String[]{zipFile.getName()}); } } public BaseResult uploadFileByZip(ZipFile zipFile, VciFileObjectDTO fileObjectDTO) throws VciBaseException { VciBaseUtil.alertNotNull(new Object[]{fileObjectDTO, "文件数据传输对象", fileObjectDTO.getOwnbizOid(), "业务数据主键", fileObjectDTO.getOwnBtmname(), "业务数据的类型", fileObjectDTO.getFileDocClassify(), "文档类型"}); String tempFolderPath = zipFile.getFile().getParentFile() + File.separator + VciBaseUtil.getPk(); File tempFolder = new File(tempFolderPath); if (!tempFolder.exists()) { tempFolder.mkdirs(); } try { zipFile.setFileNameCharset(this.vciFileTransProperties.getZipCharset()); zipFile.extractAll(tempFolderPath); } catch (ZipException var10) { throw new VciBaseException("zipFileReadError"); } fileObjectDTO.setDirPath(tempFolderPath); BaseResult baseResult = new BaseResult(); Map resultMap = null; try { resultMap = this.uploadFileForFolder(fileObjectDTO); } catch (Exception var9) { File folderFile = new File(tempFolderPath); LocalFileUtil.deleteFile(folderFile); throw new VciBaseException("uploadFail"); } if (resultMap != null && resultMap.size() > 0) { List resultList = (List)resultMap.values().stream().collect(Collectors.toList()); baseResult.setData(resultList); baseResult.setMsg("uploadSuccess"); baseResult.setSuccess(true); } else { baseResult.setMsg("uploadFail"); } File folderFile = new File(tempFolderPath); LocalFileUtil.deleteFile(folderFile); return baseResult; } public BaseResult shareFilesToBO(String sourceBtmName, String sourceBusinessOid, String btmName, String businessOid) throws VciBaseException { VciBaseUtil.alertNotNull(new Object[]{sourceBtmName, "原业务类型", sourceBusinessOid, "原业务数据主键", btmName, "业务类型", businessOid, "业务数据主键"}); return this.vciFileUploadProvider.shareFilesToBO(sourceBtmName, sourceBusinessOid, btmName, businessOid); } public BaseResult shareFilesToBO(String fileOids, String btmName, String businessOid) throws VciBaseException { VciBaseUtil.alertNotNull(new Object[]{fileOids, "文件主键", btmName, "业务类型", businessOid, "业务数据主键"}); return this.vciFileUploadProvider.shareFilesToBO(fileOids, btmName, businessOid); } public BaseResult shareAnnexFilesToBO(String sourceBtmName, String sourceBusinessOid, String btmName, String businessOid) throws VciBaseException { VciBaseUtil.alertNotNull(new Object[]{sourceBtmName, "原业务类型", sourceBusinessOid, "原业务数据主键", btmName, "业务类型", businessOid, "业务数据主键"}); return this.vciFileUploadProvider.shareAnnexFilesToBO(sourceBtmName, sourceBusinessOid, btmName, businessOid); } public BaseResult releasedFile(Collection vciFileObjectDTOS) throws VciBaseException { if (vciFileObjectDTOS != null && vciFileObjectDTOS.size() > 0) { List fileOidList = new ArrayList(); Iterator var3 = vciFileObjectDTOS.iterator(); while(var3.hasNext()) { VciFileObjectDTO fileObjectDTO = (VciFileObjectDTO)var3.next(); fileOidList.add(fileObjectDTO.getOid()); } String fileOids = VciBaseUtil.list2String(fileOidList); return this.vciFileQueryProvider.releasedFile(fileOids); } else { throw new VciBaseException("文件对象列表为空,不能生效文件!"); } } public BaseResult releasedFile(VciFileObjectDTO fileObjectDTO) throws VciBaseException { VciBaseUtil.alertNotNull(new Object[]{fileObjectDTO, "文件传输对象"}); return this.vciFileQueryProvider.releasedFile(fileObjectDTO.getOid()); } public BaseResult uploadFile(InputStream inputStream, VciFileObjectDTO fileObjectDTO) throws VciBaseException { if (inputStream == null) { throw new VciBaseException("uploadFail", new String[]{"文件流"}); } else { List vciFileObjectDTOS = new ArrayList(); vciFileObjectDTOS.add(fileObjectDTO); VciFileObjectDTO parameterObject = new VciFileObjectDTO(); parameterObject.setVciFileObjectDTOList(vciFileObjectDTOS); BaseResult baseResult = this.vciFileUploadProvider.initUploadFileInfo(parameterObject); if (baseResult.getData() != null && baseResult.getData().size() != 0) { VciFileObjectVO vciFileObjectVO = (VciFileObjectVO)baseResult.getData().iterator().next(); String tempFolder = LocalFileUtil.getProjectFolder() + File.separator + VciBaseUtil.getPk(); File tempFolderFile = new File(tempFolder); if (!tempFolderFile.exists()) { tempFolderFile.mkdirs(); } BaseResult tempBaseResult; try { int fileSize = inputStream.available(); fileObjectDTO.setFileSize((long)fileSize); byte[] buffer = new byte[1048576]; long temp; for(temp = 0L; temp < (long)fileSize; temp += 1048576L) { inputStream.read(buffer, 0, 1048576); MultipartFile multipartFile = this.getMultipartFile(buffer, tempFolderFile); tempBaseResult = this.vciFileUploadProvider.uploadFileForOtherService(multipartFile, temp, vciFileObjectVO.getOid()); if (!tempBaseResult.isSuccess()) { throw new VciBaseException(tempBaseResult.getMsg()); } } int remainSize = (int)((long)fileSize - temp); buffer = new byte[remainSize]; inputStream.read(buffer, 0, remainSize); MultipartFile multipartFile = this.getMultipartFile(buffer, tempFolderFile); tempBaseResult = this.vciFileUploadProvider.uploadFileForOtherService(multipartFile, temp, vciFileObjectVO.getOid()); if (!tempBaseResult.isSuccess()) { throw new VciBaseException(tempBaseResult.getMsg()); } } catch (Exception var23) { throw new VciBaseException("uploadFail", new String[]{var23.getMessage()}); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException var22) { var22.printStackTrace(); } } LocalFileUtil.deleteFile(tempFolderFile); } return tempBaseResult; } else { throw new VciBaseException("fileInfoInitFail"); } } } public void downloadFileObject(String tempFilePath, VciFileObjectVO vciFileObjectVO) throws VciBaseException { FileOutputStream out = null; File tempFile = new File(tempFilePath); try { File dirFile = tempFile.getParentFile(); if (!dirFile.exists()) { dirFile.mkdirs(); } if (!tempFile.exists()) { tempFile.createNewFile(); } long fileSize = vciFileObjectVO.getFileSize(); int temp = 0; byte[] buffer; for(out = new FileOutputStream(tempFile); (long)temp < fileSize; temp += buffer.length) { BaseResult baseResult = this.vciFileDownloadProvider.sectionDownloadByFileOid(vciFileObjectVO.getOid(), (long)temp); buffer = (byte[])baseResult.getObj(); out.write(buffer, 0, buffer.length); } } catch (Exception var18) { if (tempFile.exists()) { tempFile.delete(); } File tempFolderFile = tempFile.getParentFile(); File[] files = tempFolderFile.listFiles(); if (tempFolderFile.exists() && (files == null || files.length == 0)) { tempFolderFile.delete(); } throw new VciBaseException("downloadFail", new String[]{var18.getMessage()}); } finally { try { if (out != null) { out.close(); } } catch (Exception var17) { var17.printStackTrace(); } } } public String downloadByFileOid(String fileOid) throws VciBaseException { VciBaseUtil.alertNotNull(new Object[]{fileOid, "文件主键"}); String tempFolder = LocalFileUtil.getDefaultTempFolder(); return this.downloadByFileOid(tempFolder, fileOid); } public String downloadByFileOid(String tempFolder, String fileOid) throws VciBaseException { VciBaseUtil.alertNotNull(new Object[]{fileOid, "文件主键", tempFolder, "下载的目录"}); BaseResult baseResult = this.vciFileQueryProvider.getFileObjectByOid(fileOid); VciFileObjectVO vciFileObjectVO = (VciFileObjectVO)baseResult.getObj(); if (vciFileObjectVO == null) { throw new VciBaseException("这个文件不存在"); } else { String tempFilePath = tempFolder + File.separator + vciFileObjectVO.getOid() + File.separator + vciFileObjectVO.getName() + "." + vciFileObjectVO.getFileExtension(); this.downloadFileObject(tempFilePath, vciFileObjectVO); return tempFilePath; } } public Map downloadByFileOids(Collection fileOidCollection) throws VciBaseException { return this.downloadByFileOids(LocalFileUtil.getDefaultTempFolder(), fileOidCollection); } public Map downloadByFileOids(String tempFolder, Collection fileOidCollection) throws VciBaseException { VciBaseUtil.alertCollectionNotNull("文件的主键集合", fileOidCollection); Map fileOidPathMap = new HashMap(); Iterator var4 = fileOidCollection.iterator(); while(var4.hasNext()) { String fileOid = (String)var4.next(); fileOidPathMap.put(fileOid, this.downloadByFileOid(tempFolder, fileOid)); } return fileOidPathMap; } public String downloadToZipByFileOid(String fileOid) throws VciBaseException { VciBaseUtil.alertNotNull(new Object[]{fileOid, "文件的主键"}); String tempFolder = LocalFileUtil.getDefaultTempFolder(); BaseResult baseResult = this.vciFileQueryProvider.getFileObjectByOid(fileOid); VciFileObjectVO vciFileObjectVO = (VciFileObjectVO)baseResult.getObj(); String zipFile = tempFolder + File.separator + vciFileObjectVO.getName() + "." + vciFileObjectVO.getFileExtension(); this.downloadToZipByFileOid(zipFile, fileOid); return zipFile; } public void downloadToZipByFileOid(String zipFile, String fileOid) throws VciBaseException { String tempFolder = LocalFileUtil.getDefaultTempFolder(); String filePath = this.downloadByFileOid(tempFolder, fileOid); File file = new File(filePath); this.zipUtil.addFileToZip(file, zipFile); if (file.exists()) { file.delete(); } File dirFile = file.getParentFile(); if (dirFile.exists()) { dirFile.delete(); } } public String downloadToZipByFileOids(Collection fileOidCollection) throws VciBaseException { String zipFile = LocalFileUtil.getDefaultTempFolder() + File.separator + VciBaseUtil.getPk() + ".zip"; this.downloadToZipByFileOids(zipFile, fileOidCollection); return zipFile; } public void downloadToZipByFileOids(String zipFile, Collection fileOidCollection) throws VciBaseException { VciBaseUtil.alertNotNull(new Object[]{zipFile, "压缩包的路径"}); String tempFolder = LocalFileUtil.getDefaultTempFolder(); this.downloadByFileOids(tempFolder, fileOidCollection); this.zipUtil.folderToZipFile(tempFolder, zipFile); File folderFile = new File(tempFolder); LocalFileUtil.deleteFile(folderFile); } public void downloadToIOByFileOid(OutputStream ops, String fileOid) throws VciBaseException { this.downloadToIOByFileOid(ops, fileOid, true); } public void downloadToIOByFileOid(OutputStream ops, String fileOid, boolean closeOutSteam) throws VciBaseException { VciBaseUtil.alertNotNull(new Object[]{ops, "输出流", fileOid, "文件主键"}); BaseResult returnBaseResult = this.vciFileQueryProvider.getFileObjectByOid(fileOid); VciFileObjectVO vciFileObjectVO = (VciFileObjectVO)returnBaseResult.getObj(); try { long fileSize = vciFileObjectVO.getFileSize(); byte[] buffer; for(int temp = 0; (long)temp <= fileSize; temp += buffer.length) { BaseResult baseResult = this.vciFileDownloadProvider.sectionDownloadByFileOid(vciFileObjectVO.getOid(), (long)temp); buffer = (byte[])baseResult.getObj(); ops.write(buffer, temp, buffer.length); } } catch (Throwable var14) { throw new VciBaseException("downloadFail", new String[]{LangBaseUtil.getErrorMsg(var14)}, var14); } finally { if (closeOutSteam) { IOUtils.closeQuietly(ops); } } } public Map downloadByOwnbiz(String ownBizOid, String ownBtmName) throws VciBaseException { String tempFolder = LocalFileUtil.getDefaultTempFolder(); return this.downloadByOwnbiz(tempFolder, ownBizOid, ownBtmName); } public Map downloadByOwnbiz(String tempFolder, String ownBizOid, String ownBtmName) throws VciBaseException { return this.downloadByOwnbizAndClassify(tempFolder, ownBizOid, ownBtmName, ""); } public Map downloadByOwnbizAndClassify(String ownBizOid, String ownBtmName, String docClassifyId) throws VciBaseException { String tempFolder = LocalFileUtil.getDefaultTempFolder(); return this.downloadByOwnbizAndClassify(tempFolder, ownBizOid, ownBtmName, docClassifyId); } public Map downloadByOwnbizAndClassify(String tempFolder, String ownBizOid, String ownBtmName, String docClassifyId) throws VciBaseException { VciBaseUtil.alertNotNull(new Object[]{ownBizOid, "业务主键", ownBtmName, "业务类型"}); if (StringUtils.isBlank(docClassifyId)) { docClassifyId = ""; } BaseResult baseResult = this.vciFileQueryProvider.listFilesByOwnbizAndClassify(ownBizOid, ownBtmName, docClassifyId); if (CollectionUtils.isEmpty(baseResult.getData())) { throw new VciBaseException("fileInfoNotExist", new String[]{""}); } else { Map fileOidPathMap = new HashMap(); baseResult.getData().stream().forEach((vciFileObjectVO) -> { String thisFilePath = tempFolder + File.separator + vciFileObjectVO.getName() + "." + vciFileObjectVO.getFileExtension(); this.downloadFileObject(thisFilePath, vciFileObjectVO); fileOidPathMap.put(vciFileObjectVO.getOid(), thisFilePath); }); return fileOidPathMap; } } public String downloadToZipByOwnbiz(String ownBizOid, String ownBtmName) throws VciBaseException { String zipFile = LocalFileUtil.getDefaultTempFolder() + File.separator + VciBaseUtil.getPk() + ".zip"; this.downloadToZipByOwnbiz(zipFile, ownBizOid, ownBtmName); return zipFile; } public void downloadToZipByOwnbiz(String zipFile, String ownBizOid, String ownBtmName) throws VciBaseException { VciBaseUtil.alertNotNull(new Object[]{ownBizOid, "业务主键", ownBtmName, "业务类型"}); String tempFolder = LocalFileUtil.getDefaultTempFolder(); this.downloadByOwnbiz(tempFolder, ownBizOid, ownBtmName); this.zipUtil.folderToZipFile(tempFolder, zipFile); File file = new File(tempFolder); LocalFileUtil.deleteFile(file); } public String downloadToZipByOwnbizAndClassify(String ownBizOid, String ownBtmName, String docClassifyId) throws VciBaseException { String zipFile = LocalFileUtil.getDefaultTempFolder() + File.separator + VciBaseUtil.getPk() + ".zip"; this.downloadToZipByOwnbizAndClassify(zipFile, ownBizOid, ownBtmName, docClassifyId); return zipFile; } public void downloadToZipByOwnbizAndClassify(String zipFile, String ownBizOid, String ownBtmName, String docClassifyId) throws VciBaseException { VciBaseUtil.alertNotNull(new Object[]{ownBizOid, "业务主键", ownBtmName, "业务类型"}); String tempFolder = LocalFileUtil.getDefaultTempFolder(); this.downloadByOwnbizAndClassify(tempFolder, ownBizOid, ownBtmName, docClassifyId); this.zipUtil.folderToZipFile(tempFolder, zipFile); File file = new File(tempFolder); LocalFileUtil.deleteFile(file); } public BaseResult deleteFileByOid(String fileOids) throws VciBaseException { VciBaseUtil.alertNotNull(new Object[]{fileOids, "文件主键"}); return this.vciFileDownloadProvider.deleteFile(fileOids); } public BaseResult deleteFileByOwnbiz(String ownBizOid, String ownBtmName) throws VciBaseException { VciBaseUtil.alertNotNull(new Object[]{ownBizOid, "业务主键", ownBtmName, "业务类型"}); BaseResult baseResult = this.vciFileQueryProvider.listFilesByOwnbiz(ownBizOid, ownBtmName); List fileObjectVOList = (List)baseResult.getData(); if (fileObjectVOList != null && fileObjectVOList.size() > 0) { List fileOidList = new ArrayList(); Iterator var6 = fileObjectVOList.iterator(); while(var6.hasNext()) { VciFileObjectVO fileObjectVO = (VciFileObjectVO)var6.next(); fileOidList.add(fileObjectVO.getOid()); } String fileOids = VciBaseUtil.list2String(fileOidList); return this.deleteFileByOid(fileOids); } else { return BaseResult.successMsg("deleteSuccess"); } } public BaseResult deleteFileByOwnbizAndClassify(String ownBizOid, String ownBtmName, String docClassifyId) throws VciBaseException { VciBaseUtil.alertNotNull(new Object[]{ownBizOid, "业务主键", ownBtmName, "业务类型"}); BaseResult baseResult = this.vciFileQueryProvider.listFilesByOwnbizAndClassify(ownBizOid, ownBtmName, docClassifyId); List fileObjectVOList = (List)baseResult.getData(); if (fileObjectVOList != null && fileObjectVOList.size() > 0) { List fileOidList = new ArrayList(); Iterator var7 = fileObjectVOList.iterator(); while(var7.hasNext()) { VciFileObjectVO fileObjectVO = (VciFileObjectVO)var7.next(); fileOidList.add(fileObjectVO.getOid()); } String fileOids = VciBaseUtil.list2String(fileOidList); return this.deleteFileByOid(fileOids); } else { return BaseResult.successMsg("deleteSuccess"); } } public void batchDeleteFiles(Collection fileObjectVOS) throws VciBaseException { if (!CollectionUtils.isEmpty(fileObjectVOS)) { this.batchDeleteFilesByOids((Collection)fileObjectVOS.stream().map(BaseModelVO::getOid).collect(Collectors.toList())); } } public void batchDeleteFilesByOids(Collection fileOidCollection) throws VciBaseException { if (!CollectionUtils.isEmpty(fileOidCollection)) { VciBaseUtil.switchCollectionForOracleIn(fileOidCollection).forEach((fileOids) -> { BaseResult result = this.vciFileDownloadProvider.deleteFile((String)fileOids.stream().collect(Collectors.joining(","))); if (!result.isSuccess()) { throw new VciBaseException(result.getMsg(), result.getMsgObjs()); } }); } } public VciFileObjectDTO fileObjectVO2DTO(VciFileObjectVO fileObjectVO) { VciFileObjectDTO fileObjectDTO = new VciFileObjectDTO(); BeanUtil.convert(fileObjectVO, fileObjectDTO); return fileObjectDTO; } public VciFileObjectDTO fileObjectVO2DTOForUpdate(VciFileObjectVO fileObjectVO) { VciFileObjectDTO fileObjectDTO = new VciFileObjectDTO(); BeanUtil.convert(fileObjectVO, fileObjectDTO); fileObjectDTO.setFileOid(fileObjectVO.getOid()); fileObjectDTO.setUpdateFileFlag(true); return fileObjectDTO; } public void updateFileInfos(Collection fileObjectDTOS) { if (!CollectionUtils.isEmpty(fileObjectDTOS)) { VciBaseUtil.switchCollectionForOracleIn(fileObjectDTOS).stream().forEach((fileDTOs) -> { BaseResult result = this.vciFileUploadProvider.updateFileInfos(fileDTOs); if (!result.isSuccess()) { throw new VciBaseException(result.getMsg(), result.getMsgObjs()); } }); } } public List batchShareFile(Collection shareDTOList, String fileDocClassifyId) { if (!CollectionUtils.isEmpty(shareDTOList)) { List resultVOList = new ArrayList(); VciBaseUtil.switchCollectionForOracleIn(shareDTOList).stream().forEach((dtos) -> { VciFileShareHasClassifyDTO shareHasClassifyDTO = new VciFileShareHasClassifyDTO(); shareHasClassifyDTO.setDocClassifyId(fileDocClassifyId); shareHasClassifyDTO.setShareDTOList((List)dtos.stream().collect(Collectors.toList())); BaseResult result = this.vciFileUploadProvider.batchShareFile(shareHasClassifyDTO); if (!result.isSuccess()) { throw new VciBaseException(result.getMsg(), result.getMsgObjs()); } else { resultVOList.addAll(result.getData()); } }); return resultVOList; } else { return null; } } }