SysConfigServiceImpl.java 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  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. SysConfig temp = baseMapper.selectById(config.getConfigId());
  131. if (!StringUtils.equals(temp.getConfigKey(), config.getConfigKey())) {
  132. CacheUtils.evict(CacheNames.SYS_CONFIG, temp.getConfigKey());
  133. }
  134. row = baseMapper.updateById(config);
  135. } else {
  136. row = baseMapper.update(config, new LambdaQueryWrapper<SysConfig>()
  137. .eq(SysConfig::getConfigKey, config.getConfigKey()));
  138. }
  139. if (row > 0) {
  140. return config.getConfigValue();
  141. }
  142. throw new ServiceException("操作失败");
  143. }
  144. /**
  145. * 批量删除参数信息
  146. *
  147. * @param configIds 需要删除的参数ID
  148. */
  149. @Override
  150. public void deleteConfigByIds(Long[] configIds) {
  151. for (Long configId : configIds) {
  152. SysConfig config = selectConfigById(configId);
  153. if (StringUtils.equals(UserConstants.YES, config.getConfigType())) {
  154. throw new ServiceException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey()));
  155. }
  156. CacheUtils.evict(CacheNames.SYS_CONFIG, config.getConfigKey());
  157. }
  158. baseMapper.deleteBatchIds(Arrays.asList(configIds));
  159. }
  160. /**
  161. * 加载参数缓存数据
  162. */
  163. @Override
  164. public void loadingConfigCache() {
  165. List<SysConfig> configsList = selectConfigList(new SysConfig());
  166. configsList.forEach(config ->
  167. CacheUtils.put(CacheNames.SYS_CONFIG, config.getConfigKey(), config.getConfigValue()));
  168. }
  169. /**
  170. * 清空参数缓存数据
  171. */
  172. @Override
  173. public void clearConfigCache() {
  174. CacheUtils.clear(CacheNames.SYS_CONFIG);
  175. }
  176. /**
  177. * 重置参数缓存数据
  178. */
  179. @Override
  180. public void resetConfigCache() {
  181. clearConfigCache();
  182. loadingConfigCache();
  183. }
  184. /**
  185. * 校验参数键名是否唯一
  186. *
  187. * @param config 参数配置信息
  188. * @return 结果
  189. */
  190. @Override
  191. public boolean checkConfigKeyUnique(SysConfig config) {
  192. long configId = ObjectUtil.isNull(config.getConfigId()) ? -1L : config.getConfigId();
  193. SysConfig info = baseMapper.selectOne(new LambdaQueryWrapper<SysConfig>().eq(SysConfig::getConfigKey, config.getConfigKey()));
  194. if (ObjectUtil.isNotNull(info) && info.getConfigId() != configId) {
  195. return false;
  196. }
  197. return true;
  198. }
  199. /**
  200. * 根据参数 key 获取参数值
  201. *
  202. * @param configKey 参数 key
  203. * @return 参数值
  204. */
  205. @Override
  206. public String getConfigValue(String configKey) {
  207. return SpringUtils.getAopProxy(this).selectConfigByKey(configKey);
  208. }
  209. }