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());
+ }
+ }
+ }
+
/**
* 获取系统参数配置
*