SysConfigService.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. // 大名科技(天津)有限公司版权所有 电话:18020030720 QQ:515096995
  2. //
  3. // 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证
  4. namespace Admin.NET.Core.Service;
  5. /// <summary>
  6. /// 系统参数配置服务 💥
  7. /// </summary>
  8. [ApiDescriptionSettings(Order = 440)]
  9. public class SysConfigService : IDynamicApiController, ITransient
  10. {
  11. private readonly SqlSugarRepository<SysConfig> _sysConfigRep;
  12. private readonly SysCacheService _sysCacheService;
  13. public SysConfigService(SqlSugarRepository<SysConfig> sysConfigRep,
  14. SysCacheService sysCacheService)
  15. {
  16. _sysConfigRep = sysConfigRep;
  17. _sysCacheService = sysCacheService;
  18. }
  19. /// <summary>
  20. /// 获取参数配置分页列表 🔖
  21. /// </summary>
  22. /// <param name="input"></param>
  23. /// <returns></returns>
  24. [DisplayName("获取参数配置分页列表")]
  25. public async Task<SqlSugarPagedList<SysConfig>> Page(PageConfigInput input)
  26. {
  27. return await _sysConfigRep.AsQueryable()
  28. .WhereIF(!string.IsNullOrWhiteSpace(input.Name?.Trim()), u => u.Name.Contains(input.Name))
  29. .WhereIF(!string.IsNullOrWhiteSpace(input.Code?.Trim()), u => u.Code.Contains(input.Code))
  30. .WhereIF(!string.IsNullOrWhiteSpace(input.GroupCode?.Trim()), u => u.GroupCode.Equals(input.GroupCode))
  31. .OrderBuilder(input)
  32. .ToPagedListAsync(input.Page, input.PageSize);
  33. }
  34. /// <summary>
  35. /// 获取参数配置列表 🔖
  36. /// </summary>
  37. /// <returns></returns>
  38. [DisplayName("获取参数配置列表")]
  39. public async Task<List<SysConfig>> GetList()
  40. {
  41. return await _sysConfigRep.GetListAsync();
  42. }
  43. /// <summary>
  44. /// 增加参数配置 🔖
  45. /// </summary>
  46. /// <param name="input"></param>
  47. /// <returns></returns>
  48. [ApiDescriptionSettings(Name = "Add"), HttpPost]
  49. [DisplayName("增加参数配置")]
  50. public async Task AddConfig(AddConfigInput input)
  51. {
  52. var isExist = await _sysConfigRep.IsAnyAsync(u => u.Name == input.Name || u.Code == input.Code);
  53. if (isExist)
  54. throw Oops.Oh(ErrorCodeEnum.D9000);
  55. await _sysConfigRep.InsertAsync(input.Adapt<SysConfig>());
  56. }
  57. /// <summary>
  58. /// 更新参数配置 🔖
  59. /// </summary>
  60. /// <param name="input"></param>
  61. /// <returns></returns>
  62. [ApiDescriptionSettings(Name = "Update"), HttpPost]
  63. [DisplayName("更新参数配置")]
  64. public async Task UpdateConfig(UpdateConfigInput input)
  65. {
  66. var isExist = await _sysConfigRep.IsAnyAsync(u => (u.Name == input.Name || u.Code == input.Code) && u.Id != input.Id);
  67. if (isExist)
  68. throw Oops.Oh(ErrorCodeEnum.D9000);
  69. var config = input.Adapt<SysConfig>();
  70. await _sysConfigRep.AsUpdateable(config).IgnoreColumns(true).ExecuteCommandAsync();
  71. _sysCacheService.Remove(config.Code);
  72. }
  73. /// <summary>
  74. /// 删除参数配置 🔖
  75. /// </summary>
  76. /// <param name="input"></param>
  77. /// <returns></returns>
  78. [ApiDescriptionSettings(Name = "Delete"), HttpPost]
  79. [DisplayName("删除参数配置")]
  80. public async Task DeleteConfig(DeleteConfigInput input)
  81. {
  82. var config = await _sysConfigRep.GetFirstAsync(u => u.Id == input.Id);
  83. if (config.SysFlag == YesNoEnum.Y) // 禁止删除系统参数
  84. throw Oops.Oh(ErrorCodeEnum.D9001);
  85. await _sysConfigRep.DeleteAsync(config);
  86. _sysCacheService.Remove(config.Code);
  87. }
  88. /// <summary>
  89. /// 批量删除参数配置 🔖
  90. /// </summary>
  91. /// <param name="ids"></param>
  92. /// <returns></returns>
  93. [ApiDescriptionSettings(Name = "BatchDelete"), HttpPost]
  94. [DisplayName("批量删除参数配置")]
  95. public async Task BatchDeleteConfig(List<long> ids)
  96. {
  97. foreach (var id in ids)
  98. {
  99. var config = await _sysConfigRep.GetFirstAsync(u => u.Id == id);
  100. if (config.SysFlag == YesNoEnum.Y) // 禁止删除系统参数
  101. continue;
  102. await _sysConfigRep.DeleteAsync(config);
  103. _sysCacheService.Remove(config.Code);
  104. }
  105. }
  106. /// <summary>
  107. /// 获取参数配置详情 🔖
  108. /// </summary>
  109. /// <param name="input"></param>
  110. /// <returns></returns>
  111. [DisplayName("获取参数配置详情")]
  112. public async Task<SysConfig> GetDetail([FromQuery] ConfigInput input)
  113. {
  114. return await _sysConfigRep.GetFirstAsync(u => u.Id == input.Id);
  115. }
  116. /// <summary>
  117. /// 获取参数配置值
  118. /// </summary>
  119. /// <param name="code"></param>
  120. /// <returns></returns>
  121. [NonAction]
  122. public async Task<T> GetConfigValue<T>(string code)
  123. {
  124. if (string.IsNullOrWhiteSpace(code)) return default;
  125. var value = _sysCacheService.Get<string>(code);
  126. if (string.IsNullOrEmpty(value))
  127. {
  128. var config = await _sysConfigRep.GetFirstAsync(u => u.Code == code);
  129. value = config != null ? config.Value : default;
  130. _sysCacheService.Set(code, value);
  131. }
  132. if (string.IsNullOrWhiteSpace(value)) return default;
  133. return (T)Convert.ChangeType(value, typeof(T));
  134. }
  135. /// <summary>
  136. /// 获取分组列表 🔖
  137. /// </summary>
  138. /// <returns></returns>
  139. [DisplayName("获取分组列表")]
  140. public async Task<List<string>> GetGroupList()
  141. {
  142. return await _sysConfigRep.AsQueryable().GroupBy(u => u.GroupCode).Select(u => u.GroupCode).ToListAsync();
  143. }
  144. /// <summary>
  145. /// 获取 Token 过期时间
  146. /// </summary>
  147. /// <returns></returns>
  148. [NonAction]
  149. public async Task<int> GetTokenExpire()
  150. {
  151. var tokenExpireStr = await GetConfigValue<string>(CommonConst.SysTokenExpire);
  152. _ = int.TryParse(tokenExpireStr, out var tokenExpire);
  153. return tokenExpire == 0 ? 20 : tokenExpire;
  154. }
  155. /// <summary>
  156. /// 获取 RefreshToken 过期时间
  157. /// </summary>
  158. /// <returns></returns>
  159. [NonAction]
  160. public async Task<int> GetRefreshTokenExpire()
  161. {
  162. var refreshTokenExpireStr = await GetConfigValue<string>(CommonConst.SysRefreshTokenExpire);
  163. _ = int.TryParse(refreshTokenExpireStr, out var refreshTokenExpire);
  164. return refreshTokenExpire == 0 ? 40 : refreshTokenExpire;
  165. }
  166. }