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