SettingsAppService.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using Abp;
  5. using Abp.Application.Services.Dto;
  6. using Abp.Auditing;
  7. using Abp.Authorization;
  8. using Abp.Configuration;
  9. using Abp.Configuration.Startup;
  10. using Abp.Domain.Repositories;
  11. using Abp.Domain.Uow;
  12. using Abp.Localization.Dictionaries;
  13. using Abp.Runtime.Caching;
  14. using WeApp.Authorization;
  15. using WeApp.BaseSystem.Settings.Dto;
  16. using WeApp.Configuration;
  17. using WeApp.Localization;
  18. using IwbZero;
  19. using IwbZero.AppServiceBase;
  20. using IwbZero.Auditing;
  21. using IwbZero.Authorization.Base.SystemInfo;
  22. using IwbZero.Authorization.Base.Users;
  23. using IwbZero.ToolCommon.LogHelpers;
  24. using IwbZero.ToolCommon.StringModel;
  25. using WeApp.Authorization.Users;
  26. namespace WeApp.BaseSystem.Settings
  27. {
  28. [AbpAuthorize, AuditLog("系统配置", "配置")]
  29. public class SettingsAppService : IwbAsyncCrudAppService<SysSetting, SettingDto, long, IwbPagedRequestDto, SettingCreateDto, SettingUpdateDto>, ISettingsAppService
  30. {
  31. private ILocalizationConfiguration Configuration { get; }
  32. public SettingsAppService(ICacheManager cacheManager, IRepository<SysSetting, long> repository, ILocalizationConfiguration configuration) : base(repository, "")
  33. {
  34. Configuration = configuration;
  35. CacheManager = cacheManager;
  36. }
  37. protected override string KeyExistMessage => string.Format(L(IwbLanguageMessage.KeyExistMessageFormatter), L("setting"));
  38. protected override string KeyNotExistMessage => string.Format(L(IwbLanguageMessage.KeyNotExistMessageFormatter), L("setting"));
  39. #region Setting
  40. [AbpAuthorize(PermissionNames.PagesUserSysSettingLoginImage), AuditLog("配置登陆背景")]
  41. public async Task LoginImage(ImageDto input)
  42. {
  43. //超级管理员和管理员才可操作
  44. //if (AbpSession.UserType != UsersAndRolesTypeDefinition.Supper )
  45. //{
  46. // ThrowError(WeAppLanguageMessage.NoPermissionOperation);
  47. //}
  48. if (input.ImageInfo.IsEmpty())
  49. {
  50. ThrowError(IwbLanguageMessage.NoImageInfo);
  51. }
  52. await AttachFileManager.FileUpload(input.ImageInfo, await GetLoginHomePath(IwbSettingNames.LoginPagePath), IwbConsts.LoginImageName, IwbConsts.LoginHomeImageExt);
  53. }
  54. [AbpAuthorize(PermissionNames.PagesUserSysSettingHomeImage), AuditLog("配置主页背景")]
  55. public async Task HomeImage(ImageDto input)
  56. {
  57. //超级管理员和管理员才可操作
  58. //if (AbpSession.UserType != UsersAndRolesTypeDefinition.Supper )
  59. //{
  60. // ThrowError(WeAppLanguageMessage.NoPermissionOperation);
  61. //}
  62. if (input.ImageInfo.IsEmpty())
  63. {
  64. ThrowError(IwbLanguageMessage.NoImageInfo);
  65. }
  66. await AttachFileManager.FileUpload(input.ImageInfo, await GetLoginHomePath(IwbSettingNames.HomePagePath),
  67. IwbConsts.HomeImageName, IwbConsts.LoginHomeImageExt);
  68. }
  69. private async Task<string> GetLoginHomePath(string name)
  70. {
  71. int? tenantId = AbpSession.TenantId;
  72. long userId = AbpSession.UserId ?? 0;
  73. var path = await SettingManager.GetSettingValueAsync(name);
  74. if (tenantId.HasValue && !path.EndsWith(tenantId + "") && !path.EndsWith(tenantId + "/"))
  75. {
  76. if (AbpSession.UserName != UserBase.AdminUserName)
  77. {
  78. path = $"{path}/{tenantId}/{userId}";
  79. await SettingManager.ChangeSettingForUserAsync(new UserIdentifier(tenantId, userId), name, path);
  80. }
  81. }
  82. return path;
  83. }
  84. [AbpAuthorize(PermissionNames.PagesUserSysSettingRefreshCache), AuditLog("刷新缓存")]
  85. public async Task CacheRefresh(string id)
  86. {
  87. //超级管理员和管理员才可操作
  88. if (AbpSession.UserType != UsersAndRolesTypeDefinition.Supper && AbpSession.UserType != UsersAndRolesTypeDefinition.System)
  89. {
  90. ThrowError(IwbLanguageMessage.NoPermissionOperation);
  91. }
  92. if (string.IsNullOrEmpty(id))
  93. {
  94. foreach (var cacheName in IwbCacheNames.RefreshList)
  95. {
  96. var cache = CacheManager.GetCache(cacheName);
  97. await cache.ClearAsync();
  98. }
  99. }
  100. else
  101. {
  102. var cache = CacheManager.GetCache(id);
  103. await cache.ClearAsync();
  104. }
  105. }
  106. [AbpAuthorize(PermissionNames.PagesUserSysSettingRefreshLang), AuditLog("刷新语言包")]
  107. public void LangRefresh()
  108. {
  109. //超级管理员才可操作
  110. if (AbpSession.UserType != UsersAndRolesTypeDefinition.Supper)
  111. {
  112. ThrowError(IwbLanguageMessage.NoPermissionOperation);
  113. }
  114. foreach (var source in Configuration.Sources)
  115. {
  116. if (source.Name != IwbZeroConsts.LocalizationSourceName)
  117. {
  118. continue;
  119. }
  120. //Extending dictionaries
  121. if (source is IDictionaryBasedLocalizationSource dictionaryBasedSource)
  122. {
  123. var extensions = Configuration.Sources.Extensions.Where(e => e.SourceName == source.Name).ToList();
  124. foreach (var extension in extensions)
  125. {
  126. if (extension.DictionaryProvider is IwbXmlFileLocalizationDictionaryProvider provider)
  127. {
  128. provider.Refresh(dictionaryBasedSource.Name);
  129. foreach (var extensionDictionary in provider.Dictionaries.Values)
  130. {
  131. dictionaryBasedSource.Extend(extensionDictionary);
  132. }
  133. }
  134. }
  135. }
  136. this.LogDebug("Refreshed localization source: " + source.Name);
  137. }
  138. }
  139. #endregion
  140. #region CURD
  141. //[AbpAuthorize(PermissionNames.PagesSystemMgSettingMgCreate)]
  142. //public override async Task Create(SettingCreateDto input)
  143. //{
  144. // ThrowError(WeAppLanguageMessage.NoPermissionOperation);
  145. // //超级管理员才可操作
  146. // if (AbpSession.UserType != UsersAndRolesTypeDefinition.Supper)
  147. // {
  148. // ThrowError(WeAppLanguageMessage.NoPermissionOperation);
  149. // }
  150. // input.Type = SystemSettingTypeDefinition.User;
  151. // if ((await Repository.FirstOrDefaultAsync(a => a.Name == input.Name)) != null)
  152. // CheckErrors(ExistMessage);
  153. // var entity = MapToEntity(input);
  154. // await Repository.InsertAsync(entity);
  155. //}
  156. [AbpAuthorize(PermissionNames.PagesSystemMgSettingMgUpdate)]
  157. public override async Task Update(SettingUpdateDto input)
  158. {
  159. //var entity = await Repository.FirstOrDefaultAsync(a => a.Name == input.Name&& a.TenantId==tenantId);
  160. //if (entity == null)
  161. // CheckErrors(NotExistMessage);
  162. //else
  163. //{
  164. // input.Name = entity.Name;
  165. // input.Type = entity.Type;
  166. //}
  167. //MapToEntity(input, entity);
  168. //await CurrentUnitOfWork.SaveChangesAsync();
  169. if (AbpSession.TenantId.HasValue)
  170. {
  171. var value = await SettingManager.GetSettingValueAsync(input.Name);
  172. if (input.Value != value)
  173. {
  174. await SettingManager.ChangeSettingForTenantAsync((int)AbpSession.TenantId, input.Name, input.Value);
  175. }
  176. }
  177. else
  178. {
  179. await SettingManager.ChangeSettingForApplicationAsync(input.Name, input.Value);
  180. }
  181. }
  182. //[AbpAuthorize(PermissionNames.PagesSystemMgSettingMgDelete)]
  183. //public override async Task Delete(EntityDto<long> input)
  184. //{
  185. // ThrowError(WeAppLanguageMessage.NoPermissionOperation);
  186. // //超级管理员Admin、System才可操作
  187. // if (AbpSession.UserName!=UserBase.AdminUserName&&AbpSession.UserName!=UserBase.SystemUserName)
  188. // {
  189. // ThrowError(WeAppLanguageMessage.NoPermissionOperation);
  190. // }
  191. // await Repository.DeleteAsync(input.Id);
  192. //}
  193. [DisableAuditing]
  194. [AbpAuthorize(PermissionNames.PagesSystemMgSettingMgQuery)]
  195. public override async Task<PagedResultDto<SettingDto>> GetAll(IwbPagedRequestDto input)
  196. {
  197. CheckGetAllPermission();
  198. //var query = CreateFilteredQuery(input);
  199. //if (AbpSession.TenantId.HasValue&& (AbpSession.UserName!=UserBase.HostAdminName|| AbpSession.UserName!=UserBase.HostSystemName))
  200. //{
  201. // query= query.Where(a => a.Type > 0);
  202. //}
  203. //query = ApplyFilter(query, input);
  204. //var totalCount = await AsyncQueryableExecuter.CountAsync(query);
  205. //query = ApplySorting(query, input);
  206. //query = ApplyPaging(query, input);
  207. //var entities = await AsyncQueryableExecuter.ToListAsync(query);
  208. //var dtoList = new PagedResultDto<SettingDto>(
  209. // totalCount,
  210. // entities.Select(MapToEntityDto).ToList()
  211. //);
  212. //return dtoList;
  213. int totalCount;
  214. List<SysSetting> entities;
  215. using (CurrentUnitOfWork.DisableFilter(AbpDataFilters.MayHaveTenant))
  216. {
  217. var query = CreateFilteredQuery(input).Where(a =>
  218. (AbpSession.UserName == UserBase.HostAdminName || AbpSession.UserName == UserBase.HostSystemName ||
  219. // ReSharper disable once RedundantLogicalConditionalExpressionOperand
  220. a.Type == SystemSettingTypeDefinition.Tenant) && (a.TenantId == null || (a.TenantId == 1 && !IwbConsts.MultiTenancyEnabled)));
  221. query = ApplyFilter(query, input);
  222. totalCount = await AsyncQueryableExecuter.CountAsync(query);
  223. query = ApplySorting(query, input);
  224. query = ApplyPaging(query, input);
  225. entities = await AsyncQueryableExecuter.ToListAsync(query);
  226. }
  227. var dtoList = new PagedResultDto<SettingDto>(
  228. totalCount,
  229. entities.Select(MapEntityToDto).ToList()
  230. );
  231. return dtoList;
  232. }
  233. private SettingDto MapEntityToDto(SysSetting entity)
  234. {
  235. var dto = MapToEntityDto(entity);
  236. dto.Value = SettingManager.GetSettingValue(entity.Name);
  237. return dto;
  238. }
  239. #endregion
  240. }
  241. }