package com.iailab.module.infra.service.config;
|
|
import com.iailab.framework.common.pojo.PageResult;
|
import com.iailab.module.infra.controller.admin.config.vo.ConfigPageReqVO;
|
import com.iailab.module.infra.controller.admin.config.vo.ConfigSaveReqVO;
|
import com.iailab.module.infra.convert.config.ConfigConvert;
|
import com.iailab.module.infra.dal.dataobject.config.ConfigDO;
|
import com.iailab.module.infra.dal.mysql.config.ConfigMapper;
|
import com.iailab.module.infra.enums.config.ConfigTypeEnum;
|
import com.google.common.annotations.VisibleForTesting;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
import org.springframework.stereotype.Service;
|
import org.springframework.validation.annotation.Validated;
|
|
import javax.annotation.Resource;
|
|
import java.text.SimpleDateFormat;
|
import java.util.Calendar;
|
import java.util.Date;
|
|
import static com.iailab.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static com.iailab.module.infra.enums.ErrorCodeConstants.*;
|
|
/**
|
* 参数配置 Service 实现类
|
*/
|
@Service
|
@Slf4j
|
@Validated
|
public class ConfigServiceImpl implements ConfigService {
|
|
@Resource
|
private ConfigMapper configMapper;
|
|
@Resource
|
private StringRedisTemplate stringRedisTemplate;
|
|
@Override
|
public Long createConfig(ConfigSaveReqVO createReqVO) {
|
// 校验参数配置 key 的唯一性
|
validateConfigKeyUnique(null, createReqVO.getKey());
|
|
// 插入参数配置
|
ConfigDO config = ConfigConvert.INSTANCE.convert(createReqVO);
|
config.setType(ConfigTypeEnum.CUSTOM.getType());
|
configMapper.insert(config);
|
return config.getId();
|
}
|
|
@Override
|
public void updateConfig(ConfigSaveReqVO updateReqVO) {
|
// 校验自己存在
|
validateConfigExists(updateReqVO.getId());
|
// 校验参数配置 key 的唯一性
|
validateConfigKeyUnique(updateReqVO.getId(), updateReqVO.getKey());
|
|
// 更新参数配置
|
ConfigDO updateObj = ConfigConvert.INSTANCE.convert(updateReqVO);
|
configMapper.updateById(updateObj);
|
}
|
|
@Override
|
public void deleteConfig(Long id) {
|
// 校验配置存在
|
ConfigDO config = validateConfigExists(id);
|
// 内置配置,不允许删除
|
if (ConfigTypeEnum.SYSTEM.getType().equals(config.getType())) {
|
throw exception(CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE);
|
}
|
// 删除
|
configMapper.deleteById(id);
|
}
|
|
@Override
|
public ConfigDO getConfig(Long id) {
|
return configMapper.selectById(id);
|
}
|
|
@Override
|
public ConfigDO getConfigByKey(String key) {
|
return configMapper.selectByKey(key);
|
}
|
|
@Override
|
public PageResult<ConfigDO> getConfigPage(ConfigPageReqVO pageReqVO) {
|
return configMapper.selectPage(pageReqVO);
|
}
|
|
@VisibleForTesting
|
public ConfigDO validateConfigExists(Long id) {
|
if (id == null) {
|
return null;
|
}
|
ConfigDO config = configMapper.selectById(id);
|
if (config == null) {
|
throw exception(CONFIG_NOT_EXISTS);
|
}
|
return config;
|
}
|
|
@VisibleForTesting
|
public void validateConfigKeyUnique(Long id, String key) {
|
ConfigDO config = configMapper.selectByKey(key);
|
if (config == null) {
|
return;
|
}
|
// 如果 id 为空,说明不用比较是否为相同 id 的参数配置
|
if (id == null) {
|
throw exception(CONFIG_KEY_DUPLICATE);
|
}
|
if (!config.getId().equals(id)) {
|
throw exception(CONFIG_KEY_DUPLICATE);
|
}
|
}
|
|
@Override
|
public String getValue(String configCode) {
|
String paramValue = stringRedisTemplate.opsForValue().get(configCode);
|
if(paramValue == null){
|
ConfigDO configDO = configMapper.selectByKey(configCode);
|
paramValue = configDO.getValue();
|
stringRedisTemplate.opsForValue().set(configCode, paramValue);
|
}
|
return paramValue;
|
}
|
|
}
|