package org.springblade.mdm.flow.excution.cure;
|
|
import lombok.extern.slf4j.Slf4j;
|
import org.springblade.mdm.basesetting.machine.service.MachineService;
|
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.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.NcProgramApprovedService;
|
import org.springblade.mdm.utils.EntityUtil;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import java.util.List;
|
|
/**
|
* 偏离单固化完成数据处理器,功能:梳理树节点
|
*/
|
@Slf4j
|
@Component("deviationCureFinishDataHandler")
|
public class DeviationCureFinishDataHandler implements FinishDataHandler {
|
|
@Autowired
|
private FlowProgramFileService flowProgramFileService;
|
@Autowired
|
private NcNodeService nodeService;
|
|
/**
|
* cureFinishOperateTask调用,偏离单回传审批完成处理业务
|
* @param props 属性
|
*/
|
public void handleData(FlowProgramProperties props) {
|
// 执行业务逻辑
|
NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId, props.getProcessInstanceId()).one();
|
|
pkgNode.lock();
|
pkgNode.setIsLastEdition(0);
|
nodeService.updateById(pkgNode);
|
|
NcNode newPkgNode = new NcNode();
|
BeanUtils.copyProperties(pkgNode, newPkgNode);
|
EntityUtil.clearBaseProperties(newPkgNode);
|
newPkgNode.setIsLastEdition(1);
|
newPkgNode.upgradeVersionNumber();
|
|
nodeService.save(newPkgNode);
|
|
copyNonProgramNodes(pkgNode,newPkgNode);
|
|
addNewProgramNode(newPkgNode,props.getProcessInstanceId());
|
|
log.info("偏离回传Listener完成");
|
}
|
|
/**
|
* 从待固化节点复制非程序文件节点到固化节点下
|
* @param oriPkgNode 待固化节点
|
* @param cureNode 固化节点
|
*/
|
void copyNonProgramNodes(NcNode oriPkgNode,NcNode cureNode){
|
//处理程序包下层的程序节点1
|
List<NcNode> oriProgramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,oriPkgNode.getId()).list();
|
FlowProgramFile pfile;
|
for(NcNode oldProgramNode : oriProgramNodes){
|
pfile = flowProgramFileService.getById(oldProgramNode.getFlowProgramFileId());
|
if(!pfile.isProgram()){
|
//当前固化程序包名下的“其他文件”非程序文件。不设置为老版本,复制到固化树下,两个网络之间只交换程序文件,其他文件只能保留
|
//其他文件,需要复制到新建的固化节点下
|
NcNode newOtherFileNode = new NcNode();
|
BeanUtils.copyProperties(oldProgramNode,newOtherFileNode);
|
EntityUtil.clearBaseProperties(newOtherFileNode);
|
newOtherFileNode.setParentId(cureNode.getId());
|
newOtherFileNode.setParentIds(cureNode.subNodeParentIds());
|
newOtherFileNode.setIsLastEdition(1);
|
nodeService.save(newOtherFileNode);
|
}
|
|
}
|
}
|
|
/**
|
* 加入新的程序文件节点
|
* @param newPkgNode 新的节点(固化的)
|
* @param processInstanceId 流程实例id
|
*/
|
void addNewProgramNode(NcNode newPkgNode,String processInstanceId){
|
//新的文件作为最新版本
|
List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,processInstanceId).list();
|
for(FlowProgramFile flowProgramFile : files){
|
NcNode newProgNode = new NcNode();
|
BeanUtils.copyProperties(newPkgNode, newProgNode);
|
EntityUtil.clearBaseProperties(newProgNode);
|
|
newProgNode.setName(flowProgramFile.getName());
|
newProgNode.setNodeType(NcNode.TYPE_PROGRAM_FILE);
|
newProgNode.setParentId(newPkgNode.getId());
|
newProgNode.setParentIds(newPkgNode.subNodeParentIds());
|
newProgNode.setIsLastEdition(1);
|
newProgNode.setVersionNumber(newPkgNode.getVersionNumber());
|
newProgNode.setFlowProgramFileId(flowProgramFile.getId());
|
newProgNode.setIsCured(0);
|
nodeService.save(newProgNode);
|
|
}
|
}
|
}
|