blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/controller/DispatchController.java
@@ -57,6 +57,7 @@ boolean isDuplicate = taskDispatchService.checkIsDuplicate(startVO); TaskDispatch dispatch = taskDispatchService.saveTask(startVO,isDuplicate); startVO.setCreateUser(dispatch.getCreateUser()); if(isDuplicate){ throw new ServiceException("重复派工"); } blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/append/AppendFinishListener.java
@@ -3,12 +3,14 @@ import lombok.extern.slf4j.Slf4j; import org.flowable.engine.RuntimeService; import org.flowable.engine.delegate.DelegateExecution; import org.springblade.core.tool.utils.DateUtil; 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.entity.NcProgramApproved; 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.utils.EntityUtil; @@ -16,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; /** @@ -32,12 +35,15 @@ private FlowCommonService flowCommonService; @Autowired private NcNodeService ncNodeService; @Autowired private NcNodeHisService nodeHisService; /** * 在流程结束时自动调用,(配置在审批结束事件的executelistener中了) * @param execution 执行对象 */ public void handle(DelegateExecution execution) { Date time = DateUtil.now(); // 执行业务逻辑 String instId = execution.getProcessInstanceId(); log.info("事件名称{},instid={}" , execution.getEventName(),instId); @@ -80,6 +86,8 @@ } addApproveTable(tempPkgNode,props); nodeHisService.mergeNodeToHisGeTime(time); log.info("程序补充流程已完成in AppendFinishListener"); } blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/CureFinishOperateTask.java
@@ -31,8 +31,6 @@ private final NormalCureFinishDataHandler normalCureFinishDataHandler; private final DeviationCureFinishDataHandler deviationCureFinishDataHandler; private final NcNodeService ncNodeService; /** * 固化审批通过处理任务, * @@ -44,6 +42,7 @@ Date time = DateUtil.now(); //固化程序检查有效期, dealWithNode(execution.getProcessInstanceId()); nodeHisService.mergeNodeToHisGeTime(time); } @@ -74,8 +73,4 @@ } } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/DeviationCureFinishDataHandler.java
@@ -29,10 +29,6 @@ private FlowProgramFileService flowProgramFileService; @Autowired private NcNodeService nodeService; @Autowired private NcNodeAutoCreateService ncNodeAutoCreateService; @Autowired private MachineService machineService; /** * cureFinishOperateTask调用,偏离单回传审批完成处理业务 @@ -40,7 +36,6 @@ */ public void handleData(FlowProgramProperties props) { // 执行业务逻辑 String instId = props.getProcessInstanceId(); NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId, props.getProcessInstanceId()).one(); pkgNode.lock(); @@ -55,8 +50,21 @@ nodeService.save(newPkgNode); //处理程序包下层的程序节点111 List<NcNode> oriProgramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,pkgNode.getId()).list(); 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()); @@ -66,17 +74,23 @@ NcNode newOtherFileNode = new NcNode(); BeanUtils.copyProperties(oldProgramNode,newOtherFileNode); EntityUtil.clearBaseProperties(newOtherFileNode); newOtherFileNode.setParentId(newPkgNode.getId()); newOtherFileNode.setParentIds(newPkgNode.getParentIds()+","+newPkgNode.getId()); newOtherFileNode.setParentId(cureNode.getId()); newOtherFileNode.setParentIds(cureNode.subNodeParentIds()); newOtherFileNode.setIsLastEdition(1); nodeService.save(newOtherFileNode); } } //nodeService.updateBatchById(oriProgramNodes); } /** * 加入新的程序文件节点 * @param newPkgNode 新的节点(固化的) * @param processInstanceId 流程实例id */ void addNewProgramNode(NcNode newPkgNode,String processInstanceId){ //新的文件作为最新版本 List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,pkgNode.getProcessInstanceId()).list(); List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,processInstanceId).list(); for(FlowProgramFile flowProgramFile : files){ NcNode newProgNode = new NcNode(); BeanUtils.copyProperties(newPkgNode, newProgNode); @@ -85,7 +99,7 @@ newProgNode.setName(flowProgramFile.getName()); newProgNode.setNodeType(NcNode.TYPE_PROGRAM_FILE); newProgNode.setParentId(newPkgNode.getId()); newProgNode.setParentIds(newPkgNode.getParentIds()+","+newPkgNode.getId()); newProgNode.setParentIds(newPkgNode.subNodeParentIds()); newProgNode.setIsLastEdition(1); newProgNode.setVersionNumber(newPkgNode.getVersionNumber()); newProgNode.setFlowProgramFileId(flowProgramFile.getId()); @@ -93,8 +107,5 @@ nodeService.save(newProgNode); } log.info("偏离回传Listener完成"); } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java
@@ -76,7 +76,12 @@ //需要固化的节点 NcNode pkgNode = nodeService.lambdaQuery().eq(NcNode::getProcessInstanceId, flowProps.getProcessInstanceId()).one(); //原节点保留不动,置为老版本 pkgNode.setIsLastEdition(0); pkgNode.setIsLocked(1); nodeService.updateById(pkgNode); nodeService.getBaseMapper().deleteById(pkgNode.getParentId());//删除机床组节点 //List<NcNode> historyProgramPackageNodes = nodeService.getTryNodeHistory(pkgNode); try { moveNodeToCuredTree(pkgNode, flowProps);//, historyProgramPackageNodes @@ -91,20 +96,18 @@ /** * 将节点和历史节点挪动到固化的同级节点下 * @param pkgNode1 要固化的节点 * @param historyProgramPackageNodes 程序包名 历史节点List<NcNode> historyProgramPackageNodes, * @param programProperties 流程属性 */ void moveNodeToCuredTree(NcNode pkgNode1, FlowProgramProperties programProperties) throws IOException { //创建节点到机床级别.(固化树) NcNode machineGroupNode = ncNodeAutoCreateService.createNodeTreeToMachineGroup(programProperties); //新建一个节点,作为固化节点,老节点保留不动,置为老版本 //新建一个节点,作为固化节点, this.nodeService.lambdaUpdate().likeRight(NcNode::getParentIds, machineGroupNode.subNodeParentIds()) .in(NcNode::getNodeType, Arrays.asList(NcNode.TYPE_PROGRAM_PACKAGE,NcNode.TYPE_PROGRAM_FILE)) .set(NcNode::getIsLastEdition,0).set(NcNode::getIsLocked,1).update(); //pkgNode1.setParentId(machineGroupNode.getId()); //pkgNode1.setParentIds(machineGroupNode.subNodeParentIds());//更新上级节点,下面还要用应为在historyProgramPackageNodes中的和这个不是一个实例 List<NcNode> programNodes = nodeService.getProgramFilesByPackageId(pkgNode1.getId()); boolean tryPkgNodeHasChild = !programNodes.isEmpty(); @@ -114,64 +117,67 @@ cureNode.setParentIds(machineGroupNode.subNodeParentIds()); nodeService.save(cureNode); this.copyNonProgramNodes(pkgNode1,cureNode); /* List<NcNode> oriProgramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,pkgNode1.getId()).list(); //FlowProgramFile pfile; FlowProgramFile pfile; for(NcNode oldProgramNode : oriProgramNodes){ oldProgramNode.setParentIds(pkgNode1.subNodeParentIds()); oldProgramNode.setIsLastEdition(0); //pfile = flowProgramFileService.getById(oldProgramNode.getFlowProgramFileId()); //当前固化程序包名下的“其他文件”非程序文件。不设置为老版本,直接挪到固化树下,两个网络之间只交换程序文件,其他文件只能保留 //其他文件,需要复制到新建的固化节点下 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); //其他文件,需要复制到新建的固化节点下(程序文件不复制) 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); /* for(NcNode hisPackageNode : historyProgramPackageNodes){ hisPackageNode.setIsLastEdition(0); hisPackageNode.setParentId(machineGroupNode.getParentId()); hisPackageNode.setParentIds(machineGroupNode.subNodeParentIds());//程序包与机床节点同级 hisPackageNode.lock(); */ //处理程序包下层的程序节点,这里:老的程序节点不用更新为历史版本,因为会建立新节点。只修改parentId 和 parentIds //改了,看看效果 List<NcNode> oriProgramNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,hisPackageNode.getId()).list(); FlowProgramFile pfile; for(NcNode oldProgramNode : oriProgramNodes){ oldProgramNode.setParentIds(hisPackageNode.subNodeParentIds()); oldProgramNode.setIsLastEdition(0); this.addNewProgramNode(cureNode,pkgNode1.getProcessInstanceId()); pfile = flowProgramFileService.getById(oldProgramNode.getFlowProgramFileId()); //if(oldProgramNode.getParentId().equals(pkgNode1.getId()) && !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); //} } /** * 从待固化节点复制非程序文件节点到固化节点下 * @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); } nodeService.updateBatchById(oriProgramNodes); } */ //nodeService.updateBatchById(historyProgramPackageNodes); void addNewProgramNode(NcNode cureNode,String processInstanceId) throws IOException { Machine machine = machineService.getByCode(cureNode.getMachineCode()); List<DictBiz> annoDicts = programAnnotationService.getAnnotionDictList(); //新的流程文件,需要在包节点下新建,不能用老的 List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,pkgNode1.getProcessInstanceId()).list(); //新的流程文件,需要在包节点下新建,不能用老的包节点 List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,processInstanceId).list(); for(FlowProgramFile flowProgramFile : files){ NcNode newProgNode = new NcNode(); @@ -190,8 +196,6 @@ nodeService.save(newProgNode); } } /** blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveInfoQueryService.java
@@ -101,10 +101,10 @@ //查询数控程序编号 Optional<NcProgramApproved> appOpt = programApprovedService.lambdaQuery().eq(NcProgramApproved::getProcessInstanceId, props.getProcessInstanceId()).oneOpt(); if(appOpt.isEmpty()){ appInfo.setProgramNo("(未生成)"); appInfo.setProgramName("(未生成)"); }else{ NcNodeHis programPkgNameNode = this.ncNodeHisService.getById(appOpt.get().getNcNodeId()); appInfo.setProgramNo(programPkgNameNode.programNo()); appInfo.setProgramName(programPkgNameNode.programName()); } return appInfo; blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ProgramConfirmTableService.java
@@ -143,7 +143,7 @@ data.put("checkerName",approveInfo.getCheckerName()); data.put("seniorName",approveInfo.getSeniorName()); data.put("programNo",approveInfo.getProgramNo()); data.put("programNo",approveInfo.getProgramName()); return data; } blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/vo/ApproveTableInfo.java
@@ -28,5 +28,5 @@ /** * 数控程序编号 */ private String programNo; private String programName; } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/entity/NcNodeHis.java
@@ -82,7 +82,10 @@ * 产品型号 */ private String productModel; /** * 程序编号(程序包名节点需要) */ private String programNo; /** * 历史序列号 */ @@ -143,7 +146,7 @@ return this.isLocked != null && this.isLocked == NcNode.LOCKED; } public String programNo() { public String programName() { return this.getDrawingNo()+"-"+this.getProcessNo()+"-"+this.getProcessEdition(); } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/NcNodeMapper.xml
@@ -48,7 +48,7 @@ ) AS "has_children" from mdm_nc_node n left join blade_user u on n.create_user=u.id left join blade_dict_biz dt on n.node_type=dt.dict_key and dt.code='nc_node_type' and dt.is_deleted=0 where n.is_deleted=0 and n.is_last_edition=1 and n.parent_id=#{parentId} order by name order by id </select> blade-service/blade-mdm/src/main/java/org/springblade/mdm/statreport/service/ConfirmTablePrintService.java
@@ -29,6 +29,8 @@ import org.springblade.mdm.flow.vo.ApproveTableInfo; import org.springblade.mdm.flow.vo.FlowVO; import org.springblade.mdm.program.entity.NcNode; import org.springblade.mdm.program.entity.NcNodeHis; import org.springblade.mdm.program.service.NcNodeHisService; import org.springblade.mdm.program.service.NcNodeService; import org.springblade.mdm.statreport.utils.WordReplaceUtil; import org.springblade.system.feign.IDictBizClient; @@ -48,13 +50,14 @@ @Service @AllArgsConstructor public class ConfirmTablePrintService { private final RuntimeService runtimeService; private final IDictBizClient dictBizClient; private final HistoryService historyService; private final FlowProgramFileService flowProgramFileService; private ApproveInfoQueryService approveInfoQueryService; private final MachineService machineService; private final NcNodeService nodeService; private final NcNodeHisService nodeHisService; private final ParamService paramService; private final TaskDispatchService taskDispatchService; private final OssTemplate ossTemplate; @@ -85,7 +88,8 @@ machine = machineService.getByCode(machineCode); Map<String, String> dataMap = new HashMap<>(); NcNode node = this.nodeService.getById(props.getNodeId()); //NcNode node = this.nodeService.getById(props.getNodeId()); NcNodeHis node = nodeHisService.getById(props.getNodeId()); TaskDispatch dispatch = taskDispatchService.getByProgramNo(node.getProgramNo()); if(dispatch == null){ doc/sql/mdm/mdm.mysql.all.create.sql
@@ -179,6 +179,7 @@ `parent_ids` varchar(200) DEFAULT NULL COMMENT '上级节点ID集合,id逗号分隔', `node_type` varchar(20) DEFAULT NULL COMMENT '节点类型:业务字典定义', `product_model` varchar(100) NULL COMMENT '产品型号', `program_no` varchar(20) NULL COMMENT '程序编号,只有程序包名节点才有值', `his_serial` bigint NULL COMMENT '历史序列号,序列号相同属于同一历史列表', `flow_program_file_id` bigint NULL COMMENT '关联的流程程序文件id,程序文件类型的节点才有值', `process_instance_id` varchar(64) NULL COMMENT '关联的流程实例id,程序包 类型的节点才有值',