From 4301ffcfa7d715d7341cb77ba29dee24366fb2a3 Mon Sep 17 00:00:00 2001 From: yangys <y_ys79@sina.com> Date: 星期一, 07 七月 2025 22:24:02 +0800 Subject: [PATCH] dnc导出补充字段 --- blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java | 185 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 185 insertions(+), 0 deletions(-) diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java new file mode 100644 index 0000000..3133dde --- /dev/null +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java @@ -0,0 +1,185 @@ + +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<NcProgramExchangeMapper, NcProgramExchange> { + private final CureFlowService cureFlowService; + private final NcProgramService ncProgramService; + /** + * MDM瀵煎叆鏂囦欢涓婁紶 + * @param file MDM娑夊瘑缃戝鍑烘枃浠� + * @return + */ + public List<MdmProgramImportVO> mdmImportUpload(MultipartFile file) { + List<MdmProgramImportVO> 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<MdmProgramImportVO> parseMdmZipFromByteArray(byte[] zipData) throws IOException { + List<MdmProgramImportVO> list = new ArrayList<>(); + Map<String,String> fileMd5Map = new HashMap<>(); + Map<String,MdmProgramImportVO> fileDataMap = new HashMap<>(); + try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(zipData); + ZipFile zipFile = new ZipFile(channel)) { + + ZipArchiveEntry entry; + Enumeration<ZipArchiveEntry> entries = zipFile.getEntries(); + while (entries.hasMoreElements()) { + entry = entries.nextElement(); + + 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); + MdmProgramImportVO d = new MdmProgramImportVO(); + d.setName(jsonObject.getString("name")); + d.setId(jsonObject.getLong("id")); + d.setCode(jsonObject.getString("code")); + d.setDescription(jsonObject.getString("description")); + d.setCategory(jsonObject.getString("category")); + d.setBindNcNodeId(jsonObject.getLong("bindNcNodeId")); + d.setIsLastEdition(jsonObject.getInteger("isLastEdition")); + d.setIsLocked(jsonObject.getInteger("isLocked")); + d.setIsTest(jsonObject.getInteger("isTest")); + d.setMachineCode(jsonObject.getString("machineCode")); + d.setNcNodeId(jsonObject.getLong("ncNodeId")); + d.setPartNo(jsonObject.getString("partNo")); + d.setProcessEdition(jsonObject.getString("processEdition")); + + fileDataMap.put(d.getName(),d); + + list.add(d); + } + + } + }else{ + try (InputStream inputStream = zipFile.getInputStream(entry)) { + fileMd5Map.put(entryName,DigestUtils.md5Hex(inputStream));//鑾峰彇鏂囦欢MD5 + } + + } + + } + + } + + } + //璁剧疆md5鍊� + fileDataMap.forEach((k,v)->{ + if(fileMd5Map.containsKey(k)){ + v.setMd5(fileMd5Map.get(k)); + } + }); + return list; + } + + + /** + * 鍏ュ簱mdm娑夊瘑缃戞枃浠� + * @param ids id鍒楄〃閫楀彿鍒嗛殧 + * @return + */ + public void mdmFileAccept(String ids) { + /* + List<Long> idList = Func.toLongList(ids); + List<NcProgram> 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); + + } + //鐩存帴鍏ュ簱锛屾棤娴佺▼ + */ + + } +} -- Gitblit v1.9.3