ModuleManage.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. using Central.Control.Domain;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. namespace MES.Production.Service.ServiceImp
  7. {
  8. /// <summary>
  9. /// Service模型处理类
  10. /// add 作者: 季健国 QQ:181589805 by 2016-05-22
  11. /// </summary>
  12. public class ModuleManage : RepositoryBase<SYS_MODULE>, IService.IModuleManage
  13. {
  14. /// <summary>
  15. /// 获取用户权限模块集合
  16. /// add 作者: 季健国 QQ:181589805 by 2016-05-30
  17. /// </summary>
  18. /// <param name="userId">用户ID</param>
  19. /// <param name="permission">用户授权集合</param>
  20. /// <param name="siteId">站点ID</param>
  21. /// <returns></returns>
  22. public List<SYS_MODULE> GetModule(int userId, List<SYS_PERMISSION> permission,string siteId)
  23. {
  24. //返回模块
  25. var retmodule = new List<SYS_MODULE>();
  26. var permodule = new List<SYS_MODULE>();
  27. //权限转模块
  28. if (permission != null)
  29. {
  30. permodule.AddRange(permission.Select(p => p.SYS_MODULE));
  31. //去重
  32. permodule = permodule.Distinct(new ModuleDistinct()).ToList();
  33. }
  34. //检索显示与系统
  35. permodule = permodule.Where(p => p.ISSHOW == 1 && p.FK_BELONGSYSTEM.ToString() == siteId).ToList();
  36. //构造上级导航模块
  37. var prevModule = this.LoadListAll(p => p.FK_BELONGSYSTEM.ToString() == siteId);
  38. //反向递归算法构造模块带上级上上级模块
  39. if (permodule.Count > 0)
  40. {
  41. foreach (var item in permodule)
  42. {
  43. RecursiveModule(prevModule, retmodule, item.PARENTID);
  44. retmodule.Add(item);
  45. }
  46. }
  47. //去重
  48. retmodule = retmodule.Distinct(new ModuleDistinct()).ToList();
  49. //返回模块集合
  50. return retmodule.OrderBy(p => p.LEVELS).ThenBy(p => p.SHOWORDER).ToList();
  51. }
  52. /// <summary>
  53. /// 反向递归模块集合,可重复模块数据,最后去重
  54. /// </summary>
  55. /// <param name="PrevModule">总模块</param>
  56. /// <param name="retmodule">返回模块</param>
  57. /// <param name="parentId">上级ID</param>
  58. private void RecursiveModule(List<SYS_MODULE> PrevModule, List<SYS_MODULE> retmodule, int? parentId)
  59. {
  60. var result = PrevModule.Where(p => p.ID == parentId);
  61. if (result != null)
  62. {
  63. foreach (var item in result)
  64. {
  65. retmodule.Add(item);
  66. RecursiveModule(PrevModule, retmodule, item.PARENTID);
  67. }
  68. }
  69. }
  70. /// <summary>
  71. /// 递归模块列表,返回按级别排序
  72. /// add 作者: 季健国 QQ:181589805 by 2016-06-03
  73. /// </summary>
  74. public List<SYS_MODULE> RecursiveModule(List<SYS_MODULE> list)
  75. {
  76. List<SYS_MODULE> result = new List<SYS_MODULE>();
  77. if (list!=null && list.Count>0)
  78. {
  79. ChildModule(list, result, 0);
  80. }
  81. return result;
  82. }
  83. /// <summary>
  84. /// 递归模块列表
  85. /// add 作者: 季健国 QQ:181589805 by 2016-06-03
  86. /// </summary>
  87. private void ChildModule(List<SYS_MODULE> list, List<SYS_MODULE> newlist, int parentId)
  88. {
  89. var result = list.Where(p => p.PARENTID == parentId).OrderBy(p => p.LEVELS).OrderBy(p => p.SHOWORDER).ToList();
  90. if (result.Count() > 0)
  91. {
  92. for (int i = 0; i < result.Count(); i++)
  93. {
  94. newlist.Add(result[i]);
  95. ChildModule(list, newlist, result[i].ID);
  96. }
  97. }
  98. }
  99. /// <summary>
  100. /// 批量变更下级模块的级别
  101. /// </summary>
  102. public bool MoreModifyModule(int moduleId, int levels)
  103. {
  104. //根据当前模块ID获取下级模块的集合
  105. var ChildModule = this.LoadAll(p => p.PARENTID == moduleId).ToList();
  106. if (ChildModule.Any())
  107. {
  108. foreach (var item in ChildModule)
  109. {
  110. item.LEVELS = levels + 1;
  111. this.Update(item);
  112. MoreModifyModule(item.ID, item.LEVELS);
  113. }
  114. }
  115. return true;
  116. }
  117. }
  118. /// <summary>
  119. /// 模型去重,非常重要
  120. /// add 作者: 季健国 QQ:181589805 by 2016-08-03
  121. /// </summary>
  122. public class ModuleDistinct : IEqualityComparer<SYS_MODULE>
  123. {
  124. public bool Equals(SYS_MODULE x, SYS_MODULE y)
  125. {
  126. return x.ID == y.ID;
  127. }
  128. public int GetHashCode(SYS_MODULE obj)
  129. {
  130. return obj.ToString().GetHashCode();
  131. }
  132. }
  133. }