NavigationLogic.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. using CZFW.Core;
  2. using CZFW.Framework.Interface;
  3. using CZFW.Framework.Model.Entity;
  4. using CZFW.Framework.Model.ViewModel;
  5. /**
  6. * 命名空间: CZFW.Framework.Modules.Logic
  7. *
  8. * Copyright (c) 2016 CHUANGZHIKEJI Corporation. All rights reserved.
  9. *┌──────────────────────────────────┐
  10. *│ 此技术信息为本公司机密信息,未经本公司书面同意禁止向第三方披露. │
  11. *│ 版权所有:创执科技(北京)有限公司                │
  12. *└──────────────────────────────────┘
  13. */
  14. using System;
  15. using System.Collections.Generic;
  16. using System.ComponentModel;
  17. using System.Linq;
  18. using System.Linq.Expressions;
  19. using CZFW.Framework.Model;
  20. namespace CZFW.Framework.Logic
  21. {
  22. /// <summary>
  23. /// 导航
  24. /// </summary>
  25. public class NavigationLogic : LogicBase<NavigationEntity>, INavigation
  26. {
  27. //public NavigationLogic(CZDbContext db) : base(db)
  28. //{
  29. //}
  30. /// <summary>
  31. /// 删除一个导航,及其子导航
  32. /// </summary>
  33. /// <param name="id"></param>
  34. /// <returns>如果添加成功返回null,否则返回错误信息</returns>
  35. public ResultModel RemoveById(int id)
  36. {
  37. string mark = GetValue(x => x.Id == id, x => x.Mark);
  38. return RemoveEntities(x => x.Mark.StartsWith(mark));
  39. }
  40. /// <summary>
  41. /// 获取导航节点树
  42. /// </summary>
  43. /// <param name="condition">查询条件</param>
  44. /// <returns></returns>
  45. private NavigationModel GetNavigationTree(Expression<Func<NavigationEntity, bool>> condition)
  46. {
  47. var entities = GetEntities(condition);
  48. return entities.Count == 0 ? new NavigationModel
  49. {
  50. Children = new List<NavigationModel>()
  51. } : new NavigationModel
  52. {
  53. Id = entities[0].Id,
  54. Mark = entities[0].Mark,
  55. Name = entities[0].Name,
  56. Children = BuildTreeView(GetEntities(x => x.Mark.StartsWith(entities[0].Mark) && x.Mark != entities[0].Mark, x => x.SortOrder, ListSortDirection.Ascending), entities[0].Mark)
  57. };
  58. }
  59. /// <summary>
  60. /// 根据Mark获取导航节点树
  61. /// </summary>
  62. /// <param name="mark">父导航Mark</param>
  63. /// <returns></returns>
  64. public NavigationModel GetNavigationTreeByMark(string mark)
  65. {
  66. //var user = OperatorProvider.Provider.GetCurrent();
  67. //var grantedIds = new List<int>();
  68. //if(user!=null)
  69. //{
  70. // var roleIds = DbContext.Set<UserRoleEntity>().Where(x => x.UserId == user.UserId).Select(x => x.RoleId).Distinct().ToList();
  71. // grantedIds = DbContext.Set<UserRoleNavigationEntity>().Where(x => roleIds.Contains(x.RoleId)).Select(x => x.Id).Distinct().ToList();
  72. //}
  73. return GetNavigationTree(x => x.Mark == mark/*&&grantedIds.Contains(x.Id)*/);
  74. }
  75. /// <summary>
  76. /// 根据父节点Id获取导航节点树
  77. /// </summary>
  78. /// <param name="id">父节点Id</param>
  79. /// <returns></returns>
  80. public NavigationModel GetNavigationTreeById(int id)
  81. {
  82. //var user = OperatorProvider.Provider.GetCurrent();
  83. //var grantedIds = new List<int>();
  84. //if (user != null)
  85. //{
  86. // var roleIds = DbContext.Set<UserRoleEntity>().Where(x => x.UserId == user.UserId).Select(x => x.RoleId).Distinct().ToList();
  87. // grantedIds = DbContext.Set<UserRoleNavigationEntity>().Where(x => roleIds.Contains(x.RoleId)).Select(x => x.Id).Distinct().ToList();
  88. //}
  89. return GetNavigationTree(x => x.Id == id );
  90. }
  91. /// <summary>
  92. /// 解析节点树
  93. /// </summary>
  94. /// <param name="navigationList"></param>
  95. /// <param name="mark"></param>
  96. private static IList<NavigationModel> BuildTreeView(IList<NavigationEntity> navigationList, string mark = "0")
  97. {
  98. IList<NavigationModel> navigationModels = new List<NavigationModel>();
  99. IList<NavigationEntity> children = navigationList.Where(x => x.Mark.StartsWith(mark) && (x.Mark.Length == mark.Length + 19)).ToList();
  100. foreach (NavigationEntity navigation in children)
  101. {
  102. NavigationModel navigationModel = new NavigationModel()
  103. {
  104. Id = navigation.Id,
  105. Description = navigation.Description,
  106. Icon = navigation.Icon,
  107. Mark = navigation.Mark,
  108. Name = navigation.Name,
  109. ParentMark = navigation.ParentMark,
  110. SortOrder = navigation.SortOrder ?? 0,
  111. Thumbnail = navigation.Thumbnail,
  112. Url = navigation.Url
  113. };
  114. navigationModel.Children = BuildTreeView(navigationList, navigationModel.Mark);
  115. navigationModels.Add(navigationModel);
  116. }
  117. return navigationModels;
  118. }
  119. /// <summary>
  120. /// 根据Mark获取子导航列表
  121. /// </summary>
  122. /// <param name="mark">父Mark</param>
  123. /// <returns></returns>
  124. public IList<NavigationModel> GetChildren(string mark)
  125. {
  126. int length = mark.Length + 19;
  127. var res = Queryable.Where(x => x.Mark.StartsWith(mark) && x.Mark.Length == length).OrderBy(x => x.SortOrder).ToList().Select(x => new NavigationModel()
  128. {
  129. Id = x.Id,
  130. Description = x.Description,
  131. Icon = x.Icon,
  132. Mark = x.Mark,
  133. Name = x.Name,
  134. Url = x.Url,
  135. ParentMark = x.ParentMark,
  136. SortOrder = x.SortOrder ?? 0,
  137. Thumbnail = x.Thumbnail
  138. }).ToList();
  139. return res;
  140. }
  141. /// <summary>
  142. /// 根据Mark获取子导航列表
  143. /// </summary>
  144. /// <param name="mark">父Mark</param>
  145. /// <returns></returns>
  146. public IList<NavigationModel> GetAllChildrenByMark(string mark)
  147. {
  148. var res = Queryable.Where(x => x.Mark.StartsWith(mark) && x.Mark != mark).OrderBy(x => x.Mark).ThenBy(x => x.SortOrder).ToList().Select(x => new NavigationModel()
  149. {
  150. Id = x.Id,
  151. Description = x.Description,
  152. Icon = x.Icon,
  153. Mark = x.Mark,
  154. Name = x.Name,
  155. Url = x.Url,
  156. ParentMark = x.ParentMark,
  157. SortOrder = x.SortOrder ?? 0,
  158. Thumbnail = x.Thumbnail
  159. }).ToList();
  160. return res;
  161. }
  162. /// <summary>
  163. /// 根据Id获取子导航列表
  164. /// </summary>
  165. /// <param name="id">父Id</param>
  166. /// <returns></returns>
  167. public IList<NavigationModel> GetAllChildrenById(int id)
  168. {
  169. return GetAllChildrenByMark(GetValue(x => x.Id == id, x => x.Mark));
  170. }
  171. public ResultModel AddNavigation(NavigationEntity entity)
  172. {
  173. if (string.IsNullOrWhiteSpace(entity.ParentMark))
  174. entity.ParentMark = "0";
  175. entity.Mark = Utility.GenerateTreeMark(entity.ParentMark);
  176. var res = AddEntity(entity);
  177. return res;
  178. }
  179. public IList<KeyValuePair<string, int>> GetColumnList(string key = null)
  180. {
  181. var result = Queryable.Select(x => new KeyValuePair<string, int>(x.Name, x.Id)).ToList();
  182. return result;
  183. }
  184. }
  185. }