From 9064866a2c0c2988cba1d321d7af088d2647a4bc Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期日, 06 七月 2025 23:59:50 +0800
Subject: [PATCH] 增加固化流程

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java |  162 ++++++++++++++++++++++++++++--------------------------
 1 files changed, 84 insertions(+), 78 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java
index d4c2b6a..7ead897 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExchangeService.java
@@ -1,16 +1,25 @@
 
 package org.springblade.mdm.program.service;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.digest.DigestUtils;
 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.SeekableInMemoryByteChannel;
+import org.apache.commons.io.IOUtils;
 import org.springblade.core.mp.base.BizServiceImpl;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.utils.FileUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.IoUtil;
+import org.springblade.mdm.flow.service.CureFlowService;
+import org.springblade.mdm.program.entity.NcProgram;
 import org.springblade.mdm.program.entity.NcProgramExchange;
 import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
 import org.springblade.mdm.program.vo.DncSendBackData;
@@ -23,10 +32,8 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
+import java.time.LocalDateTime;
+import java.util.*;
 
 /**
  * 绋嬪簭浜ゆ崲锛坉nc瀵煎叆/瀵煎嚭锛�
@@ -37,30 +44,26 @@
 @Service
 @AllArgsConstructor
 public class NcProgramExchangeService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> {
-
+	private final CureFlowService cureFlowService;
+	private final NcProgramService ncProgramService;
 	/**
-	 * dnc鍥炰紶鏂囦欢涓婁紶
-	 * @param file 鏂囦欢
+	 * dnc鍥炰紶鏂囦欢涓婁紶锛堣В鏋愬悗淇濆瓨鍏pload琛級
+	 * @param file DNC鍥炰紶鏂囦欢
 	 * @return
 	 */
 	public List<DncSendBackData> dncSendBackUpload(MultipartFile file) {
-		List<DncSendBackData> list ;
+		List<DncSendBackData> list;
 		try {
-			String fileName = file.getOriginalFilename();
-			//InputStream fileInputStream = file.getInputStream();
-			InputStream zipFileInputStream = FileExchangeUtil.convertFileToZip(file.getInputStream());
+			//String fileName = file.getOriginalFilename();
+			//InputStream zipFileInputStream = FileExchangeUtil.convertFileToZip(file.getInputStream());
+			InputStream zipFileInputStream = file.getInputStream();//test
+
 			byte[] bytes = FileUtil.copyToByteArray(zipFileInputStream);
 			list = parseDncZipFromByteArray(bytes);
-			for(DncSendBackData dncSendBackData:list){
-				NcProgramExchange exchange=new NcProgramExchange();
-				exchange.setName(dncSendBackData.getProgramName());
-				exchange.setStatus(1);//宸插鍏�
-				this.save(exchange);
 
-			}
 
 		} catch (IOException e) {
-			log.error("涓婁紶dnc鏂囦欢澶辫触",e);
+			log.error("涓婁紶dnc鍥炰紶鏂囦欢澶辫触",e);
 			list = Collections.emptyList();
 		}
 		return list;
@@ -92,90 +95,93 @@
 		return tempFile.toFile();
 	}
 	public static List<DncSendBackData> parseDncZipFromByteArray(byte[] zipData) throws IOException {
-		//List<DncSendBackData> datas = new ArrayList<>();
-		List<DncSendBackData> datas  = ZipFileDirectoryScanner.getFilesInDirectoryRecursive(zipData, "");
+		List<DncSendBackData> list = new ArrayList<>();
+		//List<DncSendBackData> datas  = ZipFileDirectoryScanner.getFilesInDirectoryRecursive(zipData, "");
 
-
-
-		/*
-		try (ByteArrayInputStream bis = new ByteArrayInputStream(zipData);
-			 ZipArchiveInputStream zis = new ZipArchiveInputStream(bis)) {
-
+		Map<String,String> fileMd5Map = new HashMap<>();
+		Map<String,DncSendBackData> fileDataMap = new HashMap<>();
+		try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(zipData);
+			 ZipFile zipFile = new ZipFile(channel)) {
 
 			ZipArchiveEntry entry;
-			while ((entry = zis.getNextZipEntry()) != null) {
+			Enumeration<ZipArchiveEntry> entries = zipFile.getEntries();
+			while (entries.hasMoreElements()) {
+			//while ((entry = zis.getNextZipEntry()) != null) {
+				entry = entries.nextElement();
 				DncSendBackData prog = new DncSendBackData();
-				prog.setProgramName(entry.getName());
+				String entryName = entry.getName();
+
 				if (!entry.isDirectory()) {
+					//鐩存帴瑙f瀽绋嬪簭鐨刯son鏂囦欢
+					if(entryName.equals(NcProgramExportDNCService.PROGRAM_JSON_FILE)){
+
+						try (InputStream inputStream = zipFile.getInputStream(entry)) {
+							String jsonStr = IoUtil.readToString(inputStream);
+
+							JSONArray jsonArray = JSONArray.parseArray(jsonStr);
+							for(int i=0;i<jsonArray.size();i++){
+								JSONObject jsonObject = jsonArray.getJSONObject(i);
+								DncSendBackData d = new DncSendBackData();
+								d.setProgramName(jsonObject.getString("name"));
+								d.setId(jsonObject.getLong("id"));
+								d.setProgramNo(jsonObject.getString("code"));
+								d.setFileBackTime(LocalDateTime.now());//鍒拌揪鏃堕棿
+
+								fileDataMap.put(d.getProgramName(),d);
+								list.add(d);
+							}
+
+						}
+					}else{
+						try (InputStream inputStream = zipFile.getInputStream(entry)) {
+							fileMd5Map.put(entryName,DigestUtils.md5Hex(inputStream));//鑾峰彇鏂囦欢MD5
+						}
+
+					}
 					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;
+		}
+		//璁剧疆md5鍊�
+		fileDataMap.forEach((k,v)->{
+			if(fileMd5Map.containsKey(k)){
+				v.setMd5(fileMd5Map.get(k));
+			}
+		});
+		return list;
 	}
+
+
 	/**
-	 * 绋嬪簭涓嬪彂缁熻鍒嗛〉鏌ヨ
-	 * @param query 鏌ヨ鍙傛暟
+	 * 鍏ュ簱鍥炰紶鏂囦欢,骞跺惎鍔ㄥ浐鍖栨祦绋�
+	 * @param ids id鍒楄〃閫楀彿鍒嗛殧
 	 * @return
 	 */
+	public void dncFileAccept(String ids) {
+		List<Long> idList = Func.toLongList(ids);
+		List<NcProgram> progList = ncProgramService.listByIds(idList);
+		NcProgramExchange exchange;
+		//NcProgram program;
+		//NcNode programNode;
 
-	public IPage<DncSendBackData> dncSendBackPageQuery(Query query) {
+		for(NcProgram prog:progList){
+			exchange = new NcProgramExchange();
+			exchange.setName(prog.getName());
+			exchange.setExchangeType(2);//鍥炰紶
+			exchange.setNcProgramId(prog.getId());
 
-		IPage<DncSendBackData> page = this.getBaseMapper().dncSendBackpageQuery(Condition.getPage(query),query);
+			this.save(exchange);
 
-		return page;
-
-	}
-}
-
-
-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)) {
+		cureFlowService.startCure(progList);
 
-			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