From 0bdfd76339bb58be09927b8c2fe268175c3a7cc8 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期一, 22 九月 2025 10:11:33 +0800
Subject: [PATCH] 优化现场编制导出

---
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramApprovedMapper.xml            |   14 ++++++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/NcProgramExportInnerService.java  |   22 +++++++---
 doc/sql/mdm/mdm.mysql.all.create.sql                                                                            |    3 +
 blade-service/blade-mdm/src/test/java/org/springblade/mdm/utils/ProgramFileNameParserTest.java                  |    8 +++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/vo/MesTaskFinishVO.java                     |    1 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/ProgramOnMachine.java                  |    5 ++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineFile.java                   |    5 ++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/ProgramOnMachineExcel.java                    |    5 +-
 doc/mdm/qinzhetemplate.xlsx                                                                                     |    0 
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java  |    7 ++-
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramApprovedService.java         |    2 +
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramApprovedMapper.java           |    6 +-
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramExportDncQueryVO.java             |    6 +++
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java      |   14 ++++--
 blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/ProgramOnMachineExportController.java |    9 +++-
 15 files changed, 80 insertions(+), 27 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/ProgramOnMachineExportController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/ProgramOnMachineExportController.java
index d852426..d99de29 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/ProgramOnMachineExportController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/ProgramOnMachineExportController.java
@@ -7,6 +7,7 @@
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.flowable.engine.HistoryService;
 import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
@@ -37,13 +38,12 @@
 @Tag(name = "鐜板満缂栧埗瀵煎嚭", description = "鐜板満缂栧埗瀵煎嚭")
 public class ProgramOnMachineExportController {
 
-	private FlowCommonService flowCommonService;
 	private ProgramOnMachineExportService programOnMachineService;
 	private final TaskDispatchService taskDispatchService;
-	private final HistoryService historyService;
+
 	@GetMapping("/finished-page")
 	@ApiOperationSupport(order = 3)
-	@Operation(summary = "宸插鎵瑰垪琛�", description = "宸插鎵瑰垪琛�")
+	@Operation(summary = "鐜板満缂栧埗寰呭鍑哄垪琛�", description = "鐜板満缂栧埗寰呭鍑哄垪琛�")
 	public R<IPage<FlowVO>> finishedPage(ProgramOnMachineQueryVO queryVO) {
 		IPage<FlowVO> pages = programOnMachineService.finishedPage(Condition.getPage(queryVO), queryVO);
 		return R.data(pages);
@@ -67,6 +67,9 @@
 			excel.setMachineCode(Func.toStr(vars.get(FlowVariableConstant.MACHINE_CODE)));
 			excel.setProcessInstanceId(record.getProcessInstanceId());
 			excel.setDeviation(Func.toStr(record.getVariables().get(FlowVariableConstant.DEVIATION)));
+			if(StringUtils.isNotBlank(excel.getDeviation())) {
+				excel.setDeviationSerial(taskDispatchService.getDeviationSerial(Func.toStr(vars.get(FlowVariableConstant.PROGRAM_NO))) + "");//鏇存敼鍗曞簭鍙�
+			}
 			list.add(excel);
 		});
 		ExcelUtil.export(response, "鐜板満缂栧埗璁板綍" + DateUtil.time(), "鐜板満缂栧埗璁板綍", list, ProgramOnMachineExcel.class);
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/ProgramOnMachineExcel.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/ProgramOnMachineExcel.java
index e602b3b..ed4ccc7 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/ProgramOnMachineExcel.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/ProgramOnMachineExcel.java
@@ -22,12 +22,13 @@
 	private String processEdition;
 	@ExcelProperty("涓存椂鏇存敼鍗�")
 	private String deviation;
-
+	@ExcelProperty("涓存椂鏇存敼鍗曞簭鍙�")
+	private String deviationSerial;
 	@ColumnWidth(20)
 	@ExcelProperty("鏈哄簥缂栧彿")
 	private String machineCode;
 
-	@ColumnWidth(20)
+	@ColumnWidth(38)
 	@ExcelProperty("娴佺▼缂栧彿")
 	private String processInstanceId;
 
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineFile.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineFile.java
index 8e9b57f..bb88141 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineFile.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/entity/MachineFile.java
@@ -89,6 +89,10 @@
 	public static final int EXCEPTION_NOT_MATCH_RECORD = 5;
 
 	/**
+	 * 涓嶅尮閰嶄笅鍙戣褰曚复鏃舵洿鏀瑰崟閮ㄥ垎
+	 */
+	public static final int EXCEPTION_NOT_MATCH_SEND_LG = 6;
+	/**
 	 * 鏂囦欢鍚�
 	 */
 	private String name;
@@ -181,6 +185,7 @@
 			case EXCEPTION_LOST_FILES -> "鏂囦欢纭け";
 			case EXCEPTION_NOT_MATCH_SEND_SEG_COUNT -> "娈垫暟涓庝笅鍙戣褰曚笉鍖归厤";
 			case EXCEPTION_NOT_MATCH_RECORD -> "鏃犺褰曞尮閰�";//璇曞垏涓嬪彂锛岀幇鍦虹紪绋嬮兘涓嶅尮閰�
+			case EXCEPTION_NOT_MATCH_SEND_LG -> "涓存椂鏇存敼鍗曚笉鍖归厤";
 			default -> "姝e父";
 		};
 	}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/NcProgramExportInnerService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/NcProgramExportInnerService.java
index f212e0c..2d6b432 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/NcProgramExportInnerService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/NcProgramExportInnerService.java
@@ -43,7 +43,7 @@
 	private final OssTemplate ossTemplate;
 	private final MachineFileService machineFileService;
 	private final MachineService machineService;
-	private final MachineAnnotationConfig annoConfig;
+	private final AnnotationProcessorHelper annotationProcessorHelper;
 	private final ProgramAnnotationService programAnnotationService;
 	/**
 	 * 瀵煎嚭鍒版秹瀵嗙綉
@@ -80,7 +80,15 @@
 		os.close();
 	}
 
-
+	/**
+	 * j灏嗚緭鍏ユ祦鍔犲叆zip
+	 * @param zipOut zip鏂囦欢杈撳嚭閲岃矾
+	 * @param inputStream 鏂囦欢鐨勮緭鍏ユ祦
+	 * @param entryName entryName
+	 * @param filename 鍘熷鏂囦欢鍚�
+	 * @param machineCode 鏈哄簥浠g爜
+	 * @throws IOException 寮傚父
+	 */
 	public void addInputStreamToZip(ZipOutputStream zipOut, InputStream inputStream, String entryName,String filename,String machineCode)
 		throws IOException {
 		// 鍒涘缓鏂扮殑 ZIP 鏉$洰
@@ -108,7 +116,7 @@
 	 */
 	InputStream setAnnotations(InputStream inputStream,String filename,String machineCode) throws IOException {
 		Machine machine = this.machineService.getByCode(machineCode);
-		AnnotationProcessor annoProcessor = ProcessorHelper.getProcessor(machine.getControlSystem(),annoConfig);
+		AnnotationProcessor annoProcessor = annotationProcessorHelper.getProcessor(machine.getControlSystem());
 
 		AnnotationData annoData = new AnnotationData();
 		annoData.setFilename(filename);
@@ -116,8 +124,8 @@
 
 		AnnotationProperties annoProps = annoProcessor.getAnnotationProperties();
 
-		ByteArrayInputStream bais = new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
-		String statusLine = FileContentUtil.readLineAt(bais,annoProps.getStatusLineIndex());
+		ByteArrayInputStream byteInsStream = new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
+		String statusLine = FileContentUtil.readLineAt(byteInsStream,annoProps.getStatusLineIndex());
 		String text = programAnnotationService.removeAnnotation(machine.getControlSystem(),statusLine);
 
 		if(AnnotationUtil.isStatusContent(text)){
@@ -127,9 +135,9 @@
 			//娌℃湁鎸夎瘯鍒囧鐞�
 			annoData.setProgramStatus(AnnotationUtil.SQ);
 		}
-		bais.reset();
+		byteInsStream.reset();
 		//
-		return annoProcessor.putAnnotation(annoData,bais);
+		return annoProcessor.putAnnotation(annoData,byteInsStream);
 	}
 }
 
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java
index d27d9f4..05f06fa 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java
+++ b/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();
 
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java
index 92f20ac..d56fb2b 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java
@@ -48,13 +48,14 @@
 	public R<IPage<NcProgramExportDncPageVO>> page(NcProgramExportDncQueryVO query) {
 		String userRole = AuthUtil.getUserRole();//瑙掕壊鍒悕锛屽涓鑹查�楀彿鍒嗛殧
 		List<String> userRoleAliasList = Func.toStrList(",", userRole);
-
+		/*
 		String managerRole = paramService.getProgramManagerRoleAlias();
 		if(!userRoleAliasList.contains(managerRole) && !AuthUtil.isAdministrator() && !AuthUtil.isAdmin()){
 			//闈炴暟鎺х鐞嗗憳瑙掕壊銆佺鐞嗗憳锛岄檺鍒舵湭鍙兘瀵煎嚭鑷繁鐨勭▼搴�
 			query.setUserId(AuthUtil.getUserId());
-		}
-
+		}*/
+		query.setUserId(AuthUtil.getUserId());
+		query.setUserDeptIds(Func.toLongList(AuthUtil.getDeptId()));
 		return R.data(ncProgramApprovedService.exportDncPageQuery(query));
 	}
 
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/ProgramOnMachine.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/ProgramOnMachine.java
index e57d6da..a1b00b5 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/ProgramOnMachine.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/ProgramOnMachine.java
@@ -44,6 +44,11 @@
 	 * 涓存椂鏇存敼鍗�
 	 */
 	private String deviation;
+
+	/**
+	 * 涓存椂鏇存敼鍗曞簭鍙�
+	 */
+	private String deviationSerial;
 	/**
 	 * 娴佺▼瀹炰緥id
 	 */
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramApprovedMapper.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramApprovedMapper.java
index cec5771..8d9ff31 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramApprovedMapper.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramApprovedMapper.java
@@ -10,9 +10,9 @@
 
 	/**
 	 * 瀵煎嚭dnc鍒嗛〉鍒楄〃鏌ヨ锛屾煡璇㈠鎵归�氳繃鐨勭▼搴忔暟鎹�
-	 * @param page
-	 * @param query
-	 * @return
+	 * @param page 鍒嗛〉淇℃伅
+	 * @param query 鏌ヨ鏁版嵁
+	 * @return 鍒嗛〉鏁版嵁
 	 */
 	IPage<NcProgramExportDncPageVO> exportDncPageQuery(@Param("page")IPage<NcProgramExportDncPageVO> page, @Param("query") NcProgramExportDncQueryVO query);
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramApprovedMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramApprovedMapper.xml
index 9535098..4dd637e 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramApprovedMapper.xml
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcProgramApprovedMapper.xml
@@ -10,11 +10,13 @@
         <result column="update_time" property="updateTime"/>
         <result column="is_deleted" property="isDeleted"/>
     </resultMap>
+    <!--瀵煎嚭宸ユ帶缃戝垎椤垫煡璇�-->
     <select id="exportDncPageQuery" resultType="org.springblade.mdm.program.vo.NcProgramExportDncPageVO">
         select a.id,a.title,n.name,a.nc_node_id,n.process_no,n.process_edition,n.drawing_no,n.drawing_no_edition,n.process_name,a.create_time,a.update_time,u.name exporter
         from mdm_nc_program_approved a
             inner join mdm_nc_node_his n on a.nc_node_id=n.id
             left join blade_user u on a.update_user=u.id
+
         <where>
             a.is_deleted=0 and a.status=#{query.status}
             <if test="query.name!=null and query.name!=''">
@@ -27,9 +29,19 @@
             <if test="query.createTimeEnd!=null">
                 and a.create_time &lt;= #{query.createTimeEnd}
             </if>
-            <if test="query.userId!=null">
+            <if test="query.queryType == 'self'">
                 and a.programmer_id = #{query.userId}
             </if>
+            <if test="query.queryType=='group'">
+               and a.programmer_id IN
+                    (
+                        select id from blade_user where
+                        <foreach collection="query.userDeptIds" item="deptId"  open="(" separator="or" close=")" >
+                            dept_id like #{deptId}
+                        </foreach>
+                    )
+
+            </if>
         </where>
         order by a.create_time desc
     </select>
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramApprovedService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramApprovedService.java
index 1100743..7cf4f06 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramApprovedService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramApprovedService.java
@@ -6,6 +6,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.core.mp.base.BizServiceImpl;
 import org.springblade.core.mp.support.Condition;
+import org.springblade.mdm.basesetting.producedivision.mapper.MdmUserMapper;
 import org.springblade.mdm.program.entity.NcProgramApproved;
 import org.springblade.mdm.program.mapper.NcProgramApprovedMapper;
 import org.springblade.mdm.program.vo.NcProgramExportDncPageVO;
@@ -35,6 +36,7 @@
 			query.setStatus(NcProgramApproved.STATUS_NOT_EXPORT);
 		}
 
+
 		return this.getBaseMapper().exportDncPageQuery(Condition.getPage(query),query);
 	}
 
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramExportDncQueryVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramExportDncQueryVO.java
index bc093ba..0889dc8 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramExportDncQueryVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcProgramExportDncQueryVO.java
@@ -6,6 +6,7 @@
 import org.springblade.core.mp.support.Query;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * 鍒嗛〉鎷嗙嚎鍛�
@@ -17,6 +18,9 @@
 public class NcProgramExportDncQueryVO extends Query {
 	@Schema(description = "绋嬪簭鍚嶇О")
 	private String name;
+	@Schema(description = "鏌ヨ鑼冨洿")
+	private String queryType;
+
 	@Schema(description = "閫氳繃鏃堕棿寮�濮�")
 	private Date createTimeBegin;
 	@Schema(description = "閫氳繃鏃堕棿鎴")
@@ -27,4 +31,6 @@
 
 	@Schema(description = "鐢ㄦ埛id,闈炵鐞嗗憳鎸囧畾璇d锛屽彧鑳芥煡璇㈣嚜宸辩殑绋嬪簭璁板綍")
 	private Long userId;
+	@Schema(description = "鐢ㄦ埛閮ㄩ棬id锛岀敤浜庢煡璇㈡湰閮ㄩ棬鐨勬暟鎹�")
+	private List<Long> userDeptIds;
 }
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/vo/MesTaskFinishVO.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/vo/MesTaskFinishVO.java
index dc87f4e..ca89a2b 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/vo/MesTaskFinishVO.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/vo/MesTaskFinishVO.java
@@ -2,7 +2,6 @@
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
-import java.time.LocalDate;
 import java.util.Date;
 
 @Data
diff --git a/blade-service/blade-mdm/src/test/java/org/springblade/mdm/utils/ProgramFileNameParserTest.java b/blade-service/blade-mdm/src/test/java/org/springblade/mdm/utils/ProgramFileNameParserTest.java
index ec5904e..67ad0a6 100644
--- a/blade-service/blade-mdm/src/test/java/org/springblade/mdm/utils/ProgramFileNameParserTest.java
+++ b/blade-service/blade-mdm/src/test/java/org/springblade/mdm/utils/ProgramFileNameParserTest.java
@@ -21,7 +21,7 @@
 
 
 
-		fname = "T-9-B-5-3.txt";
+		fname = "T-9-B-5-3.TXT";
 		vo = ProgramFileNameParser.parseProgramName(fname);
 		Assertions.assertEquals(5,vo.getSegmentCount());
 		Assertions.assertEquals(3,vo.getSegmentNo());
@@ -29,5 +29,11 @@
 
 		Assertions.assertEquals("9",vo.getProcessNo());
 		Assertions.assertEquals("T",vo.getDrawingNo());
+
+		fname = "T1-9-B-5-3.nc";
+		vo = ProgramFileNameParser.parseProgramName(fname);
+		Assertions.assertEquals("T1",vo.getDrawingNo());
+		Assertions.assertEquals("9",vo.getProcessNo());
+		Assertions.assertEquals("B",vo.getProcessEdition());
 	}
 }
diff --git a/doc/mdm/qinzhetemplate.xlsx b/doc/mdm/qinzhetemplate.xlsx
index 275d534..b150463 100644
--- a/doc/mdm/qinzhetemplate.xlsx
+++ b/doc/mdm/qinzhetemplate.xlsx
Binary files differ
diff --git a/doc/sql/mdm/mdm.mysql.all.create.sql b/doc/sql/mdm/mdm.mysql.all.create.sql
index c20ab48..c73905b 100644
--- a/doc/sql/mdm/mdm.mysql.all.create.sql
+++ b/doc/sql/mdm/mdm.mysql.all.create.sql
@@ -428,7 +428,8 @@
     `drawing_no` varchar(100) NULL COMMENT '闆剁粍浠剁紪鍙�/鍥惧彿',
     `process_no` varchar(100) NULL COMMENT '宸ュ簭鍙�',
     `process_edition` varchar(40) DEFAULT NULL COMMENT '宸ュ簭鐗堟',
-    `machine_code` varchar(100) DEFAULT NULL COMMENT '璁惧缂栧彿/鏈哄簥缂栧彿',
+    `machine_code` varchar(100) DEFAULT NULL COMMENT '鏈哄簥缂栧彿',
+    `deviation` varchar(100) DEFAULT NULL COMMENT '涓存椂鏇存敼鍗�',
     `process_instance_id` varchar(64) DEFAULT NULL COMMENT '娴佺▼瀹炰緥id',
     `status` int DEFAULT NULL COMMENT '涓氬姟鐘舵��',
     `create_dept` bigint DEFAULT NULL COMMENT '鍒涘缓鍗曚綅',

--
Gitblit v1.9.3