yangys
2025-09-18 79e81a02076cdd1e828eb06029cd51eb37522f42
首页下载问题修复
已修改11个文件
131 ■■■■■ 文件已修改
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/NormalFinishDataHandler.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/NcProgramExportInnerService.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcNodeController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcNodeHisController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeHisService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AbstractProcessor.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProcessor.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/DefaultProcessor.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/FanucProcessor.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/test/MyTestController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/NormalFinishDataHandler.java
@@ -17,11 +17,9 @@
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.service.NcNodeAutoCreateService;
import org.springblade.mdm.program.service.NcNodeService;
import org.springblade.mdm.program.service.NcProgramApprovedService;
import org.springblade.mdm.program.service.ProgramAnnotationService;
import org.springblade.mdm.program.service.programannotation.*;
import org.springblade.mdm.utils.ProgramFileNameParser;
import org.springblade.system.pojo.entity.DictBiz;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -188,7 +186,7 @@
            if(annoProps == null){
                annoProps = AnnotationProperties.getDefault();
            }*/
            InputStream finishedStream = annoProcessor.setFilenameAnnotation(filename,byteInputStream);
            InputStream finishedStream = annoProcessor.putFilenameAnnotation(filename,byteInputStream);
            //InputStream finishedStream = AnnotationUtil.setAnnotationAndGetInputStream(byteInputStream, "GH", annoProps.getStatusLineIndex(), controlSystem, annoDictList);
            try(finishedStream) {
                finishedStream.reset();
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/NcProgramExportInnerService.java
@@ -4,16 +4,25 @@
import jakarta.servlet.ServletOutputStream;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.mp.base.BizServiceImpl;
import org.springblade.core.oss.OssTemplate;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.mdm.basesetting.machine.entity.Machine;
import org.springblade.mdm.basesetting.machine.service.MachineService;
import org.springblade.mdm.machinefile.entity.MachineAcceptedFile;
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.ProgramAnnotationService;
import org.springblade.mdm.program.service.programannotation.*;
import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.mdm.utils.ProgramFileNameParser;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
@@ -32,8 +41,10 @@
public class NcProgramExportInnerService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> {
    private final MachineAcceptedFileService machineAcceptedService;
    private final OssTemplate ossTemplate;
    private final MachineFileService machineFileService;
    private final MachineService machineService;
    private final MachineAnnotationConfig annoConfig;
    private final ProgramAnnotationService programAnnotationService;
    /**
     * 导出到涉密网
     * @param acceptedFileIds
@@ -49,13 +60,13 @@
            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());
                        MachineFile machineFile = machineFileService.getById(acceptedFile.getMachineFileId());
                        addInputStreamToZip(zipOut,ins , programName + "/" + acceptedFile.getName(),acceptedFile.getName(),machineFile.getMachineCode());
                    }
                    acceptedFile.setExportTime(DateUtil.now());
                }
@@ -69,21 +80,42 @@
    }
    public void addInputStreamToZip(ZipOutputStream zipOut, InputStream inputStream, String entryName)
    public void addInputStreamToZip(ZipOutputStream zipOut, InputStream inputStream, String entryName,String filename,String machineCode)
        throws IOException {
        // 创建新的 ZIP 条目
        ZipEntry zipEntry = new ZipEntry(entryName);
        zipOut.putNextEntry(zipEntry);
        InputStream insAdded = setAnnotations(inputStream,filename,machineCode);
        // 将输入流写入 ZIP 输出流
        byte[] buffer = new byte[1024];
        int length;
        while ((length = inputStream.read(buffer)) >= 0) {
        while ((length = insAdded.read(buffer)) >= 0) {
            zipOut.write(buffer, 0, length);
        }
        // 关闭当前条目
        zipOut.closeEntry();
    }
    InputStream setAnnotations(InputStream inputStream,String filename,String machineCode) throws IOException {
        Machine machine = this.machineService.getByCode(machineCode);
        AnnotationProcessor annoProcessor = ProcessorHelper.getProcessor(machine.getControlSystem(),annoConfig);
        AnnotationData annoData = new AnnotationData();
        annoData.setFilename(filename);
        annoData.setSendPath(machine.getProgSendDir());
        AnnotationProperties annoProps = annoProcessor.getAnnotationProperties();
        ByteArrayInputStream bais = new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
        String statusLine = FileContentUtil.readLineAt(bais,annoProps.getStatusLineIndex());
        String status = programAnnotationService.removeAnnotation(machine.getControlSystem(),statusLine);
        if(StringUtils.equalsAny(status,"SQ","GH","PL")){
        }
        bais.reset();
        annoData.setProgramStatus("3");
        return annoProcessor.putAnnotation(annoData,bais);
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcNodeController.java
@@ -187,17 +187,5 @@
    @GetMapping("/download-by-nodeid")
    @Operation(summary = "下载节点对应的文件", description = "下载节点对应的文件")
    public void downloadByNodeId(@Parameter(description = "节点id") Long nodeId, HttpServletResponse response) throws IOException {
        NcNode ncnode = ncNodeService.getById(nodeId);
        if(ncnode.getFlowProgramFileId() != null) {
            flowProgramFileService.download(ncnode.getFlowProgramFileId(),response);
        }else{
            log.error("非文件节点");
            throw new ServiceException("节点无文件id");
        }
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcNodeHisController.java
@@ -98,4 +98,18 @@
            return R.fail(e.getMessage());
        }
    }
    @GetMapping("/download-by-nodeid")
    @Operation(summary = "下载节点对应的文件", description = "下载节点对应的文件")
    public void downloadByNodeId(@Parameter(description = "节点id") Long nodeId, HttpServletResponse response) throws IOException {
        NcNodeHis node = nodeHisService.getById(nodeId);
        if(node.getFlowProgramFileId() != null) {
            flowProgramFileService.download(node.getFlowProgramFileId(),response);
        }else{
            log.error("非文件节点");
            throw new ServiceException("节点无文件id");
        }
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeHisService.java
@@ -37,7 +37,7 @@
     * @param time
     */
    public void mergeNodeToHisGeTime(Date time) {
        Date okTime = DateUtil.minusSeconds(time,10);
        Date okTime = DateUtil.minusSeconds(time,10);//避免mysql数据库时间不精确导致不能同步
        List<NcNode> nodes = ncNodeService.lambdaQuery().ge(NcNode::getUpdateTime,okTime)
            .in(NcNode::getNodeType,NcNode.TYPE_PROGRAM_PACKAGE,NcNode.TYPE_PROGRAM_FILE).list();
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
@@ -26,7 +26,6 @@
import org.springblade.mdm.program.service.programannotation.MachineAnnotationConfig;
import org.springblade.mdm.program.service.programannotation.ProcessorHelper;
import org.springblade.system.feign.IDictClient;
import org.springblade.system.pojo.entity.DictBiz;
import org.springframework.stereotype.Service;
import java.io.*;
@@ -131,7 +130,7 @@
                annoData.setProgramStatus(status);
                annoData.setDeviation(programPackageNode.getDeviation());
                annoData.setFilename(programFile.getName());
                InputStream addedInsFinal = annoProcessor.setAnnotation(annoData,inputStream);
                InputStream addedInsFinal = annoProcessor.putAnnotation(annoData,inputStream);
                addedInsFinal.reset();
                /*
                InputStream addedInsFinal;
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AbstractProcessor.java
@@ -20,7 +20,7 @@
    protected AnnotationProperties annotationProperties;
    @Override
    public InputStream setFilenameAnnotation(String fileName, InputStream inputStream) throws IOException {
    public InputStream putFilenameAnnotation(String fileName, InputStream inputStream) throws IOException {
        List<DictBiz> annoDicts = programAnnotationService.getAnnotionDictList();
        ByteArrayInputStream bais = new ByteArrayInputStream(com.qiniu.util.IOUtils.toByteArray(inputStream));
@@ -39,7 +39,7 @@
    }
    @Override
    public InputStream setAnnotation(AnnotationData annoData,InputStream inputStream) throws IOException {
    public InputStream putAnnotation(AnnotationData annoData, InputStream inputStream) throws IOException {
        List<DictBiz> annoDicts = programAnnotationService.getAnnotionDictList();
        InputStream finishedStream;
@@ -82,6 +82,10 @@
        this.annotationProperties= annotationProperties;
    }
    @Override
    public AnnotationProperties getAnnotationProperties(){
        return annotationProperties;
    }
    public abstract String getControlSystem();
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProcessor.java
@@ -1,15 +1,7 @@
package org.springblade.mdm.program.service.programannotation;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.mdm.program.service.ProgramAnnotationService;
import org.springblade.mdm.program.vo.ProgramAnnotation;
import org.springblade.system.pojo.entity.DictBiz;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Optional;
public interface AnnotationProcessor {
@@ -17,7 +9,10 @@
    void setControlSystem(String controlSystemDictVal);
    void setAnnotationProperties(AnnotationProperties annotationProperties);
    String getControlSystem();
    InputStream setAnnotation(AnnotationData annoData,InputStream inputStream) throws IOException;
    InputStream putAnnotation(AnnotationData annoData, InputStream inputStream) throws IOException;
    InputStream setFilenameAnnotation(String programName,InputStream inputStream) throws IOException;
    InputStream putFilenameAnnotation(String programName, InputStream inputStream) throws IOException;
    AnnotationProperties getAnnotationProperties();
    //InputStream puttSendPathAnnotation(String programName, InputStream inputStream) throws IOException;
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/DefaultProcessor.java
@@ -1,17 +1,11 @@
package org.springblade.mdm.program.service.programannotation;
import com.qiniu.util.IOUtils;
import org.apache.commons.io.FilenameUtils;
import org.springblade.mdm.program.service.ProgramAnnotationService;
import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.system.pojo.entity.DictBiz;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
@Component("defaultProcessor")
@@ -23,10 +17,10 @@
    @Override
    public InputStream setAnnotation(AnnotationData annoData, InputStream inputStream) throws IOException {
        InputStream insAfter = super.setFilenameAnnotation(annoData.getFilename(),inputStream);
    public InputStream putAnnotation(AnnotationData annoData, InputStream inputStream) throws IOException {
        InputStream insAfter = super.putFilenameAnnotation(annoData.getFilename(),inputStream);
        return super.setAnnotation(annoData, insAfter);
        return super.putAnnotation(annoData, insAfter);
    }
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/FanucProcessor.java
@@ -22,7 +22,7 @@
    private Pattern PATTERN = Pattern.compile("^[oO]\\d{4}");
    private final int O_LINE = 1;
    @Override
    public InputStream setAnnotation(AnnotationData annoData,InputStream inputStream) throws IOException {
    public InputStream putAnnotation(AnnotationData annoData, InputStream inputStream) throws IOException {
        //在O0001 这种文字后面增加文件名(不带扩展名)
        ByteArrayInputStream bais = new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
        String line = FileContentUtil.readLineAt(bais,O_LINE);
@@ -36,7 +36,7 @@
        }else{
            ins1 = bais;
        }
        return super.setAnnotation(annoData, ins1);
        return super.putAnnotation(annoData, ins1);
    }
blade-service/blade-mdm/src/main/java/org/springblade/mdm/test/MyTestController.java
@@ -16,6 +16,7 @@
import org.springblade.mdm.machinefile.entity.MachineFile;
import org.springblade.mdm.machinefile.service.MachineFileScanService;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.service.NcNodeHisService;
import org.springblade.mdm.program.service.NcNodeService;
import org.springblade.mdm.program.service.ProgramAnnotationService;
import org.springblade.mdm.task.InternalEmailNotifyTask;
@@ -32,6 +33,7 @@
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
@Slf4j
@@ -57,6 +59,9 @@
    private WIthdrawService withdrawService;
    @Autowired
    private InternalEmailNotifyTask notifyTask;
    @Autowired
    private NcNodeHisService nodeHisService;
    /**
     * 新增
     */
@@ -127,4 +132,10 @@
        SOAPException s;
        notifyTask.execute();
    }
    @GetMapping("/movehis")
    public void moveHis(Date time){
        //format:?time=2025-09-16%2010:11:10
        nodeHisService.mergeNodeToHisGeTime(time);
    }
}