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); }
/// <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); }
/// <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()); }
/// <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())); }