package org.springblade.mdm.program.service; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.mp.base.BizServiceImpl; import org.springblade.core.tool.utils.Func; 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.mapper.NcNodeMapper; import org.springblade.mdm.program.vo.NcNodeQueryVO; import org.springblade.mdm.program.vo.NcNodeVO; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Optional; /** * 程序节点 * * @author yangys */ @Slf4j @Service @AllArgsConstructor public class NcNodeAutoCreateService { private final NcNodeService ncNodeService; private final FlowCommonService flowCommonService; private final FlowProgramFileService flowProgramFileService; public static final String SHIQIE_NAME = "试切"; public static final String GUHUA_NAME = "固化"; public static final String PIANLI_NAME = "偏离"; /** * 根据流程信息,自动创建各个节点 * @param processInstanceId */ public void createNodeTree(String processInstanceId) { FlowProgramProperties programProperties = flowCommonService.getProgramProperties(processInstanceId); //,int rootNodeCatgory = 1:试切,2固化,3偏离 NcNode programPkdNode = createTreeToProgramPackageByRootCategory(1,programProperties); List programFiles = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, processInstanceId).list(); for (FlowProgramFile programFile : programFiles) { createProgramFileNode(programFile,programPkdNode,programProperties); } } private void createProgramFileNode(FlowProgramFile programFile, NcNode programPkdNode, FlowProgramProperties programProperties) { NcNode node = new NcNode(); node.setNodeType(NcNode.TYPE_PROGRAM_FILE); node.setName(programFile.getProgramName()); node.setParentId(programPkdNode.getId()); node.setParentIds(programPkdNode.getParentIds()+","+programPkdNode.getId()); node.setDrawingNo(programPkdNode.getDrawingNo()); node.setDrawingNoEdition(programProperties.getDrawingNoEdition()); node.setProcessNo(programProperties.getProcessNo()); node.setMachineCode(programProperties.getMachineCode()); node.setProductModel(programProperties.getProductModel()); node.setFlowProgramFileId(programFile.getId()); ncNodeService.save(node); } NcNode createTreeToProgramPackageByRootCategory(int category,FlowProgramProperties programProperties) { NcNode root; if(category == 1){ //试切 root = rootNodeByName(SHIQIE_NAME); if(root == null){ root = createShiqieNode(); } }else if(category == 2){ root = rootNodeByName(GUHUA_NAME); if(root == null){ root = createCureNode(); } }else{ root = rootNodeByName(PIANLI_NAME); if(root == null){ root = createPianliNode(); } } //创建产品型号节点 //NcNode productModelNode = createProductModelNode(programProperties.getProductModel(), root); NcNode productModelNode = createNodeIfNotExists(programProperties.getProductModel(),NcNode.TYPE_PRODUCT_MODEL, root,null); //零组件号节点 NcNode drawingNoNode = createNodeIfNotExists(programProperties.getDrawingNo(),NcNode.TYPE_DRAWING_NO, productModelNode,null); //工艺版次节点 NcNode craftEditionNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_CRAFT_EDITION, drawingNoNode,null); //工序号节 NcNode processNoNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_PROCESS_NO, craftEditionNode,null); //工序版次节点 NcNode processEditionNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_PROCESS_EDITION, processNoNode,null); //加工机床节点 NcNode machineCodeNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_MACHINE_CODE, processEditionNode,null); //程序包名节点 NcNode programPkgNode = createNodeIfNotExists(programProperties.getCraftEdition(),NcNode.TYPE_PROGRAM_PACKAGE, machineCodeNode,programProperties.getProcessInstanceId()); return programPkgNode; //程序文件节点,多个文件需要循环创建 } /* NcNode createProductModelNode(String name,NcNode parentNode){ NcNode ncNode = new NcNode(); ncNode.setName(name); ncNode.setParentId(parentNode.getId()); ncNode.setParentIds(parentNode.getParentIds()+","+parentNode.getId()); ncNode.setNodeType("15"); ncNodeService.save(ncNode); return ncNode; } */ /** * 不存在则创建节点 * @param name 节点名称 * @param nodeType 节点类型 * @param parentNode 父节点 * @return */ NcNode createNodeIfNotExists(String name,String nodeType,NcNode parentNode,String processInstanceId) { Optional nodeOpt = this.ncNodeService.lambdaQuery().eq(NcNode::getName,name).eq(NcNode::getNodeType,nodeType).eq(NcNode::getParentId,parentNode.getId()).oneOpt(); if(nodeOpt.isPresent()){ return nodeOpt.get(); }else { NcNode ncNode = new NcNode(); ncNode.setName(name); ncNode.setParentId(parentNode.getId()); ncNode.setParentIds(parentNode.getParentIds() + "," + parentNode.getId()); ncNode.setNodeType(nodeType); ncNode.setProcessInstanceId(processInstanceId); ncNodeService.save(ncNode); return ncNode; } } /** * 根节点是否存在,根节点只有 试切/分离/固化 3个 * @param name 节点名称 * @return */ boolean rootNodeExists(String name){ return ncNodeService.lambdaQuery().eq(NcNode::getName, name).eq(NcNode::getParentId, 0).count()>0; } NcNode rootNodeByName(String name){ Optional rootOpt = ncNodeService.lambdaQuery().eq(NcNode::getName, name).eq(NcNode::getParentId, 0).oneOpt(); return rootOpt.orElse(null); } /** * 创建试切节点(根) */ NcNode createShiqieNode() { NcNode ncNode = new NcNode(); ncNode.setId(1L); ncNode.setName(SHIQIE_NAME); ncNode.setParentId(0L); ncNode.setParentIds(""); ncNode.setNodeType("10"); ncNodeService.save(ncNode); return ncNode; } /** * 创建固化节点(根) */ NcNode createCureNode() { NcNode ncNode = new NcNode(); ncNode.setId(2L); ncNode.setName(GUHUA_NAME); ncNode.setParentId(0L); ncNode.setParentIds(""); ncNode.setNodeType("10"); ncNodeService.save(ncNode); return ncNode; } NcNode createPianliNode() { NcNode ncNode = new NcNode(); ncNode.setId(3L); ncNode.setName(PIANLI_NAME); ncNode.setParentId(0L); ncNode.setParentIds(""); ncNode.setNodeType("10"); ncNodeService.save(ncNode); return ncNode; } }