예제 #1
0
        public static SYSTagNodeDTO Parse(SYSTag tagInfo)
        {
            SYSTagNodeDTO node = new SYSTagNodeDTO
            {
                ID           = tagInfo.ID,
                NodeType     = EnumSYSTagNodeType.Tag,
                Name         = tagInfo.TagName,
                Code         = tagInfo.TagCode,
                Value        = tagInfo.TagValue,
                IsBuiltIn    = tagInfo.IsBuiltIn,
                DisplayLevel = null,
                Sequence     = tagInfo.Sequence,
                Remark       = tagInfo.Remark,
                DataSource   = tagInfo
            };

            if (tagInfo.ParentID == 0)
            {
                node.ParentID       = tagInfo.TagClassID;
                node.ParentNodeType = EnumSYSTagNodeType.TagClass;
            }
            else
            {
                node.ParentID       = tagInfo.ParentID;
                node.ParentNodeType = EnumSYSTagNodeType.Tag;
            }
            return(node);
        }
예제 #2
0
        /// <summary>
        /// 返回全部标签节点
        /// </summary>
        /// <param name="tagGroupCode">标签组代码</param>
        /// <param name="nodeType">标签节点类型,使用OR逻辑连接多个查询条件</param>
        /// <param name="fixBrokenNodes">是否自动修复断开的节点</param>
        /// <param name="displayLevel">标签类型,EnumTagDisplayLevel</param>
        /// <returns></returns>
        public List <SYSTagNodeDTO> GetTagNodesByGroupCode(string tagGroupCode, EnumSYSTagNodeType nodeType, bool fixBrokenNodes, int?displayLevel)
        {
            List <SYSTagNodeDTO> nodes = new List <SYSTagNodeDTO>();

            //获得有效节点
            if ((nodeType | EnumSYSTagNodeType.TagGroup) == nodeType)
            {
                var tagGroupInfo = this.GetTagGroup(tagGroupCode);
                if (tagGroupInfo.ID.HasValue)
                {
                    nodes.Add(SYSTagNodeDTO.Parse(tagGroupInfo));
                }
            }
            if ((nodeType | EnumSYSTagNodeType.TagClass) == nodeType)
            {
                nodes.AddRange(this.GetTagClassesByGroupCode(tagGroupCode, displayLevel).Select(d => SYSTagNodeDTO.Parse(d)));
            }
            if ((nodeType | EnumSYSTagNodeType.Tag) == nodeType)
            {
                nodes.AddRange(this.GetTagsByGroupCode(tagGroupCode, displayLevel).Select(d => SYSTagNodeDTO.Parse(d)));
            }
            //修复断开节点
            if (fixBrokenNodes)
            {
                nodes = tagNodeBO.FixBrokenNodes(nodes);
            }
            return(nodes);
        }
예제 #3
0
        /// <summary>
        /// 修复断开的节点
        /// </summary>
        /// <param name="nodes"></param>
        /// <returns></returns>
        internal List <SYSTagNodeDTO> FixBrokenNodes(List <SYSTagNodeDTO> nodes)
        {
            SYSTagGroupBO tagGroupBO = (this.systemID.HasValue ? this.Context.Resolve <SYSTagGroupBO>().With(d => d.systemID = this.systemID.Value) : this.Context.Resolve <SYSTagGroupBO>());
            SYSTagClassBO tagClassBO = (this.systemID.HasValue ? this.Context.Resolve <SYSTagClassBO>().With(d => d.systemID = this.systemID.Value) : this.Context.Resolve <SYSTagClassBO>());
            SYSTagBO      tagBO      = (this.systemID.HasValue ? this.Context.Resolve <SYSTagBO>().With(d => d.systemID = this.systemID.Value) : this.Context.Resolve <SYSTagBO>());

            //从叶子节点开始遍历
            nodes.Sort(this.TagNodeComparer);
            nodes.Reverse();
            int index = -1;

            while (index++ < nodes.Count - 1)
            {
                //已达到根节点,退出
                long?parentNodeID = nodes[index].ParentID;
                EnumSYSTagNodeType parentNodeType = nodes[index].ParentNodeType;
                if (!parentNodeID.HasValue)
                {
                    continue;
                }
                //将当前节点的父节点加入队列
                if (!nodes.Exists(d => parentNodeID == d.ID && parentNodeType == d.NodeType))
                {
                    switch (parentNodeType)
                    {
                    case EnumSYSTagNodeType.TagGroup:
                        nodes.Add(SYSTagNodeDTO.Parse(tagGroupBO.Get(parentNodeID ?? 0)));
                        break;

                    case EnumSYSTagNodeType.TagClass:
                        nodes.Add(SYSTagNodeDTO.Parse(tagClassBO.Get(parentNodeID ?? 0)));
                        break;

                    case EnumSYSTagNodeType.Tag:
                        nodes.Add(SYSTagNodeDTO.Parse(tagBO.Get(parentNodeID ?? 0)));
                        break;
                    }
                }
            }
            nodes.Sort(this.TagNodeComparer);
            return(nodes);
        }
        /// <summary>
        /// 解析被授权的标签
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        private SYSTagNodeDTO[] getNodes(SYSTagConferAuthorityDTO dto)
        {
            ITag tag = TagService.GetInstance();

            tag.DependOn(this.Context);

            List <SYSTagNodeDTO> dtos = new List <SYSTagNodeDTO>();

            if (dto.TagNode.NodeType == EnumSYSTagNodeType.Tag)
            {
                //新增标签项权限
                if ((dto.AuthorityRange | EnumSYSTagRange.Parents) == dto.AuthorityRange)
                {
                    var tagInfo      = tag.GetTag(dto.TagNode.ID.Value);
                    var tagclassInfo = tag.GetTagClass(tagInfo.TagClassID.Value);
                    var taggroupInfo = tag.GetTagGroup(tagclassInfo.AppID.Value);

                    dtos.Add(SYSTagNodeDTO.Parse(taggroupInfo));
                    dtos.Add(SYSTagNodeDTO.Parse(tagclassInfo));
                    //返回当前标签项的父级节点
                    ALConvert.ToList <int>(tagInfo.Path)
                    .FindAll(d => d != 0 && d != tagInfo.ID)
                    .ForEach(d => dtos.Add(SYSTagNodeDTO.Parse(tag.GetTag(d))));
                }
                if ((dto.AuthorityRange | EnumSYSTagRange.Current) == dto.AuthorityRange)
                {
                    dtos.Add(SYSTagNodeDTO.Parse(tag.GetTag(dto.TagNode.ID.Value)));
                }
                if ((dto.AuthorityRange | EnumSYSTagRange.Children) == dto.AuthorityRange)
                {
                    tag.GetTagsByParentID(dto.TagNode.ID.Value)
                    .ForEach(d => dtos.Add(SYSTagNodeDTO.Parse(d)));
                }
            }
            else if (dto.TagNode.NodeType == EnumSYSTagNodeType.TagClass)
            {
                //新增标签权限
                if ((dto.AuthorityRange | EnumSYSTagRange.Parents) == dto.AuthorityRange)
                {
                    dtos.Add(SYSTagNodeDTO.Parse(tag.GetTagGroup(dto.TagNode.ParentID.Value)));
                }
                if ((dto.AuthorityRange | EnumSYSTagRange.Current) == dto.AuthorityRange)
                {
                    dtos.Add(SYSTagNodeDTO.Parse(tag.GetTagClass(dto.TagNode.ID.Value)));
                }
                if ((dto.AuthorityRange | EnumSYSTagRange.Children) == dto.AuthorityRange)
                {
                    tag.GetTagsByClassID(dto.TagNode.ID.Value)
                    .ForEach(d => dtos.Add(SYSTagNodeDTO.Parse(d)));
                }
            }
            else if (dto.TagNode.NodeType == EnumSYSTagNodeType.TagGroup)
            {
                //新增标签组权限
                if ((dto.AuthorityRange | EnumSYSTagRange.Current) == dto.AuthorityRange)
                {
                    dtos.Add(SYSTagNodeDTO.Parse(tag.GetTagGroup(dto.TagNode.ID.Value)));
                }
                if ((dto.AuthorityRange | EnumSYSTagRange.Children) == dto.AuthorityRange)
                {
                    tag.GetTagClassesByGroupCode(dto.TagNode.Code, (int?)dto.TagDisplayLevel)
                    .ForEach(d => dtos.Add(SYSTagNodeDTO.Parse(d)));
                    tag.GetTagsByGroupCode(dto.TagNode.Code, (int?)dto.TagDisplayLevel)
                    .ForEach(d => dtos.Add(SYSTagNodeDTO.Parse(d)));
                }
            }
            return(dtos.ToArray());
        }
예제 #5
0
 /// <summary>
 /// 修复断开的节点
 /// </summary>
 /// <param name="nodes"></param>
 /// <returns></returns>
 public List <SYSTagNodeDTO> FixBrokenNodes(List <SYSTag> nodes)
 {
     return(tagNodeBO.FixBrokenNodes(nodes.Select(d => SYSTagNodeDTO.Parse(d)).ToList()));
 }