知识大全 判断流程开始节点是否能连通到结束节点

Posted 结束

篇首语:敢说敢作敢为, 无怨无恨无悔。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 判断流程开始节点是否能连通到结束节点相关的知识,希望对你有一定的参考价值。

  在流程管理中 有用户自定义流程的需求 就是用户自己建立流程节点 并指定流程节点的走向         因为是用户自己操作 所以需要对用户建立的流程的连通性进行判断 从开始节点经过若干审核节点的流转后是否最终能到达结束节点         一个流程必须有一个开始节点 一个结束节点和若干审核节点         例如用户建立的节点如下

  

  然后用户指定节点的流向

   )正确的节点流向

  

  以上这些都是正确的节点流向 所谓正确 就是开始节点经过若干审核节点的流转可以最终连通到结束节点

   )不正确的节点流向 

  

  以上这些都是不正确定的节点流向

  所以必须检查用户指定的流向是否能从开始节点经过若干审核节点连通到结束节点


   )建立两个表 一个节点表和一个流向表

  

   )对应的实体        节点Node:        /** * 节点 * @author Luxh * */@Entity@Table(name= t_node )public class Node         @Id        @GeneratedValue        private Integer id;        //节点名称        private String name;        //节点标记 START 开始节点 AUDIT 审核节点 END 结束节点        private String flag;        //一个检查标记位 在递归是设置 避免死循环         Y 已检查        private String checkStatus;        流向Flow:        /** * 流向 * @author Luxh * */@Entity@Table(name= t_flow )public class Flow         @Id        @GeneratedValue        private Integer id;   

    //开始编号        private Integer beginNo;        //指向编号        private Integer endNo;        )递归判断方法        /** * 节点检查测试 * @author Luxh * */public class NodeTest         EntityManagerFactory emf = null;        @Before        public void before()         //根据在persistence xml中配置的persistence unit name 创建EntityManagerFactory        emf = Persistence createEntityManagerFactory( myJPA )                 @After        public void after()         if(null != emf)         emf close()                         /**        * 添加节点数据        */        @Test        public void testAddNode()        EntityManager em = emf createEntityManager()         em getTransaction() begin()         Node n = new Node()         n setName( 开始节点 )         n setFlag( START )         Node n = new Node()         n setName( 节点 )         n setFlag( AUDIT )         Node n = new Node()         n setName( 节点 )         n setFlag( AUDIT )         Node n = new Node()         n setName( 节点 )         n setFlag( AUDIT )         Node n = new Node()         n setName( 结束节点 )         n setFlag( END )         em persist(n )         em persist(n )         em persist(n )         em persist(n )         em persist(n )         em getTransaction() mit()         em close()                 /**        * 添加节点流向数据        */        @Test        public void testAddFlow()        EntityManager em = emf createEntityManager()         em getTransaction() begin()         Flow f = new Flow()         f setBeginNo( )         f setEndNo( )         Flow f = new Flow()         f setBeginNo( )         f setEndNo( )         Flow f = new Flow()         f setBeginNo( )         f setEndNo( )         Flow f = new Flow()         f setBeginNo( )         f setEndNo( )         Flow f = new Flow()         f setBeginNo( )         f setEndNo( )         em persist(f )         em persist(f )         em persist(f )         em persist(f )         em persist(f )         em persist(f )         em getTransaction() mit()         em close()                 /**        * 测试        */        @Test        public void testIsStartCan End()         //获取JPA实体管理器        EntityManager em = emf createEntityManager()         //流程开始节点的编号        Integer beginNo = ;        List<String> flagList = new ArrayList<String>()         //因为可能会多次检查开始节点是否可以连通结束节点         //所以在调用递归检查方法前 一定要清空当前流程所有节点的标记位        //实际中节点表肯定会有一个字段表示所属流程 根据该字段清空当前流程的所有节点的标记位        //调用清空标记位方法        //…        //首次调用时 一定是传入开始节点的编号        isStartCan End(beginNo flagList em)         if(ntains( END ))         System out println( 开始节点可以连通结束节点 )         else         System out println( 开始节点无法连通结束节点 )                 em close()                 /**        * 递归判断 开始节点是否可以连通到结束节点        * @param beginNo 开始编号        * @param flagList 存放结束节点标记 递归结束后 如果flagList中有结束标记 说明开始节点可以连通到结束节点        * @param em        JPA的实体管理器 类似以hibernate的session        */        public void isStartCan End(Integer beginNo List<String> flagList EntityManager em)         //根据开始编号查询出该开始编号的所有指向的节点的编号        String jpql = select f from Flow f where f beginNo = ? ;        List<Flow> flows = em createQuery(jpql) setParameter( beginNo) getResultList()         if(flows != null && flows size()> )         //遍历开始编号所指向的所有流向        for(Flow f : flows)         //根据编号找出节点        Node n = em find(Node class f getEndNo())         //如果是结束节点 就中断循环        if( END equals(n getFlag()))         flagList add(n getFlag()) //将结束节点的标记存放到flagList中        break;        else if( START equals(n getFlag())|| Y equals(n getCheckStatus()))         //如果是开始节点 或者节点的标记位Y 说明该节点已被查找过 跳过 避免递归时死循环        continue;        else         em getTransaction() begin()         n setCheckStatus( Y ) //设置节点的标记位        rge(n)         em getTransaction() mit()         //如果是审核节点 则递归查找结束节点        isStartCan End(n getId() flagList em)                                         cha138/Article/program/Java/hx/201311/25836

相关参考

知识大全 hadoop中hdfs主节点会储存数据吗

hadoop中hdfs主节点会储存数据吗不会存储数据,数据节点专门存储数据,主节点存储了元数据信息。主节点的磁盘中存储了文件到块的关系,集群启动后,数据节点会报告名字节点机器和块的关系,这两个关系组合

知识大全 二叉树

目录二叉树三种周游(traversal)方式怎样从顶部开始逐层打印二叉树结点数据如何判断一棵二叉树是否是平衡二叉树设计一个算法找出二叉树上任意两个节点的最近共同父结点复杂度如果是O(n)则不得分如何不

知识大全 配置好oms不能搜索到数据库节点的解决办法

cha138/Article/program/Oracle/201311/19106

知识大全 JAVA IO操作总结——节点流和处理流

JAVAIO操作总结——节点流和处理流  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  按照流是否

知识大全 层次树添加节点、删除节点

  )准备数据  /*建表*/  createtablemytree(dcodevarchar()部门编码  cnamevarchar()     描述    f_dcodevarchar()    

知识大全 [范例]层次树添加节点、删除节点

  )准备数据  /*建表*/  createtablemytree(dcodevarchar()部门编码  cnamevarchar()     描述    f_dcodevarchar()    

什么叫节点电流定律?

  流入一个节点的全部电流必等于从此节点流出的全部电流,这就是节点电流定律。

什么叫节点电流定律?

  流入一个节点的全部电流必等于从此节点流出的全部电流,这就是节点电流定律。

知识大全 数据结构考研分类复习真题 第七章 图[33]

  .如下所示的连通图请画出  ().以顶点①为根的深度优先生成树(分)  ().如果有关节点请找出所有的关节点(分)【清华大学七(分)】  .某田径赛中各选手的参赛项目表如下:  设项目AB…F各表

在软横跨中,节点6、7的结构特点是什么?

  节点6、7相当于道岔定位柱的定位装配,所定位的两组悬挂均为工作支,两根接触线的高度基本一致。节点6用于L型道岔定位柱安装,节点7用于LY型道岔定位柱安装。