BaseServiceDataSeeder.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using BaseService.BaseData;
  2. using BaseService.Systems;
  3. using Microsoft.EntityFrameworkCore;
  4. using System;
  5. using System.Linq;
  6. using System.Threading.Tasks;
  7. using Volo.Abp.Data;
  8. using Volo.Abp.DependencyInjection;
  9. using Volo.Abp.Domain.Repositories;
  10. using Volo.Abp.Guids;
  11. using Volo.Abp.Identity;
  12. using Volo.Abp.MultiTenancy;
  13. namespace BaseService.DataSeeder
  14. {
  15. public class BaseServiceDataSeeder : IDataSeedContributor, ITransientDependency
  16. {
  17. public IIdentityRoleRepository RoleRepository { get; }
  18. private readonly IRepository<DataDictionary, Guid> _dataDicRepository;
  19. private readonly IRepository<DataDictionaryDetail, Guid> _dataDicDetailRepository;
  20. private readonly IRepository<Menu, Guid> _menuRepository;
  21. private readonly IRepository<RoleMenu> _roleMenuRepository;
  22. private readonly IGuidGenerator _guidGenerator;
  23. private readonly ICurrentTenant _currentTenant;
  24. public BaseServiceDataSeeder(
  25. IRepository<DataDictionary, Guid> dataDicRepository,
  26. IRepository<DataDictionaryDetail, Guid> dataDicDetailRepository,
  27. IRepository<Menu, Guid> menuRepository,
  28. IRepository<RoleMenu> roleMenuRepository,
  29. IGuidGenerator guidGenerator,
  30. IIdentityRoleRepository roleRepository,
  31. ICurrentTenant currentTenant)
  32. {
  33. _dataDicRepository = dataDicRepository;
  34. _dataDicDetailRepository = dataDicDetailRepository;
  35. _guidGenerator = guidGenerator;
  36. _menuRepository = menuRepository;
  37. _roleMenuRepository = roleMenuRepository;
  38. RoleRepository = roleRepository;
  39. _currentTenant = currentTenant;
  40. }
  41. public virtual async Task SeedAsync(DataSeedContext context)
  42. {
  43. await CreateDataDictionaries();
  44. }
  45. //创建数据字典
  46. private async Task CreateDataDictionaries()
  47. {
  48. var existDic = await (await _dataDicRepository.GetQueryableAsync()).AnyAsync(d => d.Name == "condition");
  49. if (!existDic)
  50. {
  51. var id = _guidGenerator.Create();
  52. await _dataDicRepository.InsertAsync(new DataDictionary(id, "condition", "表单条件"));
  53. await CreateDataDictionaryDetails(id);
  54. }
  55. var existMenu = await _menuRepository.AnyAsync();
  56. if (!existMenu)
  57. {
  58. await CreateMenus();
  59. }
  60. }
  61. private async Task CreateDataDictionaryDetails(Guid pid)
  62. {
  63. await _dataDicDetailRepository.InsertAsync(new DataDictionaryDetail(_guidGenerator.Create(), pid, "等于", "=", 0));
  64. await _dataDicDetailRepository.InsertAsync(new DataDictionaryDetail(_guidGenerator.Create(), pid, "大于", ">", 1));
  65. await _dataDicDetailRepository.InsertAsync(new DataDictionaryDetail(_guidGenerator.Create(), pid, "小于", "<", 2));
  66. }
  67. private async Task CreateMenus()
  68. {
  69. var adminRole = (await RoleRepository.GetDbSetAsync()).FirstOrDefault();
  70. var menus = new MenuSeeder().GetSeed();
  71. if (_currentTenant.Id != null)
  72. {
  73. menus = menus.Where(_ => _.IsHost == false).ToList();
  74. }
  75. foreach (var menu in menus)
  76. {
  77. await _menuRepository.InsertAsync(menu);
  78. await _roleMenuRepository.InsertAsync(new RoleMenu(adminRole.Id, menu.Id));
  79. }
  80. }
  81. }
  82. }