123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- 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
- {
- /// <summary>
- /// 导航
- /// </summary>
- public class NavigationLogic : LogicBase<NavigationEntity>, INavigation
- {
- //public NavigationLogic(CZDbContext db) : base(db)
- //{
- //}
- /// <summary>
- /// 删除一个导航,及其子导航
- /// </summary>
- /// <param name="id"></param>
- /// <returns>如果添加成功返回null,否则返回错误信息</returns>
- public ResultModel RemoveById(int id)
- {
- string mark = GetValue(x => x.Id == id, x => x.Mark);
- return RemoveEntities(x => x.Mark.StartsWith(mark));
- }
- /// <summary>
- /// 获取导航节点树
- /// </summary>
- /// <param name="condition">查询条件</param>
- /// <returns></returns>
- private NavigationModel GetNavigationTree(Expression<Func<NavigationEntity, bool>> condition)
- {
- var entities = GetEntities(condition);
- return entities.Count == 0 ? new NavigationModel
- {
- Children = new List<NavigationModel>()
- } : 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)
- };
- }
- /// <summary>
- /// 根据Mark获取导航节点树
- /// </summary>
- /// <param name="mark">父导航Mark</param>
- /// <returns></returns>
- public NavigationModel GetNavigationTreeByMark(string mark)
- {
- //var user = OperatorProvider.Provider.GetCurrent();
- //var grantedIds = new List<int>();
- //if(user!=null)
- //{
- // var roleIds = DbContext.Set<UserRoleEntity>().Where(x => x.UserId == user.UserId).Select(x => x.RoleId).Distinct().ToList();
- // grantedIds = DbContext.Set<UserRoleNavigationEntity>().Where(x => roleIds.Contains(x.RoleId)).Select(x => x.Id).Distinct().ToList();
- //}
- return GetNavigationTree(x => x.Mark == mark/*&&grantedIds.Contains(x.Id)*/);
- }
- /// <summary>
- /// 根据父节点Id获取导航节点树
- /// </summary>
- /// <param name="id">父节点Id</param>
- /// <returns></returns>
- public NavigationModel GetNavigationTreeById(int id)
- {
- //var user = OperatorProvider.Provider.GetCurrent();
- //var grantedIds = new List<int>();
- //if (user != null)
- //{
- // var roleIds = DbContext.Set<UserRoleEntity>().Where(x => x.UserId == user.UserId).Select(x => x.RoleId).Distinct().ToList();
- // grantedIds = DbContext.Set<UserRoleNavigationEntity>().Where(x => roleIds.Contains(x.RoleId)).Select(x => x.Id).Distinct().ToList();
- //}
- return GetNavigationTree(x => x.Id == id );
- }
- /// <summary>
- /// 解析节点树
- /// </summary>
- /// <param name="navigationList"></param>
- /// <param name="mark"></param>
- private static IList<NavigationModel> BuildTreeView(IList<NavigationEntity> navigationList, string mark = "0")
- {
- IList<NavigationModel> navigationModels = new List<NavigationModel>();
- IList<NavigationEntity> 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;
- }
- /// <summary>
- /// 根据Mark获取子导航列表
- /// </summary>
- /// <param name="mark">父Mark</param>
- /// <returns></returns>
- public IList<NavigationModel> 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;
- }
- /// <summary>
- /// 根据Mark获取子导航列表
- /// </summary>
- /// <param name="mark">父Mark</param>
- /// <returns></returns>
- public IList<NavigationModel> 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;
- }
- /// <summary>
- /// 根据Id获取子导航列表
- /// </summary>
- /// <param name="id">父Id</param>
- /// <returns></returns>
- public IList<NavigationModel> 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<KeyValuePair<string, int>> GetColumnList(string key = null)
- {
- var result = Queryable.Select(x => new KeyValuePair<string, int>(x.Name, x.Id)).ToList();
- return result;
- }
- }
- }
|