package org.springblade.mdm.flow.task.cure; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.delegate.DelegateExecution; import org.springblade.mdm.flow.service.FlowCommonService; import org.springblade.mdm.flow.service.FlowProgramProperties; import org.springblade.mdm.program.entity.NcNode; import org.springblade.mdm.program.entity.NcProgram; import org.springblade.mdm.program.service.NcNodeAutoCreateService; import org.springblade.mdm.program.service.NcNodeService; import org.springframework.stereotype.Component; import java.util.List; @Slf4j @Component("cureFinishOperateTask") @AllArgsConstructor public class CureFinishOperateTask { private final NcNodeService nodeService; private final NcNodeAutoCreateService ncNodeAutoCreateService; private final FlowCommonService flowCommonService; /** * 固化审批通过处理任务, * @param execution 流程execution */ public void execute(DelegateExecution execution) { log.info("执行固化程序任务服务,流程实例id={}", execution.getProcessInstanceId()); //固化程序检查有效期, //1.将流程设置 dealWithNode(execution.getProcessInstanceId()); } /** * 处理node状态。 * @param processInstanceId 流程实例id */ void dealWithNode(String processInstanceId) { //程序包节点和下属程序节点(包括历史节点非最新版本的)从试切挪到固化下面 //程序包节点 设置未已固化 NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId, processInstanceId).one(); pkgNode.setIsCured(1); List historyNodes = nodeService.getNodeHistorys(pkgNode); moveNodeToCuredTree(pkgNode,historyNodes,flowCommonService.getProgramProperties(processInstanceId)); } /** * 将节点和历史节点挪动到固化的同级节点下 * @param historyNodes */ void moveNodeToCuredTree(NcNode pkgNode,List historyNodes, FlowProgramProperties programProperties) { NcNode node = historyNodes.get(0); //创建节点到机床级别.(固化树) NcNode machineNode = ncNodeAutoCreateService.createNodeTreeToMachine(programProperties); //移动到固化树下的机床节点下层 String newParentIds = machineNode.getParentIds()+","+machineNode.getId(); for(NcNode hisNode : historyNodes){ if(!hisNode.getId().equals(pkgNode.getId())){ hisNode.setIsLastEdition(0); } hisNode.setParentId(machineNode.getId()); hisNode.setParentIds(newParentIds); //处理程序包下层的程序节点 List programNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,hisNode.getId()).list(); for(NcNode programNode : programNodes){ programNode.setParentIds(hisNode.getParentIds()+","+hisNode.getId()); } nodeService.updateBatchById(programNodes); } nodeService.updateBatchById(historyNodes); } }