From e3ee4d5497739084e5c4539ab0daa1056d406c56 Mon Sep 17 00:00:00 2001 From: "583641232@qq.com" <583641232@qq.com> Date: Mon, 29 Jul 2024 11:31:57 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20rar=E6=A8=A1=E6=9D=BF=E5=AF=BC?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/utils/file/ExtractCallback.java | 11 ---- .../common/utils/file/RAR5Util.java | 56 +++++++++++++++++-- .../service/impl/BankServiceImpl.java | 18 +++--- 3 files changed, 60 insertions(+), 25 deletions(-) diff --git a/cas-common/src/main/java/com/inscloudtech/common/utils/file/ExtractCallback.java b/cas-common/src/main/java/com/inscloudtech/common/utils/file/ExtractCallback.java index 638d303..55f129b 100644 --- a/cas-common/src/main/java/com/inscloudtech/common/utils/file/ExtractCallback.java +++ b/cas-common/src/main/java/com/inscloudtech/common/utils/file/ExtractCallback.java @@ -48,17 +48,6 @@ public class ExtractCallback implements IArchiveExtractCallback { return data.length; } }; - /*return data -> { - try { - if (!isFolder) { - File file = new File(ourDir + path); - save2File(file, data); - } - } catch (Exception e) { - e.printStackTrace(); - } - return data.length; - };*/ } diff --git a/cas-common/src/main/java/com/inscloudtech/common/utils/file/RAR5Util.java b/cas-common/src/main/java/com/inscloudtech/common/utils/file/RAR5Util.java index 076b739..713e82a 100644 --- a/cas-common/src/main/java/com/inscloudtech/common/utils/file/RAR5Util.java +++ b/cas-common/src/main/java/com/inscloudtech/common/utils/file/RAR5Util.java @@ -1,23 +1,24 @@ package com.inscloudtech.common.utils.file; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.RandomUtil; +import com.inscloudtech.common.constant.Constants; import net.sf.sevenzipjbinding.IInArchive; import net.sf.sevenzipjbinding.SevenZip; import net.sf.sevenzipjbinding.impl.RandomAccessFileInStream; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import java.io.File; -import java.io.IOException; -import java.io.RandomAccessFile; +import java.io.*; import java.util.ArrayList; import java.util.List; public class RAR5Util { public static void main(String[] args) throws IOException { - String rarDir = "E:\\项目文件\\中合担保标准回单模板\\rar5压缩包\\银行回单.rar"; - String outDir = "E:\\12\\"; - unRar(new File(rarDir),outDir); +// String rarDir = "E:\\项目文件\\中合担保标准回单模板\\rar5压缩包\\银行回单.rar"; +// String outDir = "E:\\12\\"; +// unRar(new File(rarDir),outDir); } public static List unRar(File rarPath, String dstDirectoryPath) throws IOException { IInArchive archive; @@ -88,4 +89,47 @@ public class RAR5Util { return list; } + + public static File unRar(InputStream inputStream) { + File tempFile = null; + try { + File tmpDir = FileUtil.getTmpDir(); + String newDirName = tmpDir + File.separator + RandomUtil.randomString(Constants.RANDOM_STRING_LENGTH); + File zipTmpDir = new File(newDirName); + if (!zipTmpDir.exists() && !zipTmpDir.mkdirs()) { + // 目录创建失败的处理逻辑 + System.err.println("Failed to create temporary directory: " + zipTmpDir.getAbsolutePath()); + } + String rarpath = newDirName + File.separator + RandomUtil.randomString(5) + "tmp.rar"; + tempFile = new File(rarpath); + RandomAccessFile raf = new RandomAccessFile(tempFile, "rw"); + InputStream is = inputStream; + BufferedInputStream bis = new BufferedInputStream(is); + + raf.seek(0); + byte[] buffer = new byte[8192]; // 8KB缓冲区 + int bytesRead; + while ((bytesRead = bis.read(buffer)) != -1) { + raf.write(buffer, 0, bytesRead); + } + + IInArchive archive = SevenZip.openInArchive(null, new RandomAccessFileInStream(raf)); + int[] items = new int[archive.getNumberOfItems()]; + for (int i = 0; i < items.length; i++) { + items[i] = i; + } + + archive.extract(items, false, new ExtractCallback(archive, zipTmpDir.getAbsolutePath())); + archive.close(); + + return zipTmpDir; + }catch (Exception e){ + e.printStackTrace(); + } finally { + if (tempFile.exists()) { + tempFile.delete(); // 清理临时文件 + } + } + return null; + } } diff --git a/cas-system/src/main/java/com/inscloudtech/datacenter/service/impl/BankServiceImpl.java b/cas-system/src/main/java/com/inscloudtech/datacenter/service/impl/BankServiceImpl.java index f7ae5da..cbea1c2 100644 --- a/cas-system/src/main/java/com/inscloudtech/datacenter/service/impl/BankServiceImpl.java +++ b/cas-system/src/main/java/com/inscloudtech/datacenter/service/impl/BankServiceImpl.java @@ -16,6 +16,7 @@ import com.inscloudtech.bankStatementAnalysis.util.AnalyzeFileHelper; import com.inscloudtech.bankStatementAnalysis.worker.ImportWorkflowWorker; import com.inscloudtech.caseMange.domain.vo.GetPersonReq; import com.inscloudtech.common.core.page.TableDataInfo; +import com.inscloudtech.common.utils.file.RAR5Util; import com.inscloudtech.common.utils.poi.ExcelUtil; import com.inscloudtech.common.utils.spring.SpringUtils; import com.inscloudtech.datacenter.domain.vo.*; @@ -1513,10 +1514,13 @@ public class BankServiceImpl implements BankService { AnalyzeFileHelper.clear(); - File zipDir; + File zipDir = null; try { - zipDir = FileUtils.unzip(mf.getInputStream()); -// zipDir = FileUtils.unrar(mf.getInputStream()); + if(originalFilename.endsWith("zip")){ + zipDir = FileUtils.unzip(mf.getInputStream()); + }else if(originalFilename.endsWith("rar")){ + zipDir = RAR5Util.unRar(mf.getInputStream()); + } } catch (Exception e) { log.error("解压文件失败", e); throw new RegularFailureException("解压文件失败: " + e.getMessage()); @@ -1528,7 +1532,7 @@ public class BankServiceImpl implements BankService { sw.start(); File[] files = zipDir.listFiles(); if (files == null) { - throw new RegularFailureException("zip文件为空,没有数据"); + throw new RegularFailureException("压缩文件为空,没有数据"); } if (files.length != 1) { @@ -1549,7 +1553,8 @@ public class BankServiceImpl implements BankService { // 等待任务完成 sw.stop(); - + sw.getTotalTimeSeconds(); + log.error("流水导入结束耗时【"+sw.getTotalTimeSeconds()+"】秒"); int total = execVo.getTotal(); rollbackProcess(execVo.getErrorItem(),caseId); @@ -1718,7 +1723,6 @@ public class BankServiceImpl implements BankService { esIndexHelper.delFDBIndex(caseId); RedisUtils.incrAtomicValue(completeKey); long finish = System.currentTimeMillis(); - log.error("富滇银行---结束耗时【{}秒】",(finish - start)/1000.0); } break; case Constants.BANK_IMPORT_MODEL_BOC_BANK: // 中国银行 @@ -1732,7 +1736,6 @@ public class BankServiceImpl implements BankService { esIndexHelper.delBOCIndex(caseId); RedisUtils.incrAtomicValue(completeKey); long finish = System.currentTimeMillis(); - log.error("中国银行---结束耗时【{}秒】",(finish - start)/1000.0); } break; case Constants.BANK_IMPORT_MODEL_CITIC_BANK: // 中信银行 @@ -1747,7 +1750,6 @@ public class BankServiceImpl implements BankService { esIndexHelper.delCITICIndex(caseId); RedisUtils.incrAtomicValue(completeKey); long finish = System.currentTimeMillis(); - log.error("中信银行---结束耗时【{}秒】",(finish - start)/1000.0); } break; case Constants.BANK_IMPORT_MODEL_MERCHANTS_BANK: // 招商银行