|
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<FlowProgramFile> 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.getName());//文件名,
|
node.setParentId(programPkdNode.getId());
|
node.setParentIds(programPkdNode.getParentIds()+","+programPkdNode.getId());
|
|
node.setDrawingNo(programPkdNode.getDrawingNo());
|
node.setDrawingNoEdition(programProperties.getDrawingNoEdition());
|
node.setCraftEdition(programProperties.getCraftEdition());
|
node.setProcessName(programProperties.getProcessName());
|
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.getProcessNo(),NcNode.TYPE_PROCESS_NO, craftEditionNode,null);
|
//工序版次节点
|
NcNode processEditionNode = createNodeIfNotExists(programProperties.getProcessEdition(),NcNode.TYPE_PROCESS_EDITION, processNoNode,null);
|
//加工机床节点
|
NcNode machineCodeNode = createNodeIfNotExists(programProperties.getMachineCode(),NcNode.TYPE_MACHINE_CODE, processEditionNode,null);
|
//程序包名节点
|
String programPkgName = programProperties.getDrawingNo()+"-"+programProperties.getProcessNo();//零件号加工序号
|
NcNode programPkgNode = createNodeIfNotExists(programPkgName ,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<NcNode> 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<NcNode> 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;
|
}
|
}
|