/**
|
* BladeX Commercial License Agreement
|
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
|
* <p>
|
* Use of this software is governed by the Commercial License Agreement
|
* obtained after purchasing a license from BladeX.
|
* <p>
|
* 1. This software is for development use only under a valid license
|
* from BladeX.
|
* <p>
|
* 2. Redistribution of this software's source code to any third party
|
* without a commercial license is strictly prohibited.
|
* <p>
|
* 3. Licensees may copyright their own code but cannot use segments
|
* from this software for such purposes. Copyright of this software
|
* remains with BladeX.
|
* <p>
|
* Using this software signifies agreement to this License, and the software
|
* must not be used for illegal purposes.
|
* <p>
|
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
|
* not liable for any claims arising from secondary or illegal development.
|
* <p>
|
* Author: Chill Zhuang (bladejava@qq.com)
|
*/
|
package org.springblade.mdm.program.service;
|
|
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;
|
|
/**
|
* 工作流服务实现类
|
*
|
* @author Chill
|
*/
|
@Slf4j
|
@Service
|
@AllArgsConstructor
|
public class DncSendBackService {
|
|
private final RepositoryService repositoryService;
|
private final RuntimeService runtimeService;
|
private final HistoryService historyService;
|
private final ProcessEngine processEngine;
|
|
/**
|
* dnc回传文件上传
|
* @param file
|
* @return
|
*/
|
public List<DncSendBackData> dncSendBackUpload(MultipartFile file) {
|
List<DncSendBackData> list=new ArrayList<>();
|
try {
|
String fileName = file.getOriginalFilename();
|
InputStream fileInputStream = file.getInputStream();
|
|
byte[] bytes = FileUtil.copyToByteArray(fileInputStream);
|
list = parseDncZipFromByteArray(bytes);
|
//TODO 解析为列表文件
|
|
DncSendBackData dt = new DncSendBackData();
|
dt.setId(1L);
|
dt.setProgramName("test.nc");
|
dt.setProgramNo("001");
|
|
list.add(dt);
|
|
} 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
|
* @return
|
*/
|
public void dncFileAccept(String ids) {
|
|
}
|
}
|
|
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;
|
}
|
}
|