using CZFW.Core; using CZFW.Framework.Interface; using CZFW.Framework.Model.Entity; using CZFW.Framework.Model.ViewModel; /** * 命名空间: CZFW.Framework.Modules.Logic * * Copyright (c) 2016 CHUANGZHIKEJI Corporation. All rights reserved. *┌──────────────────────────────────┐ *│ 此技术信息为本公司机密信息,未经本公司书面同意禁止向第三方披露. │ *│ 版权所有:创执科技(北京)有限公司                │ *└──────────────────────────────────┘ */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Linq.Expressions; using CZFW.Framework.Model; namespace CZFW.Framework.Logic { /// /// 导航 /// public class NavigationLogic : LogicBase, INavigation { //public NavigationLogic(CZDbContext db) : base(db) //{ //} /// /// 删除一个导航,及其子导航 /// /// /// 如果添加成功返回null,否则返回错误信息 public ResultModel RemoveById(int id) { string mark = GetValue(x => x.Id == id, x => x.Mark); return RemoveEntities(x => x.Mark.StartsWith(mark)); } /// /// 获取导航节点树 /// /// 查询条件 /// private NavigationModel GetNavigationTree(Expression> condition) { var entities = GetEntities(condition); return entities.Count == 0 ? new NavigationModel { Children = new List() } : new NavigationModel { Id = entities[0].Id, Mark = entities[0].Mark, Name = entities[0].Name, Children = BuildTreeView(GetEntities(x => x.Mark.StartsWith(entities[0].Mark) && x.Mark != entities[0].Mark, x => x.SortOrder, ListSortDirection.Ascending), entities[0].Mark) }; } /// /// 根据Mark获取导航节点树 /// /// 父导航Mark /// public NavigationModel GetNavigationTreeByMark(string mark) { //var user = OperatorProvider.Provider.GetCurrent(); //var grantedIds = new List(); //if(user!=null) //{ // var roleIds = DbContext.Set().Where(x => x.UserId == user.UserId).Select(x => x.RoleId).Distinct().ToList(); // grantedIds = DbContext.Set().Where(x => roleIds.Contains(x.RoleId)).Select(x => x.Id).Distinct().ToList(); //} return GetNavigationTree(x => x.Mark == mark/*&&grantedIds.Contains(x.Id)*/); } /// /// 根据父节点Id获取导航节点树 /// /// 父节点Id /// public NavigationModel GetNavigationTreeById(int id) { //var user = OperatorProvider.Provider.GetCurrent(); //var grantedIds = new List(); //if (user != null) //{ // var roleIds = DbContext.Set().Where(x => x.UserId == user.UserId).Select(x => x.RoleId).Distinct().ToList(); // grantedIds = DbContext.Set().Where(x => roleIds.Contains(x.RoleId)).Select(x => x.Id).Distinct().ToList(); //} return GetNavigationTree(x => x.Id == id ); } /// /// 解析节点树 /// /// /// private static IList BuildTreeView(IList navigationList, string mark = "0") { IList navigationModels = new List(); IList children = navigationList.Where(x => x.Mark.StartsWith(mark) && (x.Mark.Length == mark.Length + 19)).ToList(); foreach (NavigationEntity navigation in children) { NavigationModel navigationModel = new NavigationModel() { Id = navigation.Id, Description = navigation.Description, Icon = navigation.Icon, Mark = navigation.Mark, Name = navigation.Name, ParentMark = navigation.ParentMark, SortOrder = navigation.SortOrder ?? 0, Thumbnail = navigation.Thumbnail, Url = navigation.Url }; navigationModel.Children = BuildTreeView(navigationList, navigationModel.Mark); navigationModels.Add(navigationModel); } return navigationModels; } /// /// 根据Mark获取子导航列表 /// /// 父Mark /// public IList GetChildren(string mark) { int length = mark.Length + 19; var res = Queryable.Where(x => x.Mark.StartsWith(mark) && x.Mark.Length == length).OrderBy(x => x.SortOrder).ToList().Select(x => new NavigationModel() { Id = x.Id, Description = x.Description, Icon = x.Icon, Mark = x.Mark, Name = x.Name, Url = x.Url, ParentMark = x.ParentMark, SortOrder = x.SortOrder ?? 0, Thumbnail = x.Thumbnail }).ToList(); return res; } /// /// 根据Mark获取子导航列表 /// /// 父Mark /// public IList GetAllChildrenByMark(string mark) { 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() { Id = x.Id, Description = x.Description, Icon = x.Icon, Mark = x.Mark, Name = x.Name, Url = x.Url, ParentMark = x.ParentMark, SortOrder = x.SortOrder ?? 0, Thumbnail = x.Thumbnail }).ToList(); return res; } /// /// 根据Id获取子导航列表 /// /// 父Id /// public IList GetAllChildrenById(int id) { return GetAllChildrenByMark(GetValue(x => x.Id == id, x => x.Mark)); } public ResultModel AddNavigation(NavigationEntity entity) { if (string.IsNullOrWhiteSpace(entity.ParentMark)) entity.ParentMark = "0"; entity.Mark = Utility.GenerateTreeMark(entity.ParentMark); var res = AddEntity(entity); return res; } public IList> GetColumnList(string key = null) { var result = Queryable.Select(x => new KeyValuePair(x.Name, x.Id)).ToList(); return result; } } }