package org.springblade.mdm.machineback.service; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import jakarta.servlet.ServletOutputStream; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springblade.core.mp.base.BizEntity; import org.springblade.core.mp.base.BizServiceImpl; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.oss.OssTemplate; import org.springblade.core.tool.utils.Func; import org.springblade.mdm.flow.entity.ApproveRecord; import org.springblade.mdm.flow.service.ApproveRecordService; import org.springblade.mdm.gkw.programnode.entity.MachineFile; import org.springblade.mdm.gkw.programnode.service.MachineFileService; import org.springblade.mdm.machineback.entity.MachineBackFile; import org.springblade.mdm.program.entity.NcNode; import org.springblade.mdm.program.entity.NcProgram; import org.springblade.mdm.program.entity.NcProgramApproved; import org.springblade.mdm.program.entity.NcProgramExchange; import org.springblade.mdm.program.mapper.NcProgramExchangeMapper; import org.springblade.mdm.program.service.NcNodeService; import org.springblade.mdm.program.service.NcProgramApprovedService; import org.springblade.mdm.program.service.NcProgramService; import org.springblade.mdm.program.vo.DncSendBackData; import org.springblade.mdm.utils.ProgramFileNameParser; import org.springframework.stereotype.Service; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * 下发/回传程序统计 * * @author yangys */ @Slf4j @Service @AllArgsConstructor public class NcProgramExportInnerService extends BizServiceImpl { private final MachineBackFileService machineBackFileService; private final NcProgramService progService; private final MachineFileService machineFileService; private final NcNodeService ncNodeService; private final OssTemplate ossTemplate; public static final String PROGRAM_JSON_FILE = "exp_mdm_nc_program.json"; public static final String NODE_JSON_FILE = "exp_mdm_nc_node.json"; public static final String APPROVE_RECORD_JSON_FILE = "exp_mdm_approve_record.json"; /** * 导出到涉密网 * @param machineFileIds * @param os * @throws IOException */ public void exportToInner(List machineFileIds, ServletOutputStream os) throws IOException { //FileOutputStream fos = new FileOutputStream("d:/exportDnc.zip"); try (ZipOutputStream zipOut = new ZipOutputStream(os);) {//os List macineFiles = machineFileService.lambdaQuery().in(MachineFile::getId,machineFileIds).list(); Map> map = macineFiles.stream() .collect(Collectors.groupingBy(s -> ProgramFileNameParser.parseProgramName(s.getName()).logicProgramName())); for (Map.Entry> entry : map.entrySet()) { String programName = entry.getKey(); List progMachineFiles = entry.getValue(); for (MachineFile mf : progMachineFiles) { try(InputStream ins = machineFileService.getInputStream(mf)) { addInputStreamToZip(zipOut,ins , programName + "/" + mf.getName()); } } } } os.close(); } public void addInputStreamToZip(ZipOutputStream zipOut, InputStream inputStream, String entryName) throws IOException { // 创建新的 ZIP 条目 ZipEntry zipEntry = new ZipEntry(entryName); zipOut.putNextEntry(zipEntry); // 将输入流写入 ZIP 输出流 byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) >= 0) { zipOut.write(buffer, 0, length); } // 关闭当前条目 zipOut.closeEntry(); } }