123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- using Central.Control.Domain;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace MES.Production.Service.ServiceImp
- {
- /// <summary>
- /// Service模型处理类
- /// add 作者: 季健国 QQ:181589805 by 2016-05-22
- /// </summary>
- public class ModuleManage : RepositoryBase<SYS_MODULE>, IService.IModuleManage
- {
- /// <summary>
- /// 获取用户权限模块集合
- /// add 作者: 季健国 QQ:181589805 by 2016-05-30
- /// </summary>
- /// <param name="userId">用户ID</param>
- /// <param name="permission">用户授权集合</param>
- /// <param name="siteId">站点ID</param>
- /// <returns></returns>
- public List<SYS_MODULE> GetModule(int userId, List<SYS_PERMISSION> permission,string siteId)
- {
- //返回模块
- var retmodule = new List<SYS_MODULE>();
- var permodule = new List<SYS_MODULE>();
- //权限转模块
- if (permission != null)
- {
- permodule.AddRange(permission.Select(p => p.SYS_MODULE));
- //去重
- permodule = permodule.Distinct(new ModuleDistinct()).ToList();
- }
- //检索显示与系统
- permodule = permodule.Where(p => p.ISSHOW == 1 && p.FK_BELONGSYSTEM.ToString() == siteId).ToList();
- //构造上级导航模块
- var prevModule = this.LoadListAll(p => p.FK_BELONGSYSTEM.ToString() == siteId);
- //反向递归算法构造模块带上级上上级模块
- if (permodule.Count > 0)
- {
- foreach (var item in permodule)
- {
- RecursiveModule(prevModule, retmodule, item.PARENTID);
- retmodule.Add(item);
- }
- }
- //去重
- retmodule = retmodule.Distinct(new ModuleDistinct()).ToList();
- //返回模块集合
- return retmodule.OrderBy(p => p.LEVELS).ThenBy(p => p.SHOWORDER).ToList();
- }
- /// <summary>
- /// 反向递归模块集合,可重复模块数据,最后去重
- /// </summary>
- /// <param name="PrevModule">总模块</param>
- /// <param name="retmodule">返回模块</param>
- /// <param name="parentId">上级ID</param>
- private void RecursiveModule(List<SYS_MODULE> PrevModule, List<SYS_MODULE> retmodule, int? parentId)
- {
- var result = PrevModule.Where(p => p.ID == parentId);
- if (result != null)
- {
- foreach (var item in result)
- {
- retmodule.Add(item);
- RecursiveModule(PrevModule, retmodule, item.PARENTID);
- }
- }
- }
- /// <summary>
- /// 递归模块列表,返回按级别排序
- /// add 作者: 季健国 QQ:181589805 by 2016-06-03
- /// </summary>
- public List<SYS_MODULE> RecursiveModule(List<SYS_MODULE> list)
- {
- List<SYS_MODULE> result = new List<SYS_MODULE>();
- if (list!=null && list.Count>0)
- {
- ChildModule(list, result, 0);
- }
- return result;
- }
- /// <summary>
- /// 递归模块列表
- /// add 作者: 季健国 QQ:181589805 by 2016-06-03
- /// </summary>
- private void ChildModule(List<SYS_MODULE> list, List<SYS_MODULE> newlist, int parentId)
- {
- var result = list.Where(p => p.PARENTID == parentId).OrderBy(p => p.LEVELS).OrderBy(p => p.SHOWORDER).ToList();
- if (result.Count() > 0)
- {
- for (int i = 0; i < result.Count(); i++)
- {
- newlist.Add(result[i]);
- ChildModule(list, newlist, result[i].ID);
- }
- }
- }
- /// <summary>
- /// 批量变更下级模块的级别
- /// </summary>
- public bool MoreModifyModule(int moduleId, int levels)
- {
- //根据当前模块ID获取下级模块的集合
- var ChildModule = this.LoadAll(p => p.PARENTID == moduleId).ToList();
- if (ChildModule.Any())
- {
- foreach (var item in ChildModule)
- {
- item.LEVELS = levels + 1;
- this.Update(item);
- MoreModifyModule(item.ID, item.LEVELS);
- }
- }
- return true;
- }
- }
- /// <summary>
- /// 模型去重,非常重要
- /// add 作者: 季健国 QQ:181589805 by 2016-08-03
- /// </summary>
- public class ModuleDistinct : IEqualityComparer<SYS_MODULE>
- {
- public bool Equals(SYS_MODULE x, SYS_MODULE y)
- {
- return x.ID == y.ID;
- }
- public int GetHashCode(SYS_MODULE obj)
- {
- return obj.ToString().GetHashCode();
- }
- }
- }
|