yangys
2025-09-22 0bdfd76339bb58be09927b8c2fe268175c3a7cc8
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java
@@ -3,6 +3,7 @@
import com.qiniu.util.IOUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.tool.utils.Func;
import org.springblade.mdm.basesetting.machine.entity.Machine;
@@ -73,13 +74,13 @@
            //非文本
            excepType = MachineFile.EXCEPTION_NOT_TEXT;
         }else{
            Matcher matcher = RegExpConstants.PROGRAM_FILE_PATTERN.matcher(machineFile.getName());
            boolean filenameValid = matcher.find();
            //Matcher matcher = RegExpConstants.PROGRAM_FILE_PATTERN.matcher(machineFile.getName());
            ProgramNameVO progNameVO =  ProgramFileNameParser.parseProgramName(machineFile.getName());
            boolean filenameValid = progNameVO.isValidFilename();
            if(!filenameValid){
               excepType = MachineFile.EXCEPTION_BAD_FILENAME;
            }else {
               ProgramNameVO progNameVO =  ProgramFileNameParser.parseProgramName(machineFile.getName());
               String prefix = progNameVO.logicProgramName()+"-";
               long matchCount = allFilesInDir.stream().filter(file -> file.getName().startsWith(prefix)).count();
               if(matchCount != progNameVO.getSegmentCount()){//文件段数缺失
@@ -102,6 +103,8 @@
                     if(progNameVO.getSegmentCount() != sendProgNameVO.getSegmentCount()){
                        //段数不匹配下发记录
                        excepType = MachineFile.EXCEPTION_NOT_MATCH_SEND_SEG_COUNT;
                     }else if(!StringUtils.equals(sendProgNameVO.getLgPart(),progNameVO.getLgPart())){
                        excepType = MachineFile.EXCEPTION_NOT_MATCH_SEND_LG;
                     }
                  }else{
                     matchSendRecord = false;
@@ -109,6 +112,7 @@
                  if(!matchSendRecord){//如果文件未下发过,查看是否有现场编程记录
                     byteStream.reset();
                     //TODO 下面这些应该都没有,因为时现场编程
                     String planStatusLine = AnnotationUtil.removeAnnotation(machine.getControlSystem(),FileContentUtil.readLineAt(byteStream,annoProps.getStatusLineIndex()),programAnnotationService.getAnnotionDictList());
                     String lgNo;//更改单号
@@ -123,7 +127,7 @@
                        .eq(ProgramOnMachine::getDrawingNo,progNameVO.getDrawingNo())
                        .eq(ProgramOnMachine::getProcessNo,progNameVO.getProcessNo())
                        .eq(ProgramOnMachine::getProcessEdition,progNameVO.getProcessEdition())
                        .eq(lgNo != null,ProgramOnMachine::getDeviation,lgNo)//临时更改单匹配
                        .eq(lgNo != null,ProgramOnMachine::getDeviation,lgNo)//TODO 临时更改单序号匹配
                        .eq(ProgramOnMachine::getMachineCode,machineFile.getMachineCode()).count();