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;
}
}
}