From 3baca21e0e6563f8379359ef2ba78c224eb4bc80 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期二, 23 九月 2025 22:45:51 +0800
Subject: [PATCH] 修复审批表,确认表内容
---
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java | 216 +++++++++++++++++++++++++++++------------------------
1 files changed, 117 insertions(+), 99 deletions(-)
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java
index 9db87c3..ec8432e 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java
@@ -7,23 +7,21 @@
import org.springblade.core.oss.model.BladeFile;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.mdm.basesetting.machine.MachineService;
+import org.springblade.mdm.basesetting.machine.service.MachineService;
import org.springblade.mdm.basesetting.machine.entity.Machine;
import org.springblade.mdm.commons.contants.ParamConstants;
-import org.springblade.mdm.flow.constants.FlowContants;
-import org.springblade.mdm.flow.entity.ApproveRecord;
import org.springblade.mdm.flow.entity.FlowProgramFile;
import org.springblade.mdm.flow.excution.dispatch.FinishDataHandler;
-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.program.entity.NcNode;
-import org.springblade.mdm.program.entity.NcProgramApproved;
import org.springblade.mdm.program.service.NcNodeAutoCreateService;
+import org.springblade.mdm.program.service.NcNodeHisService;
import org.springblade.mdm.program.service.NcNodeService;
-import org.springblade.mdm.program.service.NcProgramApprovedService;
import org.springblade.mdm.program.service.ProgramAnnotationService;
+import org.springblade.mdm.program.service.programannotation.AnnotationProperties;
+import org.springblade.mdm.program.service.programannotation.AnnotationUtil;
+import org.springblade.mdm.program.service.programannotation.MachineAnnotationConfig;
import org.springblade.mdm.utils.EntityUtil;
import org.springblade.system.feign.ISysClient;
import org.springblade.system.pojo.entity.DictBiz;
@@ -35,6 +33,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDate;
+import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@@ -47,13 +46,13 @@
@Component("normalCureFinishDataHandler")
public class NormalCureFinishDataHandler implements FinishDataHandler {
@Autowired
- private NcProgramApprovedService approvedService;
- @Autowired
- private ApproveRecordService approveRecordService;
+ private MachineAnnotationConfig config;
+
@Autowired
private FlowProgramFileService flowProgramFileService;
@Autowired
private NcNodeService nodeService;
+
@Autowired
private NcNodeAutoCreateService ncNodeAutoCreateService;
@Autowired
@@ -74,87 +73,124 @@
* @param flowProps 娴佺▼灞炴��
*/
public void handleData(FlowProgramProperties flowProps) {
- // 鎵ц涓氬姟閫昏緫
//闇�瑕佸浐鍖栫殑鑺傜偣
NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId, flowProps.getProcessInstanceId()).one();
+ //鍘熻妭鐐逛繚鐣欎笉鍔�,缃负鑰佺増鏈�
+ pkgNode.setIsLastEdition(0);
+ pkgNode.setIsLocked(1);
+ nodeService.updateById(pkgNode);
- //pkgNode.setIsLastEdition(0);
- //nodeService.updateById(pkgNode);
-
- List<NcNode> historyProgramPackageNodes = nodeService.getNodeHistory(pkgNode);
+ nodeService.getBaseMapper().deleteById(pkgNode.getParentId());//鍒犻櫎鏈哄簥缁勮妭鐐�
+ //List<NcNode> historyProgramPackageNodes = nodeService.getTryNodeHistory(pkgNode);
try {
- moveNodeToCuredTree(pkgNode, historyProgramPackageNodes, flowProps);
+ moveNodeToCuredTree(pkgNode, flowProps);//, historyProgramPackageNodes
+
+ //鍥哄寲涓嶉攣瀹氾紝鍚庣画杩樺彲鑳戒娇鐢ㄨ鍥哄寲绋嬪簭
+ //nodeService.lockSameNameOtherMachineGroupProgramPackage(pkgNode);
+ /*
+ nodeService.lambdaUpdate().eq(NcNode::getDrawingNo,pkgNode.getDrawingNo())
+ .eq(NcNode::getProcessNo,pkgNode.getProcessNo())
+ .eq(NcNode::getName,pkgNode.getName())
+ .ne(NcNode::getMachineGroupCode,pkgNode.getMachineGroupCode())
+ .eq(NcNode::getIsCured,1)
+ .set(NcNode::getIsLocked,NcNode.LOCKED)
+ .set(NcNode::getRemark,"鍥炰紶鍥哄寲鍚屽悕绋嬪簭閿佸畾")
+ .update();
+ */
}catch(Exception e) {
log.error("鍥哄寲娴佺▼瀹屾垚寮傚父",e);
throw new ServiceException("鏅�氬浐鍖栨墽琛屽紓甯�"+e.getMessage());
}
- //鍥哄寲娴佺▼锛屼笉鐢ㄥ啀瀵煎嚭
- updateApproveRecordNodeId(flowProps.getProcessInstanceId(), pkgNode.getId());
}
/**
* 灏嗚妭鐐瑰拰鍘嗗彶鑺傜偣鎸姩鍒板浐鍖栫殑鍚岀骇鑺傜偣涓�
- * @param pkgNode 瑕佸浐鍖栫殑鑺傜偣
- * @param historyProgramPackageNodes 绋嬪簭鍖呭悕 鍘嗗彶鑺傜偣
+ * @param pkgNode1 瑕佸浐鍖栫殑鑺傜偣
+ * @param programProperties 娴佺▼灞炴��
*/
- void moveNodeToCuredTree(NcNode pkgNode1,List<NcNode> historyProgramPackageNodes, FlowProgramProperties programProperties) throws IOException {
+ void moveNodeToCuredTree(NcNode pkgNode1, FlowProgramProperties programProperties) throws IOException {
//鍒涘缓鑺傜偣鍒版満搴婄骇鍒�.(鍥哄寲鏍�)
- NcNode machineNode = ncNodeAutoCreateService.createNodeTreeToMachine(programProperties);
+ NcNode machineGroupNode = ncNodeAutoCreateService.createNodeTreeToMachineGroup(programProperties);
- pkgNode1.setParentId(machineNode.getParentId());
- pkgNode1.setParentIds(machineNode.getParentIds());//鏇存柊涓婄骇鑺傜偣锛屼笅闈㈣繕瑕佺敤搴斾负鍦╤istoryProgramPackageNodes涓殑鍜岃繖涓笉鏄竴涓疄渚�
-
- //鏂板缓涓�涓妭鐐癸紝浣滀负鍥哄寲鑺傜偣锛岃�佽妭鐐逛繚鐣欎笉鍔�,缃负鑰佺増鏈�
-
- //鏈哄簥涓嬬幇鍦ㄦ病鏈夋枃浠朵簡锛岀▼搴忓寘鍚嶅崌绾т笌鏈哄簥鍚岀骇浜嗭紝鏀逛负鎵惧埌鏈哄簥鍚岀骇绋嬪簭鍖呭悕鏇存柊浜�
- //TODO 杩欎釜parentIds鏄笉鏄笉澶燂紵锛屼笉澶燂紝涓�涓満搴婁笅澶氫釜绋嬪簭鍖呯殑鎯呭喌涓嶈鍚э紝浣嗘槸鎸夌収鏍戯紝澶氫釜绋嬪簭鍖呬笉澶幇瀹�
- this.nodeService.lambdaUpdate().likeRight(NcNode::getParentIds, machineNode.getParentIds())
+ //鏂板缓涓�涓妭鐐癸紝浣滀负鍥哄寲鑺傜偣锛�
+ this.nodeService.lambdaUpdate().likeRight(NcNode::getParentIds, machineGroupNode.subNodeParentIds())
.in(NcNode::getNodeType, Arrays.asList(NcNode.TYPE_PROGRAM_PACKAGE,NcNode.TYPE_PROGRAM_FILE))
- //.ne(NcNode::getId,cureNode.getId())//涓嶈鏇存柊鏂板浐鍖栫殑鑺傜偣
.set(NcNode::getIsLastEdition,0).set(NcNode::getIsLocked,1).update();
- NcNode cureNode = createNewCureNodeByTargetNode(pkgNode1);
- for(NcNode hisPackageNode : historyProgramPackageNodes){
- //if(!hisPackageNode.getId().equals(pkgNode.getId())){
- hisPackageNode.setIsLastEdition(0);
- //}
- hisPackageNode.setParentId(machineNode.getParentId());
- hisPackageNode.setParentIds(machineNode.getParentIds());//绋嬪簭鍖呬笌鏈哄簥鑺傜偣鍚岀骇
+ List<NcNode> programNodes = nodeService.getProgramFilesByPackageId(pkgNode1.getId());
+ boolean tryPkgNodeHasChild = !programNodes.isEmpty();
- //澶勭悊绋嬪簭鍖呬笅灞傜殑绋嬪簭鑺傜偣锛岃繖閲岋細鑰佺殑绋嬪簭鑺傜偣涓嶇敤鏇存柊涓哄巻鍙茬増鏈紝鍥犱负浼氬缓绔嬫柊鑺傜偣銆傚彧淇敼parentId 鍜� parentIds
- List<NcNode> oriProgramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,hisPackageNode.getId()).list();
- FlowProgramFile pfile;
- for(NcNode oldProgramNode : oriProgramNodes){
- oldProgramNode.setParentIds(hisPackageNode.getParentIds()+","+hisPackageNode.getId());
- //oldProgramNode.setIsLastEdition(0);
+ //鏂板缓鍥哄寲鑺傜偣
+ NcNode cureNode = createNewCureNodeByTargetNode(pkgNode1,tryPkgNodeHasChild);
+ cureNode.setParentId(machineGroupNode.getId());
+ cureNode.setParentIds(machineGroupNode.subNodeParentIds());
+ nodeService.save(cureNode);
- pfile = flowProgramFileService.getById(oldProgramNode.getFlowProgramFileId());
- if(oldProgramNode.getParentId().equals(pkgNode1.getId()) && !pfile.isProgram()){
- //褰撳墠鍥哄寲绋嬪簭鍖呭悕涓嬬殑鈥滃叾浠栨枃浠垛�濋潪绋嬪簭鏂囦欢銆備笉璁剧疆涓鸿�佺増鏈紝鐩存帴鎸埌鍥哄寲鏍戜笅,涓や釜缃戠粶涔嬮棿鍙氦鎹㈢▼搴忔枃浠讹紝鍏朵粬鏂囦欢鍙兘淇濈暀
- //oldProgramNode.setIsLastEdition(1);
- //鍏朵粬鏂囦欢锛岄渶瑕佸鍒跺埌鏂板缓鐨勫浐鍖栬妭鐐逛笅
- NcNode newOtherFileNode = new NcNode();
- BeanUtils.copyProperties(oldProgramNode,newOtherFileNode);
- EntityUtil.clearBaseProperties(newOtherFileNode);
- newOtherFileNode.setParentId(cureNode.getId());
- newOtherFileNode.setParentIds(cureNode.getParentIds()+","+cureNode.getId());
- newOtherFileNode.setIsLastEdition(1);
- nodeService.save(newOtherFileNode);
- }
-
+ this.copyNonProgramNodes(pkgNode1,cureNode);
+ /*
+ List<NcNode> oriProgramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,pkgNode1.getId()).list();
+ FlowProgramFile pfile;
+ for(NcNode oldProgramNode : oriProgramNodes){
+ oldProgramNode.setParentIds(pkgNode1.subNodeParentIds());
+ oldProgramNode.setIsLastEdition(0);
+ //褰撳墠鍥哄寲绋嬪簭鍖呭悕涓嬬殑鈥滃叾浠栨枃浠垛�濋潪绋嬪簭鏂囦欢銆備笉璁剧疆涓鸿�佺増鏈紝鐩存帴鎸埌鍥哄寲鏍戜笅,涓や釜缃戠粶涔嬮棿鍙氦鎹㈢▼搴忔枃浠讹紝鍏朵粬鏂囦欢鍙兘淇濈暀
+ //鍏朵粬鏂囦欢锛岄渶瑕佸鍒跺埌鏂板缓鐨勫浐鍖栬妭鐐逛笅锛堢▼搴忔枃浠朵笉澶嶅埗锛�
+ pfile = flowProgramFileService.getById(oldProgramNode.getFlowProgramFileId());
+ if(!pfile.isProgram()) {
+ NcNode newFileNode = new NcNode();
+ BeanUtils.copyProperties(oldProgramNode, newFileNode);
+ EntityUtil.clearBaseProperties(newFileNode);
+ newFileNode.setParentId(cureNode.getId());
+ newFileNode.setParentIds(cureNode.subNodeParentIds());
+ newFileNode.setIsLastEdition(1);
+ nodeService.save(newFileNode);
}
- nodeService.updateBatchById(oriProgramNodes);
- }
- nodeService.updateBatchById(historyProgramPackageNodes);
+ }
+ nodeService.updateBatchById(oriProgramNodes);
+ */
+
+ this.addNewProgramNode(cureNode,pkgNode1.getProcessInstanceId());
+
+ }
+
+ /**
+ * 浠庡緟鍥哄寲鑺傜偣澶嶅埗闈炵▼搴忔枃浠惰妭鐐瑰埌鍥哄寲鑺傜偣涓�
+ * @param oriPkgNode 寰呭浐鍖栬妭鐐�
+ * @param cureNode 鍥哄寲鑺傜偣
+ */
+ void copyNonProgramNodes(NcNode oriPkgNode,NcNode cureNode){
+ List<NcNode> oriProgramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,oriPkgNode.getId()).list();
+ FlowProgramFile pfile;
+ for(NcNode oldProgramNode : oriProgramNodes){
+ oldProgramNode.setParentIds(oriPkgNode.subNodeParentIds());
+ oldProgramNode.setIsLastEdition(0);
+ //褰撳墠鍥哄寲绋嬪簭鍖呭悕涓嬬殑鈥滃叾浠栨枃浠垛�濋潪绋嬪簭鏂囦欢銆備笉璁剧疆涓鸿�佺増鏈紝鐩存帴鎸埌鍥哄寲鏍戜笅,涓や釜缃戠粶涔嬮棿鍙氦鎹㈢▼搴忔枃浠讹紝鍏朵粬鏂囦欢鍙兘淇濈暀
+ //鍏朵粬鏂囦欢锛岄渶瑕佸鍒跺埌鏂板缓鐨勫浐鍖栬妭鐐逛笅锛堢▼搴忔枃浠朵笉澶嶅埗锛�
+ pfile = flowProgramFileService.getById(oldProgramNode.getFlowProgramFileId());
+ if(!pfile.isProgram()) {
+ NcNode newFileNode = new NcNode();
+ BeanUtils.copyProperties(oldProgramNode, newFileNode);
+ EntityUtil.clearBaseProperties(newFileNode);
+ newFileNode.setParentId(cureNode.getId());
+ newFileNode.setParentIds(cureNode.subNodeParentIds());
+ newFileNode.setIsLastEdition(1);
+ nodeService.save(newFileNode);
+ }
+
+ }
+ nodeService.updateBatchById(oriProgramNodes);
+ }
+
+ void addNewProgramNode(NcNode cureNode,String processInstanceId) throws IOException {
Machine machine = machineService.getByCode(cureNode.getMachineCode());
- List<DictBiz> annoDicts = programAnnotationService.getAnnotionList();
- //鏂扮殑娴佺▼鏂囦欢锛岄渶瑕佸湪鍖呰妭鐐逛笅鏂板缓锛屼笉鑳界敤鑰佺殑
- List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,pkgNode1.getProcessInstanceId()).list();
+ List<DictBiz> annoDicts = programAnnotationService.getAnnotionDictList();
+ //鏂扮殑娴佺▼鏂囦欢锛岄渶瑕佸湪鍖呰妭鐐逛笅鏂板缓锛屼笉鑳界敤鑰佺殑鍖呰妭鐐�
+ List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,processInstanceId).list();
for(FlowProgramFile flowProgramFile : files){
NcNode newProgNode = new NcNode();
@@ -164,25 +200,24 @@
newProgNode.setName(flowProgramFile.getName());
newProgNode.setNodeType(NcNode.TYPE_PROGRAM_FILE);
newProgNode.setParentId(cureNode.getId());
- newProgNode.setParentIds(cureNode.getParentIds()+","+cureNode.getId());
+ newProgNode.setParentIds(cureNode.subNodeParentIds());
newProgNode.setIsLastEdition(1);
newProgNode.setFlowProgramFileId(flowProgramFile.getId());
newProgNode.setIsCured(1);
- setGhAnnotation(flowProgramFile,machine.getMachineGroupCode(),annoDicts);
+ setGhAnnotation(flowProgramFile,machine.getControlSystem(),annoDicts);
nodeService.save(newProgNode);
}
-
-
}
/**
* 澶嶅埗寰呭浐鍖栬妭鐐规暟鎹紝鍒涘缓涓�涓柊鐨勫浐鍖栬妭鐐�
* @param waitingCureNode 寰呭浐鍖栬妭鐐�
+ * @param tryPkgNodeHasProgramFiles 鏄惁鏈夌▼搴忔枃浠�
* @return 鍥哄寲鑺傜偣
*/
- NcNode createNewCureNodeByTargetNode(NcNode waitingCureNode){
+ NcNode createNewCureNodeByTargetNode(NcNode waitingCureNode,boolean tryPkgNodeHasProgramFiles){
//鏂板缓涓�涓妭鐐癸紝浣滀负鍥哄寲鑺傜偣锛岃�佽妭鐐逛繚鐣欎笉鍔�
NcNode cureNode = new NcNode();
BeanUtils.copyProperties(waitingCureNode, cureNode);
@@ -192,17 +227,18 @@
cureNode.setIsLastEdition(1);
cureNode.setExpireDate(calculateExpireDate());//璁剧疆杩囨湡鏃ユ湡
+ cureNode.setHisSerial(nodeService.calculateHistorySerial(cureNode));
+
Optional<NcNode> optOldCuredPackageNode = nodeService.lambdaQuery().eq(NcNode::getName,waitingCureNode.getName())
.eq(NcNode::getProcessNo,waitingCureNode.getProcessNo())
.eq(NcNode::getProcessEdition,waitingCureNode.getProcessEdition())
.eq(NcNode::getIsLastEdition,1).eq(NcNode::getIsCured,1).oneOpt();
- if(optOldCuredPackageNode.isEmpty()){
+ if(optOldCuredPackageNode.isEmpty() && tryPkgNodeHasProgramFiles){
//涔嬪墠 娌℃湁宸插浐鍖栫殑绋嬪簭鍖呭悕锛屽垯鐩存帴鏇存柊鐗堟湰鍙凤紝濡傛灉鏈夛紝閭e氨浣跨敤node鐜板湪鐨勭増鏈彿锛屽洜涓轰笉鍙敤杞负璇曞垏锛屽鎵瑰畬鎴愬凡缁忓崌绾ersion
+ //tryPkdNodeHasProgramFiles 璇曞垏绋嬪簭鍖呬笅鏈夌▼搴忔枃浠舵墠闇�瑕佸崌绾х増鏈紙娌℃湁鏂囦欢鐨勬槸杞﹀簥锛屾棤鏂囦欢锛岀洿鎺ョ瓑寰呭洖浼狅級
cureNode.upgradeVersionNumber();
}
-
- nodeService.save(cureNode);
return cureNode;
}
@@ -211,15 +247,19 @@
* @param flowProgramFile oss 鏂囦欢
*
*/
- void setGhAnnotation(FlowProgramFile flowProgramFile,String machineGroup,List<DictBiz> annoDicts) throws IOException {
+ void setGhAnnotation(FlowProgramFile flowProgramFile,String controlSystem,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);
-
+ List<DictBiz> annoDictList = programAnnotationService.getAnnotionDictList();
+ AnnotationProperties annoProps = config.getConfigMap().get(controlSystem);
+ if(annoProps == null){
+ annoProps = AnnotationProperties.getDefault();
+ }
+ InputStream finishedStream =AnnotationUtil.setAnnotationAndGetInputStream(byteInputStream, AnnotationUtil.GH, annoProps.getStatusLineIndex(), controlSystem, annoDictList);
try(finishedStream) {
finishedStream.reset();
BladeFile bfile = ossTemplate.putFile(flowProgramFile.getName(), finishedStream);
@@ -231,9 +271,10 @@
}
}
+
/**
* 璁$畻鏈夋晥鏈�
- * @return
+ * @return 杩囨湡鏃�
*/
private Date calculateExpireDate() {
R<String> validMonResult = sysClient.getParamValue(ParamConstants.CURE_VALID_MONTH_KEY);
@@ -247,27 +288,4 @@
return DateUtil.toDate(now.plusMonths(month));
}
- /**
- * 淇濆瓨瀹℃壒瀹屾垚鐨勮褰�
- * @param packageNode
- * @param props
- */
- void addApproveTable(NcNode packageNode,FlowProgramProperties props){
- NcProgramApproved approved = new NcProgramApproved();
-
- approved.setProgramName(packageNode.getName());
- approved.setNcNodeId(packageNode.getId());//绋嬪簭鍖呰妭鐐筰d
- approved.setTitle(props.getTitle());
- approved.setProgrammerId(props.getProgrammerId());
- approvedService.save(approved);
-
- }
-
-
- void updateApproveRecordNodeId(String processInstanceId,Long nodeId){
- //鏇存柊瀹℃壒璁板綍鐨刵cNodeId
- approveRecordService.lambdaUpdate()
- .eq(ApproveRecord::getProcessInstanceId, processInstanceId)
- .set(ApproveRecord::getNcNodeId,nodeId).update();
- }
}
--
Gitblit v1.9.3