颐和api

Sys_Role_FunctionRepository.cs 3.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using MadRunFabric.Common;
  2. using MadRunFabric.Common.Options;
  3. using Microsoft.Extensions.Logging;
  4. using Microsoft.Extensions.Options;
  5. using ConfigurationApi.IRepositories;
  6. using MadRunFabric.Model;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Text;
  10. using MongoDB.Driver;
  11. using System.Linq;
  12. namespace ConfigurationApi.Repositories
  13. {
  14. public class Sys_Role_FunctionRepository : BaseRepository<Sys_Role_Function, string>, ISys_Role_FunctionRepository
  15. {
  16. protected readonly ILogger<BaseRepository<Sys_Role_Function, string>> _logger;
  17. protected readonly IMongoCollection<Sys_Module_Info> _collection_sys_module_info;
  18. protected readonly IMongoCollection<Sys_ModuleButton_Info> _collection_sys_modulebutton_info;
  19. public Sys_Role_FunctionRepository(IOptions<MongodbOptions> settings, ILogger<BaseRepository<Sys_Role_Function, string>> logger) : base(settings, logger)
  20. {
  21. _collection_sys_module_info = _context.GetCollection<Sys_Module_Info>();
  22. _collection_sys_modulebutton_info = _context.GetCollection<Sys_ModuleButton_Info>();
  23. _logger = logger;
  24. }
  25. /// <summary>
  26. /// 获取菜单和按钮
  27. /// </summary>
  28. /// <param name="roleid"></param>
  29. /// <returns></returns>
  30. public object GetMenu(string roleid)
  31. {
  32. var list = (from p in _collection.AsQueryable() where p.role_id == roleid select p).ToList();
  33. var menulist = list.Where(p => p.function_type == (int)EnumRoleControlType.Moudle).Select(p => p.function_id).ToList();
  34. var buttonlist = list.Where(p => p.function_type == (int)EnumRoleControlType.Button).Select(p => p.function_id).ToList();
  35. var menuinfolist = (from p in _collection_sys_module_info.AsQueryable() where menulist.Contains(p.id) && p.state_flag == 1 orderby p.sort select p).ToList();
  36. var buttoninfolist = (from p in _collection_sys_modulebutton_info.AsQueryable() where buttonlist.Contains(p.id) && p.state_flag == 1 orderby p.sort select p).ToList();
  37. return TreeRecursion(menuinfolist, buttoninfolist);
  38. }
  39. /// <summary>
  40. /// 生成菜单数据方法
  41. /// </summary>
  42. /// <param name="data"></param>
  43. /// <param name="parentId"></param>
  44. /// <returns></returns>
  45. private object TreeRecursion(List<Sys_Module_Info> menuinfolist, List<Sys_ModuleButton_Info> buttoninfolist, string parentId = "000000000000000000000000")
  46. {
  47. List<Sys_Module_Info> item = menuinfolist.FindAll(t => t.parent_id == parentId);//data建议在调用此扩展方法前已经排序过
  48. var list = item.Select(p => new
  49. {
  50. p.id,
  51. name = p.module_name,
  52. code = p.module_code,
  53. url = p.opt_url,
  54. type = p.target,
  55. imgurl = p.img_url,
  56. ismenu = p.ismenu,
  57. p.sort,
  58. buttonstyle = p.button,
  59. buttongroup = buttoninfolist.Where(q => q.moudle_id == p.id).Select(q=>new {
  60. q.id,
  61. name=q.full_name,
  62. code=q.encode,
  63. q.icon,
  64. q.jsevent,
  65. q.layers,
  66. q.location,
  67. moudleid=q.moudle_id,
  68. parentid=q.parent_id,
  69. q.sort,
  70. q.split,
  71. url=q.url_address
  72. }),
  73. children = TreeRecursion(menuinfolist, buttoninfolist, p.id)
  74. });
  75. return list;
  76. }
  77. }
  78. }