From a117bd6e8ca607537e4f1889b474bcb0e24ba32b Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期四, 21 八月 2025 15:10:21 +0800
Subject: [PATCH] 导出程序包内文件夹增加工序版次
---
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java | 129 +++++++++++++++++++++++++++++++++++++------
1 files changed, 111 insertions(+), 18 deletions(-)
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java
index a377789..dbc7384 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java
@@ -2,18 +2,33 @@
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.IOUtils;
import org.flowable.engine.delegate.DelegateExecution;
+import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.oss.model.BladeFile;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
-import org.springblade.mdm.commons.contants.ParamContants;
+import org.springblade.mdm.basesetting.machine.MachineService;
+import org.springblade.mdm.basesetting.machine.entity.Machine;
+import org.springblade.mdm.commons.contants.ParamConstants;
+import org.springblade.mdm.flow.entity.FlowProgramFile;
import org.springblade.mdm.flow.service.FlowCommonService;
+import org.springblade.mdm.flow.service.FlowProgramFileService;
import org.springblade.mdm.flow.service.FlowProgramProperties;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.service.NcNodeAutoCreateService;
import org.springblade.mdm.program.service.NcNodeService;
+import org.springblade.mdm.program.service.ProgramAnnotationService;
+import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.system.feign.ISysClient;
+import org.springblade.system.pojo.entity.Dict;
+import org.springblade.system.pojo.entity.DictBiz;
import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.Date;
@@ -26,19 +41,26 @@
private final NcNodeService nodeService;
private final NcNodeAutoCreateService ncNodeAutoCreateService;
private final FlowCommonService flowCommonService;
+ private final FlowProgramFileService flowProgramFileService;
private final ISysClient sysClient;
+ private final OssTemplate ossTemplate;
+ private final ProgramAnnotationService programAnnotationService;
+ private final MachineService machineService;
+
/**
* 榛樿鏈夋晥鏈熼棿锛堟湀鏁帮級,2骞�
*/
private static final int DEFAULT_VALID_MONTH = 24;
+ private final NcNodeService ncNodeService;
+
/**
* 鍥哄寲瀹℃壒閫氳繃澶勭悊浠诲姟锛�
* @param execution 娴佺▼execution
*/
- public void execute(DelegateExecution execution) {
+ @Transactional
+ public void execute(DelegateExecution execution) throws IOException {
log.info("鎵ц鍥哄寲绋嬪簭浠诲姟鏈嶅姟,娴佺▼瀹炰緥id={}", execution.getProcessInstanceId());
//鍥哄寲绋嬪簭妫�鏌ユ湁鏁堟湡锛�
- //1.灏嗘祦绋嬭缃�
dealWithNode(execution.getProcessInstanceId());
}
@@ -46,17 +68,21 @@
* 澶勭悊node鐘舵�併��
* @param processInstanceId 娴佺▼瀹炰緥id
*/
- void dealWithNode(String processInstanceId) {
+ void dealWithNode(String processInstanceId) throws IOException {
//绋嬪簭鍖呰妭鐐瑰拰涓嬪睘绋嬪簭鑺傜偣(鍖呮嫭鍘嗗彶鑺傜偣闈炴渶鏂扮増鏈殑)浠庤瘯鍒囨尓鍒板浐鍖栦笅闈�
//绋嬪簭鍖呰妭鐐� 璁剧疆鏈凡鍥哄寲
NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId, processInstanceId).one();
if(pkgNode.isDeviationProgram()){
//鍋忕鐨勭▼搴忕洿鎺ラ攣瀹�
- pkgNode.setIsLocked(1);
+ //pkgNode.setIsLocked(1);
+ pkgNode.lock();
nodeService.updateById(pkgNode);
}else {
+ //璇曞垏鐨�
pkgNode.setIsCured(1);
+ pkgNode.setIsLocked(NcNode.UNLOCK);
//璁剧疆杩囨湡鏃ユ湡
+ pkgNode.upgradeVersionNumber();
pkgNode.setExpireDate(calculateExpireDate());
nodeService.updateById(pkgNode);
@@ -67,42 +93,109 @@
/**
* 灏嗚妭鐐瑰拰鍘嗗彶鑺傜偣鎸姩鍒板浐鍖栫殑鍚岀骇鑺傜偣涓�
+ * @param pkgNode 瑕佹尓鍔ㄧ殑鑺傜偣
* @param historyProgramPackageNodes 绋嬪簭鍖呭悕 鍘嗗彶鑺傜偣
*/
- void moveNodeToCuredTree(NcNode pkgNode,List<NcNode> historyProgramPackageNodes, FlowProgramProperties programProperties) {
+ void moveNodeToCuredTree(NcNode pkgNode,List<NcNode> historyProgramPackageNodes, FlowProgramProperties programProperties) throws IOException {
//鍒涘缓鑺傜偣鍒版満搴婄骇鍒�.(鍥哄寲鏍�)
NcNode machineNode = ncNodeAutoCreateService.createNodeTreeToMachine(programProperties);
- //绉诲姩鍒板浐鍖栨爲涓嬬殑鏈哄簥鑺傜偣涓嬪眰
- //String newParentIds = machineNode.getParentIds()+","+machineNode.getId();
-
- //鏇存柊鏈哄簥 涓嬪睘鑺傜偣鐨勬暟鎹� 涓烘棫鐗堟湰锛岄攣瀹�(鏈�鏂扮増鏈�=0锛宭ock=1).
- /*
- this.nodeService.lambdaUpdate().likeRight(NcNode::getParentIds, newParentIds)
- .in(NcNode::getNodeType, Arrays.asList(NcNode.TYPE_PROGRAM_PACKAGE,NcNode.TYPE_PROGRAM_FILE))
- .set(NcNode::getIsLastEdition,0).set(NcNode::getIsLocked,1).update();
- */
+ pkgNode.setParentId(machineNode.getParentId());
+ pkgNode.setParentIds(machineNode.getParentIds());//鏇存柊涓婄骇鑺傜偣锛屼笅闈㈣繕瑕佺敤搴斾负鍦╤istoryProgramPackageNodes涓殑鍜岃繖涓笉鏄竴涓疄渚�
//鏈哄簥涓嬬幇鍦ㄦ病鏈夋枃浠朵簡锛岀▼搴忓寘鍚嶅崌绾т笌鏈哄簥鍚岀骇浜嗭紝鏀逛负鎵惧埌鏈哄簥鍚岀骇绋嬪簭鍖呭悕鏇存柊浜�
+ //TODO 杩欎釜parentIds鏄笉鏄笉澶燂紵锛屼笉澶燂紝涓�涓満搴婁笅澶氫釜绋嬪簭鍖呯殑鎯呭喌涓嶈鍚э紝浣嗘槸鎸夌収鏍戯紝澶氫釜绋嬪簭鍖呬笉澶幇瀹�
this.nodeService.lambdaUpdate().likeRight(NcNode::getParentIds, machineNode.getParentIds())
.in(NcNode::getNodeType, Arrays.asList(NcNode.TYPE_PROGRAM_PACKAGE,NcNode.TYPE_PROGRAM_FILE))
+ .ne(NcNode::getId,pkgNode.getId())//涓嶈鏇存柊鏂板浐鍖栫殑鑺傜偣new
.set(NcNode::getIsLastEdition,0).set(NcNode::getIsLocked,1).update();
for(NcNode hisPackageNode : historyProgramPackageNodes){
if(!hisPackageNode.getId().equals(pkgNode.getId())){
hisPackageNode.setIsLastEdition(0);
}
- hisPackageNode.setParentId(machineNode.getId());
+ hisPackageNode.setParentId(machineNode.getParentId());
hisPackageNode.setParentIds(machineNode.getParentIds());//绋嬪簭鍖呬笌鏈哄簥鑺傜偣鍚岀骇
- //澶勭悊绋嬪簭鍖呬笅灞傜殑绋嬪簭鑺傜偣
+ //澶勭悊绋嬪簭鍖呬笅灞傜殑绋嬪簭鑺傜偣111
List<NcNode> programNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,hisPackageNode.getId()).list();
+ FlowProgramFile pfile;
for(NcNode programNode : programNodes){
programNode.setParentIds(hisPackageNode.getParentIds()+","+hisPackageNode.getId());
+ programNode.setIsLastEdition(0);
+
+ pfile = flowProgramFileService.getById(programNode.getFlowProgramFileId());
+ if(programNode.getParentId().equals(pkgNode.getId()) && !pfile.isProgram()){
+ //褰撳墠鍥哄寲绋嬪簭鍖呭悕涓嬬殑鈥滃叾浠栨枃浠垛�濋潪绋嬪簭鏂囦欢銆備笉璁剧疆涓鸿�佺増鏈紝鐩存帴鎸埌鍥哄寲鏍戜笅,涓や釜缃戠粶涔嬮棿鍙氦鎹㈢▼搴忔枃浠讹紝鍏朵粬鏂囦欢鍙兘淇濈暀
+ programNode.setIsLastEdition(1);
+ }
+
}
nodeService.updateBatchById(programNodes);
}
nodeService.updateBatchById(historyProgramPackageNodes);
+ Machine machine = machineService.getByCode(pkgNode.getMachineCode());
+ List<DictBiz> annoDicts = programAnnotationService.getAnnotionList();
+ //鏂扮殑娴佺▼鏂囦欢锛岄渶瑕佸湪鍖呰妭鐐逛笅鏂板缓锛屼笉鑳界敤鑰佺殑
+ List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,pkgNode.getProcessInstanceId()).list();
+ for(FlowProgramFile flowProgramFile : files){
+ NcNode newProgNode = new NcNode();
+ newProgNode.setName(flowProgramFile.getName());
+ newProgNode.setNodeType(NcNode.TYPE_PROGRAM_FILE);
+ newProgNode.setParentId(pkgNode.getId());
+ newProgNode.setDrawingNo(pkgNode.getDrawingNo());
+ newProgNode.setDrawingNoEdition(pkgNode.getDrawingNoEdition());
+ newProgNode.setMachineCode(pkgNode.getMachineCode());
+ newProgNode.setProcessEdition(pkgNode.getProcessEdition());
+ newProgNode.setProcessName(pkgNode.getProcessName());
+ newProgNode.setProcessNo(pkgNode.getProcessNo());
+ newProgNode.setParentIds(pkgNode.getParentIds()+","+pkgNode.getId());
+ newProgNode.setIsLastEdition(1);
+ newProgNode.setVersionNumber(pkgNode.getVersionNumber());
+ newProgNode.setFlowProgramFileId(flowProgramFile.getId());
+ newProgNode.setIsCured(1);
+ ncNodeService.save(newProgNode);
+
+ //淇敼鏂囦欢鍐呭鏇存柊娉ㄩ噴锛屽苟鏇存柊鏂囦欢鏁版嵁鐨勫湴鍧�
+ ///鏇挎崲娉ㄩ噴鍚庢�绘槸涓嶈鍟�
+ setGhAnnotation(flowProgramFile,machine.getMachineGroupCode(),annoDicts);
+
+ flowProgramFileService.updateById(flowProgramFile);
+ }
+ }
+
+
+ /**
+ * 璁剧疆鍥哄寲娉ㄩ噴,瀹炵幇鏂瑰紡锛岃幏鍙栨枃浠跺瓧鑺備笅锛屼慨鏀瑰悗鏇挎崲鏂囦欢
+ * @param flowProgramFile oss 鏂囦欢
+ *
+ */
+ void setGhAnnotation(FlowProgramFile flowProgramFile,String machineGroup,List<DictBiz> annoDicts) throws IOException {
+ String ossName = flowProgramFile.getOssName();
+ //
+ try(InputStream ins = ossTemplate.statFileStream(ossName);){
+ byte[] bytes = IOUtils.toByteArray(ins);
+ ByteArrayInputStream byteInputStream = new ByteArrayInputStream(bytes);
+
+ InputStream finishedStream = programAnnotationService.setGHAnnotation(byteInputStream,machineGroup,annoDicts);
+ /*
+ String annoTxt = programAnnotationService.generateAnnotation("GH",machineGroup,annoDicts);
+ //int statusLineIndex = 2;
+ String line2 = FileContentUtil.readLineAt(byteInputStream,ProgramAnnotationService.STATUS_LINE_INDEX);//绗笁琛屽簲璇ユ槸鐘舵�佹敞閲�
+ byteInputStream.reset();
+ InputStream finishedStream;
+ if(programAnnotationService.isAnnotation(line2,machineGroup,annoDicts)){
+ finishedStream = FileContentUtil.replaceAtLine(byteInputStream,ProgramAnnotationService.STATUS_LINE_INDEX,annoTxt);
+ }else{
+ finishedStream = FileContentUtil.insertLine(byteInputStream,ProgramAnnotationService.STATUS_LINE_INDEX,annoTxt);
+ }*/
+ try(finishedStream) {
+ finishedStream.reset();
+ BladeFile bfile = ossTemplate.putFile(flowProgramFile.getName(), finishedStream);
+ //鏇挎崲鍘熸湁鐨勬枃浠跺湴鍧�
+ flowProgramFile.setOssName(bfile.getName());
+ }
+ }
}
/**
@@ -110,7 +203,7 @@
* @return
*/
private Date calculateExpireDate() {
- R<String> validMonResult = sysClient.getParamValue(ParamContants.CURE_VALID_MONTH_KEY);
+ R<String> validMonResult = sysClient.getParamValue(ParamConstants.CURE_VALID_MONTH_KEY);
int month = DEFAULT_VALID_MONTH;
if(validMonResult.isSuccess() && validMonResult.getData()!=null){
--
Gitblit v1.9.3