SysConfigServiceImpl.java 6.6 KB

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