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