yangys
2025-08-11 b5b668d2728665ca05d15be8862ceb0a2796fc67
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
@@ -9,6 +9,7 @@
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.log.exception.ServiceException;
import org.springblade.core.mp.base.BizEntity;
import org.springblade.core.mp.base.BizServiceImpl;
import org.springblade.core.oss.OssTemplate;
@@ -39,7 +40,7 @@
/**
 * MDM程序导入(工控网功能)
 *
 * 目前工控网展现形式未定,暂时实现暂停
 * @author yangys
 */
@Slf4j
@@ -69,8 +70,6 @@
         //设置一个缓存,2小时过期
         bladeRedis.setEx(getFileKey(),bfile.getName(), Duration.ofHours(2));
         String pkgFileName = bladeRedis.get(getFileKey());
         //String fileName = file.getOriginalFilename();
         //InputStream zipFileInputStream = FileExchangeUtil.convertFileToZip(file.getInputStream());
         InputStream zipFileInputStream = file.getInputStream();//test
         byte[] bytes = FileUtil.copyToByteArray(zipFileInputStream);
@@ -78,37 +77,12 @@
      } catch (IOException e) {
         log.error("上传dnc回传文件失败",e);
         list = Collections.emptyList();
         log.error("导入涉密网摆渡文件失败",e);
         throw new ServiceException("解析DNC回传数据失败");
      }
      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<>();
@@ -125,41 +99,7 @@
            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<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.setDrawingNo(jsonObject.getString("drawingNo"));
                        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
                  }
               }
            }
@@ -189,21 +129,6 @@
      //
      updateProgramFile(pkgFileName,idList);
      List<NcProgram> progList = ncProgramService.listByIds(idList);
      NcProgramExchange exchange;
      for(NcProgram prog:progList){
         exchange = new NcProgramExchange();
         exchange.setName(prog.getName());
         exchange.setExchangeType(2);//回传
         exchange.setNcProgramId(prog.getId());
         this.save(exchange);
      }
   }
   /**
@@ -229,112 +154,11 @@
            String entryName = entry.getName();
            if (!entry.isDirectory()) {
               if(entryName.equals(NcProgramExportDNCService.PROGRAM_JSON_FILE)){
                  try (InputStream insJson = zipFile.getInputStream(entry)) {
                     String jsonStr = IoUtil.readToString(insJson);
                     JSONArray jsonArray = JSONArray.parseArray(jsonStr);
                     for(int i=0;i<jsonArray.size();i++){
                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        NcProgram d = new NcProgram();
                        d.setId(jsonObject.getLong("id"));
                        d.setName(jsonObject.getString("name"));
                        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.setDrawingNo(jsonObject.getString("drawingNo"));
                        d.setProcessEdition(jsonObject.getString("processEdition"));
                        setBaseProperties(d,jsonObject);
                        progList.add(d);
                     }
                  }
               }else if(entryName.equals(NcProgramExportDNCService.NODE_JSON_FILE)){
                  try (InputStream insJson = zipFile.getInputStream(entry)) {
                     String jsonStr = IoUtil.readToString(insJson);
                     JSONArray jsonArray = JSONArray.parseArray(jsonStr);
                     for (int i = 0; i < jsonArray.size(); i++) {
                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        NcNode node = new NcNode();
                        node.setId(jsonObject.getLong("id"));
                        node.setName(jsonObject.getString("name"));
                        node.setDescription(jsonObject.getString("description"));
                        node.setNodeType(jsonObject.getString("nodeType"));
                        node.setProcessName(jsonObject.getString("processName"));
                        node.setDrawingNo(jsonObject.getString("drawingNo"));
                        node.setMachineCode(jsonObject.getString("machineCode"));
                        node.setParentId(jsonObject.getLong("parentId"));
                        node.setParentIds(jsonObject.getString("parentIds"));
                        node.setIsCured(jsonObject.getInteger("isCured"));
                        setBaseProperties(node,jsonObject);
                        nodeList.add(node);
                     }
                  }
               }else if(entryName.equals(NcProgramExportDNCService.APPROVE_RECORD_JSON_FILE)){
                  try (InputStream insJson = zipFile.getInputStream(entry)) {
                     String jsonStr = IoUtil.readToString(insJson);
                     JSONArray jsonArray = JSONArray.parseArray(jsonStr);
                     for (int i = 0; i < jsonArray.size(); i++) {
                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        ApproveRecord record = new ApproveRecord();
                        record.setId(jsonObject.getLong("id"));
                        record.setNcProgramId(jsonObject.getLong("ncProgramId"));
                        record.setUserId(jsonObject.getLong("userId"));
                        record.setUserNickname(jsonObject.getString("userNickname"));
                        record.setOperateResult(jsonObject.getString("operateResult"));
                        record.setOperateTime(jsonObject.getDate("operateTime"));
                        setBaseProperties(record,jsonObject);
                        recordList.add(record);
                     }
                  }
               }
            }
         }
      }
      try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(bytes);
          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() && !entryName.equals(NcProgramExportDNCService.PROGRAM_JSON_FILE)) {
               for(NcProgram prog:progList){
                  if(prog.getName().equals(entryName)){
                     try (InputStream ncFileStream = zipFile.getInputStream(entry)) {
                        BladeFile bfile = this.ossTemplate.putFile(prog.getName(),ncFileStream);
                        prog.setOssName(bfile.getName());
                        prog.setUrl(bfile.getLink());
                     }
                     break;
                  }
               }
            }
         }
      }
      for(NcNode node:nodeList){
         NcNode nodeTemp = this.ncNodeService.getById(node.getId());