using CRM.Core.BLL.Util; using CRM.Core.Model.Entity; using System; using System.Collections.Generic; using System.Linq; using WX.CRM.Common; namespace CRM.Core.BLL.Base { public class BAS_LEFTMEMU_BL { CACHE_BL _cache = new CACHE_BL(); public List GetBas_LeftMenuList() { using (var db = new zxdContext()) { var list = db.BAS_LEFTMEMU.Where(p => p.ISSHOW == 1).OrderBy(m => m.SORTID).ToList(); return list; } } #region 新增 /// /// 新增 /// /// /// /// public bool Create_leftMemu(ref ValidationErrors errors, BAS_LEFTMEMU model) { try { using (var db = new zxdContext()) { decimal? sort = db.BAS_LEFTMEMU.Where(m => m.PARENTID == model.PARENTID && m.MODULEMENUID == model.MODULEMENUID).Max(m => m.SORTID);//获取最大的sort if (sort == null) model.SORTID = 1; else model.SORTID = sort.Value + 1; //model.MENUID = new SEQUENCES_BL().Seq_base_get(); db.BAS_LEFTMEMU.Add(model); return db.SaveChanges().GetResult(); } } catch (Exception ex) { errors.Add(ex.Message); return false; } } #endregion #region 删除 /// /// 删除 /// /// /// /// public bool Delete_leftMemu(ref ValidationErrors errors, decimal id) { try { using (var db = new zxdContext()) { var entry = db.BAS_LEFTMEMU.FirstOrDefault(m => m.MENUID == id); if (entry == null) { errors.Add("已经被删除!"); return false; } db.BAS_LEFTMEMU.Remove(entry); return db.SaveChanges().GetResult(); } } catch (Exception ex) { errors.Add(ex.Message); return false; } } #endregion #region 修改数据 /// /// 修改数据 /// /// /// /// public bool Update_leftMemu(ref ValidationErrors errors, BAS_LEFTMEMU model) { try { using (var db = new zxdContext()) { var entry = db.BAS_LEFTMEMU.FirstOrDefault(m => m.MENUID == model.MENUID); entry.MNAME = model.MNAME; entry.MODULEMENUID = model.MODULEMENUID; entry.URL = model.URL; entry.ISGROUP = model.ISGROUP; entry.ISSHOW = model.ISSHOW; entry.RIGHTID = model.RIGHTID; entry.PARENTID = model.PARENTID; if (entry.ISGROUP == 1) { var list_menu = db.BAS_LEFTMEMU.Where(p => p.PARENTID == entry.MENUID).ToList(); foreach (var menu in list_menu) { menu.MODULEMENUID = entry.MODULEMENUID; } } db.SaveChanges(); return true; } } catch (Exception ex) { errors.Add(ex.Message); return false; } } #endregion #region 更新顺序 /// /// 更新顺序 /// /// id集合用“,”隔开 /// sortid集合“,”隔开 /// public bool Sort_leftMemu(ref ValidationErrors errors, string ids, string sortIds) { if (ids.Trim() == "" || sortIds.Trim() == "") return false; try { using (var db = new zxdContext()) { string[] idStr = ids.Split(','); string[] sortStr = sortIds.Split(','); for (int i = 0; i < idStr.Length; i++) { decimal id = Convert.ToDecimal(idStr[i]); decimal sortId = Convert.ToDecimal(sortStr[i]); var entry = db.BAS_LEFTMEMU.FirstOrDefault(m => m.MENUID == id); if (entry == null) continue; entry.SORTID = sortId; } return db.SaveChanges().GetResult(); } } catch (Exception ex) { errors.Add(ex.Message); return false; } } #endregion #region 菜单管理树形获取 缓存中获取 根据权限 /// /// 从缓存中获取全部菜单 根据权限获取 /// /// 权限 /// public object GetTreeList_leftMenu(string[] userRights) { using (var db = new zxdContext()) { var leftMemuList = _cache.GetList_LeftMemu().OrderBy(m => m.SORTID).Where(m => m.ISSHOW == 1).Where(m => userRights.Contains(m.RIGHTID) || string.IsNullOrEmpty(m.RIGHTID) || m.RIGHTID.Trim() == "0").ToList(); var moduleMenuList = _cache.GetList_ModuleMenu().OrderBy(m => m.SORTID).Where(m => userRights.Contains(m.RIGHTID) || string.IsNullOrEmpty(m.RIGHTID) || m.RIGHTID.Trim() == "0").ToList(); List obj = new List(); List childObj = null; //顶部模块部分 foreach (var m in moduleMenuList) { foreach (var model in leftMemuList.Where(n => n.PARENTID == 0 && n.MODULEMENUID == m.MODULEMENUID)) { if (childObj == null) childObj = new List(); childObj.Add(new { id = (model.ISGROUP == 1 ? "-" : "") + model.MENUID.ToString(), text = model.MNAME, moduleMenuId = m.MODULEMENUID.ToString(), sortId = model.SORTID, iconCls = (model.ISGROUP == 1 ? "" : "icon-treenode"), children = GetleftMenuTree(model.MENUID, leftMemuList) }); } obj.Add(new { id = (-m.MODULEMENUID).ToString(),//模块ID为负数 text = m.MNAME, iconCls = "icon-group", moduleMenuId = m.MODULEMENUID.ToString(), sortId = m.SORTID, children = childObj }); childObj = null; } return obj; } } private object GetleftMenuTree(decimal parentId, List menulist) { List obj = null; //下面子菜单 foreach (var model in menulist.Where(n => n.PARENTID == parentId)) { if (obj == null) obj = new List(); if (model.ISGROUP == 1) obj.Add(new { id = "-" + model.MENUID.ToString(), moduleMenuId = model.MODULEMENUID.ToString(), text = model.MNAME, sortId = model.SORTID, iconCls = (model.ISGROUP == 1 ? "" : "icon-treenode"), children = GetleftMenuTree(model.MENUID, menulist) }); else obj.Add(new { id = model.MENUID.ToString(), moduleMenuId = model.MODULEMENUID.ToString(), text = model.MNAME, sortId = model.SORTID, iconCls = (model.ISGROUP == 1 ? "" : "icon-treenode") }); } return obj; } #endregion #region 菜单管理树形获取 /// /// 获取全部菜单信息 /// /// public object GetTreeList_leftMenu() { using (var db = new zxdContext()) { var leftMemuList = db.BAS_LEFTMEMU.OrderBy(m => m.SORTID).ToList(); //菜单 var moduleMenuList = db.BAS_MODULEMENU.OrderBy(m => m.SORTID).ToList(); //模块 var rightList = db.BAS_RIGHT.ToList();//获取所有的权限 BAS_RIGHT right = null; List obj = new List(); List childObj = null; //顶部模块部分 foreach (var m in moduleMenuList) { foreach (var model in leftMemuList.Where(n => n.PARENTID == 0 && n.MODULEMENUID == m.MODULEMENUID)) { if (childObj == null) childObj = new List(); right = null; if (!string.IsNullOrEmpty(model.RIGHTID)) right = rightList.Where(x => x.RIGHTID == model.RIGHTID).FirstOrDefault(); childObj.Add(new { id = model.MENUID.ToString(), title = model.MNAME, isLast = false, level = 1, parentId = 0, //moduleMenuId = m.MODULEMENUID.ToString(), //sortId = model.SORTID, children = GetleftMenuTree(model.MENUID, leftMemuList, rightList) }); } right = null; if (!string.IsNullOrEmpty(m.RIGHTID)) right = rightList.Where(x => x.RIGHTID == m.RIGHTID).FirstOrDefault(); obj.Add(new { id = (-m.MODULEMENUID).ToString(),//模块ID为负数 title = m.MNAME, isLast = false, level = 0, parentId = -1, //moduleMenuId = m.MODULEMENUID.ToString(), //sortId = m.SORTID, children = childObj }); childObj = null; } return obj; } } private object GetleftMenuTree(decimal parentId, List menulist, List rightList) { List obj = null; BAS_RIGHT right = null; //下面子菜单 foreach (var model in menulist.Where(n => n.PARENTID == parentId)) { if (obj == null) obj = new List(); right = null; if (!string.IsNullOrEmpty(model.RIGHTID)) right = rightList.Where(x => x.RIGHTID == model.RIGHTID).FirstOrDefault(); obj.Add(new { id = model.MENUID.ToString(), //moduleMenuId = model.MODULEMENUID.ToString(), title = model.MNAME, //sortId = model.SORTID, isLast = true, level = 2, parentId, children = GetleftMenuTree(model.MENUID, menulist, rightList) }); } return obj; } #endregion #region 获取单个实体 /// /// 获取单个实体 /// /// /// public BAS_LEFTMEMU GetModel_leftMenu(decimal id) { using (var db = new zxdContext()) { var entry = db.BAS_LEFTMEMU.FirstOrDefault(m => m.MENUID == id); return entry; } } #endregion #region 菜单显示控制 /// /// 获取菜单树结构 /// /// public object GetTree_leftMenu(decimal parentId) { using (var db = new zxdContext()) { var queryData = _cache.GetList_LeftMemu(); queryData = queryData.Where(m => m.PARENTID == parentId && m.ISSHOW == 1).OrderBy(m => m.SORTID).ToList(); return GetObjectByQuery(queryData); } } /// /// 获取菜单树结构 /// /// public object GetTopTree_leftMenu(decimal moduleMenuId) { using (var db = new zxdContext()) { var queryData = _cache.GetList_LeftMemu();// db.BAS_LEFTMEMU.AsQueryable(); queryData = queryData.Where(m => m.PARENTID == 0 && m.MODULEMENUID == moduleMenuId && m.ISSHOW == 1).OrderBy(m => m.SORTID).ToList(); return GetObjectByQuery(queryData); } } /// /// 返回数据转换 /// /// /// private object GetObjectByQuery(IQueryable queryData) { object modelList = (from m in queryData select new { id = m.MENUID, text = m.MNAME, value = m.URL, showcheck = false, complete = false, isexpand = false, checkstate = 0, hasChildren = (m.ISGROUP == 1) }).ToList(); return modelList; } /// /// 返回数据转换 /// /// /// private object GetObjectByQuery(List queryData) { object modelList = (from m in queryData select new { id = m.MENUID, text = m.MNAME, value = m.URL, showcheck = false, complete = false, isexpand = false, checkstate = 0, parentid = m.PARENTID, hasChildren = (m.ISGROUP == 1) }).ToList(); return modelList; } #endregion /// /// 根据权限获取菜单 /// /// /// /// public object GetTree_leftMenu(decimal parentId, string[] rightIds) { using (var db = new zxdContext()) { var queryData = _cache.GetList_LeftMemu(); queryData = queryData.Where(m => m.PARENTID == parentId && m.ISSHOW == 1).OrderBy(m => m.SORTID).Where(m => rightIds.Contains(m.RIGHTID) || string.IsNullOrEmpty(m.RIGHTID) || m.RIGHTID.Trim() == "0").ToList(); return GetObjectByQuery(queryData); } } /// /// 获取菜单组和子菜单 /// /// /// /// private object GetALLleftMenu(decimal parentId, List menulist) { List obj = null; //下面子菜单 foreach (var model in menulist.Where(n => n.PARENTID == parentId)) { if (obj == null) obj = new List(); obj.Add(new { id = model.MENUID, text = model.MNAME, value = (model.URL == "#" || model.URL == "") ? "" : model.URL, showcheck = false, complete = true, isexpand = true, checkstate = 0, parentid = model.PARENTID, hasChildren = (model.ISGROUP == 1), ChildNodes = GetALLleftMenu(model.MENUID, menulist) }); } return obj; } /// /// 根据moduleId获取菜单 /// /// /// /// public object GetRree_leftMenuByModuleId(decimal moduleId, string[] rightIds) { using (var db = new zxdContext()) { var queryData = _cache.GetList_LeftMemu(); queryData = queryData.Where(m => m.MODULEMENUID == moduleId && m.ISSHOW == 1).OrderBy(m => m.SORTID).Where(m => (m.ISGROUP == 1 || rightIds.Contains(m.RIGHTID))).ToList(); return GetALLleftMenu(0, queryData); } } } }