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/vo/DncSendBackData.java                             |    4 +
 blade-service/blade-mdm/src/main/resources/processesbpmn/program-cure.bpmn20.xml                                      |   10 +-
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExchangeController.java         |    9 +-
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java                       |    9 ++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DncSendBackService.java                     |   97 +++++++++++++++++++++++++++++--
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java               |    7 -
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/controller/MachineBackFileHandleController.java |    4 
 7 files changed, 113 insertions(+), 27 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/controller/MachineBackFileHandleController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/controller/MachineBackFileHandleController.java
index 313f514..c561461 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/controller/MachineBackFileHandleController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/controller/MachineBackFileHandleController.java
@@ -63,10 +63,10 @@
 		List<MachineBackFileHandleExcelVO> list = new ArrayList<>();
 		pages.getRecords().forEach(vo ->{
 			MachineBackFileHandleExcelVO excelVO	= new MachineBackFileHandleExcelVO();
-			excelVO.setCuredStatus(vo.getIsCured()==0?"鍥哄寲":"鏈浐鍖�");
 			BeanUtil.copy(vo, excelVO);
+			excelVO.setCuredStatus(vo.getIsCured()==0?"鍥哄寲":"鏈浐鍖�");
 		});
-		ExcelUtil.export(response, "鏈哄簥鍥炰紶鏂囦欢澶勭悊" + DateUtil.time(), "鏈哄簥鍥炰紶鏂囦欢琛�", list, MachineBackFileHandleExcelVO.class);
+		ExcelUtil.export(response, "鏈哄簥鍥炰紶绋嬪簭" + DateUtil.time(), "鏈哄簥鍥炰紶绋嬪簭琛�", list, MachineBackFileHandleExcelVO.class);
 
 	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java
index 8011b15..d901cc4 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/DncSendBackController.java
@@ -48,15 +48,12 @@
 	/**
 	 * 涓婁紶DNC鍥炰紶鏂囦欢
 	 *
-	 * @param files    娴佺▼鏂囦欢
-	 * @param category 绫诲瀷
+	 * @param file    dnc绋嬪簭鎵撳寘鏂囦欢
 	 */
 	@PostMapping("dnc-sendback-upload")
 	@ApiOperationSupport(order = 1)
 	@Operation(summary = "涓婁紶DNC鍥炰紶鏂囦欢", description = "浼犲叆鏂囦欢")
-	public R<List<DncSendBackData>> dncSendBackUpload(@RequestParam MultipartFile file,
-													  @RequestParam String category,
-													  @RequestParam(required = false, defaultValue = "") String tenantIds) {
+	public R<List<DncSendBackData>> dncSendBackUpload(@RequestParam MultipartFile file) {
 		return R.data(dncSendBackService.dncSendBackUpload(file));
 	}
 
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExchangeController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExchangeController.java
index 70cafc1..a56ce57 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExchangeController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExchangeController.java
@@ -36,13 +36,12 @@
 
 		//return R.<Boolean>status(true);
 	}
-
+	/*
 	@PostMapping("/import-dnc-file")
 	@Operation(summary = "涓婁紶宸ユ帶缃戝洖浼犳枃浠�", description = "涓婁紶绋嬪簭/闄勪欢鏂囦欢")
-	public R<Boolean> importDncFile(@RequestParam MultipartFile file,Long nodeId,
-							 @RequestParam String category) {
-		ncProgramService.uploadNcFile(file,nodeId,category);
+	public R<Boolean> importDncFile(@RequestParam MultipartFile file) {
+		ncProgramService.uploadNcPkgFile(file);
 		return R.<Boolean>status(true);
 
-	}
+	}*/
 }
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;
+	}
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java
index 4486e71..fab2dbc 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java
@@ -71,7 +71,12 @@
 		return this.getBaseMapper().getCuredNcProgram(partNo,machine.getMachineGroupCode());
 	}
 
-	public void uploadNcFile(MultipartFile file,Long nodeId, String category) {
-
+	/**
+	 * 涓婁紶绋嬪簭鏂囦欢鍒版寚瀹氳妭鐐�
+	 * @param file
+	 * @param nodeId
+	 * @param category
+	 */
+	public void uploadNcFile(MultipartFile file, Long nodeId, String category) {
 	}
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/DncSendBackData.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/DncSendBackData.java
index f69d9a3..473f2cf 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/DncSendBackData.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/DncSendBackData.java
@@ -5,6 +5,7 @@
 import lombok.Setter;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Setter
 @Getter
@@ -22,4 +23,7 @@
 	@Schema(description = "MD5鍊�")
 	private String md5;
 
+	@Schema(description = "瀛愭枃浠讹紙鐢ㄤ簬鍙瘑鍒枃浠跺姞鐨勬満鍣ㄨ繑鍥炵殑绋嬪簭锛�")
+	private List<String> children;
+	private boolean hasChildren;
 }
diff --git a/blade-service/blade-mdm/src/main/resources/processesbpmn/program-cure.bpmn20.xml b/blade-service/blade-mdm/src/main/resources/processesbpmn/program-cure.bpmn20.xml
index 2e88c8f..94361e8 100644
--- a/blade-service/blade-mdm/src/main/resources/processesbpmn/program-cure.bpmn20.xml
+++ b/blade-service/blade-mdm/src/main/resources/processesbpmn/program-cure.bpmn20.xml
@@ -2,12 +2,12 @@
 <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef">
   <process id="program-cure" name="鍥哄寲娴佺▼" isExecutable="true">
     <startEvent id="sid-abe970b9-1bee-49a1-91b4-1184c47c10b7"/>
-    <userTask id="sid-e9be5408-2827-4ee7-bee5-fda38a8f23e6"/>
-    <sequenceFlow id="sid-910649a5-8dac-48a2-b42d-9f1132d61b26" sourceRef="sid-e9be5408-2827-4ee7-bee5-fda38a8f23e6" targetRef="sid-e9be5408-2827-4ee7-bee5-fda38a8f23e6"/>
-    <sequenceFlow id="sid-09c7cf44-bb1a-40f4-b231-919afae5c02f" sourceRef="sid-abe970b9-1bee-49a1-91b4-1184c47c10b7" targetRef="sid-e9be5408-2827-4ee7-bee5-fda38a8f23e6"/>
+    <userTask id="cureProgramTask" name="鍥哄寲缂栧埗"/>
+    <sequenceFlow id="sid-910649a5-8dac-48a2-b42d-9f1132d61b26" sourceRef="cureProgramTask" targetRef="cureProgramTask"/>
+    <sequenceFlow id="sid-09c7cf44-bb1a-40f4-b231-919afae5c02f" sourceRef="sid-abe970b9-1bee-49a1-91b4-1184c47c10b7" targetRef="cureProgramTask"/>
     <endEvent id="end" name="鍥哄寲缁撴潫"/>
     <userTask id="seniorApproveTask" name="楂樺笀瀹℃牳"/>
-    <sequenceFlow id="sid-8dd21f02-ac10-4318-b897-19b4cdc558c7" sourceRef="sid-e9be5408-2827-4ee7-bee5-fda38a8f23e6" targetRef="seniorApproveTask"/>
+    <sequenceFlow id="sid-8dd21f02-ac10-4318-b897-19b4cdc558c7" sourceRef="cureProgramTask" targetRef="seniorApproveTask"/>
     <sequenceFlow id="sid-504610fe-2b87-4df4-8f42-f10c8bf3ce01" sourceRef="seniorApproveTask" targetRef="end"/>
   </process>
   <bpmndi:BPMNDiagram id="BPMNDiagram_program-cure">
@@ -15,7 +15,7 @@
       <bpmndi:BPMNShape id="shape-7fe43876-cd89-402e-aada-b7fe7d89e64a" bpmnElement="sid-abe970b9-1bee-49a1-91b4-1184c47c10b7">
         <omgdc:Bounds x="-215.0" y="-85.0" width="30.0" height="30.0"/>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="shape-702fceb1-2073-4a25-a94d-86c2392dfc6f" bpmnElement="sid-e9be5408-2827-4ee7-bee5-fda38a8f23e6">
+      <bpmndi:BPMNShape id="shape-702fceb1-2073-4a25-a94d-86c2392dfc6f" bpmnElement="cureProgramTask">
         <omgdc:Bounds x="-110.0" y="-95.0" width="75.0" height="55.0"/>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="edge-fbb946ca-a477-4237-b78f-72cf4e0b8479" bpmnElement="sid-910649a5-8dac-48a2-b42d-9f1132d61b26">

--
Gitblit v1.9.3