From b005e062bba41e8f0eeb3ccd7e4540b5b2d2d7a1 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Thu, 21 Jan 2021 09:13:51 +0800 Subject: [PATCH] 将 sys_config 从 system 迁移到 infra 模块,并进行改名~ --- pom.xml | 9 +++++++-- ruoyi-ui/src/api/system/config.js | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------- ruoyi-ui/src/views/system/config/index.vue | 5 ++++- src/main/java/cn/iocoder/dashboard/framework/apollo/core/ConfigConsts.java | 16 ++++++++++++++++ src/main/java/cn/iocoder/dashboard/framework/apollo/internals/DBConfigRepository.java | 24 +++++++++++------------- src/main/java/cn/iocoder/dashboard/framework/apollo/package-info.java | 12 ++++++++++++ src/main/java/cn/iocoder/dashboard/framework/apollo/spi/DBConfigFactory.java | 7 ++++++- src/main/java/cn/iocoder/dashboard/framework/apollo/spring/boot/ApolloApplicationContextInitializer.java | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/InfConfigController.java | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigBaseVO.java | 40 ++++++++++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigCreateReqVO.java | 21 +++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigExcelVO.java | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigExportReqVO.java | 33 +++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigPageReqVO.java | 36 ++++++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigRespVO.java | 31 +++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigUpdateReqVO.java | 19 +++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/controller/package-info.java | 1 + src/main/java/cn/iocoder/dashboard/modules/infra/convert/config/InfConfigConvert.java | 29 +++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/convert/package-info.java | 1 + src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dao/config/InfConfigMapper.java | 36 ++++++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dao/package-info.java | 1 + src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dataobject/config/InfConfigDO.java | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dataobject/package-info.java | 1 + src/main/java/cn/iocoder/dashboard/modules/infra/enums/InfErrorCodeConstants.java | 18 ++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/enums/config/InfConfigTypeEnum.java | 21 +++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/service/config/InfConfigService.java | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/service/config/impl/InfConfigServiceImpl.java | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/cn/iocoder/dashboard/modules/infra/service/package-info.java | 1 + src/main/java/cn/iocoder/dashboard/modules/system/controller/config/SysConfigController.java | 118 ---------------------------------------------------------------------------------------------------------------------- src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigBaseVO.java | 40 ---------------------------------------- src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigCreateReqVO.java | 21 --------------------- src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigExcelVO.java | 46 ---------------------------------------------- src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigExportReqVO.java | 33 --------------------------------- src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigPageReqVO.java | 36 ------------------------------------ src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigRespVO.java | 31 ------------------------------- src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigUpdateReqVO.java | 19 ------------------- src/main/java/cn/iocoder/dashboard/modules/system/convert/config/SysConfigConvert.java | 29 ----------------------------- src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/config/SysConfigMapper.java | 36 ------------------------------------ src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/config/SysConfigDO.java | 63 --------------------------------------------------------------- src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java | 7 +------ src/main/java/cn/iocoder/dashboard/modules/system/enums/config/SysConfigTypeEnum.java | 21 --------------------- src/main/java/cn/iocoder/dashboard/modules/system/service/config/SysConfigService.java | 71 ----------------------------------------------------------------------- src/main/java/cn/iocoder/dashboard/modules/system/service/config/impl/SysConfigServiceImpl.java | 116 -------------------------------------------------------------------------------------------------------------------- src/main/resources/META-INF/spring.factories | 2 ++ src/main/resources/application.yaml | 4 ++++ 45 files changed, 891 insertions(+), 765 deletions(-) create mode 100644 src/main/java/cn/iocoder/dashboard/framework/apollo/core/ConfigConsts.java create mode 100644 src/main/java/cn/iocoder/dashboard/framework/apollo/spring/boot/ApolloApplicationContextInitializer.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/InfConfigController.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigBaseVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigCreateReqVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigExcelVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigExportReqVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigPageReqVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigRespVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigUpdateReqVO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/controller/package-info.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/convert/config/InfConfigConvert.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/convert/package-info.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dao/config/InfConfigMapper.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dao/package-info.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dataobject/config/InfConfigDO.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dataobject/package-info.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/enums/InfErrorCodeConstants.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/enums/config/InfConfigTypeEnum.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/service/config/InfConfigService.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/service/config/impl/InfConfigServiceImpl.java create mode 100644 src/main/java/cn/iocoder/dashboard/modules/infra/service/package-info.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/config/SysConfigController.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigBaseVO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigCreateReqVO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigExcelVO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigExportReqVO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigPageReqVO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigRespVO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigUpdateReqVO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/convert/config/SysConfigConvert.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/config/SysConfigMapper.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/config/SysConfigDO.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/enums/config/SysConfigTypeEnum.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/config/SysConfigService.java delete mode 100644 src/main/java/cn/iocoder/dashboard/modules/system/service/config/impl/SysConfigServiceImpl.java create mode 100644 src/main/resources/META-INF/spring.factories diff --git a/pom.xml b/pom.xml index 8fb46e1..56e5d9e 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,6 @@ 2.4.2 - @@ -48,7 +47,7 @@ 5.1.46 1.2.4 3.4.1 - 3.13.6 + 3.14.1 8.3.0 @@ -142,6 +141,12 @@ com.github.xiaoymin knife4j-spring-boot-starter ${knife4j.version} + + + mapstruct + org.mapstruct + + diff --git a/ruoyi-ui/src/api/system/config.js b/ruoyi-ui/src/api/system/config.js index 56301ad..eec1517 100644 --- a/ruoyi-ui/src/api/system/config.js +++ b/ruoyi-ui/src/api/system/config.js @@ -1,62 +1,62 @@ -import request from '@/utils/request' - -// 查询参数列表 -export function listConfig(query) { - return request({ - url: '/system/config/page', - method: 'get', - params: query - }) -} - -// 查询参数详细 -export function getConfig(configId) { - return request({ - url: '/system/config/get?id=' + configId, - method: 'get' - }) -} - -// 根据参数键名查询参数值 -export function getConfigKey(configKey) { - return request({ - url: '/system/config/get-value-by-key?key=' + configKey, - method: 'get' - }) -} - -// 新增参数配置 -export function addConfig(data) { - return request({ - url: '/system/config/create', - method: 'post', - data: data - }) -} - -// 修改参数配置 -export function updateConfig(data) { - return request({ - url: '/system/config/update', - method: 'put', - data: data - }) -} - -// 删除参数配置 -export function delConfig(configId) { - return request({ - url: '/system/config/delete?id=' + configId, - method: 'delete' - }) -} - -// 导出参数 -export function exportConfig(query) { - return request({ - url: '/system/config/export', - method: 'get', - params: query, - responseType: 'blob' - }) -} +import request from '@/utils/request' + +// 查询参数列表 +export function listConfig(query) { + return request({ + url: '/infra/config/page', + method: 'get', + params: query + }) +} + +// 查询参数详细 +export function getConfig(configId) { + return request({ + url: '/infra/config/get?id=' + configId, + method: 'get' + }) +} + +// 根据参数键名查询参数值 +export function getConfigKey(configKey) { + return request({ + url: '/infra/config/get-value-by-key?key=' + configKey, + method: 'get' + }) +} + +// 新增参数配置 +export function addConfig(data) { + return request({ + url: '/infra/config/create', + method: 'post', + data: data + }) +} + +// 修改参数配置 +export function updateConfig(data) { + return request({ + url: '/infra/config/update', + method: 'put', + data: data + }) +} + +// 删除参数配置 +export function delConfig(configId) { + return request({ + url: '/infra/config/delete?id=' + configId, + method: 'delete' + }) +} + +// 导出参数 +export function exportConfig(query) { + return request({ + url: '/infra/config/export', + method: 'get', + params: query, + responseType: 'blob' + }) +} diff --git a/ruoyi-ui/src/views/system/config/index.vue b/ruoyi-ui/src/views/system/config/index.vue index 7c0d921..f53cedd 100644 --- a/ruoyi-ui/src/views/system/config/index.vue +++ b/ruoyi-ui/src/views/system/config/index.vue @@ -304,7 +304,10 @@ export default { }, /** 导出按钮操作 */ handleExport() { - const queryParams = this.queryParams; + const queryParams = this.addDateRange(this.queryParams, [ + this.dateRange[0] ? this.dateRange[0] + ' 00:00:00' : undefined, + this.dateRange[1] ? this.dateRange[1] + ' 23:59:59' : undefined, + ]); this.$confirm('是否确认导出所有参数数据项?', "警告", { confirmButtonText: "确定", cancelButtonText: "取消", diff --git a/src/main/java/cn/iocoder/dashboard/framework/apollo/core/ConfigConsts.java b/src/main/java/cn/iocoder/dashboard/framework/apollo/core/ConfigConsts.java new file mode 100644 index 0000000..2d83836 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/framework/apollo/core/ConfigConsts.java @@ -0,0 +1,16 @@ +package cn.iocoder.dashboard.framework.apollo.core; + +/** + * 针对 {@link com.ctrip.framework.apollo.core.ConfigConsts} 的补充,主要增加: + * + * 1. apollo.jdbc.* 配置项的枚举 + * + * @author 芋道源码 + */ +public class ConfigConsts { + + public static final String APOLLO_JDBC_URL = "apollo.jdbc.url"; + public static final String APOLLO_JDBC_USERNAME = "apollo.jdbc.username"; + public static final String APOLLO_JDBC_PASSWORD = "apollo.jdbc.password"; + +} diff --git a/src/main/java/cn/iocoder/dashboard/framework/apollo/internals/DBConfigRepository.java b/src/main/java/cn/iocoder/dashboard/framework/apollo/internals/DBConfigRepository.java index eeb5833..9898591 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/apollo/internals/DBConfigRepository.java +++ b/src/main/java/cn/iocoder/dashboard/framework/apollo/internals/DBConfigRepository.java @@ -1,8 +1,9 @@ package cn.iocoder.dashboard.framework.apollo.internals; import cn.hutool.core.collection.CollUtil; +import cn.iocoder.dashboard.framework.apollo.core.ConfigConsts; import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.config.SysConfigDO; +import cn.iocoder.dashboard.modules.infra.dal.mysql.dataobject.config.InfConfigDO; import com.ctrip.framework.apollo.Apollo; import com.ctrip.framework.apollo.build.ApolloInjector; import com.ctrip.framework.apollo.core.utils.ApolloThreadFactory; @@ -59,12 +60,9 @@ public class DBConfigRepository extends AbstractConfigRepository { this.m_namespace = namespace; this.propertiesFactory = ApolloInjector.getInstance(PropertiesFactory.class); this.m_configUtil = ApolloInjector.getInstance(ConfigUtil.class); - // TODO 优化到配置 - String url = "jdbc:mysql://127.0.1:33061/ruoyi-vue-pro?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT"; - String username = "root"; - String password = "123456"; -// DataSource dataSource = DataSourceBuilder.create().url(url).username(username).password(password).build(); - DataSource dataSource = new DriverManagerDataSource(url, username, password); + // 初始化 DB + DataSource dataSource = new DriverManagerDataSource(System.getProperty(ConfigConsts.APOLLO_JDBC_URL), + System.getProperty(ConfigConsts.APOLLO_JDBC_USERNAME), System.getProperty(ConfigConsts.APOLLO_JDBC_PASSWORD)); this.jdbcTemplate = new JdbcTemplate(dataSource); // 初始化加载 @@ -76,7 +74,7 @@ public class DBConfigRepository extends AbstractConfigRepository { @Override protected void sync() { // 第一步,尝试获取配置 - List configs = this.loadConfigIfUpdate(this.maxUpdateTime); + List configs = this.loadConfigIfUpdate(this.maxUpdateTime); if (CollUtil.isEmpty(configs)) { // 如果没有更新,则返回 return; } @@ -111,7 +109,7 @@ public class DBConfigRepository extends AbstractConfigRepository { return ConfigSourceType.REMOTE; } - private Properties buildProperties(List configs) { + private Properties buildProperties(List configs) { Properties properties = propertiesFactory.getPropertiesInstance(); configs.stream().filter(config -> 0 == config.getDeleted()) // 过滤掉被删除的配置 .forEach(config -> properties.put(config.getKey(), config.getValue())); @@ -145,7 +143,7 @@ public class DBConfigRepository extends AbstractConfigRepository { * @param maxUpdateTime 当前配置的最大更新时间 * @return 配置列表 */ - private List loadConfigIfUpdate(Date maxUpdateTime) { + private List loadConfigIfUpdate(Date maxUpdateTime) { // 第一步,判断是否要更新。 boolean isUpdate = maxUpdateTime == null; // 如果更新时间为空,说明 DB 一定有新数据 if (!isUpdate) { @@ -159,12 +157,12 @@ public class DBConfigRepository extends AbstractConfigRepository { } private boolean existsNewConfig(Date maxUpdateTime) { - return jdbcTemplate.query("SELECT id FROM sys_config WHERE update_time > ? LIMIT 1", + return jdbcTemplate.query("SELECT id FROM inf_config WHERE update_time > ? LIMIT 1", ResultSet::next, maxUpdateTime); } - private List getSysConfigList() { - return jdbcTemplate.query("SELECT `key`, `value`, update_time, deleted FROM sys_config", new BeanPropertyRowMapper<>(SysConfigDO.class)); + private List getSysConfigList() { + return jdbcTemplate.query("SELECT `key`, `value`, update_time, deleted FROM inf_config", new BeanPropertyRowMapper<>(InfConfigDO.class)); } } diff --git a/src/main/java/cn/iocoder/dashboard/framework/apollo/package-info.java b/src/main/java/cn/iocoder/dashboard/framework/apollo/package-info.java index f8a6170..ce21e84 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/apollo/package-info.java +++ b/src/main/java/cn/iocoder/dashboard/framework/apollo/package-info.java @@ -1 +1,13 @@ +/** + * 配置中心客户端,基于 Apollo Client 进行简化 + * + * 差别在于,我们使用 {@link cn.iocoder.dashboard.modules.infra.dal.mysql.dataobject.config.InfConfigDO} 表作为配置源。 + * 当然,功能肯定也会相对少些,满足最小化诉求。 + * + * 1. 项目初始化时,可以使用 SysConfigDO 表的配置 + * 2. 使用 Spring @Value 可以注入属性 + * 3. SysConfigDO 表的配置修改时,注入到 @Value 的属性可以刷新 + * + * 另外,整个包结构会参考 Apollo 为主,方便维护与理解 + */ package cn.iocoder.dashboard.framework.apollo; diff --git a/src/main/java/cn/iocoder/dashboard/framework/apollo/spi/DBConfigFactory.java b/src/main/java/cn/iocoder/dashboard/framework/apollo/spi/DBConfigFactory.java index 8bc760a..bfa9e53 100644 --- a/src/main/java/cn/iocoder/dashboard/framework/apollo/spi/DBConfigFactory.java +++ b/src/main/java/cn/iocoder/dashboard/framework/apollo/spi/DBConfigFactory.java @@ -8,6 +8,11 @@ import com.ctrip.framework.apollo.internals.ConfigRepository; import com.ctrip.framework.apollo.internals.DefaultConfig; import com.ctrip.framework.apollo.spi.ConfigFactory; +/** + * 基于 DB 的 ConfigFactory 实现类 + * + * @author 芋道源码 + */ public class DBConfigFactory implements ConfigFactory { @Override @@ -21,7 +26,7 @@ public class DBConfigFactory implements ConfigFactory { } private ConfigRepository createDBConfigRepository(String namespace) { - return new DBConfigRepository(namespace); // TODO 芋艿:看看怎么优化 + return new DBConfigRepository(namespace); } } diff --git a/src/main/java/cn/iocoder/dashboard/framework/apollo/spring/boot/ApolloApplicationContextInitializer.java b/src/main/java/cn/iocoder/dashboard/framework/apollo/spring/boot/ApolloApplicationContextInitializer.java new file mode 100644 index 0000000..86498fe --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/framework/apollo/spring/boot/ApolloApplicationContextInitializer.java @@ -0,0 +1,63 @@ +package cn.iocoder.dashboard.framework.apollo.spring.boot; + +import cn.iocoder.dashboard.framework.apollo.core.ConfigConsts; +import com.google.common.base.Strings; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.env.EnvironmentPostProcessor; +import org.springframework.core.Ordered; +import org.springframework.core.env.ConfigurableEnvironment; + +/** + * 对 {@link com.ctrip.framework.apollo.spring.boot.ApolloApplicationContextInitializer} 的补充,目前的目的有: + * + * 1. 将自定义的 apollo.jdbc 设置到 System 变量中 + * + * @author 芋道源码 + */ +public class ApolloApplicationContextInitializer implements EnvironmentPostProcessor, Ordered { + + /** + * 优先级更高,要早于 Apollo 的 ApolloApplicationContextInitializer 的初始化 + */ + public static final int DEFAULT_ORDER = -1; + + private int order = DEFAULT_ORDER; + + private static final String[] APOLLO_SYSTEM_PROPERTIES = {ConfigConsts.APOLLO_JDBC_URL, + ConfigConsts.APOLLO_JDBC_USERNAME, ConfigConsts.APOLLO_JDBC_PASSWORD}; + + @Override + public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { + initializeSystemProperty(environment); + } + + /** + * To fill system properties from environment config + */ + void initializeSystemProperty(ConfigurableEnvironment environment) { + for (String propertyName : APOLLO_SYSTEM_PROPERTIES) { + fillSystemPropertyFromEnvironment(environment, propertyName); + } + } + + private void fillSystemPropertyFromEnvironment(ConfigurableEnvironment environment, String propertyName) { + if (System.getProperty(propertyName) != null) { + return; + } + String propertyValue = environment.getProperty(propertyName); + if (Strings.isNullOrEmpty(propertyValue)) { + return; + } + System.setProperty(propertyName, propertyValue); + } + + @Override + public int getOrder() { + return order; + } + + public void setOrder(int order) { + this.order = order; + } + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/InfConfigController.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/InfConfigController.java new file mode 100644 index 0000000..a72ecec --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/InfConfigController.java @@ -0,0 +1,118 @@ +package cn.iocoder.dashboard.modules.infra.controller.config; + +import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; +import cn.iocoder.dashboard.common.pojo.CommonResult; +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.framework.excel.core.util.ExcelUtils; +import cn.iocoder.dashboard.modules.infra.controller.config.vo.*; +import cn.iocoder.dashboard.modules.infra.convert.config.InfConfigConvert; +import cn.iocoder.dashboard.modules.infra.dal.mysql.dataobject.config.InfConfigDO; +import cn.iocoder.dashboard.modules.infra.service.config.InfConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + +import static cn.iocoder.dashboard.common.pojo.CommonResult.success; +import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.CONFIG_GET_VALUE_ERROR_IF_SENSITIVE; + +@Api(tags = "参数配置") +@RestController +@RequestMapping("/infra/config") +public class InfConfigController { + + @Value("${demo.test}") + private String demo; + + @GetMapping("/demo") + public String demo() { + return demo; + } + + @PostMapping("/demo") + public void setDemo() { + + } + + @Resource + private InfConfigService configService; + + @ApiOperation("获取参数配置分页") + @GetMapping("/page") +// @PreAuthorize("@ss.hasPermi('infra:config:list')") + public CommonResult> getConfigPage(@Validated InfConfigPageReqVO reqVO) { + PageResult page = configService.getConfigPage(reqVO); + return success(InfConfigConvert.INSTANCE.convertPage(page)); + } + + @ApiOperation("导出参数配置") + @GetMapping("/export") +// @Log(title = "参数管理", businessType = BusinessType.EXPORT) +// @PreAuthorize("@ss.hasPermi('infra:config:export')") + public void exportSysConfig(HttpServletResponse response, @Validated InfConfigExportReqVO reqVO) throws IOException { + List list = configService.getConfigList(reqVO); + // 拼接数据 + List excelDataList = InfConfigConvert.INSTANCE.convertList(list); + // 输出 + ExcelUtils.write(response, "参数配置.xls", "配置列表", + InfConfigExcelVO.class, excelDataList); + } + + @ApiOperation("获得参数配置") + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) + @GetMapping(value = "/get") +// @PreAuthorize("@ss.hasPermi('infra:config:query')") + public CommonResult getConfig(@RequestParam("id") Long id) { + return success(InfConfigConvert.INSTANCE.convert(configService.getConfig(id))); + } + + @ApiOperation(value = "根据参数键名查询参数值", notes = "敏感配置,不允许返回给前端") + @ApiImplicitParam(name = "key", value = "参数键", required = true, example = "yunai.biz.username", dataTypeClass = String.class) + @GetMapping(value = "/get-value-by-key") + public CommonResult getConfigKey(@RequestParam("key") String key) { + InfConfigDO config = configService.getConfigByKey(key); + if (config == null) { + return null; + } + if (config.getSensitive()) { + throw ServiceExceptionUtil.exception(CONFIG_GET_VALUE_ERROR_IF_SENSITIVE); + } + return success(config.getValue()); + } + + @ApiOperation("新增参数配置") + @PostMapping("/create") +// @PreAuthorize("@ss.hasPermi('infra:config:add')") +// @Log(title = "参数管理", businessType = BusinessType.INSERT) +// @RepeatSubmit + public CommonResult createConfig(@Validated @RequestBody InfConfigCreateReqVO reqVO) { + return success(configService.createConfig(reqVO)); + } + + @ApiOperation("修改参数配置") + @PutMapping("/update") +// @PreAuthorize("@ss.hasPermi('infra:config:edit')") +// @Log(title = "参数管理", businessType = BusinessType.UPDATE) + public CommonResult edit(@Validated @RequestBody InfConfigUpdateReqVO reqVO) { + configService.updateConfig(reqVO); + return success(true); + } + + @ApiOperation("删除参数配置") + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) + @DeleteMapping("/delete") +// @PreAuthorize("@ss.hasPermi('infra:config:remove')") +// @Log(title = "参数管理", businessType = BusinessType.DELETE) + public CommonResult deleteConfig(@RequestParam("id") Long id) { + configService.deleteConfig(id); + return success(true); + } + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigBaseVO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigBaseVO.java new file mode 100644 index 0000000..bf086f0 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigBaseVO.java @@ -0,0 +1,40 @@ +package cn.iocoder.dashboard.modules.infra.controller.config.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * 参数配置 Base VO,提供给添加、修改、详细的子 VO 使用 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 + */ +@Data +public class InfConfigBaseVO { + + @ApiModelProperty(value = "参数分组", required = true, example = "biz") + @NotEmpty(message = "参数分组不能为空") + @Size(max = 100, message = "参数名称不能超过50个字符") + private String group; + + @ApiModelProperty(value = "参数名称", required = true, example = "数据库名") + @NotBlank(message = "参数名称不能为空") + @Size(max = 100, message = "参数名称不能超过100个字符") + private String name; + + @ApiModelProperty(value = "参数键值", required = true, example = "1024") + @NotBlank(message = "参数键值不能为空") + @Size(max = 500, message = "参数键值长度不能超过500个字符") + private String value; + + @ApiModelProperty(value = "是否敏感", required = true, example = "true") + @NotNull(message = "是否敏感不能为空") + private Boolean sensitive; + + @ApiModelProperty(value = "备注", example = "备注一下很帅气!") + private String remark; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigCreateReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigCreateReqVO.java new file mode 100644 index 0000000..7b0bcfb --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigCreateReqVO.java @@ -0,0 +1,21 @@ +package cn.iocoder.dashboard.modules.infra.controller.config.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +@ApiModel("参数配置创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +public class InfConfigCreateReqVO extends InfConfigBaseVO { + + @ApiModelProperty(value = "参数键名", required = true, example = "yunai.db.username") + @NotBlank(message = "参数键名长度不能为空") + @Size(max = 100, message = "参数键名长度不能超过100个字符") + private String key; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigExcelVO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigExcelVO.java new file mode 100644 index 0000000..a11de32 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigExcelVO.java @@ -0,0 +1,46 @@ +package cn.iocoder.dashboard.modules.infra.controller.config.vo; + +import cn.iocoder.dashboard.framework.excel.core.annotations.DictFormat; +import cn.iocoder.dashboard.framework.excel.core.convert.DictConvert; +import cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * 参数配置 Excel 导出响应 VO + */ +@Data +public class InfConfigExcelVO { + + @ExcelProperty("参数配置序号") + private Long id; + + @ExcelProperty("参数键名") + private String key; + + @ExcelProperty("参数分组") + private String group; + + @ExcelProperty("参数名称") + private String name; + + @ExcelProperty("参数键值") + private String value; + + @ExcelProperty(value = "参数类型", converter = DictConvert.class) + @DictFormat(SysDictTypeEnum.SYS_CONFIG_TYPE) + private Integer type; + + @ExcelProperty(value = "是否敏感", converter = DictConvert.class) + @DictFormat(SysDictTypeEnum.SYS_BOOLEAN_STRING) + private Boolean sensitive; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("创建时间") + private Date createTime; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigExportReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigExportReqVO.java new file mode 100644 index 0000000..b214520 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigExportReqVO.java @@ -0,0 +1,33 @@ +package cn.iocoder.dashboard.modules.infra.controller.config.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@ApiModel("参数配置导出 Request VO") +@Data +public class InfConfigExportReqVO { + + @ApiModelProperty(value = "参数名称", example = "模糊匹配") + private String name; + + @ApiModelProperty(value = "参数键名", example = "yunai.db.username", notes = "模糊匹配") + private String key; + + @ApiModelProperty(value = "参数类型", example = "1", notes = "参见 SysConfigTypeEnum 枚举") + private Integer type; + + @ApiModelProperty(value = "开始时间", example = "2020-10-24") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private Date beginTime; + + @ApiModelProperty(value = "结束时间", example = "2020-10-24") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private Date endTime; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigPageReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigPageReqVO.java new file mode 100644 index 0000000..9af18b1 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigPageReqVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.dashboard.modules.infra.controller.config.vo; + +import cn.iocoder.dashboard.common.pojo.PageParam; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@ApiModel("参数配置分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +public class InfConfigPageReqVO extends PageParam { + + @ApiModelProperty(value = "参数名称", example = "模糊匹配") + private String name; + + @ApiModelProperty(value = "参数键名", example = "yunai.db.username", notes = "模糊匹配") + private String key; + + @ApiModelProperty(value = "参数类型", example = "1", notes = "参见 SysConfigTypeEnum 枚举") + private Integer type; + + @ApiModelProperty(value = "开始时间", example = "2020-10-24") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private Date beginTime; + + @ApiModelProperty(value = "结束时间", example = "2020-10-24") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private Date endTime; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigRespVO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigRespVO.java new file mode 100644 index 0000000..10673e2 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigRespVO.java @@ -0,0 +1,31 @@ +package cn.iocoder.dashboard.modules.infra.controller.config.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.util.Date; + +@ApiModel("参数配置信息 Response VO") +@Data +@EqualsAndHashCode(callSuper = true) +public class InfConfigRespVO extends InfConfigBaseVO { + + @ApiModelProperty(value = "参数配置序号", required = true, example = "1024") + private Long id; + + @ApiModelProperty(value = "参数键名", required = true, example = "yunai.db.username") + @NotBlank(message = "参数键名长度不能为空") + @Size(max = 100, message = "参数键名长度不能超过100个字符") + private String key; + + @ApiModelProperty(value = "参数类型", required = true, example = "1", notes = "参见 SysConfigTypeEnum 枚举") + private Integer type; + + @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式") + private Date createTime; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigUpdateReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigUpdateReqVO.java new file mode 100644 index 0000000..3d0f5c7 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/config/vo/InfConfigUpdateReqVO.java @@ -0,0 +1,19 @@ +package cn.iocoder.dashboard.modules.infra.controller.config.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotNull; + +@ApiModel("参数配置创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +public class InfConfigUpdateReqVO extends InfConfigBaseVO { + + @ApiModelProperty(value = "参数配置序号", required = true, example = "1024") + @NotNull(message = "参数配置编号不能为空") + private Long id; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/controller/package-info.java b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/package-info.java new file mode 100644 index 0000000..c8d5eb1 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/controller/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.dashboard.modules.infra.controller; diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/convert/config/InfConfigConvert.java b/src/main/java/cn/iocoder/dashboard/modules/infra/convert/config/InfConfigConvert.java new file mode 100644 index 0000000..e53c84b --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/convert/config/InfConfigConvert.java @@ -0,0 +1,29 @@ +package cn.iocoder.dashboard.modules.infra.convert.config; + +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigCreateReqVO; +import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigExcelVO; +import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigRespVO; +import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigUpdateReqVO; +import cn.iocoder.dashboard.modules.infra.dal.mysql.dataobject.config.InfConfigDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface InfConfigConvert { + + InfConfigConvert INSTANCE = Mappers.getMapper(InfConfigConvert.class); + + PageResult convertPage(PageResult page); + + InfConfigRespVO convert(InfConfigDO bean); + + InfConfigDO convert(InfConfigCreateReqVO bean); + + InfConfigDO convert(InfConfigUpdateReqVO bean); + + List convertList(List list); + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/convert/package-info.java b/src/main/java/cn/iocoder/dashboard/modules/infra/convert/package-info.java new file mode 100644 index 0000000..7479ece --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/convert/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.dashboard.modules.infra.convert; diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dao/config/InfConfigMapper.java b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dao/config/InfConfigMapper.java new file mode 100644 index 0000000..3e4e2bc --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dao/config/InfConfigMapper.java @@ -0,0 +1,36 @@ +package cn.iocoder.dashboard.modules.infra.dal.mysql.dao.config; + +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX; +import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigExportReqVO; +import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigPageReqVO; +import cn.iocoder.dashboard.modules.infra.dal.mysql.dataobject.config.InfConfigDO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface InfConfigMapper extends BaseMapperX { + + default PageResult selectPage(InfConfigPageReqVO reqVO) { + return selectPage(reqVO, + new QueryWrapperX().likeIfPresent("name", reqVO.getName()) + .likeIfPresent("`key`", reqVO.getKey()) + .eqIfPresent("`type`", reqVO.getType()) + .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime())); + } + + default InfConfigDO selectByKey(String key) { + return selectOne(new QueryWrapper().eq("`key`", key)); + } + + default List selectList(InfConfigExportReqVO reqVO) { + return selectList(new QueryWrapperX().likeIfPresent("name", reqVO.getName()) + .likeIfPresent("`key`", reqVO.getKey()) + .eqIfPresent("`type`", reqVO.getType()) + .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime())); + } + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dao/package-info.java b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dao/package-info.java new file mode 100644 index 0000000..129637d --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dao/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.dashboard.modules.infra.dal.mysql.dao; diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dataobject/config/InfConfigDO.java b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dataobject/config/InfConfigDO.java new file mode 100644 index 0000000..7d5dee8 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dataobject/config/InfConfigDO.java @@ -0,0 +1,63 @@ +package cn.iocoder.dashboard.modules.infra.dal.mysql.dataobject.config; + +import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.dashboard.modules.infra.enums.config.InfConfigTypeEnum; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +/** + * 参数配置表 + * + * @author ruoyi + */ +@TableName("inf_config") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class InfConfigDO extends BaseDO { + + /** + * 参数主键 + */ + private Long id; + /** + * 参数分组 + */ + @TableField("`group`") + private String group; + /** + * 参数名称 + */ + private String name; + /** + * 参数键名 + */ + @TableField("`key`") + private String key; + /** + * 参数键值 + */ + private String value; + /** + * 参数类型 + * + * 枚举 {@link InfConfigTypeEnum} + */ + @TableField("`type`") + private Integer type; + /** + * 是否敏感 + * + * 对于敏感配置,需要管理权限才能查看 + */ + @TableField("`sensitive`") + private Boolean sensitive; + /** + * 备注 + */ + private String remark; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dataobject/package-info.java b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dataobject/package-info.java new file mode 100644 index 0000000..6e04595 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/dal/mysql/dataobject/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.dashboard.modules.infra.dal.mysql.dataobject; diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/enums/InfErrorCodeConstants.java b/src/main/java/cn/iocoder/dashboard/modules/infra/enums/InfErrorCodeConstants.java new file mode 100644 index 0000000..20e2f39 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/enums/InfErrorCodeConstants.java @@ -0,0 +1,18 @@ +package cn.iocoder.dashboard.modules.infra.enums; + +import cn.iocoder.dashboard.common.exception.ErrorCode; + +/** + * Infra 错误码枚举类 + * + * system 系统,使用 1-001-000-000 段 + */ +public interface InfErrorCodeConstants { + + // ========== 参数配置 1001000000 ========== + ErrorCode CONFIG_NOT_FOUND = new ErrorCode(1001000001, "参数配置不存在"); + ErrorCode CONFIG_NAME_DUPLICATE = new ErrorCode(1001000002, "参数配置 key 重复"); + ErrorCode CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE = new ErrorCode(1001000003, "不能删除类型为系统内置的参数配置"); + ErrorCode CONFIG_GET_VALUE_ERROR_IF_SENSITIVE = new ErrorCode(1001000004, "不允许获取敏感配置到前端"); + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/enums/config/InfConfigTypeEnum.java b/src/main/java/cn/iocoder/dashboard/modules/infra/enums/config/InfConfigTypeEnum.java new file mode 100644 index 0000000..315da6f --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/enums/config/InfConfigTypeEnum.java @@ -0,0 +1,21 @@ +package cn.iocoder.dashboard.modules.infra.enums.config; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum InfConfigTypeEnum { + + /** + * 系统配置 + */ + SYSTEM(1), + /** + * 自定义配置 + */ + CUSTOM(2); + + private final Integer type; + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/service/config/InfConfigService.java b/src/main/java/cn/iocoder/dashboard/modules/infra/service/config/InfConfigService.java new file mode 100644 index 0000000..f367f6f --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/service/config/InfConfigService.java @@ -0,0 +1,71 @@ +package cn.iocoder.dashboard.modules.infra.service.config; + +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigCreateReqVO; +import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigExportReqVO; +import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigPageReqVO; +import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigUpdateReqVO; +import cn.iocoder.dashboard.modules.infra.dal.mysql.dataobject.config.InfConfigDO; + +import java.util.List; + +/** + * 参数配置 Service 接口 + */ +public interface InfConfigService { + + /** + * 获得参数配置分页列表 + * + * @param reqVO 分页条件 + * @return 分页列表 + */ + PageResult getConfigPage(InfConfigPageReqVO reqVO); + + /** + * 获得参数配置列表 + * + * @param reqVO 列表 + * @return 列表 + */ + List getConfigList(InfConfigExportReqVO reqVO); + + /** + * 获得参数配置 + * + * @param id 配置编号 + * @return 参数配置 + */ + InfConfigDO getConfig(Long id); + + /** + * 根据参数键,获得参数配置 + * + * @param key 配置键 + * @return 参数配置 + */ + InfConfigDO getConfigByKey(String key); + + /** + * 创建参数配置 + * + * @param reqVO 创建信息 + * @return 配置编号 + */ + Long createConfig(InfConfigCreateReqVO reqVO); + + /** + * 更新参数配置 + * + * @param reqVO 更新信息 + */ + void updateConfig(InfConfigUpdateReqVO reqVO); + + /** + * 删除参数配置 + * + * @param id 配置编号 + */ + void deleteConfig(Long id); + +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/service/config/impl/InfConfigServiceImpl.java b/src/main/java/cn/iocoder/dashboard/modules/infra/service/config/impl/InfConfigServiceImpl.java new file mode 100644 index 0000000..1e2ff84 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/service/config/impl/InfConfigServiceImpl.java @@ -0,0 +1,116 @@ +package cn.iocoder.dashboard.modules.infra.service.config.impl; + +import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; +import cn.iocoder.dashboard.common.pojo.PageResult; +import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigCreateReqVO; +import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigExportReqVO; +import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigPageReqVO; +import cn.iocoder.dashboard.modules.infra.controller.config.vo.InfConfigUpdateReqVO; +import cn.iocoder.dashboard.modules.infra.convert.config.InfConfigConvert; +import cn.iocoder.dashboard.modules.infra.dal.mysql.dao.config.InfConfigMapper; +import cn.iocoder.dashboard.modules.infra.dal.mysql.dataobject.config.InfConfigDO; +import cn.iocoder.dashboard.modules.infra.enums.config.InfConfigTypeEnum; +import cn.iocoder.dashboard.modules.infra.service.config.InfConfigService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +import java.util.List; + +import static cn.iocoder.dashboard.modules.infra.enums.InfErrorCodeConstants.*; + +/** + * 参数配置 Service 实现类 + */ +@Service +@Slf4j +public class InfConfigServiceImpl implements InfConfigService { + + @Resource + private InfConfigMapper configMapper; + + @Override + public PageResult getConfigPage(InfConfigPageReqVO reqVO) { + return configMapper.selectPage(reqVO); + } + + @Override + public List getConfigList(InfConfigExportReqVO reqVO) { + return configMapper.selectList(reqVO); + } + + @Override + public InfConfigDO getConfig(Long id) { + return configMapper.selectById(id); + } + + @Override + public InfConfigDO getConfigByKey(String key) { + return configMapper.selectByKey(key); + } + + @Override + public Long createConfig(InfConfigCreateReqVO reqVO) { + // 校验正确性 + checkCreateOrUpdate(null, reqVO.getKey()); + // 插入参数配置 + InfConfigDO config = InfConfigConvert.INSTANCE.convert(reqVO); + config.setType(InfConfigTypeEnum.CUSTOM.getType()); + configMapper.insert(config); + return config.getId(); + } + + @Override + public void updateConfig(InfConfigUpdateReqVO reqVO) { + // 校验正确性 + checkCreateOrUpdate(reqVO.getId(), null); // 不允许更新 key + // 更新参数配置 + InfConfigDO updateObj = InfConfigConvert.INSTANCE.convert(reqVO); + configMapper.updateById(updateObj); + } + + @Override + public void deleteConfig(Long id) { + // 校验配置存在 + InfConfigDO config = checkConfigExists(id); + // 内置配置,不允许删除 + if (InfConfigTypeEnum.SYSTEM.getType().equals(config.getType())) { + throw ServiceExceptionUtil.exception(CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE); + } + // 删除 + configMapper.deleteById(id); + } + + private void checkCreateOrUpdate(Long id, String key) { + // 校验自己存在 + checkConfigExists(id); + // 校验参数配置 key 的唯一性 + checkConfigKeyUnique(id, key); + } + + private InfConfigDO checkConfigExists(Long id) { + if (id == null) { + return null; + } + InfConfigDO config = configMapper.selectById(id); + if (config == null) { + throw ServiceExceptionUtil.exception(CONFIG_NOT_FOUND); + } + return config; + } + + private void checkConfigKeyUnique(Long id, String key) { + InfConfigDO config = configMapper.selectByKey(key); + if (config == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的参数配置 + if (id == null) { + throw ServiceExceptionUtil.exception(CONFIG_NAME_DUPLICATE); + } + if (!config.getId().equals(id)) { + throw ServiceExceptionUtil.exception(CONFIG_NAME_DUPLICATE); + } + } +} diff --git a/src/main/java/cn/iocoder/dashboard/modules/infra/service/package-info.java b/src/main/java/cn/iocoder/dashboard/modules/infra/service/package-info.java new file mode 100644 index 0000000..3105289 --- /dev/null +++ b/src/main/java/cn/iocoder/dashboard/modules/infra/service/package-info.java @@ -0,0 +1 @@ +package cn.iocoder.dashboard.modules.infra.service; diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/SysConfigController.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/SysConfigController.java deleted file mode 100644 index 45b0556..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/SysConfigController.java +++ /dev/null @@ -1,118 +0,0 @@ -package cn.iocoder.dashboard.modules.system.controller.config; - -import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; -import cn.iocoder.dashboard.common.pojo.CommonResult; -import cn.iocoder.dashboard.common.pojo.PageResult; -import cn.iocoder.dashboard.framework.excel.core.util.ExcelUtils; -import cn.iocoder.dashboard.modules.system.controller.config.vo.*; -import cn.iocoder.dashboard.modules.system.convert.config.SysConfigConvert; -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.config.SysConfigDO; -import cn.iocoder.dashboard.modules.system.service.config.SysConfigService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiOperation; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.List; - -import static cn.iocoder.dashboard.common.pojo.CommonResult.success; -import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.CONFIG_GET_VALUE_ERROR_IF_SENSITIVE; - -@Api(tags = "参数配置") -@RestController -@RequestMapping("/system/config") -public class SysConfigController { - - @Value("${demo.test}") - private String demo; - - @GetMapping("/demo") - public String demo() { - return demo; - } - - @PostMapping("/demo") - public void setDemo() { - - } - - @Resource - private SysConfigService configService; - - @ApiOperation("获取参数配置分页") - @GetMapping("/page") -// @PreAuthorize("@ss.hasPermi('system:config:list')") - public CommonResult> getConfigPage(@Validated SysConfigPageReqVO reqVO) { - PageResult page = configService.getConfigPage(reqVO); - return success(SysConfigConvert.INSTANCE.convertPage(page)); - } - - @ApiOperation("导出参数配置") - @GetMapping("/export") -// @Log(title = "参数管理", businessType = BusinessType.EXPORT) -// @PreAuthorize("@ss.hasPermi('system:config:export')") - public void exportSysConfig(HttpServletResponse response, @Validated SysConfigExportReqVO reqVO) throws IOException { - List list = configService.getConfigList(reqVO); - // 拼接数据 - List excelDataList = SysConfigConvert.INSTANCE.convertList(list); - // 输出 - ExcelUtils.write(response, "参数配置.xls", "配置列表", - SysConfigExcelVO.class, excelDataList); - } - - @ApiOperation("获得参数配置") - @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) - @GetMapping(value = "/get") -// @PreAuthorize("@ss.hasPermi('system:config:query')") - public CommonResult getConfig(@RequestParam("id") Long id) { - return success(SysConfigConvert.INSTANCE.convert(configService.getConfig(id))); - } - - @ApiOperation(value = "根据参数键名查询参数值", notes = "敏感配置,不允许返回给前端") - @ApiImplicitParam(name = "key", value = "参数键", required = true, example = "yunai.biz.username", dataTypeClass = String.class) - @GetMapping(value = "/get-value-by-key") - public CommonResult getConfigKey(@RequestParam("key") String key) { - SysConfigDO config = configService.getConfigByKey(key); - if (config == null) { - return null; - } - if (config.getSensitive()) { - throw ServiceExceptionUtil.exception(CONFIG_GET_VALUE_ERROR_IF_SENSITIVE); - } - return success(config.getValue()); - } - - @ApiOperation("新增参数配置") - @PostMapping("/create") -// @PreAuthorize("@ss.hasPermi('system:config:add')") -// @Log(title = "参数管理", businessType = BusinessType.INSERT) -// @RepeatSubmit - public CommonResult createConfig(@Validated @RequestBody SysConfigCreateReqVO reqVO) { - return success(configService.createConfig(reqVO)); - } - - @ApiOperation("修改参数配置") - @PutMapping("/update") -// @PreAuthorize("@ss.hasPermi('system:config:edit')") -// @Log(title = "参数管理", businessType = BusinessType.UPDATE) - public CommonResult edit(@Validated @RequestBody SysConfigUpdateReqVO reqVO) { - configService.updateConfig(reqVO); - return success(true); - } - - @ApiOperation("删除参数配置") - @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) - @DeleteMapping("/delete") -// @PreAuthorize("@ss.hasPermi('system:config:remove')") -// @Log(title = "参数管理", businessType = BusinessType.DELETE) - public CommonResult deleteConfig(@RequestParam("id") Long id) { - configService.deleteConfig(id); - return success(true); - } - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigBaseVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigBaseVO.java deleted file mode 100644 index 90d4922..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigBaseVO.java +++ /dev/null @@ -1,40 +0,0 @@ -package cn.iocoder.dashboard.modules.system.controller.config.vo; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; - -/** - * 参数配置 Base VO,提供给添加、修改、详细的子 VO 使用 - * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 - */ -@Data -public class SysConfigBaseVO { - - @ApiModelProperty(value = "参数分组", required = true, example = "biz") - @NotEmpty(message = "参数分组不能为空") - @Size(max = 100, message = "参数名称不能超过50个字符") - private String group; - - @ApiModelProperty(value = "参数名称", required = true, example = "数据库名") - @NotBlank(message = "参数名称不能为空") - @Size(max = 100, message = "参数名称不能超过100个字符") - private String name; - - @ApiModelProperty(value = "参数键值", required = true, example = "1024") - @NotBlank(message = "参数键值不能为空") - @Size(max = 500, message = "参数键值长度不能超过500个字符") - private String value; - - @ApiModelProperty(value = "是否敏感", required = true, example = "true") - @NotNull(message = "是否敏感不能为空") - private Boolean sensitive; - - @ApiModelProperty(value = "备注", example = "备注一下很帅气!") - private String remark; - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigCreateReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigCreateReqVO.java deleted file mode 100644 index 98bb4be..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigCreateReqVO.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.iocoder.dashboard.modules.system.controller.config.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Size; - -@ApiModel("参数配置创建 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -public class SysConfigCreateReqVO extends SysConfigBaseVO { - - @ApiModelProperty(value = "参数键名", required = true, example = "yunai.db.username") - @NotBlank(message = "参数键名长度不能为空") - @Size(max = 100, message = "参数键名长度不能超过100个字符") - private String key; - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigExcelVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigExcelVO.java deleted file mode 100644 index 75f9671..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigExcelVO.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.iocoder.dashboard.modules.system.controller.config.vo; - -import cn.iocoder.dashboard.framework.excel.core.annotations.DictFormat; -import cn.iocoder.dashboard.framework.excel.core.convert.DictConvert; -import cn.iocoder.dashboard.modules.system.enums.dict.SysDictTypeEnum; -import com.alibaba.excel.annotation.ExcelProperty; -import lombok.Data; - -import java.util.Date; - -/** - * 参数配置 Excel 导出响应 VO - */ -@Data -public class SysConfigExcelVO { - - @ExcelProperty("参数配置序号") - private Long id; - - @ExcelProperty("参数键名") - private String key; - - @ExcelProperty("参数分组") - private String group; - - @ExcelProperty("参数名称") - private String name; - - @ExcelProperty("参数键值") - private String value; - - @ExcelProperty(value = "参数类型", converter = DictConvert.class) - @DictFormat(SysDictTypeEnum.SYS_CONFIG_TYPE) - private Integer type; - - @ExcelProperty(value = "是否敏感", converter = DictConvert.class) - @DictFormat(SysDictTypeEnum.SYS_BOOLEAN_STRING) - private Boolean sensitive; - - @ExcelProperty("备注") - private String remark; - - @ExcelProperty("创建时间") - private Date createTime; - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigExportReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigExportReqVO.java deleted file mode 100644 index 85dfe96..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigExportReqVO.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.iocoder.dashboard.modules.system.controller.config.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.springframework.format.annotation.DateTimeFormat; - -import java.util.Date; - -import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@ApiModel("参数配置导出 Request VO") -@Data -public class SysConfigExportReqVO { - - @ApiModelProperty(value = "参数名称", example = "模糊匹配") - private String name; - - @ApiModelProperty(value = "参数键名", example = "yunai.db.username", notes = "模糊匹配") - private String key; - - @ApiModelProperty(value = "参数类型", example = "1", notes = "参见 SysConfigTypeEnum 枚举") - private Integer type; - - @ApiModelProperty(value = "开始时间", example = "2020-10-24") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date beginTime; - - @ApiModelProperty(value = "结束时间", example = "2020-10-24") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date endTime; - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigPageReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigPageReqVO.java deleted file mode 100644 index 2929966..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigPageReqVO.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.iocoder.dashboard.modules.system.controller.config.vo; - -import cn.iocoder.dashboard.common.pojo.PageParam; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.springframework.format.annotation.DateTimeFormat; - -import java.util.Date; - -import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@ApiModel("参数配置分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -public class SysConfigPageReqVO extends PageParam { - - @ApiModelProperty(value = "参数名称", example = "模糊匹配") - private String name; - - @ApiModelProperty(value = "参数键名", example = "yunai.db.username", notes = "模糊匹配") - private String key; - - @ApiModelProperty(value = "参数类型", example = "1", notes = "参见 SysConfigTypeEnum 枚举") - private Integer type; - - @ApiModelProperty(value = "开始时间", example = "2020-10-24") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date beginTime; - - @ApiModelProperty(value = "结束时间", example = "2020-10-24") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date endTime; - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigRespVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigRespVO.java deleted file mode 100644 index 8934a7e..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigRespVO.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.iocoder.dashboard.modules.system.controller.config.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Size; -import java.util.Date; - -@ApiModel("参数配置信息 Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -public class SysConfigRespVO extends SysConfigBaseVO { - - @ApiModelProperty(value = "参数配置序号", required = true, example = "1024") - private Long id; - - @ApiModelProperty(value = "参数键名", required = true, example = "yunai.db.username") - @NotBlank(message = "参数键名长度不能为空") - @Size(max = 100, message = "参数键名长度不能超过100个字符") - private String key; - - @ApiModelProperty(value = "参数类型", required = true, example = "1", notes = "参见 SysConfigTypeEnum 枚举") - private Integer type; - - @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式") - private Date createTime; - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigUpdateReqVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigUpdateReqVO.java deleted file mode 100644 index b4c9d97..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/config/vo/SysConfigUpdateReqVO.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.dashboard.modules.system.controller.config.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import javax.validation.constraints.NotNull; - -@ApiModel("参数配置创建 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -public class SysConfigUpdateReqVO extends SysConfigBaseVO { - - @ApiModelProperty(value = "参数配置序号", required = true, example = "1024") - @NotNull(message = "参数配置编号不能为空") - private Long id; - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/convert/config/SysConfigConvert.java b/src/main/java/cn/iocoder/dashboard/modules/system/convert/config/SysConfigConvert.java deleted file mode 100644 index be88834..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/convert/config/SysConfigConvert.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.dashboard.modules.system.convert.config; - -import cn.iocoder.dashboard.common.pojo.PageResult; -import cn.iocoder.dashboard.modules.system.controller.config.vo.SysConfigCreateReqVO; -import cn.iocoder.dashboard.modules.system.controller.config.vo.SysConfigExcelVO; -import cn.iocoder.dashboard.modules.system.controller.config.vo.SysConfigRespVO; -import cn.iocoder.dashboard.modules.system.controller.config.vo.SysConfigUpdateReqVO; -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.config.SysConfigDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -@Mapper -public interface SysConfigConvert { - - SysConfigConvert INSTANCE = Mappers.getMapper(SysConfigConvert.class); - - PageResult convertPage(PageResult page); - - SysConfigRespVO convert(SysConfigDO bean); - - SysConfigDO convert(SysConfigCreateReqVO bean); - - SysConfigDO convert(SysConfigUpdateReqVO bean); - - List convertList(List list); - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/config/SysConfigMapper.java b/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/config/SysConfigMapper.java deleted file mode 100644 index 41201ec..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/config/SysConfigMapper.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.iocoder.dashboard.modules.system.dal.mysql.dao.config; - -import cn.iocoder.dashboard.common.pojo.PageResult; -import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.dashboard.modules.system.controller.config.vo.SysConfigExportReqVO; -import cn.iocoder.dashboard.modules.system.controller.config.vo.SysConfigPageReqVO; -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.config.SysConfigDO; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -@Mapper -public interface SysConfigMapper extends BaseMapperX { - - default PageResult selectPage(SysConfigPageReqVO reqVO) { - return selectPage(reqVO, - new QueryWrapperX().likeIfPresent("name", reqVO.getName()) - .likeIfPresent("`key`", reqVO.getKey()) - .eqIfPresent("`type`", reqVO.getType()) - .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime())); - } - - default SysConfigDO selectByKey(String key) { - return selectOne(new QueryWrapper().eq("`key`", key)); - } - - default List selectList(SysConfigExportReqVO reqVO) { - return selectList(new QueryWrapperX().likeIfPresent("name", reqVO.getName()) - .likeIfPresent("`key`", reqVO.getKey()) - .eqIfPresent("`type`", reqVO.getType()) - .betweenIfPresent("create_time", reqVO.getBeginTime(), reqVO.getEndTime())); - } - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/config/SysConfigDO.java b/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/config/SysConfigDO.java deleted file mode 100644 index 73f01a3..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/config/SysConfigDO.java +++ /dev/null @@ -1,63 +0,0 @@ -package cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.config; - -import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.dashboard.modules.system.enums.config.SysConfigTypeEnum; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -/** - * 参数配置表 - * - * @author ruoyi - */ -@TableName("sys_config") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class SysConfigDO extends BaseDO { - - /** - * 参数主键 - */ - private Long id; - /** - * 参数分组 - */ - @TableField("`group`") - private String group; - /** - * 参数名称 - */ - private String name; - /** - * 参数键名 - */ - @TableField("`key`") - private String key; - /** - * 参数键值 - */ - private String value; - /** - * 参数类型 - * - * 枚举 {@link SysConfigTypeEnum} - */ - @TableField("`type`") - private Integer type; - /** - * 是否敏感 - * - * 对于敏感配置,需要管理权限才能查看 - */ - @TableField("`sensitive`") - private Boolean sensitive; - /** - * 备注 - */ - private String remark; - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java b/src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java index f94ff78..1bbde57 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java @@ -3,7 +3,7 @@ package cn.iocoder.dashboard.modules.system.enums; import cn.iocoder.dashboard.common.exception.ErrorCode; /** - * 错误码枚举类 + * System 错误码枚举类 * * system 系统,使用 1-002-000-000 段 */ @@ -75,9 +75,4 @@ public interface SysErrorCodeConstants { // ========== 文件 1002009000 ========== ErrorCode FILE_PATH_EXISTS = new ErrorCode(1002009001, "文件路径已经存在"); - // ========== 参数配置 1002010000 ========== - ErrorCode CONFIG_NOT_FOUND = new ErrorCode(1002010001, "参数配置不存在"); - ErrorCode CONFIG_NAME_DUPLICATE = new ErrorCode(1002010002, "参数配置 key 重复"); - ErrorCode CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE = new ErrorCode(1002010003, "不能删除类型为系统内置的参数配置"); - ErrorCode CONFIG_GET_VALUE_ERROR_IF_SENSITIVE = new ErrorCode(1002010004, "不允许获取敏感配置到前端"); } diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/enums/config/SysConfigTypeEnum.java b/src/main/java/cn/iocoder/dashboard/modules/system/enums/config/SysConfigTypeEnum.java deleted file mode 100644 index ef3a51b..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/enums/config/SysConfigTypeEnum.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.iocoder.dashboard.modules.system.enums.config; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -@Getter -@AllArgsConstructor -public enum SysConfigTypeEnum { - - /** - * 系统配置 - */ - SYSTEM(1), - /** - * 自定义配置 - */ - CUSTOM(2); - - private final Integer type; - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/config/SysConfigService.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/config/SysConfigService.java deleted file mode 100644 index 735ba42..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/config/SysConfigService.java +++ /dev/null @@ -1,71 +0,0 @@ -package cn.iocoder.dashboard.modules.system.service.config; - -import cn.iocoder.dashboard.common.pojo.PageResult; -import cn.iocoder.dashboard.modules.system.controller.config.vo.SysConfigCreateReqVO; -import cn.iocoder.dashboard.modules.system.controller.config.vo.SysConfigExportReqVO; -import cn.iocoder.dashboard.modules.system.controller.config.vo.SysConfigPageReqVO; -import cn.iocoder.dashboard.modules.system.controller.config.vo.SysConfigUpdateReqVO; -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.config.SysConfigDO; - -import java.util.List; - -/** - * 参数配置 Service 接口 - */ -public interface SysConfigService { - - /** - * 获得参数配置分页列表 - * - * @param reqVO 分页条件 - * @return 分页列表 - */ - PageResult getConfigPage(SysConfigPageReqVO reqVO); - - /** - * 获得参数配置列表 - * - * @param reqVO 列表 - * @return 列表 - */ - List getConfigList(SysConfigExportReqVO reqVO); - - /** - * 获得参数配置 - * - * @param id 配置编号 - * @return 参数配置 - */ - SysConfigDO getConfig(Long id); - - /** - * 根据参数键,获得参数配置 - * - * @param key 配置键 - * @return 参数配置 - */ - SysConfigDO getConfigByKey(String key); - - /** - * 创建参数配置 - * - * @param reqVO 创建信息 - * @return 配置编号 - */ - Long createConfig(SysConfigCreateReqVO reqVO); - - /** - * 更新参数配置 - * - * @param reqVO 更新信息 - */ - void updateConfig(SysConfigUpdateReqVO reqVO); - - /** - * 删除参数配置 - * - * @param id 配置编号 - */ - void deleteConfig(Long id); - -} diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/service/config/impl/SysConfigServiceImpl.java b/src/main/java/cn/iocoder/dashboard/modules/system/service/config/impl/SysConfigServiceImpl.java deleted file mode 100644 index b4cb297..0000000 --- a/src/main/java/cn/iocoder/dashboard/modules/system/service/config/impl/SysConfigServiceImpl.java +++ /dev/null @@ -1,116 +0,0 @@ -package cn.iocoder.dashboard.modules.system.service.config.impl; - -import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; -import cn.iocoder.dashboard.common.pojo.PageResult; -import cn.iocoder.dashboard.modules.system.controller.config.vo.SysConfigCreateReqVO; -import cn.iocoder.dashboard.modules.system.controller.config.vo.SysConfigExportReqVO; -import cn.iocoder.dashboard.modules.system.controller.config.vo.SysConfigPageReqVO; -import cn.iocoder.dashboard.modules.system.controller.config.vo.SysConfigUpdateReqVO; -import cn.iocoder.dashboard.modules.system.convert.config.SysConfigConvert; -import cn.iocoder.dashboard.modules.system.dal.mysql.dao.config.SysConfigMapper; -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.config.SysConfigDO; -import cn.iocoder.dashboard.modules.system.enums.config.SysConfigTypeEnum; -import cn.iocoder.dashboard.modules.system.service.config.SysConfigService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; - -import java.util.List; - -import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; - -/** - * 参数配置 Service 实现类 - */ -@Service -@Slf4j -public class SysConfigServiceImpl implements SysConfigService { - - @Resource - private SysConfigMapper configMapper; - - @Override - public PageResult getConfigPage(SysConfigPageReqVO reqVO) { - return configMapper.selectPage(reqVO); - } - - @Override - public List getConfigList(SysConfigExportReqVO reqVO) { - return configMapper.selectList(reqVO); - } - - @Override - public SysConfigDO getConfig(Long id) { - return configMapper.selectById(id); - } - - @Override - public SysConfigDO getConfigByKey(String key) { - return configMapper.selectByKey(key); - } - - @Override - public Long createConfig(SysConfigCreateReqVO reqVO) { - // 校验正确性 - checkCreateOrUpdate(null, reqVO.getKey()); - // 插入参数配置 - SysConfigDO config = SysConfigConvert.INSTANCE.convert(reqVO); - config.setType(SysConfigTypeEnum.CUSTOM.getType()); - configMapper.insert(config); - return config.getId(); - } - - @Override - public void updateConfig(SysConfigUpdateReqVO reqVO) { - // 校验正确性 - checkCreateOrUpdate(reqVO.getId(), null); // 不允许更新 key - // 更新参数配置 - SysConfigDO updateObj = SysConfigConvert.INSTANCE.convert(reqVO); - configMapper.updateById(updateObj); - } - - @Override - public void deleteConfig(Long id) { - // 校验配置存在 - SysConfigDO config = checkConfigExists(id); - // 内置配置,不允许删除 - if (SysConfigTypeEnum.SYSTEM.getType().equals(config.getType())) { - throw ServiceExceptionUtil.exception(CONFIG_CAN_NOT_DELETE_SYSTEM_TYPE); - } - // 删除 - configMapper.deleteById(id); - } - - private void checkCreateOrUpdate(Long id, String key) { - // 校验自己存在 - checkConfigExists(id); - // 校验参数配置 key 的唯一性 - checkConfigKeyUnique(id, key); - } - - private SysConfigDO checkConfigExists(Long id) { - if (id == null) { - return null; - } - SysConfigDO config = configMapper.selectById(id); - if (config == null) { - throw ServiceExceptionUtil.exception(CONFIG_NOT_FOUND); - } - return config; - } - - private void checkConfigKeyUnique(Long id, String key) { - SysConfigDO config = configMapper.selectByKey(key); - if (config == null) { - return; - } - // 如果 id 为空,说明不用比较是否为相同 id 的参数配置 - if (id == null) { - throw ServiceExceptionUtil.exception(CONFIG_NAME_DUPLICATE); - } - if (!config.getId().equals(id)) { - throw ServiceExceptionUtil.exception(CONFIG_NAME_DUPLICATE); - } - } -} diff --git a/src/main/resources/META-INF/spring.factories b/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..8a5fa54 --- /dev/null +++ b/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.env.EnvironmentPostProcessor=\ + cn.iocoder.dashboard.framework.apollo.spring.boot.ApolloApplicationContextInitializer diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index de8e890..8eb614f 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -53,6 +53,10 @@ apollo: enabled: true # 设置 Apollo 在启动阶段生效 eagerLoad: enabled: true # 设置 Apollo 在日志初始化前生效,可以实现日志的动态级别配置 + jdbc: # 自定义的 JDBC 配置项,用于数据库的地址 + url: ${spring.datasource.url} + username: ${spring.datasource.username} + password: ${spring.datasource.password} # MyBatis Plus 的配置项 mybatis-plus: -- libgit2 0.21.4