From dc01577b31204fd3c80645b45d81ff693f79a985 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期三, 10 九月 2025 23:04:20 +0800
Subject: [PATCH] 程序包名增加版次
---
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/ProcessorHelper.java | 21 +++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java | 22 ++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AbstractProcessor.java | 69 +++++++++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/NormalFinishDataHandler.java | 19 ++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProperties.java | 12 +
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/FanucProcessor.java | 54 +++++++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationData.java | 23 +++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DNCSendBackService.java | 55 +++++--
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/DefaultProcessor.java | 33 ++++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java | 3
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/MachineAnnotationConfig.java | 15 ++
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java | 19 +-
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProcessor.java | 58 ++++++++
13 files changed, 372 insertions(+), 31 deletions(-)
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java
index 25c9406..a5d0bc7 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/StartDispatcher.java
@@ -21,7 +21,6 @@
import org.springblade.mdm.program.service.ProgramSeqService;
import org.springblade.mdm.utils.EntityUtil;
import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.flowable.engine.RuntimeService;
import org.springframework.transaction.annotation.Transactional;
@@ -97,7 +96,7 @@
NcNode curedProgramPackage = null;
if(!startVO.isTemporaryFlow() && !startVO.isDeviationFlow()) {
//姝e父娴佺▼(闈炰复鏃舵祦绋�) 涓斾笉鏄� 鍋忕鍗�,鎵嶅尮閰嶅浐鍖栫▼搴�
- curedProgramPackage = ncNodeService.getLastCuredProgramPackageWithoutProcessEdition(programPkgName,startVO.getMachineCode());
+ curedProgramPackage = ncNodeService.getLastCuredProgramWithoutProcessEdition(startVO.getDrawingNo(),startVO.getProcessNo(),startVO.getMachineCode());
//璁剧疆鏄惁鏈夊浐鍖栫▼搴忔爣璁�
vars.put(FlowContants.HAS_CURED_PROGRAM, curedProgramPackage != null ? FlowContants.Y : FlowContants.N);
//宸ュ簭鐗堟鏄惁涓�鑷达紝鏄惁鍦ㄦ湁鏁堟湡鍐�
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/NormalFinishDataHandler.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/NormalFinishDataHandler.java
index 6583647..96a68e1 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/NormalFinishDataHandler.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/dispatch/NormalFinishDataHandler.java
@@ -1,17 +1,21 @@
package org.springblade.mdm.flow.excution.dispatch;
+import com.alibaba.excel.util.StringUtils;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FilenameUtils;
import org.springblade.mdm.flow.constants.FlowContants;
import org.springblade.mdm.flow.entity.FlowProgramFile;
import org.springblade.mdm.flow.service.ApproveRecordService;
import org.springblade.mdm.flow.service.FlowProgramFileService;
import org.springblade.mdm.flow.service.FlowProgramProperties;
+import org.springblade.mdm.gkw.programnode.vo.ProgramNameVO;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.entity.NcProgramApproved;
import org.springblade.mdm.program.service.NcNodeAutoCreateService;
import org.springblade.mdm.program.service.NcNodeService;
import org.springblade.mdm.program.service.NcProgramApprovedService;
import org.springblade.mdm.utils.EntityUtil;
+import org.springblade.mdm.utils.ProgramFileNameParser;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -52,7 +56,7 @@
Integer newVersion = packageNode.genNewVersionNumber();
packageNode = ncNodeAutoCreateService.createNodeTreeWithProgram(props,newVersion);
}else{
- //鍙敤锛屽崌鐗堬紙淇敼鍏跺伐搴忕増鏈級锛屽師鏉ョ殑鑺傜偣娓呴櫎
+ //鍙敤锛屽崌鐗堬紙淇敼鍏跺伐搴忕増娆★級锛屽師鏉ョ殑鑺傜偣娓呴櫎
moveToNewProcessEdition(packageNode,props);
}
}else{
@@ -97,20 +101,31 @@
packageNode.setProcessEdition(tempProps.getProcessEdition());
packageNode.setParentId(machineNode.getParentId());
packageNode.setParentIds(machineNode.getParentIds());
+ packageNode.setName(tempProps.getDrawingNo()+"-"+tempProps.getProcessNo()+"-"+tempProps.getProcessEdition());
this.ncNodeService.updateById(packageNode);
//绉诲姩绋嬪簭鑺傜偣
List<NcNode> programNodes = ncNodeService.getProgramFilesByPackageId(packageNode.getId());
for(NcNode programNode : programNodes){
+
+ programNode.setName(buildNewFilename(programNode.getName(),tempProps.getProcessEdition()));//鍚嶇О淇敼锛屽伐搴忕増娆¢儴鍒�
programNode.setParentIds(packageNode.getParentIds()+","+packageNode.getId());
programNode.setProcessEdition(tempProps.getProcessEdition());//淇敼宸ュ簭鐗堟
programNode.setVersionNumber(packageNode.getVersionNumber());
}
ncNodeService.updateBatchById(programNodes);
-
}
+ String buildNewFilename(String filename,String newProcessEdition){
+ ProgramNameVO pnameVO = ProgramFileNameParser.parseProgramName(filename);
+ String ext = FilenameUtils.getExtension(filename);
+ String name= pnameVO.getDrawingNo()+"-"+pnameVO.getProcessNo()+"-"+newProcessEdition+"-"+pnameVO.getSegmentCount()+"-"+pnameVO.getSegmentNo();
+ if(StringUtils.isNotBlank(ext)){
+ name += "."+ext;
+ }
+ return name;
+ }
/**
* 淇濆瓨瀹℃壒瀹屾垚鐨勮褰�
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DNCSendBackService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DNCSendBackService.java
index a9dfc6a..e34f27a 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DNCSendBackService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DNCSendBackService.java
@@ -5,6 +5,7 @@
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BizServiceImpl;
@@ -25,6 +26,10 @@
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.entity.NcProgramExchange;
import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
+import org.springblade.mdm.program.service.programannotation.AnnotationProcessor;
+import org.springblade.mdm.program.service.programannotation.DefaultProcessor;
+import org.springblade.mdm.program.service.programannotation.FanucProcessor;
+import org.springblade.mdm.program.service.programannotation.MachineAnnotationConfig;
import org.springblade.mdm.program.vo.DncSendBackData;
import org.springblade.mdm.program.vo.DncSendBackFile;
import org.springblade.mdm.program.vo.ProgramAnnotation;
@@ -36,11 +41,13 @@
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
+import java.lang.annotation.Annotation;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.time.Duration;
import java.util.*;
+import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
@@ -62,6 +69,10 @@
private final DncBackFileService dncBackFileService;
private final MachineService machineService;
private final ParamService paramService;
+ private final MachineAnnotationConfig machineAnnotationConfig;
+
+ private final FanucProcessor fanucProcessor;
+ private final DefaultProcessor defaultProcessor;
/**
* 鍋忕鍗曟枃浠舵湯灏剧殑妯″紡锛歅+鏁板瓧
*/
@@ -134,12 +145,13 @@
DncSendBackData progData = new DncSendBackData();
String folderName = StringUtils.removeEnd(entryName,"/");
- PackageAndProcessEdition pkgAndEdition = parseProgramPackageFromFolderName(folderName);
- String packageName = pkgAndEdition.getProgramPackageName();
- String processEdition = pkgAndEdition.getProcessEdition();
+ //PackageAndProcessEdition pkgAndEdition = parseProgramPackageFromFolderName(folderName);
+ String packageName = folderName;//pkgAndEdition.getProgramPackageName();
+ //String processEdition = pkgAndEdition.getProcessEdition();
+ /*
if(StringUtils.isBlank(packageName) || StringUtils.isBlank(processEdition)){
- throw new ServiceException("鍖呭唴鏂囦欢澶瑰悕鏍煎紡閿欒搴旇涓篬闆剁粍浠跺彿-宸ュ簭鍙�-宸ュ簭鐗堟]:"+folderName);
- }
+ throw new ServiceException("鍖呭唴鏂囦欢澶瑰悕鏍煎紡閿欒锛屽簲璇ヤ负[闆剁粍浠跺彿-宸ュ簭鍙�-宸ュ簭鐗堟]:"+folderName);
+ }*/
progData.setProgramName(packageName);
String statusLine;
@@ -147,20 +159,32 @@
if(optFilename.isPresent()){
entry = zipFile.getEntry(optFilename.get());
InputStream ins = zipFile.getInputStream(entry);
+ ByteArrayInputStream bais = new ByteArrayInputStream(IOUtils.toByteArray(ins));;
progData.setFileBackTime(DateUtil.fromInstant(entry.getLastModifiedTime().toInstant()));
- statusLine = FileContentUtil.readLineAt(ins,2);
+ //machineAnnotationConfig.getConfigMap().get(machine.getcon)
+ Pattern fanucPattern = Pattern.compile("^[oO]\\d{4}");
+ String testLine = FileContentUtil.readLineAt(bais,2);//TODO,fanuc杩欒鏄笅鍙戣矾寰勶紝鍏朵粬鏈哄櫒鏄姸鎬�
+ bais.reset();
+ //boolean isFanuc = fanucPattern.matcher(testLine).matches();
+ boolean isFanuc = !StringUtils.containsAny(testLine,"(SQ)","(GH)","(PL)");
+ if(isFanuc){
+ statusLine = FileContentUtil.readLineAt(bais,3);//fanuc鐨勭姸鎬佽绗�4琛�
+ }else{
+ statusLine = testLine;
+ }
+
if(statusLine.contains("SQ")){
//璇曞垏
- programPackageNode = ncNodeService.getLastEditionTryingProgramPackage(packageName,processEdition);
+ programPackageNode = ncNodeService.getLastEditionTryingProgramPackage(packageName);//,processEdition
}else if(statusLine.contains("GH")){
//鍥哄寲
- programPackageNode = ncNodeService.getLastEditionCuredProgramPackage(packageName,processEdition);
+ programPackageNode = ncNodeService.getLastEditionCuredProgramPackage(packageName);
}else if(statusLine.contains("PL")){
//鍋忕
- programPackageNode =ncNodeService.getLastEditionDeviationProgramPackage(packageName,processEdition);
+ programPackageNode =ncNodeService.getLastEditionDeviationProgramPackage(packageName);
}else{
//鏌ヨ鏄惁杞﹀簥锛屾槸杞﹀簥鍙互鏀捐繃锛屾寜璇曞垏澶勭悊
- programPackageNode = ncNodeService.getLastEditionTryingProgramPackage(packageName,processEdition);
+ programPackageNode = ncNodeService.getLastEditionTryingProgramPackage(packageName);
if(programPackageNode!=null){
Machine machine = machineService.getByCode(programPackageNode.getMachineCode());
String chechuangVal = paramService.turninngValue();
@@ -205,10 +229,10 @@
* @param folderName 鏂囦欢澶瑰悕
* @return 缁撴瀯鏁版嵁
*/
+ /*
PackageAndProcessEdition parseProgramPackageFromFolderName(String folderName){
int index = StringUtils.lastIndexOf(folderName,'-');
String processEditon = "";
- String temp;
String packageName = "";
if(index != -1){
processEditon = folderName.substring(index+1);
@@ -219,7 +243,7 @@
result.setProgramPackageName(packageName);
result.setProcessEdition(processEditon);
return result;
- }
+ }*/
/**
* 鍏ュ簱鍥炰紶鏂囦欢,骞跺惎鍔ㄥ浐鍖栨祦绋�
@@ -269,8 +293,8 @@
for(String dir : dirList){
String folderName = StringUtils.removeEnd(dir,"/");
- PackageAndProcessEdition pkgAndEdition = parseProgramPackageFromFolderName(folderName);
- String programPackageName = pkgAndEdition.getProgramPackageName();
+ //PackageAndProcessEdition pkgAndEdition = folderName;//parseProgramPackageFromFolderName(folderName);
+ String programPackageName = folderName; //pkgAndEdition.getProgramPackageName();
Optional<NcNode> optPackageNode = allAcceptPackages.stream().filter(node -> StringUtils.equals(node.getName(),programPackageName)).findFirst();
@@ -414,4 +438,7 @@
private String programPackageName;
private String processEdition;
+ public String programName(){
+ return programPackageName+"-"+processEdition;
+ }
}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java
index d65e692..55aff67 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcNodeService.java
@@ -197,13 +197,13 @@
* @param name 鑺傜偣鍚嶇О
* @return 鏈�鏂扮増鏈▼搴忔姤鍚嶈妭鐐�
*/
- public NcNode getLastEditionTryingProgramPackage(String name,String processEdition){
+ public NcNode getLastEditionTryingProgramPackage(String name){
//.or(NcNode::getIsCured,0)
List<NcNode> pkgList = lambdaQuery().eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_PACKAGE)
.eq(NcNode::getName, name).and(i->{
i.eq(NcNode::getIsCured, 0).or().isNull(NcNode::getIsCured);
}).likeRight(NcNode::getParentIds,"0,1,")
- .eq(NcNode::getIsLastEdition,1).eq(NcNode::getProcessEdition,processEdition).orderByDesc(NcNode::getCreateTime).list();
+ .eq(NcNode::getIsLastEdition,1).orderByDesc(NcNode::getCreateTime).list();//.eq(NcNode::getProcessEdition,processEdition)
if(pkgList.isEmpty()){
return null;
@@ -253,10 +253,10 @@
* @param programPkgName
* @return
*/
- public NcNode getLastEditionCuredProgramPackage(String programPkgName,String processEdition) {
+ public NcNode getLastEditionCuredProgramPackage(String programPkgName) {
List<NcNode> nodes = lambdaQuery().eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_PACKAGE)
.eq(NcNode::getName, programPkgName).likeRight(NcNode::getParentIds,"0,2,").eq(NcNode::getIsCured,1)
- .eq(NcNode::getProcessEdition, processEdition)
+ //.eq(NcNode::getProcessEdition, processEdition)
.eq(NcNode::getIsLastEdition,1).list();
if(nodes.isEmpty()){
@@ -292,16 +292,17 @@
/**
* 鑾峰彇鏈�鏂扮殑鍥哄寲绋嬪簭锛屼笉鐢ㄥ伐搴忕増娆″尮閰�
- * @param programPkgName
+ * @param drawingNo
+ * @param processNo
* @param machineCode
* @return
*/
- public NcNode getLastCuredProgramPackageWithoutProcessEdition(String programPkgName,String machineCode) {
+ public NcNode getLastCuredProgramWithoutProcessEdition(String drawingNo, String processNo, String machineCode) {
Machine machine = machineService.getByCode(machineCode);
List<Machine> sameGroupMachines = machineService.lambdaQuery().eq(Machine::getMachineGroupCode,machine.getMachineGroupCode()).list();
List<String> machineCodesInGroup = sameGroupMachines.stream().map(Machine::getCode).toList();
List<NcNode> nodes = lambdaQuery().eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_PACKAGE)
- .eq(NcNode::getName, programPkgName)
+ .eq(NcNode::getDrawingNo, drawingNo).eq(NcNode::getProcessNo, processNo)
.likeRight(NcNode::getParentIds,"0,2,").eq(NcNode::getIsCured,1)
.in(!machineCodesInGroup.isEmpty(),NcNode::getMachineCode,machineCodesInGroup)
.eq(NcNode::getIsLastEdition,1).orderByDesc(NcNode::getCreateTime).list();
@@ -318,10 +319,10 @@
* @param programPkgName 绋嬪簭鍖呭悕
* @return 鍋忕鐨勭▼搴忚妭鐐�
*/
- public NcNode getLastEditionDeviationProgramPackage(String programPkgName,String processEdition) {
+ public NcNode getLastEditionDeviationProgramPackage(String programPkgName) {//,String processEdition
List<NcNode> nodes = lambdaQuery().eq(NcNode::getNodeType,NcNode.TYPE_PROGRAM_PACKAGE)
.eq(NcNode::getName, programPkgName)
- .eq(NcNode::getProcessEdition, processEdition)
+ //.eq(NcNode::getProcessEdition, processEdition)
.likeRight(NcNode::getParentIds,"0,3,")
.eq(NcNode::getIsLastEdition,1).list();
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
index cfec60a..7e9e87e 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
@@ -17,6 +17,10 @@
import org.springblade.mdm.program.entity.NcProgramApproved;
import org.springblade.mdm.program.entity.NcProgramExchange;
import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
+import org.springblade.mdm.program.service.programannotation.AnnotationData;
+import org.springblade.mdm.program.service.programannotation.AnnotationProcessor;
+import org.springblade.mdm.program.service.programannotation.MachineAnnotationConfig;
+import org.springblade.mdm.program.service.programannotation.ProcessorHelper;
import org.springblade.system.feign.IDictClient;
import org.springblade.system.pojo.entity.DictBiz;
import org.springframework.stereotype.Service;
@@ -44,7 +48,7 @@
private final FlowProgramFileService flowProgramFileService;
private final ProgramAnnotationService programAnnotationService;
-
+ private final MachineAnnotationConfig annotationConfig;
/**
* 瀵煎嚭dnc鍘嬬缉鍖�
* @param approvedIdArray 寰呭鍑哄鎵硅〃id鏁扮粍
@@ -75,7 +79,7 @@
private void addProgramPackageToZip(ZipOutputStream zipOut, NcProgramApproved approved) throws IOException{
NcNode packageNode = ncNodeService.getById(approved.getNcNodeId());
- String packageFolder = packageNode.getName()+"-"+packageNode.getProcessEdition()+"/";
+ String packageFolder = packageNode.getName()+"/";
ZipEntry zipEntry = new ZipEntry(packageFolder);// "/"缁撳熬琛ㄧず鏂囦欢澶�
zipOut.putNextEntry(zipEntry);
zipOut.closeEntry();
@@ -97,13 +101,23 @@
deviationSerial = ncNodeService.getDeviationSerialForNode(packageNode);
}
- List<DictBiz> annotationDictList= programAnnotationService.getAnnotionDictList();
+ //List<DictBiz> annotationDictList= programAnnotationService.getAnnotionDictList();
for (NcNode node : programNodes) {
String filePathInZip = genFilePathInZip(packageFolder,node,deviationSerial);
programFile = this.flowProgramFileService.getById(node.getFlowProgramFileId());
if(programFile.isProgram()) {//绋嬪簭鏂囦欢锛屾墠浼氬姞鍏ュ帇缂╁寘
InputStream inputStream = ossTemplate.statFileStream(programFile.getOssName());
String sendDir = machine.getProgSendDir()==null? StringUtil.EMPTY:machine.getProgSendDir();
+
+ AnnotationProcessor annoProcessor = ProcessorHelper.getProcessor(machine.getControlSystem(),annotationConfig);
+ AnnotationData annoData = new AnnotationData();
+ annoData.setSendPath(sendDir);
+ annoData.setProgramStatus(status);
+ annoData.setDeviation(programPackageNode.getDeviation());
+ annoData.setFilename(programFile.getName());
+ InputStream addedInsFinal = annoProcessor.setAnnotation(annoData,inputStream);
+ addedInsFinal.reset();
+ /*
InputStream addedInsFinal;
InputStream addedIns2 = programAnnotationService.setSendDirAndStatusAnnotation(sendDir,status,inputStream,machine.getControlSystem());
if(StringUtils.isNotBlank(programPackageNode.getDeviation())) {
@@ -111,7 +125,7 @@
addedInsFinal = programAnnotationService.setPldAnnotation(programPackageNode.getDeviation(),addedIns2, machine.getControlSystem(), annotationDictList);;
}else{
addedInsFinal = addedIns2;
- }
+ }*/
this.addInputStreamToZip(zipOut, addedInsFinal, filePathInZip);
}
}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AbstractProcessor.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AbstractProcessor.java
new file mode 100644
index 0000000..63abded
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AbstractProcessor.java
@@ -0,0 +1,69 @@
+package org.springblade.mdm.program.service.programannotation;
+
+import org.apache.commons.io.IOUtils;
+import org.springblade.mdm.program.service.ProgramAnnotationService;
+import org.springblade.mdm.utils.FileContentUtil;
+import org.springblade.system.pojo.entity.DictBiz;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+public abstract class AbstractProcessor implements AnnotationProcessor{
+
+ @Autowired
+ private ProgramAnnotationService programAnnotationService;
+
+ protected AnnotationProperties annotationProperties;
+
+
+ @Override
+ public InputStream setAnnotation(AnnotationData annoData,InputStream inputStream) throws IOException {
+ List<DictBiz> annoDicts = programAnnotationService.getAnnotionDictList();
+
+ InputStream finishedStream;
+ try(inputStream){
+ ByteArrayInputStream byteInputStream = new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
+
+ //1鍔犲叆鍙戦�佽矾寰勭殑娉ㄩ噴
+ String sendPathAnnotation = generateAnnotation(annoData.getSendPath(),getControlSystem(),annoDicts);//鍔犱簡娉ㄩ噴涔嬪悗鐨勬枃鏈�
+
+ String sendDirLine = FileContentUtil.readLineAt(byteInputStream,annotationProperties.getSendPathLineIndex());//绗�2琛屾槸鍙戦�佽矾寰�
+ byteInputStream.reset();
+ String statusLine = FileContentUtil.readLineAt(byteInputStream,annotationProperties.getStatusLineIndex());//鐘舵�佹敞閲�
+ byteInputStream.reset();
+
+ InputStream insAfterSetSendDir ;
+ if(isAnnotation(sendDirLine,getControlSystem(),annoDicts)){
+ insAfterSetSendDir = FileContentUtil.replaceAtLine(byteInputStream,annotationProperties.getSendPathLineIndex(),sendPathAnnotation);
+ }else{
+ insAfterSetSendDir = FileContentUtil.insertLine(byteInputStream,annotationProperties.getSendPathLineIndex(),sendPathAnnotation);
+ }
+
+ insAfterSetSendDir.reset();
+ //鍔犲叆鐘舵�佹敞閲婅
+ String statusAnnotation = generateAnnotation(annoData.getProgramStatus(),getControlSystem(),annoDicts);//娉ㄩ噴鍚庣殑鐘舵�佹枃鏈�
+ if(isAnnotation(statusLine,getControlSystem(),annoDicts)){
+ finishedStream = FileContentUtil.replaceAtLine(insAfterSetSendDir,annotationProperties.getStatusLineIndex(),statusAnnotation);
+ }else{
+ finishedStream = FileContentUtil.insertLine(insAfterSetSendDir,annotationProperties.getStatusLineIndex(),statusAnnotation);
+ }
+ }
+
+ return finishedStream;
+ }
+
+ @Override
+ public abstract void setControlSystem(String controlSystemDictVal) ;
+
+ @Override
+ public void setAnnotationProperties(AnnotationProperties annotationProperties) {
+ this.annotationProperties= annotationProperties;
+ }
+
+ public abstract String getControlSystem();
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationData.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationData.java
new file mode 100644
index 0000000..0ed2f5d
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationData.java
@@ -0,0 +1,23 @@
+package org.springblade.mdm.program.service.programannotation;
+
+import lombok.Data;
+
+@Data
+public class AnnotationData {
+ /**
+ * 涓嬪彂璺緞
+ */
+ private String filename;
+ /**
+ * 涓嬪彂璺緞
+ */
+ private String sendPath;
+ /**
+ * 绋嬪簭鐘舵��
+ */
+ private String programStatus;
+ /**
+ * 鍋忕鍗曞彿
+ */
+ private String deviation;
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProcessor.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProcessor.java
new file mode 100644
index 0000000..9042c89
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProcessor.java
@@ -0,0 +1,58 @@
+package org.springblade.mdm.program.service.programannotation;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.mdm.program.service.ProgramAnnotationService;
+import org.springblade.mdm.program.vo.ProgramAnnotation;
+import org.springblade.system.pojo.entity.DictBiz;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Optional;
+
+public interface AnnotationProcessor {
+ static final String DEFAULT_ANNOTATION_SETTING = "(,)";
+
+ default String generateAnnotation(String oriTest, String systemDictVal, List<DictBiz> annotationList) {
+ ProgramAnnotation progAnnotation = this.getProgramAnnotationFormat(systemDictVal,annotationList);
+ return progAnnotation.addAnnotation(oriTest);
+ }
+ default boolean isAnnotation(String line,String systemDictVal,List<DictBiz> annotationList){
+ ProgramAnnotation progAnnotation = this.getProgramAnnotationFormat(systemDictVal,annotationList);
+
+ line = StringUtils.trim(line);//鍘婚灏剧┖鏍�
+ return progAnnotation.isAnnotation(line);
+ }
+
+ default ProgramAnnotation getProgramAnnotationFormat(String systemDictVal,List<DictBiz> annoDictList){
+ String begin;
+ String end;
+
+ Optional<DictBiz> dictOpt = annoDictList.stream().filter(dict -> {return dict.getDictKey().equals(systemDictVal);}).findFirst();
+ String annotationSetting = DEFAULT_ANNOTATION_SETTING;
+ if(dictOpt.isPresent()) {
+ annotationSetting = dictOpt.get().getRemark();
+ }
+ String[] arr = StringUtils.split(annotationSetting,",");
+ if(arr.length == 2){
+ begin = arr[0];
+ end = arr[1];
+ }else if(arr.length == 1){
+ begin = arr[0];
+ end = "";
+ }else{
+ throw new ServiceException("娉ㄩ噴鏍煎紡閰嶇疆閿欒锛屽簲璇ヤ负1鍒�2娈碉紝涓棿鐢ㄩ�楀彿鍒嗛殧");
+ }
+
+ ProgramAnnotation programAnnotation = new ProgramAnnotation();
+ programAnnotation.setBegin(begin);
+ programAnnotation.setEnd(end);
+ return programAnnotation;
+ }
+ void setControlSystem(String controlSystemDictVal);
+ void setAnnotationProperties(AnnotationProperties annotationProperties);
+ String getControlSystem();
+ InputStream setAnnotation(AnnotationData annoData,InputStream inputStream) throws IOException;
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProperties.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProperties.java
new file mode 100644
index 0000000..b162d0d
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProperties.java
@@ -0,0 +1,12 @@
+package org.springblade.mdm.program.service.programannotation;
+
+import lombok.Data;
+
+@Data
+public class AnnotationProperties {
+ private String beanId;
+ private int sendPathLineIndex;
+ private int statusLineIndex;
+ private int deviationLineIndex;
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/DefaultProcessor.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/DefaultProcessor.java
new file mode 100644
index 0000000..1234ca2
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/DefaultProcessor.java
@@ -0,0 +1,33 @@
+package org.springblade.mdm.program.service.programannotation;
+
+import org.springblade.mdm.program.service.ProgramAnnotationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+
+@Component("defaultProcessor")
+public class DefaultProcessor extends AbstractProcessor{
+
+ @Autowired
+ private ProgramAnnotationService programAnnotationService;
+ private String controlSystem;
+ private AnnotationProperties annotationPropreties;
+
+
+ @Override
+ public void setControlSystem(String controlSystemDictVal) {
+ this.controlSystem = controlSystemDictVal;
+ }
+
+ @Override
+ public void setAnnotationProperties(AnnotationProperties annotationProperties) {
+ this.annotationPropreties= annotationProperties;
+ }
+
+ @Override
+ public String getControlSystem() {
+ return this.controlSystem;
+ }
+
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/FanucProcessor.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/FanucProcessor.java
new file mode 100644
index 0000000..87467cb
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/FanucProcessor.java
@@ -0,0 +1,54 @@
+package org.springblade.mdm.program.service.programannotation;
+
+import com.qiniu.util.IOUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.springblade.mdm.program.service.ProgramAnnotationService;
+import org.springblade.mdm.utils.FileContentUtil;
+import org.springblade.system.pojo.entity.DictBiz;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+import java.util.regex.Pattern;
+
+@Component("fanucProcessor")
+public class FanucProcessor extends AbstractProcessor{
+ @Autowired
+ private ProgramAnnotationService programAnnotationService;
+ private String controlSystem;
+ //AnnotationProperties annotationProperties;
+ private Pattern PATTERN = Pattern.compile("^[oO]\\d{4}");
+ private final int O_LINE = 1;
+ @Override
+ public InputStream setAnnotation(AnnotationData annoData,InputStream inputStream) throws IOException {
+ //鍦∣0001 杩欑鏂囧瓧鍚庨潰澧炲姞鏂囦欢鍚嶏紙涓嶅甫鎵╁睍鍚嶏級
+ ByteArrayInputStream bais = new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
+ String line = FileContentUtil.readLineAt(bais,O_LINE);
+ bais.reset();
+ boolean oMatched = PATTERN.matcher(line).matches();
+ InputStream ins1;
+ if(oMatched){
+ List<DictBiz> annoDicts = programAnnotationService.getAnnotionDictList();
+ String newline = line + generateAnnotation(FilenameUtils.removeExtension(annoData.getFilename()),getControlSystem(),annoDicts);
+ ins1 = FileContentUtil.replaceAtLine(bais,O_LINE,newline);
+ }else{
+ ins1 = bais;
+ }
+ return super.setAnnotation(annoData, ins1);
+
+ }
+
+
+ @Override
+ public void setControlSystem(String controlSystemDictVal) {
+ this.controlSystem = controlSystemDictVal;
+ }
+
+ @Override
+ public String getControlSystem() {
+ return this.controlSystem;
+ }
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/MachineAnnotationConfig.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/MachineAnnotationConfig.java
new file mode 100644
index 0000000..1255b3c
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/MachineAnnotationConfig.java
@@ -0,0 +1,15 @@
+package org.springblade.mdm.program.service.programannotation;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.Map;
+
+@Configuration
+@ConfigurationProperties(prefix = "program-annotation")
+@Data
+public class MachineAnnotationConfig {
+ private Map<String, AnnotationProperties> configMap;
+
+}
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/ProcessorHelper.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/ProcessorHelper.java
new file mode 100644
index 0000000..117de48
--- /dev/null
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/ProcessorHelper.java
@@ -0,0 +1,21 @@
+package org.springblade.mdm.program.service.programannotation;
+
+import org.springblade.core.tool.utils.SpringUtil;
+
+/**
+ * 璐熻矗鍒囨崲鍚堥�傜殑娉ㄩ噴澶勭悊鍣�
+ */
+public class ProcessorHelper {
+
+ public static AnnotationProcessor getProcessor(String controlSystem,MachineAnnotationConfig config){
+ AnnotationProperties props = config.getConfigMap().get(controlSystem);
+ AnnotationProcessor processor;
+ if(props != null){
+ processor = SpringUtil.getBean(props.getBeanId());
+ }else{
+ processor = SpringUtil.getBean(DefaultProcessor.class);
+ }
+ processor.setAnnotationProperties(props);
+ return processor;
+ }
+}
--
Gitblit v1.9.3