yangys
2025-09-18 0d61b9bfca526e9c3da2209de8f9f367e76fd013
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package org.springblade.mdm.utils;
 
import org.apache.commons.lang3.StringUtils;
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.flow.constants.FlowConstant;
import org.springblade.mdm.flow.service.FlowProgramProperties;
import org.springblade.mdm.program.service.NcNodeService;
 
public class ProgramFileNameCheckUtil {
    /**
     * 检查文件名合法性
     * @param filename 文件名
     * @param programProperties 程序属性,发起时填写的
     */
    public static void checkFilename(String filename, FlowProgramProperties programProperties){
        if(FlowConstant.Y.equals(programProperties.getIsTempFlow())){
            //临时程序下发流程,不检查文件名合法性
            return;
        }
        //程序名称:零件号加工序号,文件名应该以此开头
        String programNamePrefix = NcNodeService.genProgramName(programProperties.getDrawingNo(),programProperties.getProcessNo(),programProperties.getProcessEdition());
        if(!StringUtils.startsWith(filename,programNamePrefix)){
 
            IResultCode rc = new IResultCode() {
                @Override
                public String getMessage() {
                    return "程序文件名不合法,应为:"+programNamePrefix+"-[段数]-[段号].[文件扩展名]";
                }
 
                @Override
                public int getCode() {
                    return 1;
                }
            };
            throw new ServiceException(rc);
        }
 
        //截取后面的段数和第几段
        String endPart = StringUtils.removeStart(filename,programNamePrefix+"-");
 
        //去掉扩展名
        if(endPart.contains(".")){
            endPart = endPart.substring(0,endPart.indexOf("."));
        }
 
        int sepCount = StringUtils.countMatches(endPart,"-");
        if(sepCount != 1){//- 号应该是1个
            IResultCode rc = new IResultCode() {
                @Override
                public String getMessage() {
                    return "程序文件名不合法,应为:"+programNamePrefix+"-[段数]-[段号].[文件扩展名]";
                }
 
                @Override
                public int getCode() {
                    return 2;
                }
            };
            throw new ServiceException(rc);
        }
 
        String[] arr = StringUtils.split(endPart,"-");
        if(!StringUtils.isNumeric(arr[0]) || Func.toInt(arr[0]) >99 || Func.toInt(arr[0]) < 1){
            IResultCode rc = new IResultCode() {
                @Override
                public String getMessage() {
                    return "程序段数不合法,应为两位以内整数";
                }
 
                @Override
                public int getCode() {
                    return 3;
                }
            };
            throw new ServiceException(rc);
        }
        int segCount = Func.toInt(arr[0]);
 
        if(!StringUtils.isNumeric(arr[1]) || Func.toInt(arr[1]) < 1 || Func.toInt(arr[1]) > segCount){
            IResultCode rc = new IResultCode() {
                @Override
                public String getMessage() {
                    return "程序段号不合法,应为两位以内整数且小于等于段数。";
                }
 
                @Override
                public int getCode() {
                    return 4;
                }
            };
            throw new ServiceException(rc);
        }
    }
    /**
     * 根据文件名获取程序总段树
     * @param filename 文件名
     * @return
     */
    public static int getProgramSegCount(String filename){
        int idx = filename.lastIndexOf(".");
        String tempstr = filename.substring(0,idx);//去掉扩展名
        //System.out.println(tempstr);
        idx = tempstr.lastIndexOf("-");
        tempstr = tempstr.substring(0,idx);
        //System.out.println(tempstr);
        idx = tempstr.lastIndexOf("-");
        tempstr = tempstr.substring(idx+1);
        //System.out.println(tempstr);
        return Func.toInt(tempstr);
    }
}