SysConfigServiceImpl.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. package com.ruoyi.system.service.impl;
  2. import java.util.Collection;
  3. import java.util.List;
  4. import javax.annotation.PostConstruct;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. import com.ruoyi.common.annotation.DataSource;
  8. import com.ruoyi.common.constant.Constants;
  9. import com.ruoyi.common.constant.UserConstants;
  10. import com.ruoyi.common.core.redis.RedisCache;
  11. import com.ruoyi.common.core.text.Convert;
  12. import com.ruoyi.common.enums.DataSourceType;
  13. import com.ruoyi.common.exception.CustomException;
  14. import com.ruoyi.common.utils.StringUtils;
  15. import com.ruoyi.system.domain.SysConfig;
  16. import com.ruoyi.system.mapper.SysConfigMapper;
  17. import com.ruoyi.system.service.ISysConfigService;
  18. /**
  19. * 参数配置 服务层实现
  20. *
  21. * @author ruoyi
  22. */
  23. @Service
  24. public class SysConfigServiceImpl implements ISysConfigService {
  25. @Autowired
  26. private SysConfigMapper configMapper;
  27. @Autowired
  28. private RedisCache redisCache;
  29. /**
  30. * 项目启动时,初始化参数到缓存
  31. */
  32. @PostConstruct
  33. public void init() {
  34. List<SysConfig> configsList = configMapper.selectConfigList(new SysConfig());
  35. for (SysConfig config : configsList) {
  36. redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
  37. }
  38. }
  39. /**
  40. * 查询参数配置信息
  41. *
  42. * @param configId 参数配置ID
  43. * @return 参数配置信息
  44. */
  45. @Override
  46. @DataSource(DataSourceType.MASTER)
  47. public SysConfig selectConfigById(Long configId) {
  48. SysConfig config = new SysConfig();
  49. config.setConfigId(configId);
  50. return configMapper.selectConfig(config);
  51. }
  52. /**
  53. * 根据键名查询参数配置信息
  54. *
  55. * @param configKey 参数key
  56. * @return 参数键值
  57. */
  58. @Override
  59. public String selectConfigByKey(String configKey) {
  60. String configValue = Convert.toStr(redisCache.getCacheObject(getCacheKey(configKey)));
  61. if (StringUtils.isNotEmpty(configValue)) {
  62. return configValue;
  63. }
  64. SysConfig config = new SysConfig();
  65. config.setConfigKey(configKey);
  66. SysConfig retConfig = configMapper.selectConfig(config);
  67. if (StringUtils.isNotNull(retConfig)) {
  68. redisCache.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue());
  69. return retConfig.getConfigValue();
  70. }
  71. return StringUtils.EMPTY;
  72. }
  73. /**
  74. * 查询参数配置列表
  75. *
  76. * @param config 参数配置信息
  77. * @return 参数配置集合
  78. */
  79. @Override
  80. public List<SysConfig> selectConfigList(SysConfig config) {
  81. return configMapper.selectConfigList(config);
  82. }
  83. /**
  84. * 新增参数配置
  85. *
  86. * @param config 参数配置信息
  87. * @return 结果
  88. */
  89. @Override
  90. public int insertConfig(SysConfig config) {
  91. int row = configMapper.insertConfig(config);
  92. if (row > 0) {
  93. redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
  94. }
  95. return row;
  96. }
  97. /**
  98. * 修改参数配置
  99. *
  100. * @param config 参数配置信息
  101. * @return 结果
  102. */
  103. @Override
  104. public int updateConfig(SysConfig config) {
  105. int row = configMapper.updateConfig(config);
  106. if (row > 0) {
  107. redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
  108. }
  109. return row;
  110. }
  111. /**
  112. * 批量删除参数信息
  113. *
  114. * @param configIds 需要删除的参数ID
  115. * @return 结果
  116. */
  117. @Override
  118. public int deleteConfigByIds(Long[] configIds) {
  119. for (Long configId : configIds) {
  120. SysConfig config = selectConfigById(configId);
  121. if (StringUtils.equals(UserConstants.YES, config.getConfigType())) {
  122. throw new CustomException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey()));
  123. }
  124. }
  125. int count = configMapper.deleteConfigByIds(configIds);
  126. if (count > 0) {
  127. Collection<String> keys = redisCache.keys(Constants.SYS_CONFIG_KEY + "*");
  128. redisCache.deleteObject(keys);
  129. }
  130. return count;
  131. }
  132. /**
  133. * 清空缓存数据
  134. */
  135. @Override
  136. public void clearCache() {
  137. Collection<String> keys = redisCache.keys(Constants.SYS_CONFIG_KEY + "*");
  138. redisCache.deleteObject(keys);
  139. }
  140. /**
  141. * 校验参数键名是否唯一
  142. *
  143. * @param config 参数配置信息
  144. * @return 结果
  145. */
  146. @Override
  147. public String checkConfigKeyUnique(SysConfig config) {
  148. Long configId = StringUtils.isNull(config.getConfigId()) ? -1L : config.getConfigId();
  149. SysConfig info = configMapper.checkConfigKeyUnique(config.getConfigKey());
  150. if (StringUtils.isNotNull(info) && info.getConfigId().longValue() != configId.longValue()) {
  151. return UserConstants.NOT_UNIQUE;
  152. }
  153. return UserConstants.UNIQUE;
  154. }
  155. /**
  156. * 设置cache key
  157. *
  158. * @param configKey 参数键
  159. * @return 缓存键key
  160. */
  161. private String getCacheKey(String configKey) {
  162. return Constants.SYS_CONFIG_KEY + configKey;
  163. }
  164. }