SysConfigServiceImpl.java 6.8 KB

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