SysConfigServiceImpl.java 7.5 KB

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