SysConfigServiceImpl.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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. {
  26. @Autowired
  27. private SysConfigMapper configMapper;
  28. @Autowired
  29. private RedisCache redisCache;
  30. /**
  31. * 项目启动时,初始化参数到缓存
  32. */
  33. @PostConstruct
  34. public void init()
  35. {
  36. List<SysConfig> configsList = configMapper.selectConfigList(new SysConfig());
  37. for (SysConfig config : configsList)
  38. {
  39. redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
  40. }
  41. }
  42. /**
  43. * 查询参数配置信息
  44. *
  45. * @param configId 参数配置ID
  46. * @return 参数配置信息
  47. */
  48. @Override
  49. @DataSource(DataSourceType.MASTER)
  50. public SysConfig selectConfigById(Long configId)
  51. {
  52. SysConfig config = new SysConfig();
  53. config.setConfigId(configId);
  54. return configMapper.selectConfig(config);
  55. }
  56. /**
  57. * 根据键名查询参数配置信息
  58. *
  59. * @param configKey 参数key
  60. * @return 参数键值
  61. */
  62. @Override
  63. public String selectConfigByKey(String configKey)
  64. {
  65. String configValue = Convert.toStr(redisCache.getCacheObject(getCacheKey(configKey)));
  66. if (StringUtils.isNotEmpty(configValue))
  67. {
  68. return configValue;
  69. }
  70. SysConfig config = new SysConfig();
  71. config.setConfigKey(configKey);
  72. SysConfig retConfig = configMapper.selectConfig(config);
  73. if (StringUtils.isNotNull(retConfig))
  74. {
  75. redisCache.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue());
  76. return retConfig.getConfigValue();
  77. }
  78. return StringUtils.EMPTY;
  79. }
  80. /**
  81. * 查询参数配置列表
  82. *
  83. * @param config 参数配置信息
  84. * @return 参数配置集合
  85. */
  86. @Override
  87. public List<SysConfig> selectConfigList(SysConfig config)
  88. {
  89. return configMapper.selectConfigList(config);
  90. }
  91. /**
  92. * 新增参数配置
  93. *
  94. * @param config 参数配置信息
  95. * @return 结果
  96. */
  97. @Override
  98. public int insertConfig(SysConfig config)
  99. {
  100. int row = configMapper.insertConfig(config);
  101. if (row > 0)
  102. {
  103. redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
  104. }
  105. return row;
  106. }
  107. /**
  108. * 修改参数配置
  109. *
  110. * @param config 参数配置信息
  111. * @return 结果
  112. */
  113. @Override
  114. public int updateConfig(SysConfig config)
  115. {
  116. int row = configMapper.updateConfig(config);
  117. if (row > 0)
  118. {
  119. redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
  120. }
  121. return row;
  122. }
  123. /**
  124. * 批量删除参数信息
  125. *
  126. * @param configIds 需要删除的参数ID
  127. * @return 结果
  128. */
  129. @Override
  130. public int deleteConfigByIds(Long[] configIds)
  131. {
  132. for (Long configId : configIds)
  133. {
  134. SysConfig config = selectConfigById(configId);
  135. if (StringUtils.equals(UserConstants.YES, config.getConfigType()))
  136. {
  137. throw new CustomException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey()));
  138. }
  139. }
  140. int count = configMapper.deleteConfigByIds(configIds);
  141. if (count > 0)
  142. {
  143. Collection<String> keys = redisCache.keys(Constants.SYS_CONFIG_KEY + "*");
  144. redisCache.deleteObject(keys);
  145. }
  146. return count;
  147. }
  148. /**
  149. * 清空缓存数据
  150. */
  151. @Override
  152. public void clearCache()
  153. {
  154. Collection<String> keys = redisCache.keys(Constants.SYS_CONFIG_KEY + "*");
  155. redisCache.deleteObject(keys);
  156. }
  157. /**
  158. * 校验参数键名是否唯一
  159. *
  160. * @param config 参数配置信息
  161. * @return 结果
  162. */
  163. @Override
  164. public String checkConfigKeyUnique(SysConfig config)
  165. {
  166. Long configId = StringUtils.isNull(config.getConfigId()) ? -1L : config.getConfigId();
  167. SysConfig info = configMapper.checkConfigKeyUnique(config.getConfigKey());
  168. if (StringUtils.isNotNull(info) && info.getConfigId().longValue() != configId.longValue())
  169. {
  170. return UserConstants.NOT_UNIQUE;
  171. }
  172. return UserConstants.UNIQUE;
  173. }
  174. /**
  175. * 设置cache key
  176. *
  177. * @param configKey 参数键
  178. * @return 缓存键key
  179. */
  180. private String getCacheKey(String configKey)
  181. {
  182. return Constants.SYS_CONFIG_KEY + configKey;
  183. }
  184. }