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);
|
}
|
}
|