diff --git a/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/constants/RuleConstants.java b/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/constants/RuleConstants.java index e680fa3f9..2d0ca47c6 100644 --- a/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/constants/RuleConstants.java +++ b/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/constants/RuleConstants.java @@ -92,4 +92,9 @@ public interface RuleConstants { */ String BASE64_IMG_PREFIX = "data:image/png;base64,"; + /** + * 系统配置初始化的标识的常量名称,用在sys_config表作为config_code + */ + String SYSTEM_CONFIG_INIT_FLAG_NAME = "SYS_CONFIG_INIT_FLAG"; + } diff --git a/kernel-d-config/config-api/src/main/java/cn/stylefeng/roses/kernel/config/api/exception/enums/ConfigExceptionEnum.java b/kernel-d-config/config-api/src/main/java/cn/stylefeng/roses/kernel/config/api/exception/enums/ConfigExceptionEnum.java index f8e10c21a..977ac7768 100644 --- a/kernel-d-config/config-api/src/main/java/cn/stylefeng/roses/kernel/config/api/exception/enums/ConfigExceptionEnum.java +++ b/kernel-d-config/config-api/src/main/java/cn/stylefeng/roses/kernel/config/api/exception/enums/ConfigExceptionEnum.java @@ -85,7 +85,12 @@ public enum ConfigExceptionEnum implements AbstractExceptionEnum { /** * 配置容器是空,请先初始化配置容器 */ - CONFIG_CONTAINER_IS_NULL(RuleConstants.BUSINESS_ERROR_TYPE_CODE + ConfigConstants.CONFIG_EXCEPTION_STEP_CODE + "10", "配置容器为空,请先初始化配置容器,请调用ConfigContext.setConfigApi()初始化"); + CONFIG_CONTAINER_IS_NULL(RuleConstants.BUSINESS_ERROR_TYPE_CODE + ConfigConstants.CONFIG_EXCEPTION_STEP_CODE + "10", "配置容器为空,请先初始化配置容器,请调用ConfigContext.setConfigApi()初始化"), + + /** + * 初始化配置失败,参数为空 + */ + CONFIG_INIT_ERROR(RuleConstants.BUSINESS_ERROR_TYPE_CODE + ConfigConstants.CONFIG_EXCEPTION_STEP_CODE + "11", "初始化配置失败,参数为空"); /** * 错误编码 diff --git a/kernel-d-config/config-api/src/main/java/cn/stylefeng/roses/kernel/config/api/pojo/ConfigInitRequest.java b/kernel-d-config/config-api/src/main/java/cn/stylefeng/roses/kernel/config/api/pojo/ConfigInitRequest.java new file mode 100644 index 000000000..ea99dc443 --- /dev/null +++ b/kernel-d-config/config-api/src/main/java/cn/stylefeng/roses/kernel/config/api/pojo/ConfigInitRequest.java @@ -0,0 +1,23 @@ +package cn.stylefeng.roses.kernel.config.api.pojo; + +import lombok.Data; + +import java.util.Map; + +/** + * 初始化系统配置参数 + * + * @author fengshuonan + * @date 2021/7/8 16:38 + */ +@Data +public class ConfigInitRequest { + + /** + * 系统配置集合 + *

+ * key是配置编码,value是配置值 + */ + private Map sysConfigs; + +} diff --git a/kernel-d-config/config-business/src/main/java/cn/stylefeng/roses/kernel/config/modular/controller/SysConfigController.java b/kernel-d-config/config-business/src/main/java/cn/stylefeng/roses/kernel/config/modular/controller/SysConfigController.java index 387177e59..f34262d11 100644 --- a/kernel-d-config/config-business/src/main/java/cn/stylefeng/roses/kernel/config/modular/controller/SysConfigController.java +++ b/kernel-d-config/config-business/src/main/java/cn/stylefeng/roses/kernel/config/modular/controller/SysConfigController.java @@ -24,6 +24,7 @@ */ package cn.stylefeng.roses.kernel.config.modular.controller; +import cn.stylefeng.roses.kernel.config.api.pojo.ConfigInitRequest; import cn.stylefeng.roses.kernel.config.modular.param.SysConfigParam; import cn.stylefeng.roses.kernel.config.modular.service.SysConfigService; import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; @@ -121,6 +122,29 @@ public class SysConfigController { return new SuccessResponseData(sysConfigService.findList(sysConfigParam)); } + /** + * 获取系统配置是否初始化的标志 + * + * @author fengshuonan + * @date 2021/7/8 17:20 + */ + @GetResource(name = "获取系统配置是否初始化的标志", path = "/sysConfig/getInitConfigFlag") + public ResponseData getInitConfigFlag() { + return new SuccessResponseData(sysConfigService.getInitConfigFlag()); + } + + /** + * 初始化系统配置参数,用在系统第一次登录时 + * + * @author fengshuonan + * @date 2021/7/8 16:36 + */ + @PostResource(name = "初始化系统配置参数,用在系统第一次登录时", path = "/sysConfig/initConfig") + public ResponseData initConfig(@RequestBody ConfigInitRequest configInitRequest) { + sysConfigService.initConfig(configInitRequest); + return new SuccessResponseData(); + } + } diff --git a/kernel-d-config/config-business/src/main/java/cn/stylefeng/roses/kernel/config/modular/service/SysConfigService.java b/kernel-d-config/config-business/src/main/java/cn/stylefeng/roses/kernel/config/modular/service/SysConfigService.java index 4bfbee72e..b0070dbe0 100644 --- a/kernel-d-config/config-business/src/main/java/cn/stylefeng/roses/kernel/config/modular/service/SysConfigService.java +++ b/kernel-d-config/config-business/src/main/java/cn/stylefeng/roses/kernel/config/modular/service/SysConfigService.java @@ -24,6 +24,7 @@ */ package cn.stylefeng.roses.kernel.config.modular.service; +import cn.stylefeng.roses.kernel.config.api.pojo.ConfigInitRequest; import cn.stylefeng.roses.kernel.config.modular.entity.SysConfig; import cn.stylefeng.roses.kernel.config.modular.param.SysConfigParam; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; @@ -96,4 +97,21 @@ public interface SysConfigService extends IService { */ List findList(SysConfigParam sysConfigParam); + /** + * 初始化配置参数 + * + * @author fengshuonan + * @date 2021/7/8 16:48 + */ + void initConfig(ConfigInitRequest configInitRequest); + + /** + * 获取配置是否初始化的标志 + * + * @return true-系统已经初始化,false-系统没有初始化 + * @author fengshuonan + * @date 2021/7/8 17:20 + */ + Boolean getInitConfigFlag(); + } diff --git a/kernel-d-config/config-business/src/main/java/cn/stylefeng/roses/kernel/config/modular/service/impl/SysConfigServiceImpl.java b/kernel-d-config/config-business/src/main/java/cn/stylefeng/roses/kernel/config/modular/service/impl/SysConfigServiceImpl.java index 3b6cbb58a..93af7af9f 100644 --- a/kernel-d-config/config-business/src/main/java/cn/stylefeng/roses/kernel/config/modular/service/impl/SysConfigServiceImpl.java +++ b/kernel-d-config/config-business/src/main/java/cn/stylefeng/roses/kernel/config/modular/service/impl/SysConfigServiceImpl.java @@ -25,11 +25,13 @@ package cn.stylefeng.roses.kernel.config.modular.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.stylefeng.roses.kernel.config.api.context.ConfigContext; import cn.stylefeng.roses.kernel.config.api.exception.ConfigException; import cn.stylefeng.roses.kernel.config.api.exception.enums.ConfigExceptionEnum; +import cn.stylefeng.roses.kernel.config.api.pojo.ConfigInitRequest; import cn.stylefeng.roses.kernel.config.modular.entity.SysConfig; import cn.stylefeng.roses.kernel.config.modular.mapper.SysConfigMapper; import cn.stylefeng.roses.kernel.config.modular.param.SysConfigParam; @@ -37,6 +39,7 @@ import cn.stylefeng.roses.kernel.config.modular.service.SysConfigService; import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; +import cn.stylefeng.roses.kernel.rule.constants.RuleConstants; import cn.stylefeng.roses.kernel.rule.enums.StatusEnum; import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -46,6 +49,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.Map; /** * 系统参数配置service接口实现类 @@ -134,6 +138,57 @@ public class SysConfigServiceImpl extends ServiceImpl sysConfigs = configInitRequest.getSysConfigs(); + sysConfigs.put(RuleConstants.SYSTEM_CONFIG_INIT_FLAG_NAME, "true"); + + // 针对每个配置执行更新库和刷新缓存的操作 + for (Map.Entry entry : sysConfigs.entrySet()) { + String configCode = entry.getKey(); + String configValue = entry.getValue(); + + // 获取库数据库这条记录 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysConfig::getConfigCode, configCode); + SysConfig sysConfig = this.getOne(wrapper, false); + if (sysConfig == null) { + continue; + } + sysConfig.setConfigValue(configValue); + this.updateById(sysConfig); + + // 更新缓存 + ConfigContext.me().putConfig(configCode, configValue); + } + } + + @Override + public Boolean getInitConfigFlag() { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysConfig::getConfigCode, RuleConstants.SYSTEM_CONFIG_INIT_FLAG_NAME); + SysConfig sysConfig = this.getOne(wrapper, false); + + // 配置为空,还没初始化 + if (sysConfig == null) { + return true; + } else { + String configValue = sysConfig.getConfigValue(); + if (StrUtil.isEmpty(configValue)) { + return true; + } else { + return Convert.toBool(sysConfig.getConfigValue()); + } + } + } + /** * 获取系统参数配置 *