package org.springblade.mdm.program.service; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; 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.ZipFile; import org.apache.commons.compress.utils.SeekableInMemoryByteChannel; import org.springblade.core.mp.base.BizServiceImpl; 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; import org.springblade.mdm.program.vo.MdmProgramImportVO; import org.springblade.mdm.utils.CustomBinaryReader; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.time.LocalDateTime; import java.util.*; /** * MDM程序导入(工控网功能) * * @author yangys */ @Slf4j @Service @AllArgsConstructor public class MdmProgramImportService extends BizServiceImpl { private final CureFlowService cureFlowService; private final NcProgramService ncProgramService; /** * MDM导入文件上传 * @param file MDM涉密网导出文件 * @return */ public List mdmImportUpload(MultipartFile file) { List list; try { //String fileName = file.getOriginalFilename(); //InputStream zipFileInputStream = FileExchangeUtil.convertFileToZip(file.getInputStream()); InputStream zipFileInputStream = file.getInputStream();//test byte[] bytes = FileUtil.copyToByteArray(zipFileInputStream); list = parseMdmZipFromByteArray(bytes); } catch (IOException e) { log.error("上传dnc回传文件失败",e); list = Collections.emptyList(); } return list; } InputStream convertFileToZip(InputStream inputStream) throws IOException { File tempFile = createTempFile(); FileOutputStream fos = new FileOutputStream(tempFile); CustomBinaryReader.read(inputStream,fos); FileInputStream dInstream = new FileInputStream(tempFile); return dInstream; } /** * 创建一个临时文件 * @return * @throws IOException */ File createTempFile() throws IOException { Path tempDir = Paths.get(System.getProperty("java.io.tmpdir")); // 在临时目录中创建文件 String tfilename = "t"+System.currentTimeMillis(); Path tempFile = Files.createTempFile(tempDir, tfilename, ".tmp"); System.out.println("创建的临时文件: " + tempFile); return tempFile.toFile(); } public static List parseMdmZipFromByteArray(byte[] zipData) throws IOException { List list = new ArrayList<>(); Map fileMd5Map = new HashMap<>(); Map fileDataMap = new HashMap<>(); try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(zipData); ZipFile zipFile = new ZipFile(channel)) { ZipArchiveEntry entry; Enumeration entries = zipFile.getEntries(); while (entries.hasMoreElements()) { entry = entries.nextElement(); String entryName = entry.getName(); if (!entry.isDirectory()) { //直接解析程序的json文件 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{ if(fileMd5Map.containsKey(k)){ v.setMd5(fileMd5Map.get(k)); } }); return list; } /** * 入库mdm涉密网文件 * @param ids id列表逗号分隔 * @return */ public void mdmFileAccept(String ids) { /* List idList = Func.toLongList(ids); List progList = ncProgramService.listByIds(idList); NcProgramExchange exchange; //NcProgram program; //NcNode programNode; for(NcProgram prog:progList){ exchange = new NcProgramExchange(); exchange.setName(prog.getName()); exchange.setExchangeType(2);//回传 exchange.setNcProgramId(prog.getId()); this.save(exchange); } //直接入库,无流程 */ } }