yangys
2025-09-20 fcee672452c02cc29e0e17ebc27a8c51698c6d0d
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java
@@ -1,8 +1,10 @@
package org.springblade.mdm.machinefile.service;
import com.qiniu.util.IOUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.tool.utils.Func;
import org.springblade.mdm.basesetting.machine.entity.Machine;
import org.springblade.mdm.basesetting.machine.service.MachineService;
import org.springblade.mdm.commons.contants.RegExpConstants;
@@ -10,8 +12,10 @@
import org.springblade.mdm.gkw.programnode.vo.ProgramNameVO;
import org.springblade.mdm.machinefile.entity.FileSendRecord;
import org.springblade.mdm.machinefile.entity.MachineFile;
import org.springblade.mdm.program.entity.ProgramOnMachine;
import org.springblade.mdm.program.service.ProgramAnnotationService;
import org.springblade.mdm.program.service.programannotation.AnnotationUtil;
import org.springblade.mdm.program.service.ProgramOnMachineService;
import org.springblade.mdm.program.service.programannotation.*;
import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.mdm.utils.ProgramFileNameParser;
import org.springblade.system.pojo.entity.DictBiz;
@@ -20,10 +24,7 @@
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -42,9 +43,14 @@
   @Autowired
   private MachineService machineService;
   @Autowired
   private ParamService paramService;
   private ProgramOnMachineService programOnMachineService;
   @Autowired
   private FileSendRecordService fileSendRecordService;
   @Autowired
   private AnnotationProcessorHelper annoProcessHelper;
   @Autowired
   private ProgramAnnotationService programAnnotationService;
   /**
    * 文件合法性检查
    * @param machineFile
@@ -58,9 +64,12 @@
      if(!checkFilePath.toFile().exists()){
         return;
      }
      AnnotationProperties annoProps = AnnotationProperties.getDefault();
      try(InputStream fileIns = Files.newInputStream(checkFilePath);) {
         int excepType = MachineFile.EXCEPTION_OK;
         if(!FileContentUtil.isTextFile(fileIns)){
         ByteArrayInputStream byteStream = new ByteArrayInputStream(IOUtils.toByteArray(fileIns));
         if(!FileContentUtil.isTextFile(byteStream)){
            //非文本
            excepType = MachineFile.EXCEPTION_NOT_TEXT;
         }else{
@@ -89,10 +98,40 @@
                     FileSendRecord sendFile = optFile.get();
                     ProgramNameVO sendProgNameVO =  ProgramFileNameParser.parseProgramName(sendFile.getName());
                     if(progNameVO.getSegmentCount() != sendProgNameVO.getSegmentCount()){
                        //段数不匹配
                        //段数不匹配下发记录
                        excepType = MachineFile.EXCEPTION_NOT_MATCH_SEND;
                     }
                  }
                  if(excepType == MachineFile.EXCEPTION_NOT_MATCH_SEND){
                     //如果文件未下发过,查看是否有现场编程记录
                     byteStream.reset();
                     //AnnotationProcessor processor = annoProcessHelper.getProcessor(machine.getControlSystem());
                     String planStatusLine = AnnotationUtil.removeAnnotation(machine.getControlSystem(),FileContentUtil.readLineAt(byteStream,annoProps.getStatusLineIndex()),programAnnotationService.getAnnotionDictList());
                     String lgNo;//更改单号
                     if(AnnotationUtil.LG.equals(planStatusLine)) {//是更改单
                        String lgLine = FileContentUtil.readLineAt(byteStream, annoProps.getDeviationLineIndex());
                        lgNo = AnnotationUtil.removeAnnotation(machine.getControlSystem(), lgLine, programAnnotationService.getAnnotionDictList());
                     }else{
                        lgNo = null;
                     }
                     long progOnMachineCount = programOnMachineService.lambdaQuery()
                        .eq(ProgramOnMachine::getDrawingNo,progNameVO.getDrawingNo())
                        .eq(ProgramOnMachine::getProcessNo,progNameVO.getProcessNo())
                        .eq(ProgramOnMachine::getProcessEdition,progNameVO.getProcessEdition())
                        .eq(lgNo != null,ProgramOnMachine::getDeviation,lgNo)//临时更改单匹配
                        .eq(ProgramOnMachine::getMachineCode,machineFile.getMachineCode()).count();
                     if(progOnMachineCount > 0){//有现场编程记录,检查通过
                        excepType = MachineFile.EXCEPTION_OK;
                     }
                  }
               }
            }
         }