|
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.core.tool.utils.DateUtil;
|
import org.springblade.mdm.machinefile.entity.MachineAcceptedFile;
|
import org.springblade.mdm.program.entity.NcProgramExchange;
|
import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
|
import org.springblade.mdm.utils.ProgramFileNameParser;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
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 machineAcceptedService;
|
private final OssTemplate ossTemplate;
|
|
|
/**
|
* 导出到涉密网
|
* @param acceptedFileIds
|
* @param os
|
* @throws IOException
|
*/
|
@Transactional
|
public void exportToInner(List<Long> acceptedFileIds, ServletOutputStream os) throws IOException {
|
|
try (ZipOutputStream zipOut = new ZipOutputStream(os);) {//os
|
|
List<MachineAcceptedFile> acceptedFiles = machineAcceptedService.lambdaQuery().in(MachineAcceptedFile::getId,acceptedFileIds).list();
|
Map<String,List<MachineAcceptedFile>> map = acceptedFiles.stream()
|
.collect(Collectors.groupingBy(s -> ProgramFileNameParser.parseProgramName(s.getName()).logicProgramName()));
|
|
List<MachineAcceptedFile> exportedFiles = new ArrayList<>();
|
for (Map.Entry<String, List<MachineAcceptedFile>> entry : map.entrySet()) {
|
String programName = entry.getKey();
|
List<MachineAcceptedFile> acceptedFileList = entry.getValue();
|
for (MachineAcceptedFile acceptedFile : acceptedFileList) {
|
try(InputStream ins = ossTemplate.statFileStream(acceptedFile.getOssName()) ) {
|
addInputStreamToZip(zipOut,ins , programName + "/" + acceptedFile.getName());
|
}
|
acceptedFile.setExportTime(DateUtil.now());
|
}
|
|
}
|
|
machineAcceptedService.updateBatchById(acceptedFiles);
|
}
|
|
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();
|
}
|
}
|