yangys
2025-09-20 6b7db6b11ebcc2e8e1eff86443e77fe63e5d8080
优化程序名解析
已添加1个文件
已修改8个文件
142 ■■■■ 文件已修改
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/RegExpConstants.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/vo/ProgramNameVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineFile.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineFileMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/utils/ProgramFileNameParser.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/test/java/org/springblade/mdm/commons/contants/RegExpConstantsTest.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/test/java/org/springblade/mdm/program/service/programannotation/FanucProcessorTest.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/test/java/org/springblade/mdm/utils/ProgramFileNameParserTest.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/RegExpConstants.java
@@ -7,8 +7,8 @@
    /**
     * ç¨‹åºæ–‡ä»¶å æ­£åˆ™
     */
    public static final Pattern PROGRAM_FILE_PATTERN = Pattern.compile("^[0-9a-zA-Z_\\-]+\\-[0-9a-zA-Z]+-[0-9a-zA-Z]+\\-\\d+\\-\\d+\\.*[a-zA-Z]*$");
    public static final Pattern PROGRAM_FILE_PATTERN = Pattern.compile("^([\\w\\-]+)-([0-9]+)-([0-9a-zA-Z]+)-(\\d+)-(\\d+)-?([Pp]\\d*)?(\\.*[a-zA-Z]*)$");
    //public static final Pattern PROGRAM_PACKAGE_PATTERN = Pattern.compile("[\\w\\-]+\\-\\w+\\-\\w+");
    public static final Pattern PROGRAM_PACKAGE_PATTERN = Pattern.compile("([\\w\\-]+)\\-\\w+\\-\\w+");
    public static final Pattern PROGRAM_PACKAGE_PATTERN = Pattern.compile("([\\w\\-]+)-[0-9a-zA-Z]+-[0-9a-zA-Z]+");
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/gkw/programnode/vo/ProgramNameVO.java
@@ -31,9 +31,9 @@
    private int segmentNo;
    /**
     * åç¦»å•部分: P1,P2等
     * ä¸´æ—¶æ›´æ”¹å•部分: P1,P2等
     */
    private String pldPart;
    private String lgPart;
    public String logicProgramName(){
        return this.drawingNo+"-"+this.processNo+"-"+processEdition;
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineFile.java
@@ -81,8 +81,12 @@
    /**
     * æ–‡ä»¶å¼‚常类型:文件段数与下发记录不匹配(车床/现场编制除外)
     */
    public static final int EXCEPTION_NOT_MATCH_SEND = 3;
    public static final int EXCEPTION_NOT_MATCH_SEND_SEG_COUNT = 4;
    /**
     * ä¸åŒ¹é…ä¸‹å‘记录(试切下发 ã€ çŽ°åœºç¼–ç¨‹ä¸‹å‘ï¼‰
     */
    public static final int EXCEPTION_NOT_MATCH_RECORD = 5;
    /**
     * æ–‡ä»¶å
@@ -172,10 +176,11 @@
            return "正常";
        }
        return switch (exceptionType) {
            case 1 -> "非文本";
            case 2 -> "文件名格式错误";
            case 3 -> "文件确失";
            case 4 -> "段数与下发记录不匹配";
            case EXCEPTION_NOT_TEXT -> "非文本";
            case EXCEPTION_BAD_FILENAME -> "文件名格式错误";
            case EXCEPTION_LOST_FILES -> "文件确失";
            case EXCEPTION_NOT_MATCH_SEND_SEG_COUNT -> "段数与下发记录不匹配";
            case EXCEPTION_NOT_MATCH_RECORD -> "无记录匹配";//试切下发,现场编程都不匹配
            default -> "正常";
        };
    }
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/mapper/MachineFileMapper.xml
@@ -95,7 +95,7 @@
        select f.id,f.name,f.machine_code,f.file_create_time, f.file_modify_time,f.md5,f.file_size,f.exception_type,f.create_time,f.update_time
        from mdm_machine_file f join mdm_machine m on f.machine_code=m.code and m.is_deleted=0
        <where>
            f.dir_type='REC' and f.is_deleted=0 and f.exception_type is not null and f.exception_type &lt;&gt; 0
            f.status &lt;&gt; 4 and f.dir_type='REC' and f.is_deleted=0 and f.exception_type is not null and f.exception_type &lt;&gt; 0
            <if test="query.name!=null and query.name!=''">
                and f.name like CONCAT('%', #{query.name,jdbcType=VARCHAR},'%')
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java
@@ -93,22 +93,22 @@
                            .eq(FileSendRecord::getMachineCode,machineFile.getMachineCode())
                            .likeRight(FileSendRecord::getName,prefix).between(FileSendRecord::getCreateTime,beginTime,endTime).oneOpt();
                        boolean matchSendRecord;//文件是否有下发记录
                        if(optFile.isPresent()){
                            matchSendRecord = true;
                            //确实下发过,比对总段数是否相同
                            FileSendRecord sendFile = optFile.get();
                            ProgramNameVO sendProgNameVO =  ProgramFileNameParser.parseProgramName(sendFile.getName());
                            if(progNameVO.getSegmentCount() != sendProgNameVO.getSegmentCount()){
                                //段数不匹配下发记录
                                excepType = MachineFile.EXCEPTION_NOT_MATCH_SEND;
                                excepType = MachineFile.EXCEPTION_NOT_MATCH_SEND_SEG_COUNT;
                            }
                        }else{
                            matchSendRecord = false;
                        }
                        if(excepType == MachineFile.EXCEPTION_NOT_MATCH_SEND){
                            //如果文件未下发过,查看是否有现场编程记录
                        if(!matchSendRecord){//如果文件未下发过,查看是否有现场编程记录
                            byteStream.reset();
                            //AnnotationProcessor processor = annoProcessHelper.getProcessor(machine.getControlSystem());
                            String planStatusLine = AnnotationUtil.removeAnnotation(machine.getControlSystem(),FileContentUtil.readLineAt(byteStream,annoProps.getStatusLineIndex()),programAnnotationService.getAnnotionDictList());
                            String lgNo;//更改单号
@@ -127,8 +127,8 @@
                                .eq(ProgramOnMachine::getMachineCode,machineFile.getMachineCode()).count();
                            if(progOnMachineCount > 0){//有现场编程记录,检查通过
                                excepType = MachineFile.EXCEPTION_OK;
                            if(progOnMachineCount == 0){//无现场编程记录
                                excepType = MachineFile.EXCEPTION_NOT_MATCH_RECORD;
                            }
                        }
blade-service/blade-mdm/src/main/java/org/springblade/mdm/utils/ProgramFileNameParser.java
@@ -4,9 +4,12 @@
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.tool.api.IResultCode;
import org.springblade.core.tool.utils.Func;
import org.springblade.mdm.commons.contants.RegExpConstants;
import org.springblade.mdm.flow.service.FlowProgramProperties;
import org.springblade.mdm.gkw.programnode.vo.ProgramNameVO;
import org.springblade.mdm.program.service.NcNodeService;
import java.util.regex.Matcher;
public class ProgramFileNameParser {
    /**
@@ -15,55 +18,18 @@
     */
    public static ProgramNameVO parseProgramName(String filename){
        ProgramNameVO pname = new ProgramNameVO();
        int idx = filename.lastIndexOf(".");
        String tempstr = filename.substring(0,idx);//去掉扩展名
        idx = tempstr.lastIndexOf("-");
        Matcher matcher = RegExpConstants.PROGRAM_FILE_PATTERN.matcher(filename);
        if(matcher.find()){
            pname.setDrawingNo(matcher.group(1));
            pname.setProcessNo(matcher.group(2));
        if(idx != -1){
            String segNo = tempstr.substring(idx+1);
            int idx2 = StringUtils.indexOfIgnoreCase(segNo,"P");
            if(idx2!= -1){
                //带P,是偏离单号
                pname.setPldPart(segNo.substring(idx+1));
                tempstr = segNo.substring(0, idx2);//去掉偏离单部分
            }
            idx = tempstr.lastIndexOf("-");
            if(idx != -1) {
                idx = tempstr.lastIndexOf("-");
                pname.setSegmentNo(Func.toInt(segNo));
                tempstr = tempstr.substring(0,idx);
            }
        }
        idx = tempstr.lastIndexOf("-");
        if(idx != -1){
            String seg = tempstr.substring(idx+1);
            pname.setSegmentCount(Func.toInt(seg));
            tempstr = tempstr.substring(0,idx);
            pname.setProcessEdition(matcher.group(3));
            pname.setSegmentCount(Func.toInt(matcher.group(4)));
            pname.setSegmentNo(Func.toInt(matcher.group(5)));
            pname.setLgPart(matcher.group(6));
        }
        //解析工序版次
        idx = tempstr.lastIndexOf("-");
        if(idx != -1){
            String processEdition = tempstr.substring(idx+1);
            pname.setProcessEdition(processEdition);
            tempstr = tempstr.substring(0,idx);
        }
        //解析工序号
        String processNo = "";
        idx = tempstr.lastIndexOf("-");
        if(idx != -1){
            processNo = tempstr.substring(idx+1);
            tempstr = tempstr.substring(0,idx);
        }
        pname.setProcessNo(processNo);
        pname.setDrawingNo(tempstr);
        return pname;
    }
blade-service/blade-mdm/src/test/java/org/springblade/mdm/commons/contants/RegExpConstantsTest.java
@@ -65,12 +65,12 @@
        Assertions.assertTrue(m.find());
        m = RegExpConstants.PROGRAM_PACKAGE_PATTERN.matcher("CP3X296-A-B");
        m = RegExpConstants.PROGRAM_PACKAGE_PATTERN.matcher("C_P3X296-A-B");
        String drawingNo = null;
        if(m.find()) {
            drawingNo = m.group(1);
            Assertions.assertEquals("CP3X296",drawingNo );
            Assertions.assertEquals("C_P3X296",drawingNo );
        }
        String processNo = null;
blade-service/blade-mdm/src/test/java/org/springblade/mdm/program/service/programannotation/FanucProcessorTest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package org.springblade.mdm.program.service.programannotation;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.regex.Pattern;
public class FanucProcessorTest {
    @Test
    public void testMatchOline(){
        boolean oMatched = FanucProcessor.PATTERN.matcher("O1234(A-1)").matches();
        Assertions.assertTrue(oMatched);
        oMatched = FanucProcessor.PATTERN.matcher("O1234").matches();
        Assertions.assertTrue(oMatched);
    }
    @Test
    public void testGenProgramNameLine(){
        FanucProcessor p = new FanucProcessor();
        String newLine = p.genProgramNameLine("O1234","(A-1)");
        Assertions.assertEquals("O1234(A-1)", newLine);
        newLine = p.genProgramNameLine("O1001(MY zhushi)","(A-1)");
        Assertions.assertEquals("O1001(A-1)", newLine);
    }
}
blade-service/blade-mdm/src/test/java/org/springblade/mdm/utils/ProgramFileNameParserTest.java
@@ -8,15 +8,18 @@
    @Test
    public void testParseProgramName() {
        String fname = "CP1-1-1-A-2-1.txt";
        String fname = "CP1-1-1-A-2-1-P1.txt";
        ProgramNameVO vo = ProgramFileNameParser.parseProgramName(fname);
        Assertions.assertEquals("CP1-1",vo.getDrawingNo());
        Assertions.assertEquals("1",vo.getProcessNo());
        Assertions.assertEquals("A",vo.getProcessEdition());
        Assertions.assertEquals(2,vo.getSegmentCount());
        Assertions.assertEquals(1,vo.getSegmentNo());
        Assertions.assertEquals("A",vo.getProcessEdition());
        Assertions.assertEquals("1",vo.getProcessNo());
        Assertions.assertEquals("CP1-1",vo.getDrawingNo());
        Assertions.assertEquals("P1",vo.getLgPart());
        fname = "T-9-B-5-3.txt";
        vo = ProgramFileNameParser.parseProgramName(fname);