SettingsAppService.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Abp.Application.Services.Dto;
  6. using Abp.Auditing;
  7. using Abp.Authorization;
  8. using Abp.Configuration;
  9. using Abp.Domain.Repositories;
  10. using Abp.Runtime.Caching;
  11. using ShwasherSys.BaseSysInfo.Settings.Dto;
  12. using ShwasherSys.Lambda;
  13. using Castle.Core.Internal;
  14. using ShwasherSys.Authorization.Permissions;
  15. using IwbZero.AppServiceBase;
  16. using IwbZero.Auditing;
  17. using IwbZero.IdentityFramework;
  18. using IwbZero.Setting;
  19. namespace ShwasherSys.BaseSysInfo.Settings
  20. {
  21. [AbpAuthorize, AuditLog("系统配置", "配置")]
  22. public class SettingsAppService : ShwasherAsyncCrudAppService<SysSetting, SettingDto, int, PagedRequestDto, SettingCreateDto, SettingUpdateDto>, ISettingsAppService
  23. {
  24. protected ISettingManager AbpSettingManager;
  25. public const string ApplicationSettingsCacheKey = "ApplicationSettings";
  26. public SettingsAppService(ICacheManager cacheManager, IIwbSettingManager settingManager, IRepository<SysSetting, int> repository, ISettingManager abpSettingManager) : base(repository, "SettingNo")
  27. {
  28. SettingManager = settingManager;
  29. CacheManager = cacheManager;
  30. AbpSettingManager = abpSettingManager;
  31. }
  32. protected override string GetPermissionName { get; set; } = PermissionNames.PagesSystemSysSetting;
  33. protected override string GetAllPermissionName { get; set; } = PermissionNames.PagesSystemSysSetting;
  34. protected override string CreatePermissionName { get; set; } = PermissionNames.PagesSystemSysSettingCreate;
  35. protected override string UpdatePermissionName { get; set; } = PermissionNames.PagesSystemSysSettingUpdate;
  36. protected override string DeletePermissionName { get; set; } = PermissionNames.PagesSystemSysSettingDelete;
  37. [DisableAuditing]
  38. public override async Task<PagedResultDto<SettingDto>> GetAll(PagedRequestDto input)
  39. {
  40. CheckGetAllPermission();
  41. var query = CreateFilteredQuery(input).Where(a => a.SettingType != 0);
  42. if (input.SearchList != null && input.SearchList.Count > 0)
  43. {
  44. List<LambdaObject> objList = new List<LambdaObject>();
  45. foreach (var o in input.SearchList)
  46. {
  47. if (o.KeyWords.IsNullOrEmpty())
  48. continue;
  49. object keyWords = o.KeyWords;
  50. objList.Add(new LambdaObject
  51. {
  52. FieldType = (LambdaFieldType)o.FieldType,
  53. FieldName = o.KeyField,
  54. FieldValue = keyWords,
  55. ExpType = (LambdaExpType)o.ExpType
  56. });
  57. }
  58. var exp = objList.GetExp<SysSetting>();
  59. query = query.Where(exp);
  60. }
  61. var totalCount = await AsyncQueryableExecuter.CountAsync(query);
  62. query = ApplySorting(query, input);
  63. query = ApplyPaging(query, input);
  64. var entities = await AsyncQueryableExecuter.ToListAsync(query);
  65. var dtos = new PagedResultDto<SettingDto>(
  66. totalCount,
  67. entities.Select(MapToEntityDto).ToList()
  68. );
  69. return dtos;
  70. }
  71. public override async Task<SettingDto> Create(SettingCreateDto input)
  72. {
  73. CheckCreatePermission();
  74. input.SettingType = input.SettingType == 0 ? 1 : input.SettingType;
  75. if ((await Repository.FirstOrDefaultAsync(a => a.Code == input.Code)) != null)
  76. CheckErrors(IwbIdentityResult.Failed("系统配置已存在,请检查后再试!"));
  77. var entity = MapToEntity(input);
  78. entity.SettingNo = Guid.NewGuid().ToString("N");
  79. await Repository.InsertAsync(entity);
  80. await CurrentUnitOfWork.SaveChangesAsync();
  81. await Refresh();
  82. return MapToEntityDto(entity);
  83. }
  84. public override async Task<SettingDto> Update(SettingUpdateDto input)
  85. {
  86. CheckUpdatePermission();
  87. //input.SettingType = input.SettingType == 0 ? 1 : input.SettingType;
  88. var entity = await Repository.FirstOrDefaultAsync(a => a.Code == input.Code);
  89. if (entity == null)
  90. CheckErrors(IwbIdentityResult.Failed("系统配置不存在,请检查后再试!"));
  91. else
  92. {
  93. input.SettingNo = entity.SettingNo;
  94. input.Code = entity.Code;
  95. input.SettingType = entity.SettingType;
  96. }
  97. MapToEntity(input, entity);
  98. await CurrentUnitOfWork.SaveChangesAsync();
  99. await SettingManager.ChangeSettingForApplicationAsync(input.Code, input.Value);
  100. //await AbpSettingManager.ChangeSettingForApplicationAsync(input.Code, input.Value);
  101. await Refresh();
  102. return MapToEntityDto(entity);
  103. }
  104. public override async Task Delete(EntityDto<int> input)
  105. {
  106. CheckDeletePermission();
  107. await Repository.DeleteAsync(input.Id);
  108. await CurrentUnitOfWork.SaveChangesAsync();
  109. await Refresh();
  110. }
  111. [AbpAuthorize(PermissionNames.PagesSystemSysSettingRefresh)]
  112. public async Task Refresh()
  113. {
  114. foreach (var cach in CacheManager.GetAllCaches())
  115. {
  116. await cach.ClearAsync();
  117. }
  118. await SettingManager.RefreshAsync();
  119. await Refresh2();
  120. }
  121. public async Task<Dictionary<string, SettingInfo>> Refresh2()
  122. {
  123. var list = Repository.GetAll();
  124. return await CacheManager.GetApplicationSettingsCache().GetAsync(ApplicationSettingsCacheKey, factory: async () => {
  125. var dictionary = new Dictionary<string, SettingInfo>();
  126. foreach (var sysSetting in list)
  127. {
  128. var settingInfo = new SettingInfo()
  129. {
  130. TenantId = 1,
  131. Name = sysSetting.Code,
  132. Value = sysSetting.Value,
  133. UserId = 1
  134. };
  135. dictionary[sysSetting.Code] = settingInfo;
  136. }
  137. return dictionary;
  138. });
  139. }
  140. }
  141. }