SettingsAppService.cs 11 KB

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