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