SysConfigServiceImpl.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. package com.ruoyi.system.service.impl;
  2. import cn.hutool.core.convert.Convert;
  3. import cn.hutool.core.util.ObjectUtil;
  4. import com.baomidou.dynamic.datasource.annotation.DS;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import com.ruoyi.common.constant.CacheNames;
  8. import com.ruoyi.common.constant.UserConstants;
  9. import com.ruoyi.common.core.domain.PageQuery;
  10. import com.ruoyi.common.core.page.TableDataInfo;
  11. import com.ruoyi.common.core.service.ConfigService;
  12. import com.ruoyi.common.exception.ServiceException;
  13. import com.ruoyi.common.utils.StringUtils;
  14. import com.ruoyi.common.utils.redis.CacheUtils;
  15. import com.ruoyi.common.utils.spring.SpringUtils;
  16. import com.ruoyi.system.domain.SysConfig;
  17. import com.ruoyi.system.mapper.SysConfigMapper;
  18. import com.ruoyi.system.service.ISysConfigService;
  19. import lombok.RequiredArgsConstructor;
  20. import org.springframework.cache.annotation.CachePut;
  21. import org.springframework.cache.annotation.Cacheable;
  22. import org.springframework.stereotype.Service;
  23. import java.util.Arrays;
  24. import java.util.List;
  25. import java.util.Map;
  26. /**
  27. * 参数配置 服务层实现
  28. *
  29. * @author Lion Li
  30. */
  31. @RequiredArgsConstructor
  32. @Service
  33. public class SysConfigServiceImpl implements ISysConfigService, ConfigService {
  34. private final SysConfigMapper baseMapper;
  35. @Override
  36. public TableDataInfo<SysConfig> selectPageConfigList(SysConfig config, PageQuery pageQuery) {
  37. Map<String, Object> params = config.getParams();
  38. LambdaQueryWrapper<SysConfig> lqw = new LambdaQueryWrapper<SysConfig>()
  39. .like(StringUtils.isNotBlank(config.getConfigName()), SysConfig::getConfigName, config.getConfigName())
  40. .eq(StringUtils.isNotBlank(config.getConfigType()), SysConfig::getConfigType, config.getConfigType())
  41. .like(StringUtils.isNotBlank(config.getConfigKey()), SysConfig::getConfigKey, config.getConfigKey())
  42. .between(params.get("beginTime") != null && params.get("endTime") != null,
  43. SysConfig::getCreateTime, params.get("beginTime"), params.get("endTime"));
  44. Page<SysConfig> page = baseMapper.selectPage(pageQuery.build(), lqw);
  45. return TableDataInfo.build(page);
  46. }
  47. /**
  48. * 查询参数配置信息
  49. *
  50. * @param configId 参数配置ID
  51. * @return 参数配置信息
  52. */
  53. @Override
  54. @DS("master")
  55. public SysConfig selectConfigById(Long configId) {
  56. return baseMapper.selectById(configId);
  57. }
  58. /**
  59. * 根据键名查询参数配置信息
  60. *
  61. * @param configKey 参数key
  62. * @return 参数键值
  63. */
  64. @Cacheable(cacheNames = CacheNames.SYS_CONFIG, key = "#configKey")
  65. @Override
  66. public String selectConfigByKey(String configKey) {
  67. SysConfig retConfig = baseMapper.selectOne(new LambdaQueryWrapper<SysConfig>()
  68. .eq(SysConfig::getConfigKey, configKey));
  69. if (ObjectUtil.isNotNull(retConfig)) {
  70. return retConfig.getConfigValue();
  71. }
  72. return StringUtils.EMPTY;
  73. }
  74. /**
  75. * 获取验证码开关
  76. *
  77. * @return true开启,false关闭
  78. */
  79. @Override
  80. public boolean selectCaptchaEnabled() {
  81. String captchaEnabled = SpringUtils.getAopProxy(this).selectConfigByKey("sys.account.captchaEnabled");
  82. if (StringUtils.isEmpty(captchaEnabled)) {
  83. return true;
  84. }
  85. return Convert.toBool(captchaEnabled);
  86. }
  87. /**
  88. * 查询参数配置列表
  89. *
  90. * @param config 参数配置信息
  91. * @return 参数配置集合
  92. */
  93. @Override
  94. public List<SysConfig> selectConfigList(SysConfig config) {
  95. Map<String, Object> params = config.getParams();
  96. LambdaQueryWrapper<SysConfig> lqw = new LambdaQueryWrapper<SysConfig>()
  97. .like(StringUtils.isNotBlank(config.getConfigName()), SysConfig::getConfigName, config.getConfigName())
  98. .eq(StringUtils.isNotBlank(config.getConfigType()), SysConfig::getConfigType, config.getConfigType())
  99. .like(StringUtils.isNotBlank(config.getConfigKey()), SysConfig::getConfigKey, config.getConfigKey())
  100. .between(params.get("beginTime") != null && params.get("endTime") != null,
  101. SysConfig::getCreateTime, params.get("beginTime"), params.get("endTime"));
  102. return baseMapper.selectList(lqw);
  103. }
  104. /**
  105. * 新增参数配置
  106. *
  107. * @param config 参数配置信息
  108. * @return 结果
  109. */
  110. @CachePut(cacheNames = CacheNames.SYS_CONFIG, key = "#config.configKey")
  111. @Override
  112. public String insertConfig(SysConfig config) {
  113. int row = baseMapper.insert(config);
  114. if (row > 0) {
  115. return config.getConfigValue();
  116. }
  117. throw new ServiceException("操作失败");
  118. }
  119. /**
  120. * 修改参数配置
  121. *
  122. * @param config 参数配置信息
  123. * @return 结果
  124. */
  125. @CachePut(cacheNames = CacheNames.SYS_CONFIG, key = "#config.configKey")
  126. @Override
  127. public String updateConfig(SysConfig config) {
  128. int row = 0;
  129. if (config.getConfigId() != null) {
  130. row = baseMapper.updateById(config);
  131. } else {
  132. row = baseMapper.update(config, new LambdaQueryWrapper<SysConfig>()
  133. .eq(SysConfig::getConfigKey, config.getConfigKey()));
  134. }
  135. if (row > 0) {
  136. return config.getConfigValue();
  137. }
  138. throw new ServiceException("操作失败");
  139. }
  140. /**
  141. * 批量删除参数信息
  142. *
  143. * @param configIds 需要删除的参数ID
  144. */
  145. @Override
  146. public void deleteConfigByIds(Long[] configIds) {
  147. for (Long configId : configIds) {
  148. SysConfig config = selectConfigById(configId);
  149. if (StringUtils.equals(UserConstants.YES, config.getConfigType())) {
  150. throw new ServiceException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey()));
  151. }
  152. CacheUtils.evict(CacheNames.SYS_CONFIG, config.getConfigKey());
  153. }
  154. baseMapper.deleteBatchIds(Arrays.asList(configIds));
  155. }
  156. /**
  157. * 加载参数缓存数据
  158. */
  159. @Override
  160. public void loadingConfigCache() {
  161. List<SysConfig> configsList = selectConfigList(new SysConfig());
  162. configsList.forEach(config ->
  163. CacheUtils.put(CacheNames.SYS_CONFIG, config.getConfigKey(), config.getConfigValue()));
  164. }
  165. /**
  166. * 清空参数缓存数据
  167. */
  168. @Override
  169. public void clearConfigCache() {
  170. CacheUtils.clear(CacheNames.SYS_CONFIG);
  171. }
  172. /**
  173. * 重置参数缓存数据
  174. */
  175. @Override
  176. public void resetConfigCache() {
  177. clearConfigCache();
  178. loadingConfigCache();
  179. }
  180. /**
  181. * 校验参数键名是否唯一
  182. *
  183. * @param config 参数配置信息
  184. * @return 结果
  185. */
  186. @Override
  187. public String checkConfigKeyUnique(SysConfig config) {
  188. Long configId = ObjectUtil.isNull(config.getConfigId()) ? -1L : config.getConfigId();
  189. SysConfig info = baseMapper.selectOne(new LambdaQueryWrapper<SysConfig>().eq(SysConfig::getConfigKey, config.getConfigKey()));
  190. if (ObjectUtil.isNotNull(info) && info.getConfigId().longValue() != configId.longValue()) {
  191. return UserConstants.NOT_UNIQUE;
  192. }
  193. return UserConstants.UNIQUE;
  194. }
  195. /**
  196. * 根据参数 key 获取参数值
  197. *
  198. * @param configKey 参数 key
  199. * @return 参数值
  200. */
  201. @Override
  202. public String getConfigValue(String configKey) {
  203. return SpringUtils.getAopProxy(this).selectConfigByKey(configKey);
  204. }
  205. }