SysConfigServiceImpl.java 7.3 KB

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