|
package org.springblade.mdm.machinefile.service;
|
|
import jakarta.servlet.ServletOutputStream;
|
import lombok.AllArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springblade.core.mp.base.BizServiceImpl;
|
import org.springblade.core.oss.OssTemplate;
|
import org.springblade.mdm.machinefile.entity.MachineFile;
|
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.NcProgramService;
|
import org.springblade.mdm.utils.ProgramFileNameParser;
|
import org.springframework.stereotype.Service;
|
|
import java.io.IOException;
|
import java.io.InputStream;
|
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<NcProgramExchangeMapper, NcProgramExchange> {
|
private final MachineAcceptedFileService 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<Long> machineFileIds, ServletOutputStream os) throws IOException {
|
//FileOutputStream fos = new FileOutputStream("d:/exportDnc.zip");
|
try (ZipOutputStream zipOut = new ZipOutputStream(os);) {//os
|
|
List<MachineFile> machineFiles = machineFileService.lambdaQuery().in(MachineFile::getId,machineFileIds).list();
|
Map<String,List<MachineFile>> map = machineFiles.stream()
|
.collect(Collectors.groupingBy(s -> ProgramFileNameParser.parseProgramName(s.getName()).logicProgramName()));
|
|
for (Map.Entry<String, List<MachineFile>> entry : map.entrySet()) {
|
String programName = entry.getKey();
|
List<MachineFile> 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();
|
}
|
}
|