package org.hsweb.web.service.impl.config; import org.hsweb.commons.StringUtils; import org.hsweb.web.bean.common.UpdateParam; import org.hsweb.web.bean.po.config.Config; import org.hsweb.web.bean.po.config.Config.Property; import org.hsweb.web.core.authorize.ExpressionScopeBean; import org.hsweb.web.dao.config.ConfigMapper; import org.hsweb.web.service.config.ConfigService; import org.hsweb.web.service.impl.AbstractServiceImpl; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.util.Assert; import javax.annotation.Resource; import java.util.Date; import java.util.HashMap; import java.util.Map; import static org.hsweb.web.bean.po.config.Config.Property.*; /** * 系统配置服务类 * Created by generator */ @Service("configService") public class ConfigServiceImpl extends AbstractServiceImpl<Config, String> implements ConfigService, ExpressionScopeBean { public static final String CACHE_KEY = "config"; //默认数据映射接口 @Resource protected ConfigMapper configMapper; @Override protected ConfigMapper getMapper() { return this.configMapper; } @Override @CacheEvict(value = CACHE_KEY, allEntries = true) public int update(Config data) { return createUpdate(data).excludes(createDate).where(id, data.getId()).exec(); } @Override @CacheEvict(value = CACHE_KEY, allEntries = true) public int delete(String s) { return super.delete(s); } /** * 根据配置名称,获取配置内容 * * @param name 配置名称 * @return 配置内容 * @异常信息 */ @Override @Cacheable(value = CACHE_KEY, key = "'info.content.'+#name") public String getContent(String name) { Config config = getMapper().selectByPk(name); if (config == null) return null; return config.getContent(); } /** * 根据配置名称,获取配置内容,并解析为Properties格式 * * @param name 配置名称 * @return 配置内容 * @异常信息 */ @Override @Cacheable(value = CACHE_KEY, key = "'info.'+#name") public Map<Object, Object> get(String name) { Config config = getMapper().selectByPk(name); if (config == null) return new HashMap<>(); return config.toMap(); } /** * 获取配置中指定key的值 * * @param name 配置名称 * @param key key 异常信息 * @return 指定的key对应的value * @throws Exception */ @Override @Cacheable(value = CACHE_KEY, key = "'info.'+#name+'.key.'+#key") public String get(String name, String key) { Object val = get(name).get(key); if (val == null) return null; return String.valueOf(val); } /** * 获取配置中指定key的值,并指定一个默认值,如果对应的key未获取到,则返回默认值 * * @param name 配置名称 * @param key key 异常信息 * @param defaultValue 默认值 * @return 对应key的值,若为null,则返回默认值 */ @Override @Cacheable(value = CACHE_KEY, key = "'info.'+#name+'.key.'+#key") public String get(String name, String key, String defaultValue) { String val; try { val = this.get(name, key); if (val == null) { logger.warn("获取配置:{}.{}失败,defaultValue:{}", name, key, defaultValue); return defaultValue; } } catch (Exception e) { logger.error("获取配置:{}.{}失败,defaultValue:{}", name, key, defaultValue, e); return defaultValue; } return val; } /** * 参照 {@link ConfigService#get(String, String)},将值转为int类型 */ @Override @Cacheable(value = CACHE_KEY, key = "'info.'+#name+'.key.'+#key+'.int'") public int getInt(String name, String key) { return StringUtils.toInt(get(name, key)); } /** * 参照 {@link ConfigService#get(String, String)},将值转为double类型 */ @Override @Cacheable(value = CACHE_KEY, key = "'info.'+#name+'.key.'+#key+'.double'") public double getDouble(String name, String key) { return StringUtils.toDouble(get(name, key)); } /** * 参照 {@link ConfigService#get(String, String)},将值转为long类型 */ @Override @Cacheable(value = CACHE_KEY, key = "'info.'+#name+'.key.'+#key+'.long'") public long getLong(String name, String key) { return StringUtils.toLong(get(name, key)); } /** * 参照 {@link ConfigService#get(String, String, String)},将值转为int类型 */ @Override @Cacheable(value = CACHE_KEY, key = "'info.'+#name+'.key.'+#key+'.int'") public int getInt(String name, String key, int defaultValue) { return StringUtils.toInt(get(name, key, String.valueOf(defaultValue))); } /** * 参照 {@link ConfigService#get(String, String, String)},将值转为double类型 */ @Override @Cacheable(value = CACHE_KEY, key = "'info.'+#name+'.key.'+#key+'.double'") public double getDouble(String name, String key, double defaultValue) { return StringUtils.toDouble(get(name, key, String.valueOf(defaultValue))); } /** * 参照 {@link ConfigService#get(String, String, String)},将值转为long类型 */ @Override @Cacheable(value = CACHE_KEY, key = "'info.'+#name+'.key.'+#key+'.long'") public long getLong(String name, String key, long defaultValue) { return StringUtils.toLong(get(name, key, String.valueOf(defaultValue))); } @Override @CacheEvict(value = CACHE_KEY, allEntries = true) public String insert(Config data) { Config old = this.selectByPk(data.getId()); Assert.isNull(old, "配置已存在,请勿重复添加!"); data.setCreateDate(new Date()); return super.insert(data); } }