From 8a0cb5a26892aee337a1c1e68f2d5d9aff0c42a7 Mon Sep 17 00:00:00 2001 From: yangys <y_ys79@sina.com> Date: 星期四, 19 六月 2025 23:39:29 +0800 Subject: [PATCH] dnc回传解析1 --- blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncSendBackService.java | 97 ++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 89 insertions(+), 8 deletions(-) diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncSendBackService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncSendBackService.java index 8fd16f6..e722731 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncSendBackService.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncSendBackService.java @@ -28,15 +28,23 @@ import com.fasterxml.jackson.databind.ObjectMapper; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; +import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream; +import org.apache.commons.compress.archivers.zip.ZipFile; +import org.apache.commons.compress.utils.IOUtils; +import org.apache.commons.compress.utils.SeekableInMemoryByteChannel; import org.flowable.engine.*; import org.springblade.core.tool.utils.FileUtil; import org.springblade.mdm.program.vo.DncSendBackData; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; +import java.util.Enumeration; import java.util.List; /** @@ -49,23 +57,24 @@ @AllArgsConstructor public class DncSendBackService { - private static final String XML_NAME = "xml"; - private static final Integer INT_1024 = 1024; - - private final ObjectMapper objectMapper; private final RepositoryService repositoryService; private final RuntimeService runtimeService; private final HistoryService historyService; - private final TaskService taskService; private final ProcessEngine processEngine; - + /** + * dnc鍥炰紶鏂囦欢涓婁紶 + * @param file + * @return + */ public List<DncSendBackData> dncSendBackUpload(MultipartFile file) { - List<DncSendBackData> list = new ArrayList<>(); + List<DncSendBackData> list=new ArrayList<>(); try { String fileName = file.getOriginalFilename(); InputStream fileInputStream = file.getInputStream(); + byte[] bytes = FileUtil.copyToByteArray(fileInputStream); + list = parseDncZipFromByteArray(bytes); //TODO 瑙f瀽涓哄垪琛ㄦ枃浠� DncSendBackData dt = new DncSendBackData(); @@ -77,12 +86,52 @@ } catch (IOException e) { log.error("涓婁紶dnc鏂囦欢澶辫触",e); - } return list; } + public static List<DncSendBackData> parseDncZipFromByteArray(byte[] zipData) throws IOException { + //List<DncSendBackData> datas = new ArrayList<>(); + List<DncSendBackData> datas = ZipFileDirectoryScanner.getFilesInDirectoryRecursive(zipData, ""); + + + + /* + try (ByteArrayInputStream bis = new ByteArrayInputStream(zipData); + ZipArchiveInputStream zis = new ZipArchiveInputStream(bis)) { + + + ZipArchiveEntry entry; + while ((entry = zis.getNextZipEntry()) != null) { + DncSendBackData prog = new DncSendBackData(); + prog.setProgramName(entry.getName()); + if (!entry.isDirectory()) { + System.out.println("鏂囦欢鍚�: " + entry.getName()); + System.out.println("澶у皬: " + entry.getSize()); + + // 璇诲彇鏂囦欢鍐呭鍒板瓧鑺傛暟缁� + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + IOUtils.copy(zis, outputStream); + byte[] fileContent = outputStream.toByteArray(); + + // 澶勭悊鏂囦欢鍐呭... + System.out.println("鍐呭闀垮害: " + fileContent.length); + }else{ + //鏂囦欢澶癸紝璇诲唴閮ㄦ枃浠讹紝鑾峰彇鏂囦欢鍒楄〃 + + System.out.println("鏂囦欢澶圭▼搴忥細"+entry.getName()); + List<String> children = new ArrayList<>(); + prog.setChildren(children); + } + + datas.add(prog); + } + + + }*/ + return datas; + } /** * 鍏ュ簱鍥炰紶鏂囦欢 * @param ids @@ -92,3 +141,35 @@ } } + +class ZipFileDirectoryScanner { + + public static List<DncSendBackData> getFilesInDirectoryRecursive(byte[] zipData, String dirPath) throws IOException { + List<DncSendBackData> list = new ArrayList<>(); + + if (!dirPath.endsWith("/")) { + dirPath += "/"; + } + + try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(zipData); + ZipFile zipFile = new ZipFile(channel)) { + + Enumeration<ZipArchiveEntry> entries = zipFile.getEntries(); + while (entries.hasMoreElements()) { + ZipArchiveEntry entry = entries.nextElement(); + String entryName = entry.getName(); + DncSendBackData d = new DncSendBackData(); + d.setProgramName(entryName); + if(entry.isDirectory()){ + d.setHasChildren(true); + } + list.add(d); + + //if (entryName.startsWith(dirPath) && !entry.isDirectory()) { + // fileList.add(entryName); + //} + } + } + return list; + } +} -- Gitblit v1.9.3