Beispiel #1
0
        //向树中增加叶子
        private void FindLeafAddToNode(IRAPTreeNodes root, List <TreeLeafEntity> leafSet)
        {
            if (leafSet == null)
            {
                return;
            }
            var subLeaves = leafSet.Where(c => c.Father == root.NodeID).ToList();

            if (root.Children == null)
            {
                root.Children = new List <IRAPTreeNodes>();
            }
            foreach (var r in subLeaves)
            {
                // exists = true;
                IRAPTreeNodes node = new IRAPTreeNodes();
                node.NodeID        = -r.LeafID;
                node.NodeCode      = r.Code;
                node.NodeName      = r.NodeName;
                node.NodeDepth     = r.NodeDepth;
                node.NodeStatus    = 0;
                node.NodeType      = 4;
                node.CSTRoot       = r.CSTRoot;
                node.UDFOrdinal    = r.UDFOrdinal;
                node.TreeViewType  = 2;
                node.Parent        = r.Father;
                node.IconFile      = r.IconID.ToString();
                node.FatherNode    = root;
                node.Accessibility = 0;
                node.AlternateCode = r.AlternateCode;
                root.Children.Add(node);
            }
        }
Beispiel #2
0
        //向树中增加节点
        private void FindNodeAddToNode(IRAPTreeNodes root, List <TreeNodeEntity> nodeSet, List <TreeLeafEntity> leafSet)
        {
            var subList = nodeSet.Where(c => c.Father == root.NodeID).ToList();

            //bool exists = false;
            root.Children = new List <IRAPTreeNodes>();
            FindLeafAddToNode(root, leafSet);
            foreach (var r in subList)
            {
                // exists = true;
                IRAPTreeNodes node = new IRAPTreeNodes();
                node.NodeID        = r.NodeID;
                node.NodeCode      = r.Code;
                node.NodeName      = r.NodeName;
                node.NodeDepth     = r.NodeDepth;
                node.NodeStatus    = r.NodeStatus;
                node.NodeType      = 3;
                node.CSTRoot       = r.CSTRoot;
                node.UDFOrdinal    = r.UDFOrdinal;
                node.TreeViewType  = 2;
                node.Parent        = r.Father;
                node.IconFile      = r.IconID.ToString();
                node.FatherNode    = root;
                node.Accessibility = 0;
                node.AlternateCode = "";
                root.Children.Add(node);

                FindNodeAddToNode(node, nodeSet, leafSet);
            }
        }
Beispiel #3
0
 //权限向上追溯
 private void UpTree(IRAPTreeNodes fatherNode)
 {
     if (fatherNode == null)
     {
         return;
     }
     if (fatherNode.Accessibility != 1)
     {
         fatherNode.Accessibility = 1;
     }
     UpTree(fatherNode.FatherNode);
 }
Beispiel #4
0
        //动态创建泛型实例举例
        //public void Test()
        //{
        //    Type type = Type.GetType("IRAPBase.Entities.ERS_T1R1", true, true);
        //    var repositoryType = typeof(Repository<>);
        //   // IRepository  test;
        //    var repositoryInstance = Activator.CreateInstance(repositoryType.MakeGenericType(type), context);
        //    Console.WriteLine(type.FullName);
        //}
        /// <summary>
        /// 返回树的数据,支持懒加载
        /// </summary>
        /// <returns></returns>
        private IRAPTreeNodes TreeViewData(int entryNode = 0, bool includingLeaves = true)
        {
            //long[] pkArray = { PK + _treeID, _treeID };
            int    errCode = 0;
            string errText = "获取成功!";
            List <TreeNodeEntity> newNodelist = nodes.Where(r => r.TreeID == _treeID && _PKDict.Contains(r.PartitioningKey)).OrderBy(r => r.NodeDepth).ThenBy(r => r.NodeID).ToList();
            List <TreeNodeEntity> nodeSet     = new List <TreeNodeEntity>();

            if (entryNode > 0)
            {
                TreeNodeEntity thisNode = newNodelist.FirstOrDefault(c => c.NodeID == entryNode);
                if (thisNode == null)
                {
                    errCode = 2;
                    errText = "入口结点无效!";
                    throw new Exception($"{errCode}-{errText}");
                }
                nodeSet = newNodelist.Where(c => c.NodeDepth > thisNode.NodeDepth).OrderBy(r => r.NodeDepth).ThenBy(r => r.NodeID).ToList();
                nodeSet.Insert(0, thisNode);
            }
            else
            {
                nodeSet = newNodelist;
            }

            List <TreeLeafEntity> leafSet = null;

            if (includingLeaves)
            {
                leafSet = leaves.Where(r => r.TreeID == _treeID && _PKDict.Contains(r.PartitioningKey)).OrderBy(r => r.UDFOrdinal).Take(50000).ToList();
            }

            TreeNodeEntity node     = nodeSet.FirstOrDefault();
            IRAPTreeNodes  rootNode = new IRAPTreeNodes();

            if (node != null)
            {
                rootNode.NodeID        = node.NodeID;
                rootNode.NodeCode      = node.Code;
                rootNode.NodeName      = node.NodeName;
                rootNode.NodeDepth     = node.NodeDepth;
                rootNode.NodeStatus    = node.NodeStatus;
                rootNode.NodeType      = 3;
                rootNode.CSTRoot       = node.CSTRoot;
                rootNode.UDFOrdinal    = node.UDFOrdinal;
                rootNode.TreeViewType  = 2;
                rootNode.Parent        = node.Father;
                rootNode.IconFile      = node.IconID.ToString();
                rootNode.Accessibility = 0;
                FindNodeAddToNode(rootNode, nodeSet, leafSet);
            }
            return(rootNode);
        }
Beispiel #5
0
        //权限向下追溯
        private void DownTree(IRAPTreeNodes rootNode, List <EGrant> grantList)
        {
            //Console.WriteLine("根节点:{0}-{1}", rootNode.NodeID, rootNode.NodeName);
            if (rootNode.FatherNode == null)
            {
                if (grantList.Any(c => c.CSTRoot == rootNode.CSTRoot))
                {
                    rootNode.Accessibility = 1;
                    accessibleNodes.Add(rootNode);
                }
            }
            if (rootNode.Children == null)
            {
                //if (grantList.Any(c => c.CSTRoot == rootNode.CSTRoot))
                //{
                //    rootNode.Accessibility = 1;
                //    accessibleNodes.Add(rootNode);
                //}
                return;
            }
            bool subAccessible = false;

            if (rootNode.Accessibility == 1)
            {
                subAccessible = true;
                accessibleNodes.Add(rootNode);
            }
            foreach (var r in rootNode.Children)
            {
                if (subAccessible)
                {
                    r.Accessibility = 1;
                }
                else
                {
                    if (grantList.Any(c => c.CSTRoot == r.CSTRoot))
                    {
                        r.Accessibility = 1;
                    }
                }
                DownTree(r, grantList);
                if (r.Accessibility == 1)
                {
                    accessibleNodes.Add(r);
                }
            }
        }
Beispiel #6
0
        /// <summary>
        /// 获取树视图(带权限)
        /// </summary>
        /// <param name="agencyNode">机构标识(仅支持叶子)</param>
        /// <param name="roleNode">角色标识(</param>
        /// <returns></returns>
        public List <TreeViewDTO> AccessibleTreeView(int agencyNode, int roleNode)
        {
            IRAPGrant grant = new IRAPGrant(_communityID);

            accessibleNodes.Clear();
            List <EGrant> list = grant.GetGrantListByTree(_treeID, agencyNode, roleNode);

            IRAPTreeNodes rootTree = TreeViewData();

            DownTree(rootTree, list);
            foreach (var node in accessibleNodes)
            {
                UpTree(node);
            }
            //去掉不可访问的结点
            RemoveNoAccessible(rootTree);
            return(GetPlainTreeData(rootTree));
        }
Beispiel #7
0
        //移除看不到的树节点
        private void RemoveNoAccessible(IRAPTreeNodes rootNode)
        {
            //Console.WriteLine("根节点:{0}-{1}", rootNode.NodeID, rootNode.NodeName);

            if (rootNode.Children == null || rootNode.Children.Count == 0)
            {
                return;
            }
            var list = rootNode.Children;

            //var q = from c in list.ToArray() where c.Accessibility == 0 select c;
            //foreach (var ei in q)
            //{
            //    list.Remove(ei);       //删除了
            //    Console.WriteLine("节点{0}无权访问已删除!", ei.NodeID);
            //}
            list.RemoveAll(s => s.Accessibility == 0);
            var q2 = from c in list where c.Accessibility == 1 select c;

            foreach (var ei in q2)
            {
                RemoveNoAccessible(ei);
            }
        }
Beispiel #8
0
        private List <TreeViewDTO> GetPlainTreeData(IRAPTreeNodes rootNode)
        {
            List <TreeViewDTO> rows = new List <TreeViewDTO>();
            TreeViewDTO        item = new TreeViewDTO()
            {
                Accessibility  = rootNode.Accessibility,
                CSTRoot        = rootNode.CSTRoot,
                HelpMemoryCode = rootNode.HelpMemoryCode,
                IconFile       = rootNode.IconFile,
                IconImage      = rootNode.IconImage,
                NodeCode       = rootNode.NodeCode,
                AlternateCode  = rootNode.AlternateCode,
                NodeDepth      = rootNode.NodeDepth,
                NodeID         = rootNode.NodeID,
                NodeName       = rootNode.NodeName,
                NodeStatus     = rootNode.NodeStatus,
                NodeType       = rootNode.NodeType,
                Parent         = rootNode.Parent,
                SearchCode1    = rootNode.SearchCode1,
                SearchCode2    = rootNode.SearchCode2,
                SelectStatus   = rootNode.SelectStatus,
                TreeViewType   = rootNode.TreeViewType,
                UDFOrdinal     = rootNode.UDFOrdinal
            };

            rows.Add(item);
            if (rootNode.Children == null)
            {
                return(rows);
            }
            //if (rootNode.FatherNode == null)
            //{
            //    Console.WriteLine("{0}[{1}]", rootNode.NodeName, rootNode.NodeID);
            //}
            foreach (var r in rootNode.Children)
            {
                // Console.WriteLine(new string('-', r.NodeDepth * 2) + (r.NodeID < 0 ? "-" : "+") + "{0}[{1}] ", r.NodeName, r.NodeID);
                List <TreeViewDTO> list = GetPlainTreeData(r);
                foreach (TreeViewDTO c in list)
                {
                    TreeViewDTO item2 = new TreeViewDTO()
                    {
                        Accessibility  = c.Accessibility,
                        CSTRoot        = c.CSTRoot,
                        HelpMemoryCode = c.HelpMemoryCode,
                        IconFile       = c.IconFile,
                        IconImage      = c.IconImage,
                        NodeCode       = c.NodeCode,
                        AlternateCode  = c.AlternateCode,
                        NodeDepth      = c.NodeDepth,
                        NodeID         = c.NodeID,
                        NodeName       = c.NodeName,
                        NodeStatus     = c.NodeStatus,
                        NodeType       = c.NodeType,
                        Parent         = c.Parent,
                        SearchCode1    = c.SearchCode1,
                        SearchCode2    = c.SearchCode2,
                        SelectStatus   = c.SelectStatus,
                        TreeViewType   = c.TreeViewType,
                        UDFOrdinal     = c.UDFOrdinal
                    };
                    rows.Add(c);
                }
            }
            return(rows);
        }