Пример #1
0
 /// <summary>Creates service definition that can be registered with a server</summary>
 /// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
 public static grpc::ServerServiceDefinition BindService(HierarchyBase serviceImpl)
 {
     return(grpc::ServerServiceDefinition.CreateBuilder()
            .AddMethod(__Method_DeepPing, serviceImpl.DeepPing)
            .AddMethod(__Method_GetNode, serviceImpl.GetNode)
            .AddMethod(__Method_GetNodes, serviceImpl.GetNodes)
            .AddMethod(__Method_GetChildNodes, serviceImpl.GetChildNodes)
            .AddMethod(__Method_GetParentNode, serviceImpl.GetParentNode)
            .AddMethod(__Method_GetAncestors, serviceImpl.GetAncestors)
            .AddMethod(__Method_SaveNode, serviceImpl.SaveNode)
            .AddMethod(__Method_DeleteNode, serviceImpl.DeleteNode)
            .AddMethod(__Method_GetEvents, serviceImpl.GetEvents)
            .AddMethod(__Method_GetEventStream, serviceImpl.GetEventStream).Build());
 }
        public static void HydrateHierarchyChildren(List <HierarchyBase> flatHierList)
        {
            Dictionary <long, HierarchyBase> dict = flatHierList.ToDictionary(h => h.Id);

            foreach (HierarchyBase currHier in flatHierList)
            {
                if (currHier.Id == currHier.ParentId || currHier.ParentId == null)
                {
                    // Sanity check to avoid circular reference
                    continue;
                }

                HierarchyBase parentObj = null;
                if (!dict.TryGetValue(currHier.ParentId.Value, out parentObj))
                {
                    continue;
                }

                parentObj.Children.Add(currHier);
            }
        }
Пример #3
0
        public List <HierarchyBase> GetConsolidatedHierarchy()
        {
            // Dillema: do we send it out in hierarchical structure or flat structure?
            // For this function, just give the flat structure
            // Maybe make it a parameter whether to give it as flat or hierarchical
            List <HierarchyBase> retList = new List <HierarchyBase>();

            using (SqlCommand command = new SqlCommand(@"SELECT * FROM DimHierarchyConsolidated", connection))
            {
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        HierarchyBase newHier = new HierarchyBase()
                        {
                            Id = Convert.ToInt64(reader["Id"]),
                            //ParentId = reader["ParentId"] == DBNull.Value ? null : Convert.ToInt64(reader["ParentId"]),
                            ParentId   = null,
                            ServerName = reader["ServerName"].ToString(),
                            NodeName   = reader["NodeName"].ToString(),
                            FullPath   = reader["FullPath"].ToString(),
                            UnitType   = reader["UnitType"].ToString(),
                            Children   = new List <HierarchyBase>()
                        };

                        if (reader["ParentId"] != DBNull.Value)
                        {
                            newHier.ParentId = Convert.ToInt64(reader["ParentId"]);
                        }

                        retList.Add(newHier);
                    }
                }
            }

            return(retList);
        }
Пример #4
0
        private static async Task EnsureSeedHierarchyData <TIdentityDbContext>(TIdentityDbContext context, HierarchyData hierarchyData)
            where TIdentityDbContext : DbContext, IAdminIdentityDbContext
        {
            if (context.HierarchyBases.Count() > 0)
            {
                return;
            }
            string getKeyId(HierarchyBase hierarchy)
            {
                if (hierarchy == null)
                {
                    return((context.HierarchyBases.Where(o => !o.Pid.HasValue).Count() + 1).ToString());
                }
                else
                {
                    return((context.HierarchyBases.Where(o => o.Pid == hierarchy.Id).Select(o => o.Text).Distinct().Count() + 1).ToString());
                }
            }

            HierarchyBase getHierarchyDataModel(string name, HierarchyBase hierarchy)
            {
                if (hierarchy != null)
                {
                    if (name.Contains(","))
                    {
                        foreach (string item in name.Split(","))
                        {
                            var exist = context.HierarchyBases.Where(o => o.Parent.Id == hierarchy.Id && o.Text == item.Trim()).FirstOrDefault();
                            if (exist != null)
                            {
                                continue;
                            }
                            var entity = context.HierarchyBases.Add(new HierarchyBase()
                            {
                                Text        = item.Trim(),
                                Pid         = hierarchy.Id,
                                Description = item.Trim(),
                                DataKey     = $"{hierarchy.DataKey}{getKeyId(hierarchy)}|"
                            }).Entity;
                            context.SaveChanges();
                        }
                        //包含<,>,表示有多个平级,默认为末级,返回null,跳出循环
                        return(null);
                    }
                    else
                    {
                        var exist = context.HierarchyBases.Where(o => o.Parent.Id == hierarchy.Id && o.Text == name.Trim()).FirstOrDefault();
                        if (exist != null)
                        {
                            return(exist);
                        }
                        var entity = context.HierarchyBases.Add(new HierarchyBase()
                        {
                            Text        = name.Trim(),
                            Pid         = hierarchy.Id,
                            Description = name.Trim(),
                            DataKey     = $"{hierarchy.DataKey}{getKeyId(hierarchy)}|"
                        }).Entity;
                        context.SaveChanges();
                        return(entity);
                    }
                }
                else
                {
                    var exist = context.HierarchyBases.Where(o => !o.Pid.HasValue && o.Text == name).FirstOrDefault();
                    if (exist != null)
                    {
                        return(exist);
                    }
                    var entity = context.HierarchyBases.Add(new HierarchyBase()
                    {
                        Text        = name.Trim(),
                        Description = name.Trim(),
                        DataKey     = $"|{getKeyId(null)}|"
                    }).Entity;
                    context.SaveChanges();
                    return(entity);
                }
            }

            foreach (var branch in hierarchyData.Branchs)
            {
                var           hierarchNames = branch.Split('|');
                HierarchyBase parent        = null;
                foreach (var name in hierarchNames)
                {
                    parent = getHierarchyDataModel(name, parent);
                    if (parent == null)
                    {
                        break;
                    }
                }
            }
            await Task.CompletedTask;
        }