yangys
2025-09-09 fc3ae614a4c5a2a7cdb9029ecfc4372eb1c28b18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
 
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();
    }
}