From b961bef2900a51acc00c4d182e5ab86f94a3a4bc Mon Sep 17 00:00:00 2001 From: earthchen Date: Thu, 15 Jul 2021 10:10:57 +0800 Subject: [PATCH 01/16] =?UTF-8?q?fix(mate-starter-lock):=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=20redission=20=E6=9E=84=E9=80=A0=E6=97=B6=E5=AF=B9=20?= =?UTF-8?q?type=20=E7=9A=84=E9=87=8D=E5=A4=8D=E5=88=A4=E6=96=AD=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E7=94=A8RedissonClient=E6=9B=BF=E6=8D=A2Redisson=20?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E5=BC=BA=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/vip/mate/core/lock/RedissonLock.java | 2 +- .../vip/mate/core/lock/RedissonManager.java | 18 +++++++++++------- .../ClusterRedissonConfigStrategyImpl.java | 4 ++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/mate-core/mate-starter-lock/src/main/java/vip/mate/core/lock/RedissonLock.java b/mate-core/mate-starter-lock/src/main/java/vip/mate/core/lock/RedissonLock.java index f2d6244a..5f2b5835 100644 --- a/mate-core/mate-starter-lock/src/main/java/vip/mate/core/lock/RedissonLock.java +++ b/mate-core/mate-starter-lock/src/main/java/vip/mate/core/lock/RedissonLock.java @@ -31,7 +31,7 @@ public class RedissonLock { */ public boolean lock(String lockName, long expireSeconds) { RLock rLock = redissonManager.getRedisson().getLock(lockName); - boolean getLock = false; + boolean getLock; try { getLock = rLock.tryLock(0, expireSeconds, TimeUnit.SECONDS); if (getLock) { diff --git a/mate-core/mate-starter-lock/src/main/java/vip/mate/core/lock/RedissonManager.java b/mate-core/mate-starter-lock/src/main/java/vip/mate/core/lock/RedissonManager.java index 755018d2..cd7a8913 100644 --- a/mate-core/mate-starter-lock/src/main/java/vip/mate/core/lock/RedissonManager.java +++ b/mate-core/mate-starter-lock/src/main/java/vip/mate/core/lock/RedissonManager.java @@ -3,8 +3,13 @@ import com.google.common.base.Preconditions; import lombok.extern.slf4j.Slf4j; import org.redisson.Redisson; +import org.redisson.api.RedissonClient; import org.redisson.config.Config; -import vip.mate.core.lock.config.strategy.*; +import vip.mate.core.lock.config.strategy.ClusterRedissonConfigStrategyImpl; +import vip.mate.core.lock.config.strategy.MasterslaveRedissonConfigStrategyImpl; +import vip.mate.core.lock.config.strategy.RedissonConfigContext; +import vip.mate.core.lock.config.strategy.SentinelRedissonConfigStrategyImpl; +import vip.mate.core.lock.config.strategy.StandaloneRedissonConfigStrategyImpl; import vip.mate.core.lock.constant.RedisConnectionType; import vip.mate.core.lock.props.RedissonProperties; @@ -19,7 +24,7 @@ public class RedissonManager { private Config config = new Config(); - private Redisson redisson = null; + private RedissonClient redisson = null; public RedissonManager() { } @@ -27,7 +32,7 @@ public RedissonManager() { public RedissonManager(RedissonProperties redissonProperties) { try { config = RedissonConfigFactory.getInstance().createConfig(redissonProperties); - redisson = (Redisson) Redisson.create(config); + redisson = Redisson.create(config); } catch (Exception e) { log.error("Redisson init error", e); throw new IllegalArgumentException("please input correct configurations," + @@ -35,7 +40,7 @@ public RedissonManager(RedissonProperties redissonProperties) { } } - public Redisson getRedisson() { + public RedissonClient getRedisson() { return redisson; } @@ -72,11 +77,10 @@ public static RedissonConfigFactory getInstance() { Config createConfig(RedissonProperties redissonProperties) { Preconditions.checkNotNull(redissonProperties); Preconditions.checkNotNull(redissonProperties.getAddress(), "redisson.lock.server.address cannot be NULL!"); - Preconditions.checkNotNull(redissonProperties.getType(), "redisson.lock.server.password cannot be NULL"); - Preconditions.checkNotNull(redissonProperties.getDatabase(), "redisson.lock.server.database cannot be NULL"); + // Preconditions.checkNotNull(redissonProperties.getType(), "redisson.lock.server.password cannot be NULL"); String connectionType = redissonProperties.getType(); // 声明配置上下文 - RedissonConfigContext redissonConfigContext = null; + RedissonConfigContext redissonConfigContext; if (connectionType.equals(RedisConnectionType.STANDALONE.getConnection_type())) { redissonConfigContext = new RedissonConfigContext(new StandaloneRedissonConfigStrategyImpl()); } else if (connectionType.equals(RedisConnectionType.SENTINEL.getConnection_type())) { diff --git a/mate-core/mate-starter-lock/src/main/java/vip/mate/core/lock/config/strategy/ClusterRedissonConfigStrategyImpl.java b/mate-core/mate-starter-lock/src/main/java/vip/mate/core/lock/config/strategy/ClusterRedissonConfigStrategyImpl.java index 2d2f002c..e502c828 100644 --- a/mate-core/mate-starter-lock/src/main/java/vip/mate/core/lock/config/strategy/ClusterRedissonConfigStrategyImpl.java +++ b/mate-core/mate-starter-lock/src/main/java/vip/mate/core/lock/config/strategy/ClusterRedissonConfigStrategyImpl.java @@ -23,9 +23,9 @@ public Config createRedissonConfig(RedissonProperties redissonProperties) { String password = redissonProperties.getPassword(); String[] addrTokens = address.split(","); // 设置cluster节点的服务IP和端口 - for (int i = 0; i < addrTokens.length; i++) { + for (String addrToken : addrTokens) { config.useClusterServers() - .addNodeAddress(GlobalConstant.REDIS_CONNECTION_PREFIX.getConstant_value() + addrTokens[i]); + .addNodeAddress(GlobalConstant.REDIS_CONNECTION_PREFIX.getConstant_value() + addrToken); if (StringUtils.isNotBlank(password)) { config.useClusterServers().setPassword(password); } From 5e843d411539879eee8505d473bb2cb6a8d93d96 Mon Sep 17 00:00:00 2001 From: matevip <7333791@qq.com> Date: Sun, 29 Aug 2021 13:05:04 +0800 Subject: [PATCH 02/16] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3mate-system?= =?UTF-8?q?=E6=8A=A5=E5=BE=AA=E7=8E=AF=E5=BC=95=E7=94=A8=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/vip/mate/system/service/impl/SysRoleServiceImpl.java | 2 ++ .../java/vip/mate/system/service/impl/SysUserServiceImpl.java | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mate-platform/mate-system/src/main/java/vip/mate/system/service/impl/SysRoleServiceImpl.java b/mate-platform/mate-system/src/main/java/vip/mate/system/service/impl/SysRoleServiceImpl.java index 00738dab..0d57d8b3 100644 --- a/mate-platform/mate-system/src/main/java/vip/mate/system/service/impl/SysRoleServiceImpl.java +++ b/mate-platform/mate-system/src/main/java/vip/mate/system/service/impl/SysRoleServiceImpl.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import vip.mate.core.database.entity.Search; @@ -42,6 +43,7 @@ public class SysRoleServiceImpl extends ServiceImpl impl @Autowired private ISysRolePermissionService sysRolePermissionService; + @Lazy @Autowired private ISysUserService sysUserService; diff --git a/mate-platform/mate-system/src/main/java/vip/mate/system/service/impl/SysUserServiceImpl.java b/mate-platform/mate-system/src/main/java/vip/mate/system/service/impl/SysUserServiceImpl.java index 8431d146..2b4a9572 100644 --- a/mate-platform/mate-system/src/main/java/vip/mate/system/service/impl/SysUserServiceImpl.java +++ b/mate-platform/mate-system/src/main/java/vip/mate/system/service/impl/SysUserServiceImpl.java @@ -40,8 +40,6 @@ @AllArgsConstructor public class SysUserServiceImpl extends ServiceImpl implements ISysUserService { - - private final ISysDepartService sysDepartService; private final ISysDictService dictService; private final ISysRoleService sysRoleService; From e5ca72409fa2eecd232d000dbf6f10791c4eea19 Mon Sep 17 00:00:00 2001 From: matevip <7333791@qq.com> Date: Sun, 29 Aug 2021 15:44:42 +0800 Subject: [PATCH 03/16] =?UTF-8?q?perf:=20=E5=8D=87=E7=BA=A7=E8=87=B3Mybati?= =?UTF-8?q?s=20Plus=203.4.3.2=EF=BC=8CFastJson=201.2.78?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mate-core/mate-starter-dependencies/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mate-core/mate-starter-dependencies/pom.xml b/mate-core/mate-starter-dependencies/pom.xml index 855e662c..9642c655 100644 --- a/mate-core/mate-starter-dependencies/pom.xml +++ b/mate-core/mate-starter-dependencies/pom.xml @@ -58,7 +58,7 @@ 12.2.0.1 42.2.6 1.2.6 - 3.4.3.1 + 3.4.3.2 3.4.1 3.3.2 1.7 @@ -73,7 +73,7 @@ 2.7.12 - 1.2.76 + 1.2.78 2.5.0 4.1.2 From ff293217eb8fb29a9bec84f38c273dd5664bfb91 Mon Sep 17 00:00:00 2001 From: matevip <7333791@qq.com> Date: Sun, 29 Aug 2021 16:00:13 +0800 Subject: [PATCH 04/16] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3Mybatis-Plus?= =?UTF-8?q?=E5=8D=87=E7=BA=A7=E5=90=8E=E7=9A=84=E6=8A=A5=E9=94=99=E5=86=85?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatis/injector/MateSqlInjector.java | 28 ++- .../injector/methods/AbstractInsertBatch.java | 172 +++++++++--------- .../mate/system/service/ISysMenuService.java | 2 +- .../service/impl/SysMenuServiceImpl.java | 4 +- 4 files changed, 100 insertions(+), 106 deletions(-) diff --git a/mate-core/mate-starter-mybatis/src/main/java/vip/mate/core/mybatis/injector/MateSqlInjector.java b/mate-core/mate-starter-mybatis/src/main/java/vip/mate/core/mybatis/injector/MateSqlInjector.java index 98bdcb7d..d82a0b73 100644 --- a/mate-core/mate-starter-mybatis/src/main/java/vip/mate/core/mybatis/injector/MateSqlInjector.java +++ b/mate-core/mate-starter-mybatis/src/main/java/vip/mate/core/mybatis/injector/MateSqlInjector.java @@ -16,13 +16,7 @@ package vip.mate.core.mybatis.injector; -import com.baomidou.mybatisplus.core.injector.AbstractMethod; import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector; -import vip.mate.core.mybatis.injector.methods.*; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; /** * 自定义的 sql 注入 @@ -31,15 +25,15 @@ */ public class MateSqlInjector extends DefaultSqlInjector { - @Override - public List getMethodList(Class mapperClass) { - List methodList = new ArrayList<>(); - methodList.add(new InsertBatch()); - methodList.add(new InsertIgnore()); - methodList.add(new InsertIgnoreBatch()); - methodList.add(new Replace()); - methodList.add(new ReplaceBatch()); - methodList.addAll(super.getMethodList(mapperClass)); - return Collections.unmodifiableList(methodList); - } +// @Override +// public List getMethodList(Class mapperClass) { +// List methodList = new ArrayList<>(); +// methodList.add(new InsertBatch()); +// methodList.add(new InsertIgnore()); +// methodList.add(new InsertIgnoreBatch()); +// methodList.add(new Replace()); +// methodList.add(new ReplaceBatch()); +// methodList.addAll(super.getMethodList(mapperClass)); +// return Collections.unmodifiableList(methodList); +// } } diff --git a/mate-core/mate-starter-mybatis/src/main/java/vip/mate/core/mybatis/injector/methods/AbstractInsertBatch.java b/mate-core/mate-starter-mybatis/src/main/java/vip/mate/core/mybatis/injector/methods/AbstractInsertBatch.java index 387b9728..c4f3b740 100644 --- a/mate-core/mate-starter-mybatis/src/main/java/vip/mate/core/mybatis/injector/methods/AbstractInsertBatch.java +++ b/mate-core/mate-starter-mybatis/src/main/java/vip/mate/core/mybatis/injector/methods/AbstractInsertBatch.java @@ -40,95 +40,95 @@ */ @RequiredArgsConstructor public class AbstractInsertBatch extends AbstractMethod { - private final String sqlTemp; - private final String sqlMethod; + private final String sqlTemp; + private final String sqlMethod; - @Override - public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { - KeyGenerator keyGenerator = new NoKeyGenerator(); - String keyProperty = null; - String keyColumn = null; - // 表包含主键处理逻辑,如果不包含主键当普通字段处理 - if (StringUtils.hasText(tableInfo.getKeyProperty())) { - if (tableInfo.getIdType() == IdType.AUTO) { - /** 自增主键 */ - keyGenerator = new Jdbc3KeyGenerator(); - keyProperty = tableInfo.getKeyProperty(); - keyColumn = tableInfo.getKeyColumn(); - } else { - if (null != tableInfo.getKeySequence()) { - keyGenerator = TableInfoHelper.genKeyGenerator(sqlMethod, tableInfo, this.builderAssistant); - keyProperty = tableInfo.getKeyProperty(); - keyColumn = tableInfo.getKeyColumn(); - } - } - } - // 所以字段 - String columnScript = SqlScriptUtils.convertTrim(getAllInsertSqlColumnMaybeIf(tableInfo), LEFT_BRACKET, RIGHT_BRACKET, null, COMMA); - // 单条 sql 的脚本 - String valuesScript = SqlScriptUtils.convertTrim(getAllInsertSqlPropertyMaybeIf(tableInfo), - LEFT_BRACKET, RIGHT_BRACKET, null, COMMA); - // 列表 sql - String valuesScripts = SqlScriptUtils.convertForeach(valuesScript, COLLECTION, null, ENTITY, COMMA); - String sql = String.format(sqlTemp, tableInfo.getTableName(), columnScript, valuesScripts); - SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass); - return this.addInsertMappedStatement(mapperClass, modelClass, sqlMethod, sqlSource, keyGenerator, keyProperty, keyColumn); - } + @Override + public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { + KeyGenerator keyGenerator = new NoKeyGenerator(); + String keyProperty = null; + String keyColumn = null; + // 表包含主键处理逻辑,如果不包含主键当普通字段处理 + if (StringUtils.hasText(tableInfo.getKeyProperty())) { + if (tableInfo.getIdType() == IdType.AUTO) { + /** 自增主键 */ + keyGenerator = new Jdbc3KeyGenerator(); + keyProperty = tableInfo.getKeyProperty(); + keyColumn = tableInfo.getKeyColumn(); + } else { + if (null != tableInfo.getKeySequence()) { + keyGenerator = TableInfoHelper.genKeyGenerator(sqlMethod, tableInfo, this.builderAssistant); + keyProperty = tableInfo.getKeyProperty(); + keyColumn = tableInfo.getKeyColumn(); + } + } + } + // 所以字段 + String columnScript = SqlScriptUtils.convertTrim(getAllInsertSqlColumnMaybeIf(tableInfo), LEFT_BRACKET, RIGHT_BRACKET, null, COMMA); + // 单条 sql 的脚本 + String valuesScript = SqlScriptUtils.convertTrim(getAllInsertSqlPropertyMaybeIf(tableInfo), + LEFT_BRACKET, RIGHT_BRACKET, null, COMMA); + // 列表 sql + String valuesScripts = SqlScriptUtils.convertForeach(valuesScript, COLLECTION, null, ENTITY, COMMA); + String sql = String.format(sqlTemp, tableInfo.getTableName(), columnScript, valuesScripts); + SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass); + return this.addInsertMappedStatement(mapperClass, modelClass, sqlMethod, sqlSource, keyGenerator, keyProperty, keyColumn); + } - /** - * 获取 insert 时候字段 sql 脚本片段 - *

insert into table (字段) values (值)

- *

位于 "字段" 部位

- * - *
  • 自动选部位,根据规则会生成 if 标签
  • - * - * @return sql 脚本片段 - */ - private static String getAllInsertSqlColumnMaybeIf(TableInfo tableInfo) { - List fieldList = tableInfo.getFieldList(); - return tableInfo.getKeyInsertSqlColumn(true) + fieldList.stream().map(AbstractInsertBatch::getInsertSqlColumnMaybeIf) - .collect(Collectors.joining(NEWLINE)); - } + /** + * 获取 insert 时候字段 sql 脚本片段 + *

    insert into table (字段) values (值)

    + *

    位于 "字段" 部位

    + * + *
  • 自动选部位,根据规则会生成 if 标签
  • + * + * @return sql 脚本片段 + */ + private static String getAllInsertSqlColumnMaybeIf(TableInfo tableInfo) { + List fieldList = tableInfo.getFieldList(); + return tableInfo.getKeyInsertSqlColumn(true, true) + fieldList.stream().map(AbstractInsertBatch::getInsertSqlColumnMaybeIf) + .collect(Collectors.joining(NEWLINE)); + } - /** - * 获取 insert 时候字段 sql 脚本片段 - *

    insert into table (字段) values (值)

    - *

    位于 "字段" 部位

    - * - *
  • 根据规则会生成 if 标签
  • - * - * @return sql 脚本片段 - */ - private static String getInsertSqlColumnMaybeIf(TableFieldInfo tableFieldInfo) { - return tableFieldInfo.getInsertSqlColumn(); - } + /** + * 获取 insert 时候字段 sql 脚本片段 + *

    insert into table (字段) values (值)

    + *

    位于 "字段" 部位

    + * + *
  • 根据规则会生成 if 标签
  • + * + * @return sql 脚本片段 + */ + private static String getInsertSqlColumnMaybeIf(TableFieldInfo tableFieldInfo) { + return tableFieldInfo.getInsertSqlColumn(); + } - /** - * 获取所有 insert 时候插入值 sql 脚本片段 - *

    insert into table (字段) values (值)

    - *

    位于 "值" 部位

    - * - *
  • 自动选部位,根据规则会生成 if 标签
  • - * - * @return sql 脚本片段 - */ - private static String getAllInsertSqlPropertyMaybeIf(final TableInfo tableInfo) { - List fieldList = tableInfo.getFieldList(); - return tableInfo.getKeyInsertSqlProperty(ENTITY_DOT, true) + fieldList.stream() - .map(AbstractInsertBatch::getInsertSqlPropertyMaybeIf) - .collect(Collectors.joining(NEWLINE)); - } + /** + * 获取所有 insert 时候插入值 sql 脚本片段 + *

    insert into table (字段) values (值)

    + *

    位于 "值" 部位

    + * + *
  • 自动选部位,根据规则会生成 if 标签
  • + * + * @return sql 脚本片段 + */ + private static String getAllInsertSqlPropertyMaybeIf(final TableInfo tableInfo) { + List fieldList = tableInfo.getFieldList(); + return tableInfo.getKeyInsertSqlProperty(true, ENTITY_DOT, true) + fieldList.stream() + .map(AbstractInsertBatch::getInsertSqlPropertyMaybeIf) + .collect(Collectors.joining(NEWLINE)); + } - /** - * 获取 insert 时候插入值 sql 脚本片段 - *

    insert into table (字段) values (值)

    - *

    位于 "值" 部位

    - * - *
  • 根据规则会生成 if 标签
  • - * - * @return sql 脚本片段 - */ - private static String getInsertSqlPropertyMaybeIf(TableFieldInfo tableFieldInfo) { - return tableFieldInfo.getInsertSqlProperty(ENTITY_DOT); - } + /** + * 获取 insert 时候插入值 sql 脚本片段 + *

    insert into table (字段) values (值)

    + *

    位于 "值" 部位

    + * + *
  • 根据规则会生成 if 标签
  • + * + * @return sql 脚本片段 + */ + private static String getInsertSqlPropertyMaybeIf(TableFieldInfo tableFieldInfo) { + return tableFieldInfo.getInsertSqlProperty(ENTITY_DOT); + } } diff --git a/mate-platform/mate-system/src/main/java/vip/mate/system/service/ISysMenuService.java b/mate-platform/mate-system/src/main/java/vip/mate/system/service/ISysMenuService.java index 1c7ac093..0e31f458 100644 --- a/mate-platform/mate-system/src/main/java/vip/mate/system/service/ISysMenuService.java +++ b/mate-platform/mate-system/src/main/java/vip/mate/system/service/ISysMenuService.java @@ -72,6 +72,6 @@ public interface ISysMenuService extends IService { * @param menuId 菜单ID * @return parentId */ - int getMenuChild(Long menuId); + Long getMenuChild(Long menuId); } diff --git a/mate-platform/mate-system/src/main/java/vip/mate/system/service/impl/SysMenuServiceImpl.java b/mate-platform/mate-system/src/main/java/vip/mate/system/service/impl/SysMenuServiceImpl.java index 8c35a8b5..79e87d05 100644 --- a/mate-platform/mate-system/src/main/java/vip/mate/system/service/impl/SysMenuServiceImpl.java +++ b/mate-platform/mate-system/src/main/java/vip/mate/system/service/impl/SysMenuServiceImpl.java @@ -87,11 +87,11 @@ public List export() { @Override public boolean checkChild(Long id) { - return this.getMenuChild(id) > 0 ? Boolean.TRUE : Boolean.FALSE; + return this.getMenuChild(id) > 0L ? Boolean.TRUE : Boolean.FALSE; } @Override - public int getMenuChild(Long menuId) { + public Long getMenuChild(Long menuId) { return this.baseMapper.selectCount(Wrappers.lambdaQuery().select(SysMenu::getId).eq(SysMenu::getParentId, menuId)); } } From 44ce620fa62ec999e24631b4767f5bdd2463fedb Mon Sep 17 00:00:00 2001 From: matevip <7333791@qq.com> Date: Mon, 30 Aug 2021 15:37:24 +0800 Subject: [PATCH 05/16] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=A1=B6?= =?UTF-8?q?=E7=BA=A7=E8=8F=9C=E5=8D=95=E4=B8=8A=E9=85=8D=E7=BD=AE=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E5=BA=94=E7=94=A8=E6=8A=A5=E9=94=99=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mate/core/web/tree/ForestNodeMerger.java | 1 + .../java/vip/mate/system/util/TreeUtil.java | 65 ++++++++++--------- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/mate-core/mate-starter-web/src/main/java/vip/mate/core/web/tree/ForestNodeMerger.java b/mate-core/mate-starter-web/src/main/java/vip/mate/core/web/tree/ForestNodeMerger.java index c07c2973..7da731d2 100644 --- a/mate-core/mate-starter-web/src/main/java/vip/mate/core/web/tree/ForestNodeMerger.java +++ b/mate-core/mate-starter-web/src/main/java/vip/mate/core/web/tree/ForestNodeMerger.java @@ -4,6 +4,7 @@ /** * 节点归并类 + * * @author pangu * @link https://blog.csdn.net/u014424628/article/details/51765394?utm_source=blogxgwz2 */ diff --git a/mate-platform/mate-system/src/main/java/vip/mate/system/util/TreeUtil.java b/mate-platform/mate-system/src/main/java/vip/mate/system/util/TreeUtil.java index 012b8215..bac10b8f 100644 --- a/mate-platform/mate-system/src/main/java/vip/mate/system/util/TreeUtil.java +++ b/mate-platform/mate-system/src/main/java/vip/mate/system/util/TreeUtil.java @@ -16,36 +16,37 @@ */ public class TreeUtil { - /** - * 对象转树节点 - * - * @param sysMenus 系统菜单 - * @return List - */ - public static List buildTree(List sysMenus) { - List trees = new ArrayList<>(); - sysMenus.forEach(sysMenu -> { - SysMenuVO tree = new SysMenuVO(); - BeanUtils.copyProperties(sysMenu, tree); - tree.setHidden("1".equals(sysMenu.getHidden())); - MenuMeta meta = new MenuMeta(); - meta.setIcon(sysMenu.getIcon()); - meta.setTitle(sysMenu.getName()); - if (sysMenu.getParentId() == -1L) { - tree.setComponent("Layout"); - tree.setRedirect("noRedirect"); - tree.setAlwaysShow(true); - } - tree.setMeta(meta); - if (MenuTypeEnum.DIR.getCode().equals(sysMenu.getType())) { - tree.setTypeName(MenuTypeEnum.DIR.getMessage()); - } else if (MenuTypeEnum.MENU.getCode().equals(sysMenu.getType())) { - tree.setTypeName(MenuTypeEnum.MENU.getMessage()); - } else if (MenuTypeEnum.BUTTON.getCode().equals(sysMenu.getType())) { - tree.setTypeName(MenuTypeEnum.BUTTON.getMessage()); - } - trees.add(tree); - }); - return trees; - } + /** + * 对象转树节点 + * + * @param sysMenus 系统菜单 + * @return List + */ + public static List buildTree(List sysMenus) { + List trees = new ArrayList<>(); + sysMenus.forEach(sysMenu -> { + SysMenuVO tree = new SysMenuVO(); + BeanUtils.copyProperties(sysMenu, tree); + tree.setHidden("1".equals(sysMenu.getHidden())); + MenuMeta meta = new MenuMeta(); + meta.setIcon(sysMenu.getIcon()); + meta.setTitle(sysMenu.getName()); + // 只有当菜单类型为目录的时候,如果是顶级,则强制修改为Layout + if (sysMenu.getParentId() == -1L && MenuTypeEnum.DIR.getCode().equals(sysMenu.getType())) { + tree.setComponent("Layout"); + tree.setRedirect("noRedirect"); + tree.setAlwaysShow(true); + } + tree.setMeta(meta); + if (MenuTypeEnum.DIR.getCode().equals(sysMenu.getType())) { + tree.setTypeName(MenuTypeEnum.DIR.getMessage()); + } else if (MenuTypeEnum.MENU.getCode().equals(sysMenu.getType())) { + tree.setTypeName(MenuTypeEnum.MENU.getMessage()); + } else if (MenuTypeEnum.BUTTON.getCode().equals(sysMenu.getType())) { + tree.setTypeName(MenuTypeEnum.BUTTON.getMessage()); + } + trees.add(tree); + }); + return trees; + } } From 108d3cf6bbb7278beb097c2db91b1d5e6481377e Mon Sep 17 00:00:00 2001 From: matevip <7333791@qq.com> Date: Mon, 30 Aug 2021 22:26:51 +0800 Subject: [PATCH 06/16] =?UTF-8?q?docs:=20=E5=AE=8C=E5=96=84README=E7=9A=84?= =?UTF-8?q?=E4=B8=AD=E5=A4=AE=E4=BB=93=E5=BA=93=E7=89=88=E6=9C=AC=E5=92=8C?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E7=9A=84=E4=B8=80=E4=BA=9B=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 1cc5214f..87088ca6 100644 --- a/README.md +++ b/README.md @@ -41,18 +41,18 @@ Sentinel | 1.8.1 | @@ -167,7 +167,7 @@ matecloud -- 父项目,各模块分离,方便集成和微服务 vip.mate mate-starter-dependencies - 3.8.8 + 4.0.8 pom import From c9b355acb987e4923781062024cbee2f2fabd7e7 Mon Sep 17 00:00:00 2001 From: matevip <7333791@qq.com> Date: Tue, 31 Aug 2021 09:26:09 +0800 Subject: [PATCH 07/16] =?UTF-8?q?build:=20=E5=8F=91=E5=B8=83matecloud=204.?= =?UTF-8?q?0.10=E5=BF=AB=E7=85=A7=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mate-core/mate-starter-auth/pom.xml | 2 +- mate-core/mate-starter-cloud/pom.xml | 2 +- mate-core/mate-starter-common/pom.xml | 2 +- .../main/java/vip/mate/core/common/constant/MateConstant.java | 2 +- mate-core/mate-starter-database/pom.xml | 2 +- mate-core/mate-starter-dependencies/pom.xml | 4 ++-- mate-core/mate-starter-dubbo/pom.xml | 2 +- mate-core/mate-starter-encrypt/pom.xml | 2 +- mate-core/mate-starter-feign/pom.xml | 2 +- mate-core/mate-starter-file/pom.xml | 2 +- mate-core/mate-starter-gray/pom.xml | 2 +- mate-core/mate-starter-idempotent/pom.xml | 2 +- mate-core/mate-starter-jetcache/pom.xml | 2 +- mate-core/mate-starter-job/pom.xml | 2 +- mate-core/mate-starter-kafka/pom.xml | 2 +- mate-core/mate-starter-lock/pom.xml | 2 +- mate-core/mate-starter-log/pom.xml | 2 +- mate-core/mate-starter-mail/pom.xml | 2 +- mate-core/mate-starter-mongodb/pom.xml | 2 +- mate-core/mate-starter-mybatis/pom.xml | 2 +- mate-core/mate-starter-oss/pom.xml | 2 +- mate-core/mate-starter-prometheus/pom.xml | 2 +- mate-core/mate-starter-rabbit/pom.xml | 2 +- mate-core/mate-starter-redis/pom.xml | 2 +- mate-core/mate-starter-rocketmq/pom.xml | 2 +- mate-core/mate-starter-rule/pom.xml | 2 +- mate-core/mate-starter-seata/pom.xml | 2 +- mate-core/mate-starter-security/pom.xml | 2 +- mate-core/mate-starter-sentinel/pom.xml | 2 +- mate-core/mate-starter-sms/pom.xml | 2 +- mate-core/mate-starter-strategy/pom.xml | 2 +- mate-core/mate-starter-validator/pom.xml | 2 +- mate-core/mate-starter-web/pom.xml | 2 +- mate-core/pom.xml | 4 ++-- mate-examples/pom.xml | 2 +- mate-examples/seata-example/pom.xml | 2 +- mate-examples/seata-example/seata-order-example/pom.xml | 2 +- mate-examples/seata-example/seata-point-example/pom.xml | 2 +- mate-examples/seata-example/seata-user-example/pom.xml | 2 +- mate-examples/sso-ui-example/pom.xml | 2 +- mate-gateway/pom.xml | 2 +- mate-mq/mate-log-producer/pom.xml | 2 +- mate-mq/mate-message-consumer/pom.xml | 2 +- mate-mq/mate-message-producer/pom.xml | 2 +- mate-mq/pom.xml | 2 +- mate-platform/mate-component-api/pom.xml | 2 +- mate-platform/mate-component/pom.xml | 2 +- mate-platform/mate-system-api/pom.xml | 2 +- mate-platform/mate-system/pom.xml | 2 +- mate-platform/pom.xml | 2 +- mate-support/mate-admin/pom.xml | 2 +- mate-support/mate-code/pom.xml | 2 +- mate-support/mate-job-admin/pom.xml | 2 +- mate-support/mate-job/pom.xml | 2 +- mate-support/pom.xml | 2 +- mate-uaa/pom.xml | 2 +- pom.xml | 4 ++-- 57 files changed, 60 insertions(+), 60 deletions(-) diff --git a/mate-core/mate-starter-auth/pom.xml b/mate-core/mate-starter-auth/pom.xml index 1a7f3dd4..d9a14e85 100644 --- a/mate-core/mate-starter-auth/pom.xml +++ b/mate-core/mate-starter-auth/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-cloud/pom.xml b/mate-core/mate-starter-cloud/pom.xml index d56a6a98..c30decd4 100644 --- a/mate-core/mate-starter-cloud/pom.xml +++ b/mate-core/mate-starter-cloud/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-common/pom.xml b/mate-core/mate-starter-common/pom.xml index beabc394..05e86134 100644 --- a/mate-core/mate-starter-common/pom.xml +++ b/mate-core/mate-starter-common/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-common/src/main/java/vip/mate/core/common/constant/MateConstant.java b/mate-core/mate-starter-common/src/main/java/vip/mate/core/common/constant/MateConstant.java index 2a83df03..d3388325 100644 --- a/mate-core/mate-starter-common/src/main/java/vip/mate/core/common/constant/MateConstant.java +++ b/mate-core/mate-starter-common/src/main/java/vip/mate/core/common/constant/MateConstant.java @@ -13,7 +13,7 @@ public class MateConstant { /** * 应用版本号 */ - public static final String MATE_APP_VERSION = "4.0.9"; + public static final String MATE_APP_VERSION = "4.0.10-SNAPSHOT"; /** * Spring 应用名 prop key diff --git a/mate-core/mate-starter-database/pom.xml b/mate-core/mate-starter-database/pom.xml index 411d3f00..650a8578 100644 --- a/mate-core/mate-starter-database/pom.xml +++ b/mate-core/mate-starter-database/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-dependencies/pom.xml b/mate-core/mate-starter-dependencies/pom.xml index 9642c655..b9bcbf72 100644 --- a/mate-core/mate-starter-dependencies/pom.xml +++ b/mate-core/mate-starter-dependencies/pom.xml @@ -12,7 +12,7 @@ vip.mate mate-starter-dependencies - 4.0.9 + 4.0.10-SNAPSHOT pom mate-starter-dependencies based on Spring Cloud Alibaba dependencies @@ -39,7 +39,7 @@ - 4.0.9 + 4.0.10-SNAPSHOT UTF-8 2.5.4 diff --git a/mate-core/mate-starter-dubbo/pom.xml b/mate-core/mate-starter-dubbo/pom.xml index d90c7104..12326f94 100644 --- a/mate-core/mate-starter-dubbo/pom.xml +++ b/mate-core/mate-starter-dubbo/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-encrypt/pom.xml b/mate-core/mate-starter-encrypt/pom.xml index 44493387..8b20f02b 100644 --- a/mate-core/mate-starter-encrypt/pom.xml +++ b/mate-core/mate-starter-encrypt/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-feign/pom.xml b/mate-core/mate-starter-feign/pom.xml index 25332a75..7f6d0371 100644 --- a/mate-core/mate-starter-feign/pom.xml +++ b/mate-core/mate-starter-feign/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-file/pom.xml b/mate-core/mate-starter-file/pom.xml index f4065cb8..2f787fe7 100644 --- a/mate-core/mate-starter-file/pom.xml +++ b/mate-core/mate-starter-file/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-gray/pom.xml b/mate-core/mate-starter-gray/pom.xml index 7182d8d6..9bae041e 100644 --- a/mate-core/mate-starter-gray/pom.xml +++ b/mate-core/mate-starter-gray/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-idempotent/pom.xml b/mate-core/mate-starter-idempotent/pom.xml index 64c1f327..ed3370a7 100644 --- a/mate-core/mate-starter-idempotent/pom.xml +++ b/mate-core/mate-starter-idempotent/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-jetcache/pom.xml b/mate-core/mate-starter-jetcache/pom.xml index 4a7f3def..ebdff730 100644 --- a/mate-core/mate-starter-jetcache/pom.xml +++ b/mate-core/mate-starter-jetcache/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-job/pom.xml b/mate-core/mate-starter-job/pom.xml index 6fd85ec8..907f67d5 100644 --- a/mate-core/mate-starter-job/pom.xml +++ b/mate-core/mate-starter-job/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 jar diff --git a/mate-core/mate-starter-kafka/pom.xml b/mate-core/mate-starter-kafka/pom.xml index e1f28a1a..529da20e 100644 --- a/mate-core/mate-starter-kafka/pom.xml +++ b/mate-core/mate-starter-kafka/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-lock/pom.xml b/mate-core/mate-starter-lock/pom.xml index b3af5768..f6db0c50 100644 --- a/mate-core/mate-starter-lock/pom.xml +++ b/mate-core/mate-starter-lock/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-log/pom.xml b/mate-core/mate-starter-log/pom.xml index 868f2682..4208d412 100644 --- a/mate-core/mate-starter-log/pom.xml +++ b/mate-core/mate-starter-log/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-mail/pom.xml b/mate-core/mate-starter-mail/pom.xml index 802a74d7..a3f0150a 100644 --- a/mate-core/mate-starter-mail/pom.xml +++ b/mate-core/mate-starter-mail/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-mongodb/pom.xml b/mate-core/mate-starter-mongodb/pom.xml index 452224e7..0cece0ee 100644 --- a/mate-core/mate-starter-mongodb/pom.xml +++ b/mate-core/mate-starter-mongodb/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-mybatis/pom.xml b/mate-core/mate-starter-mybatis/pom.xml index 6d09ab5d..091208b8 100644 --- a/mate-core/mate-starter-mybatis/pom.xml +++ b/mate-core/mate-starter-mybatis/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-oss/pom.xml b/mate-core/mate-starter-oss/pom.xml index 516803b5..ed40df1d 100644 --- a/mate-core/mate-starter-oss/pom.xml +++ b/mate-core/mate-starter-oss/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-prometheus/pom.xml b/mate-core/mate-starter-prometheus/pom.xml index e817d2e6..fa062433 100644 --- a/mate-core/mate-starter-prometheus/pom.xml +++ b/mate-core/mate-starter-prometheus/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-rabbit/pom.xml b/mate-core/mate-starter-rabbit/pom.xml index ff7f318b..53ee411d 100644 --- a/mate-core/mate-starter-rabbit/pom.xml +++ b/mate-core/mate-starter-rabbit/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-redis/pom.xml b/mate-core/mate-starter-redis/pom.xml index b503bdc2..759f3402 100644 --- a/mate-core/mate-starter-redis/pom.xml +++ b/mate-core/mate-starter-redis/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-rocketmq/pom.xml b/mate-core/mate-starter-rocketmq/pom.xml index 32907dbb..0f91b0d9 100644 --- a/mate-core/mate-starter-rocketmq/pom.xml +++ b/mate-core/mate-starter-rocketmq/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-rule/pom.xml b/mate-core/mate-starter-rule/pom.xml index 57c3b15b..963addf8 100644 --- a/mate-core/mate-starter-rule/pom.xml +++ b/mate-core/mate-starter-rule/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-seata/pom.xml b/mate-core/mate-starter-seata/pom.xml index 66c53d66..801ad433 100644 --- a/mate-core/mate-starter-seata/pom.xml +++ b/mate-core/mate-starter-seata/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-security/pom.xml b/mate-core/mate-starter-security/pom.xml index d361e1fd..1c61f17f 100644 --- a/mate-core/mate-starter-security/pom.xml +++ b/mate-core/mate-starter-security/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-sentinel/pom.xml b/mate-core/mate-starter-sentinel/pom.xml index 5f459994..7d32bcd7 100644 --- a/mate-core/mate-starter-sentinel/pom.xml +++ b/mate-core/mate-starter-sentinel/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-sms/pom.xml b/mate-core/mate-starter-sms/pom.xml index 12cc1f10..467a09bd 100644 --- a/mate-core/mate-starter-sms/pom.xml +++ b/mate-core/mate-starter-sms/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-strategy/pom.xml b/mate-core/mate-starter-strategy/pom.xml index 944e2f40..ddb334bb 100644 --- a/mate-core/mate-starter-strategy/pom.xml +++ b/mate-core/mate-starter-strategy/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-validator/pom.xml b/mate-core/mate-starter-validator/pom.xml index 700877d7..2f686447 100644 --- a/mate-core/mate-starter-validator/pom.xml +++ b/mate-core/mate-starter-validator/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/mate-starter-web/pom.xml b/mate-core/mate-starter-web/pom.xml index 3e213343..98dfaf40 100644 --- a/mate-core/mate-starter-web/pom.xml +++ b/mate-core/mate-starter-web/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-core/pom.xml b/mate-core/pom.xml index 87450d3e..4cebbbfc 100644 --- a/mate-core/pom.xml +++ b/mate-core/pom.xml @@ -6,7 +6,7 @@ mate-core vip.mate - 4.0.9 + 4.0.10-SNAPSHOT pom mate-core based on Spring Cloud Alibaba microservice components @@ -67,7 +67,7 @@ - 4.0.9 + 4.0.10-SNAPSHOT 2.9.2 1.5.21 1.9.4 diff --git a/mate-examples/pom.xml b/mate-examples/pom.xml index b8b63282..a242349b 100644 --- a/mate-examples/pom.xml +++ b/mate-examples/pom.xml @@ -5,7 +5,7 @@ matecloud vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-examples/seata-example/pom.xml b/mate-examples/seata-example/pom.xml index 66c53c70..90cda28d 100644 --- a/mate-examples/seata-example/pom.xml +++ b/mate-examples/seata-example/pom.xml @@ -5,7 +5,7 @@ mate-examples vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-examples/seata-example/seata-order-example/pom.xml b/mate-examples/seata-example/seata-order-example/pom.xml index c73d5266..480bcef5 100644 --- a/mate-examples/seata-example/seata-order-example/pom.xml +++ b/mate-examples/seata-example/seata-order-example/pom.xml @@ -5,7 +5,7 @@ seata-example vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-examples/seata-example/seata-point-example/pom.xml b/mate-examples/seata-example/seata-point-example/pom.xml index 8972d2a4..345bb6a2 100644 --- a/mate-examples/seata-example/seata-point-example/pom.xml +++ b/mate-examples/seata-example/seata-point-example/pom.xml @@ -5,7 +5,7 @@ seata-example vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-examples/seata-example/seata-user-example/pom.xml b/mate-examples/seata-example/seata-user-example/pom.xml index 6dd6d221..520591ad 100644 --- a/mate-examples/seata-example/seata-user-example/pom.xml +++ b/mate-examples/seata-example/seata-user-example/pom.xml @@ -5,7 +5,7 @@ seata-example vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-examples/sso-ui-example/pom.xml b/mate-examples/sso-ui-example/pom.xml index 3bb9be07..12d7101b 100644 --- a/mate-examples/sso-ui-example/pom.xml +++ b/mate-examples/sso-ui-example/pom.xml @@ -5,7 +5,7 @@ mate-examples vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-gateway/pom.xml b/mate-gateway/pom.xml index 96544c14..5a66178b 100644 --- a/mate-gateway/pom.xml +++ b/mate-gateway/pom.xml @@ -5,7 +5,7 @@ matecloud vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-mq/mate-log-producer/pom.xml b/mate-mq/mate-log-producer/pom.xml index d5a704b0..e66e7a32 100644 --- a/mate-mq/mate-log-producer/pom.xml +++ b/mate-mq/mate-log-producer/pom.xml @@ -5,7 +5,7 @@ mate-mq vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-mq/mate-message-consumer/pom.xml b/mate-mq/mate-message-consumer/pom.xml index 245d984b..0f87aa32 100644 --- a/mate-mq/mate-message-consumer/pom.xml +++ b/mate-mq/mate-message-consumer/pom.xml @@ -5,7 +5,7 @@ mate-mq vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-mq/mate-message-producer/pom.xml b/mate-mq/mate-message-producer/pom.xml index 7ead19df..5ef5e02d 100644 --- a/mate-mq/mate-message-producer/pom.xml +++ b/mate-mq/mate-message-producer/pom.xml @@ -5,7 +5,7 @@ mate-mq vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-mq/pom.xml b/mate-mq/pom.xml index 8a17bea3..db8e15c9 100644 --- a/mate-mq/pom.xml +++ b/mate-mq/pom.xml @@ -5,7 +5,7 @@ matecloud vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-platform/mate-component-api/pom.xml b/mate-platform/mate-component-api/pom.xml index 832abe94..20ec9f7c 100644 --- a/mate-platform/mate-component-api/pom.xml +++ b/mate-platform/mate-component-api/pom.xml @@ -5,7 +5,7 @@ mate-platform vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-platform/mate-component/pom.xml b/mate-platform/mate-component/pom.xml index 34b3311c..9e0d9c91 100644 --- a/mate-platform/mate-component/pom.xml +++ b/mate-platform/mate-component/pom.xml @@ -5,7 +5,7 @@ mate-platform vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-platform/mate-system-api/pom.xml b/mate-platform/mate-system-api/pom.xml index 3e5309a8..6902d305 100644 --- a/mate-platform/mate-system-api/pom.xml +++ b/mate-platform/mate-system-api/pom.xml @@ -5,7 +5,7 @@ mate-platform vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-platform/mate-system/pom.xml b/mate-platform/mate-system/pom.xml index 26f6c769..8f5dfb61 100644 --- a/mate-platform/mate-system/pom.xml +++ b/mate-platform/mate-system/pom.xml @@ -5,7 +5,7 @@ mate-platform vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-platform/pom.xml b/mate-platform/pom.xml index c48967d0..863c4f38 100644 --- a/mate-platform/pom.xml +++ b/mate-platform/pom.xml @@ -5,7 +5,7 @@ matecloud vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-support/mate-admin/pom.xml b/mate-support/mate-admin/pom.xml index f70ca25e..8a8a38aa 100644 --- a/mate-support/mate-admin/pom.xml +++ b/mate-support/mate-admin/pom.xml @@ -5,7 +5,7 @@ mate-support vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-support/mate-code/pom.xml b/mate-support/mate-code/pom.xml index aeaff22d..74ae99a8 100644 --- a/mate-support/mate-code/pom.xml +++ b/mate-support/mate-code/pom.xml @@ -5,7 +5,7 @@ mate-support vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-support/mate-job-admin/pom.xml b/mate-support/mate-job-admin/pom.xml index e823968e..0036f088 100644 --- a/mate-support/mate-job-admin/pom.xml +++ b/mate-support/mate-job-admin/pom.xml @@ -5,7 +5,7 @@ mate-support vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-support/mate-job/pom.xml b/mate-support/mate-job/pom.xml index cbefb5b0..a4ac8b3e 100644 --- a/mate-support/mate-job/pom.xml +++ b/mate-support/mate-job/pom.xml @@ -5,7 +5,7 @@ mate-support vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-support/pom.xml b/mate-support/pom.xml index bacb0d51..299a82fc 100644 --- a/mate-support/pom.xml +++ b/mate-support/pom.xml @@ -5,7 +5,7 @@ matecloud vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/mate-uaa/pom.xml b/mate-uaa/pom.xml index 9f5eb626..6fc72b0f 100644 --- a/mate-uaa/pom.xml +++ b/mate-uaa/pom.xml @@ -5,7 +5,7 @@ matecloud vip.mate - 4.0.9 + 4.0.10-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index 490ecae5..b816f8a7 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ vip.mate matecloud pom - 4.0.9 + 4.0.10-SNAPSHOT matecloud MateCloud - 基于Spring Cloud Alibaba实现的微服务架构 @@ -24,7 +24,7 @@ - 4.0.9 + 4.0.10-SNAPSHOT 1.8 3.8.1 UTF-8 From 9fcc2f0c520c48f9061974339d5ff99dcd4118f1 Mon Sep 17 00:00:00 2001 From: matevip <7333791@qq.com> Date: Wed, 1 Sep 2021 15:00:55 +0800 Subject: [PATCH 08/16] =?UTF-8?q?refactor:=20API=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=85=81=E8=AE=B8serviceId=E4=B8=BA=E7=A9=BA?= =?UTF-8?q?=EF=BC=8C=E4=B8=BA=E7=A9=BA=E5=88=99=E6=9F=A5=E8=AF=A2=E6=89=80?= =?UTF-8?q?=E6=9C=89=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/SysApiController.java | 257 +++++++++--------- .../service/impl/SysApiServiceImpl.java | 66 ++--- 2 files changed, 162 insertions(+), 161 deletions(-) diff --git a/mate-platform/mate-system/src/main/java/vip/mate/system/controller/SysApiController.java b/mate-platform/mate-system/src/main/java/vip/mate/system/controller/SysApiController.java index 94830010..97b55238 100644 --- a/mate-platform/mate-system/src/main/java/vip/mate/system/controller/SysApiController.java +++ b/mate-platform/mate-system/src/main/java/vip/mate/system/controller/SysApiController.java @@ -36,6 +36,7 @@ import vip.mate.system.entity.SysApi; import vip.mate.system.service.ISysApiService; +import javax.annotation.Nullable; import javax.validation.Valid; import java.util.List; import java.util.Map; @@ -55,140 +56,140 @@ @Api(value = "API管理", tags = "API管理接口") public class SysApiController extends BaseController { - private final ISysApiService sysApiService; + private final ISysApiService sysApiService; - private final RedisService redisService; + private final RedisService redisService; - /** - * 分页列表 - * - * @param page 分页信息 - * @param search  搜索关键词 - * @return Result - */ - @PreAuth - @Log(value = "API列表", exception = "API列表请求异常") - @GetMapping("/page") - @ApiOperation(value = "API列表", notes = "分页查询") - @ApiImplicitParams({ - @ApiImplicitParam(name = "current", required = true, value = "当前页", paramType = "form"), - @ApiImplicitParam(name = "size", required = true, value = "每页显示数据", paramType = "form"), - @ApiImplicitParam(name = "keyword", required = true, value = "模糊查询关键词", paramType = "form"), - @ApiImplicitParam(name = "startDate", required = true, value = "创建开始日期", paramType = "form"), - @ApiImplicitParam(name = "endDate", required = true, value = "创建结束日期", paramType = "form"), - }) - public Result page(Page page, Search search, @RequestParam String serviceId) { - return Result.data(sysApiService.listPage(page, search, serviceId)); - } + /** + * 分页列表 + * + * @param page 分页信息 + * @param search  搜索关键词 + * @return Result + */ + @PreAuth + @Log(value = "API列表", exception = "API列表请求异常") + @GetMapping("/page") + @ApiOperation(value = "API列表", notes = "分页查询") + @ApiImplicitParams({ + @ApiImplicitParam(name = "current", required = true, value = "当前页", paramType = "form"), + @ApiImplicitParam(name = "size", required = true, value = "每页显示数据", paramType = "form"), + @ApiImplicitParam(name = "keyword", required = true, value = "模糊查询关键词", paramType = "form"), + @ApiImplicitParam(name = "startDate", required = true, value = "创建开始日期", paramType = "form"), + @ApiImplicitParam(name = "endDate", required = true, value = "创建结束日期", paramType = "form"), + }) + public Result page(Page page, Search search, @Nullable @RequestParam String serviceId) { + return Result.data(sysApiService.listPage(page, search, serviceId)); + } - /** - * API管理信息 - * - * @param id Id - * @return Result - */ - @PreAuth - @Log(value = "API信息", exception = "API信息请求异常") - @GetMapping("/get") - @ApiOperation(value = "API信息", notes = "根据ID查询") - @ApiImplicitParams({ - @ApiImplicitParam(name = "id", required = true, value = "ID", paramType = "form"), - }) - public Result get(@RequestParam String id) { - return Result.data(sysApiService.getById(id)); - } + /** + * API管理信息 + * + * @param id Id + * @return Result + */ + @PreAuth + @Log(value = "API信息", exception = "API信息请求异常") + @GetMapping("/get") + @ApiOperation(value = "API信息", notes = "根据ID查询") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", required = true, value = "ID", paramType = "form"), + }) + public Result get(@RequestParam String id) { + return Result.data(sysApiService.getById(id)); + } - /** - * API管理设置 - * - * @param sysApi SysApi 对象 - * @return Result - */ - @PreAuth - @Log(value = "API设置", exception = "API设置请求异常") - @PostMapping("/set") - @ApiOperation(value = "API设置", notes = "API设置,支持新增或修改") - public Result set(@Valid @RequestBody SysApi sysApi) { - return Result.condition(sysApiService.saveOrUpdate(sysApi)); - } + /** + * API管理设置 + * + * @param sysApi SysApi 对象 + * @return Result + */ + @PreAuth + @Log(value = "API设置", exception = "API设置请求异常") + @PostMapping("/set") + @ApiOperation(value = "API设置", notes = "API设置,支持新增或修改") + public Result set(@Valid @RequestBody SysApi sysApi) { + return Result.condition(sysApiService.saveOrUpdate(sysApi)); + } - /** - * API管理删除 - * - * @param ids id字符串,根据,号分隔 - * @return Result - */ - @PreAuth - @Log(value = "API删除", exception = "API删除请求异常") - @PostMapping("/del") - @ApiOperation(value = "API删除", notes = "API删除") - @ApiImplicitParams({ - @ApiImplicitParam(name = "ids", required = true, value = "多个用,号隔开", paramType = "form") - }) - public Result del(@RequestParam String ids) { - return Result.condition(sysApiService.removeByIds(CollectionUtil.stringToCollection(ids))); - } + /** + * API管理删除 + * + * @param ids id字符串,根据,号分隔 + * @return Result + */ + @PreAuth + @Log(value = "API删除", exception = "API删除请求异常") + @PostMapping("/del") + @ApiOperation(value = "API删除", notes = "API删除") + @ApiImplicitParams({ + @ApiImplicitParam(name = "ids", required = true, value = "多个用,号隔开", paramType = "form") + }) + public Result del(@RequestParam String ids) { + return Result.condition(sysApiService.removeByIds(CollectionUtil.stringToCollection(ids))); + } - /** - * API状态 - * - * @param ids 多个Id,用,号分隔 - * @param status 状态:启用、禁用 - * @return Result - */ - @PreAuth - @Log(value = "API状态", exception = "API状态请求异常") - @PostMapping("/set-status") - @ApiOperation(value = "API状态", notes = "状态包括:启用、禁用") - @ApiImplicitParams({ - @ApiImplicitParam(name = "ids", required = true, value = "多个id用,号隔开", paramType = "form"), - @ApiImplicitParam(name = "status", required = true, value = "状态", paramType = "form") - }) - public Result setStatus(@RequestParam String ids, @RequestParam String status) { - return Result.condition(sysApiService.status(ids, status)); - } + /** + * API状态 + * + * @param ids 多个Id,用,号分隔 + * @param status 状态:启用、禁用 + * @return Result + */ + @PreAuth + @Log(value = "API状态", exception = "API状态请求异常") + @PostMapping("/set-status") + @ApiOperation(value = "API状态", notes = "状态包括:启用、禁用") + @ApiImplicitParams({ + @ApiImplicitParam(name = "ids", required = true, value = "多个id用,号隔开", paramType = "form"), + @ApiImplicitParam(name = "status", required = true, value = "状态", paramType = "form") + }) + public Result setStatus(@RequestParam String ids, @RequestParam String status) { + return Result.condition(sysApiService.status(ids, status)); + } - /** - * 从redis同步api至数据库 - * - * @return Boolean - */ - @PreAuth - @PostMapping("/sync") - @ApiOperation(value = "API同步", notes = "API同步") - @Log(value = "API同步", exception = "API同步请求异常") - public Result sync() { - Set serviceIds = redisService.sGet(MateConstant.MATE_SERVICE_RESOURCE); - for (Object service : serviceIds) { - if (redisService.hHasKey(MateConstant.MATE_API_RESOURCE, service.toString())) { - Map apiMap = (Map) redisService.hget(MateConstant.MATE_API_RESOURCE, service.toString()); - List> list = (List>) apiMap.get("list"); - list.forEach(item -> { - SysApi sysApi = new SysApi(); - sysApi.setAuth(item.get("auth")); - sysApi.setClassName(item.get("className")); - sysApi.setCode(item.get("code")); - sysApi.setContentType(item.get("contentType")); - sysApi.setMethod(item.get("method")); - sysApi.setMethodName(item.get("methodName")); - sysApi.setName(item.get("name")); - sysApi.setNotes(item.get("notes")); - sysApi.setPath(item.get("path")); - sysApi.setServiceId(item.get("serviceId")); - SysApi exist = sysApiService.getByCode(sysApi.getCode()); - if (ObjectUtils.isEmpty(exist)) { - sysApiService.save(sysApi); - } else { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(SysApi::getCode, sysApi.getCode()); - sysApiService.update(sysApi, queryWrapper); - } - }); - } - redisService.hdel(MateConstant.MATE_API_RESOURCE, service.toString()); - } - redisService.del(MateConstant.MATE_SERVICE_RESOURCE); - return Result.condition(true); - } + /** + * 从redis同步api至数据库 + * + * @return Boolean + */ + @PreAuth + @PostMapping("/sync") + @ApiOperation(value = "API同步", notes = "API同步") + @Log(value = "API同步", exception = "API同步请求异常") + public Result sync() { + Set serviceIds = redisService.sGet(MateConstant.MATE_SERVICE_RESOURCE); + for (Object service : serviceIds) { + if (redisService.hHasKey(MateConstant.MATE_API_RESOURCE, service.toString())) { + Map apiMap = (Map) redisService.hget(MateConstant.MATE_API_RESOURCE, service.toString()); + List> list = (List>) apiMap.get("list"); + list.forEach(item -> { + SysApi sysApi = new SysApi(); + sysApi.setAuth(item.get("auth")); + sysApi.setClassName(item.get("className")); + sysApi.setCode(item.get("code")); + sysApi.setContentType(item.get("contentType")); + sysApi.setMethod(item.get("method")); + sysApi.setMethodName(item.get("methodName")); + sysApi.setName(item.get("name")); + sysApi.setNotes(item.get("notes")); + sysApi.setPath(item.get("path")); + sysApi.setServiceId(item.get("serviceId")); + SysApi exist = sysApiService.getByCode(sysApi.getCode()); + if (ObjectUtils.isEmpty(exist)) { + sysApiService.save(sysApi); + } else { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysApi::getCode, sysApi.getCode()); + sysApiService.update(sysApi, queryWrapper); + } + }); + } + redisService.hdel(MateConstant.MATE_API_RESOURCE, service.toString()); + } + redisService.del(MateConstant.MATE_SERVICE_RESOURCE); + return Result.condition(true); + } } diff --git a/mate-platform/mate-system/src/main/java/vip/mate/system/service/impl/SysApiServiceImpl.java b/mate-platform/mate-system/src/main/java/vip/mate/system/service/impl/SysApiServiceImpl.java index 4bc7256e..d8675df1 100644 --- a/mate-platform/mate-system/src/main/java/vip/mate/system/service/impl/SysApiServiceImpl.java +++ b/mate-platform/mate-system/src/main/java/vip/mate/system/service/impl/SysApiServiceImpl.java @@ -42,40 +42,40 @@ @Service public class SysApiServiceImpl extends ServiceImpl implements ISysApiService { - @Override - public IPage listPage(Page page, Search search, String serviceId) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - if (StrUtil.isNotBlank(search.getStartDate())) { - queryWrapper.between(SysApi::getCreateTime, search.getStartDate(), search.getEndDate()); - } - if (StrUtil.isNotBlank(search.getKeyword())) { - queryWrapper.and(i -> i - .or().like(SysApi::getCode, search.getKeyword()) - .or().like(SysApi::getPath, search.getKeyword())); - } - if (!serviceId.equals("-1")) { - queryWrapper.eq(SysApi::getServiceId, serviceId); - } - queryWrapper.orderByDesc(SysApi::getId); - return this.baseMapper.selectPage(page, queryWrapper); - } + @Override + public IPage listPage(Page page, Search search, String serviceId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (StrUtil.isNotBlank(search.getStartDate())) { + queryWrapper.between(SysApi::getCreateTime, search.getStartDate(), search.getEndDate()); + } + if (StrUtil.isNotBlank(search.getKeyword())) { + queryWrapper.and(i -> i + .or().like(SysApi::getCode, search.getKeyword()) + .or().like(SysApi::getPath, search.getKeyword())); + } + if (StrUtil.isNotBlank(serviceId)) { + queryWrapper.eq(SysApi::getServiceId, serviceId); + } + queryWrapper.orderByDesc(SysApi::getId); + return this.baseMapper.selectPage(page, queryWrapper); + } - @Override - public SysApi getByCode(String code) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(SysApi::getCode, code); - return this.baseMapper.selectOne(queryWrapper); - } + @Override + public SysApi getByCode(String code) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysApi::getCode, code); + return this.baseMapper.selectOne(queryWrapper); + } - @Override - public boolean status(String ids, String status) { - Collection collection = CollectionUtil.stringToCollection(ids); + @Override + public boolean status(String ids, String status) { + Collection collection = CollectionUtil.stringToCollection(ids); - for (Object id : collection) { - SysApi sysApi = this.baseMapper.selectById(CollectionUtil.objectToLong(id, 0L)); - sysApi.setStatus(status); - this.baseMapper.updateById(sysApi); - } - return true; - } + for (Object id : collection) { + SysApi sysApi = this.baseMapper.selectById(CollectionUtil.objectToLong(id, 0L)); + sysApi.setStatus(status); + this.baseMapper.updateById(sysApi); + } + return true; + } } From 0521ce618a914c85f9ea4f57c8538490970f33dc Mon Sep 17 00:00:00 2001 From: matevip <7333791@qq.com> Date: Thu, 2 Sep 2021 10:18:03 +0800 Subject: [PATCH 09/16] =?UTF-8?q?refactor:=20=E7=AE=80=E5=8C=96swagger?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=EF=BC=8C=E7=BB=9F=E4=B8=80=E9=A3=8E=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/SysApiController.java | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/mate-platform/mate-system/src/main/java/vip/mate/system/controller/SysApiController.java b/mate-platform/mate-system/src/main/java/vip/mate/system/controller/SysApiController.java index 97b55238..1b40c168 100644 --- a/mate-platform/mate-system/src/main/java/vip/mate/system/controller/SysApiController.java +++ b/mate-platform/mate-system/src/main/java/vip/mate/system/controller/SysApiController.java @@ -53,7 +53,7 @@ @RestController @AllArgsConstructor @RequestMapping("/api") -@Api(value = "API管理", tags = "API管理接口") +@Api(value = "API管理") public class SysApiController extends BaseController { private final ISysApiService sysApiService; @@ -68,9 +68,9 @@ public class SysApiController extends BaseController { * @return Result */ @PreAuth - @Log(value = "API列表", exception = "API列表请求异常") + @Log(value = "API分页") @GetMapping("/page") - @ApiOperation(value = "API列表", notes = "分页查询") + @ApiOperation(value = "API分页") @ApiImplicitParams({ @ApiImplicitParam(name = "current", required = true, value = "当前页", paramType = "form"), @ApiImplicitParam(name = "size", required = true, value = "每页显示数据", paramType = "form"), @@ -89,9 +89,9 @@ public Result page(Page page, Search search, @Nullable @RequestParam Strin * @return Result */ @PreAuth - @Log(value = "API信息", exception = "API信息请求异常") + @Log(value = "API信息") @GetMapping("/get") - @ApiOperation(value = "API信息", notes = "根据ID查询") + @ApiOperation(value = "API信息") @ApiImplicitParams({ @ApiImplicitParam(name = "id", required = true, value = "ID", paramType = "form"), }) @@ -106,9 +106,9 @@ public Result get(@RequestParam String id) { * @return Result */ @PreAuth - @Log(value = "API设置", exception = "API设置请求异常") + @Log(value = "API设置") @PostMapping("/set") - @ApiOperation(value = "API设置", notes = "API设置,支持新增或修改") + @ApiOperation(value = "API设置") public Result set(@Valid @RequestBody SysApi sysApi) { return Result.condition(sysApiService.saveOrUpdate(sysApi)); } @@ -120,9 +120,9 @@ public Result set(@Valid @RequestBody SysApi sysApi) { * @return Result */ @PreAuth - @Log(value = "API删除", exception = "API删除请求异常") + @Log(value = "API删除") @PostMapping("/del") - @ApiOperation(value = "API删除", notes = "API删除") + @ApiOperation(value = "API删除") @ApiImplicitParams({ @ApiImplicitParam(name = "ids", required = true, value = "多个用,号隔开", paramType = "form") }) @@ -138,9 +138,9 @@ public Result del(@RequestParam String ids) { * @return Result */ @PreAuth - @Log(value = "API状态", exception = "API状态请求异常") + @Log(value = "API状态") @PostMapping("/set-status") - @ApiOperation(value = "API状态", notes = "状态包括:启用、禁用") + @ApiOperation(value = "API状态") @ApiImplicitParams({ @ApiImplicitParam(name = "ids", required = true, value = "多个id用,号隔开", paramType = "form"), @ApiImplicitParam(name = "status", required = true, value = "状态", paramType = "form") @@ -156,8 +156,8 @@ public Result setStatus(@RequestParam String ids, @RequestParam String status */ @PreAuth @PostMapping("/sync") - @ApiOperation(value = "API同步", notes = "API同步") - @Log(value = "API同步", exception = "API同步请求异常") + @ApiOperation(value = "API同步") + @Log(value = "API同步") public Result sync() { Set serviceIds = redisService.sGet(MateConstant.MATE_SERVICE_RESOURCE); for (Object service : serviceIds) { From 68f8ea86f595a43efbdc6cc8b8b61a992ff7d077 Mon Sep 17 00:00:00 2001 From: matevip <7333791@qq.com> Date: Fri, 3 Sep 2021 07:07:49 +0800 Subject: [PATCH 10/16] =?UTF-8?q?refactor:=20=E5=A2=9E=E5=8A=A0=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mate-platform/mate-system/pom.xml | 4 +++ .../system/test/SysApiControllerTest.java | 26 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 mate-platform/mate-system/src/test/java/vip/mate/system/test/SysApiControllerTest.java diff --git a/mate-platform/mate-system/pom.xml b/mate-platform/mate-system/pom.xml index 8f5dfb61..3cb41d4e 100644 --- a/mate-platform/mate-system/pom.xml +++ b/mate-platform/mate-system/pom.xml @@ -49,6 +49,10 @@ vip.mate mate-starter-idempotent + + org.springframework.boot + spring-boot-starter-test + diff --git a/mate-platform/mate-system/src/test/java/vip/mate/system/test/SysApiControllerTest.java b/mate-platform/mate-system/src/test/java/vip/mate/system/test/SysApiControllerTest.java new file mode 100644 index 00000000..cd2b5ea8 --- /dev/null +++ b/mate-platform/mate-system/src/test/java/vip/mate/system/test/SysApiControllerTest.java @@ -0,0 +1,26 @@ +package vip.mate.system.test; + +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import vip.mate.system.service.ISysApiService; + +/** + * 业务单元测试示例 + * + * @author matevip + */ +@Slf4j +@SpringBootTest +public class SysApiControllerTest { + + @Autowired + private ISysApiService sysApiService; + + @Test + void sync() { + log.info("获取api列表:{}", JSON.toJSONString(sysApiService.list())); + } +} From 03ed14f20570e2dd7f3d6050023bf73b255607f0 Mon Sep 17 00:00:00 2001 From: matevip <7333791@qq.com> Date: Fri, 3 Sep 2021 09:28:17 +0800 Subject: [PATCH 11/16] =?UTF-8?q?docs:=20=E4=BF=AE=E6=94=B9=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E7=BE=A4=E4=B8=BA=E4=BC=81=E4=B8=9A=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E7=BE=A4=EF=BC=8C=E9=81=BF=E5=85=8D=E9=82=80=E8=AF=B7=E5=85=A5?= =?UTF-8?q?=E7=BE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- doc/images/qr_group.jpg | Bin 0 -> 88515 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 doc/images/qr_group.jpg diff --git a/README.md b/README.md index 87088ca6..537b5e98 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Sentinel | 1.8.1 | - +

    👉 QQ群:2003638 diff --git a/doc/images/qr_group.jpg b/doc/images/qr_group.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5613b8d1f467d8785190e40a57a88de77a3ed4a4 GIT binary patch literal 88515 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 z Date: Fri, 3 Sep 2021 10:20:25 +0800 Subject: [PATCH 12/16] =?UTF-8?q?docs:=20=E8=B0=83=E6=95=B4=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E6=9B=B4=E6=96=B0=E7=9A=84=E4=BD=8D=E7=BD=AE=E5=92=8C?= =?UTF-8?q?=E9=83=A8=E7=BD=B2=E7=BB=84=E4=BB=B6=E7=9A=84=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 537b5e98..2ff05c24 100644 --- a/README.md +++ b/README.md @@ -32,28 +32,14 @@ admin | matecloud123 | 不能执行增删改请求,如需全部权限加微信 Spring Boot | 2.3.*.RELEASE | SpringBoot Spring Cloud | Hoxton SR* | SpringCloud Spring Cloud Alibaba | 2.2.*.RELEASE | SpringCloudAlibaba -Nacos | 1.4.*及以下 | nacos -Sentinel | 1.8.1 | sentinel +Nacos | 1.4.*及以下 | nacos +Sentinel | 1.8.1 | sentinel ## 📖 官方文档 ### 👉 文档地址:[http://www.mate.vip/docs](http://www.mate.vip/docs) ### 👉 商业版文档:[http://doc.mate.vip](http://doc.mate.vip) ### 👉 快速安装:[http://www.mate.vip/archives/107](http://www.mate.vip/archives/107) -## 🔥 前端重大更新 -前端采用`Vue3.2.4`、`Vite 2.5.1`、 `Ant-Design-Vue 2.2.6`、`TypeScript` 的大型中后台解决方案。 -### 👉 技术栈 -- Vue 3.2.4 -- Pinia 2.0.0-rc.6 -- vue-i18n 9.1.7 -- typescript 4.29.1 -- ant-design-vue 2.2.6 -- axios 0.21.1 -- vue-router 4.0.11 -- vite 2.5.1 -### 👉 版本发布 -`4.0.8-M2`版本已经发布,完善了系统管理的基础功能,主要包括菜单管理、用户管理、角色管理、部门管理、日志管理、客户端管理等功能。后续功能正在加紧开发中,欢迎体验。 - ## 👷 技术交流

    @@ -176,6 +162,21 @@ matecloud -- 父项目,各模块分离,方便集成和微服务 ``` 然后在 dependencies 中添加自己所需使用的依赖即可使用。 +## 🔥 前端重大更新 +前端采用`Vue3.2.4`、`Vite 2.5.1`、 `Ant-Design-Vue 2.2.6`、`TypeScript` 的大型中后台解决方案。 +### 👉 技术栈 +- Vue 3.2.4 +- Pinia 2.0.0-rc.6 +- vue-i18n 9.1.7 +- typescript 4.29.1 +- ant-design-vue 2.2.6 +- axios 0.21.1 +- vue-router 4.0.11 +- vite 2.5.1 +### 👉 版本发布 +`4.0.8-M2`版本已经发布,完善了系统管理的基础功能,主要包括菜单管理、用户管理、角色管理、部门管理、日志管理、客户端管理等功能。后续功能正在加紧开发中,欢迎体验。 + + ## 🌭 项目源码 | 项目 | GITHUB | 码云 | |--- |--- | --- | From df88130bcd3dc7e779b0adb4cc03ffe24673e861 Mon Sep 17 00:00:00 2001 From: matevip <7333791@qq.com> Date: Mon, 6 Sep 2021 15:14:28 +0800 Subject: [PATCH 13/16] =?UTF-8?q?refactor:=20=E4=BF=AE=E6=94=B9=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=BA=90=E5=AF=B9=E8=B1=A1=E7=9A=84status=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E4=B8=BAString=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/vip/mate/code/entity/SysDataSource.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/mate-support/mate-code/src/main/java/vip/mate/code/entity/SysDataSource.java b/mate-support/mate-code/src/main/java/vip/mate/code/entity/SysDataSource.java index c7c4c157..175b8d06 100644 --- a/mate-support/mate-code/src/main/java/vip/mate/code/entity/SysDataSource.java +++ b/mate-support/mate-code/src/main/java/vip/mate/code/entity/SysDataSource.java @@ -1,16 +1,12 @@ package vip.mate.code.entity; import com.baomidou.mybatisplus.annotation.TableName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import vip.mate.core.database.entity.BaseEntity; -import java.time.LocalDateTime; - /** *

    * 数据源表 @@ -66,7 +62,7 @@ public class SysDataSource extends BaseEntity { * 状态 */ @ApiModelProperty(value = "状态") - private Boolean status; + private String status; } From 07082ee1422616ef21b4ecb7f33e05bc1058c8e0 Mon Sep 17 00:00:00 2001 From: matevip <7333791@qq.com> Date: Thu, 9 Sep 2021 06:14:51 +0800 Subject: [PATCH 14/16] =?UTF-8?q?perf:=20=E5=8D=87=E7=BA=A7=E8=87=B3Mybati?= =?UTF-8?q?s=20Plus=203.4.3.3=20=E5=8D=87=E7=BA=A7=E8=87=B3EasyPoi=204.4.0?= =?UTF-8?q?=20=E5=8D=87=E7=BA=A7=E8=87=B3Jasypt-spring-boot-starter=203.0.?= =?UTF-8?q?4=20=E5=8D=87=E7=BA=A7=E8=87=B3gson=202.8.8=20=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E8=87=B3aws-java-sdk-s3=201.12.63=20=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E8=87=B3hutool=205.7.11?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mate-core/mate-starter-dependencies/pom.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mate-core/mate-starter-dependencies/pom.xml b/mate-core/mate-starter-dependencies/pom.xml index b9bcbf72..daf06e1a 100644 --- a/mate-core/mate-starter-dependencies/pom.xml +++ b/mate-core/mate-starter-dependencies/pom.xml @@ -58,7 +58,7 @@ 12.2.0.1 42.2.6 1.2.6 - 3.4.3.2 + 3.4.3.3 3.4.1 3.3.2 1.7 @@ -78,7 +78,7 @@ 2.5.0 4.1.2 2.0.3 - 4.3.0 + 4.4.0 1.7.2 1.15.8 1.3.3 @@ -99,15 +99,15 @@ 1.4.2 1.6.2 - 3.0.3 + 3.0.4 2.2.3 2.8.2-release - 2.8.6 + 2.8.8 30.1.1-jre - 1.11.996 + 1.12.63 1.18.20 - 5.6.3 + 5.7.11 From 13e22cccb2c04249d925eb15ae7bed9687f63268 Mon Sep 17 00:00:00 2001 From: matevip <7333791@qq.com> Date: Thu, 9 Sep 2021 06:19:22 +0800 Subject: [PATCH 15/16] =?UTF-8?q?build:=20=E5=8F=91=E5=B8=834.0.10?= =?UTF-8?q?=E6=AD=A3=E5=BC=8F=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mate-core/mate-starter-auth/pom.xml | 2 +- mate-core/mate-starter-cloud/pom.xml | 2 +- mate-core/mate-starter-common/pom.xml | 2 +- .../main/java/vip/mate/core/common/constant/MateConstant.java | 2 +- mate-core/mate-starter-database/pom.xml | 2 +- mate-core/mate-starter-dependencies/pom.xml | 4 ++-- mate-core/mate-starter-dubbo/pom.xml | 2 +- mate-core/mate-starter-encrypt/pom.xml | 2 +- mate-core/mate-starter-feign/pom.xml | 2 +- mate-core/mate-starter-file/pom.xml | 2 +- mate-core/mate-starter-gray/pom.xml | 2 +- mate-core/mate-starter-idempotent/pom.xml | 2 +- mate-core/mate-starter-jetcache/pom.xml | 2 +- mate-core/mate-starter-job/pom.xml | 2 +- mate-core/mate-starter-kafka/pom.xml | 2 +- mate-core/mate-starter-lock/pom.xml | 2 +- mate-core/mate-starter-log/pom.xml | 2 +- mate-core/mate-starter-mail/pom.xml | 2 +- mate-core/mate-starter-mongodb/pom.xml | 2 +- mate-core/mate-starter-mybatis/pom.xml | 2 +- mate-core/mate-starter-oss/pom.xml | 2 +- mate-core/mate-starter-prometheus/pom.xml | 2 +- mate-core/mate-starter-rabbit/pom.xml | 2 +- mate-core/mate-starter-redis/pom.xml | 2 +- mate-core/mate-starter-rocketmq/pom.xml | 2 +- mate-core/mate-starter-rule/pom.xml | 2 +- mate-core/mate-starter-seata/pom.xml | 2 +- mate-core/mate-starter-security/pom.xml | 2 +- mate-core/mate-starter-sentinel/pom.xml | 2 +- mate-core/mate-starter-sms/pom.xml | 2 +- mate-core/mate-starter-strategy/pom.xml | 2 +- mate-core/mate-starter-validator/pom.xml | 2 +- mate-core/mate-starter-web/pom.xml | 2 +- mate-core/pom.xml | 4 ++-- mate-examples/pom.xml | 2 +- mate-examples/seata-example/pom.xml | 2 +- mate-examples/seata-example/seata-order-example/pom.xml | 2 +- mate-examples/seata-example/seata-point-example/pom.xml | 2 +- mate-examples/seata-example/seata-user-example/pom.xml | 2 +- mate-examples/sso-ui-example/pom.xml | 2 +- mate-gateway/pom.xml | 2 +- mate-mq/mate-log-producer/pom.xml | 2 +- mate-mq/mate-message-consumer/pom.xml | 2 +- mate-mq/mate-message-producer/pom.xml | 2 +- mate-mq/pom.xml | 2 +- mate-platform/mate-component-api/pom.xml | 2 +- mate-platform/mate-component/pom.xml | 2 +- mate-platform/mate-system-api/pom.xml | 2 +- mate-platform/mate-system/pom.xml | 2 +- mate-platform/pom.xml | 2 +- mate-support/mate-admin/pom.xml | 2 +- mate-support/mate-code/pom.xml | 2 +- mate-support/mate-job-admin/pom.xml | 2 +- mate-support/mate-job/pom.xml | 2 +- mate-support/pom.xml | 2 +- mate-uaa/pom.xml | 2 +- pom.xml | 4 ++-- 57 files changed, 60 insertions(+), 60 deletions(-) diff --git a/mate-core/mate-starter-auth/pom.xml b/mate-core/mate-starter-auth/pom.xml index d9a14e85..53aed093 100644 --- a/mate-core/mate-starter-auth/pom.xml +++ b/mate-core/mate-starter-auth/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-cloud/pom.xml b/mate-core/mate-starter-cloud/pom.xml index c30decd4..da6beb7f 100644 --- a/mate-core/mate-starter-cloud/pom.xml +++ b/mate-core/mate-starter-cloud/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-common/pom.xml b/mate-core/mate-starter-common/pom.xml index 05e86134..fb8dbaac 100644 --- a/mate-core/mate-starter-common/pom.xml +++ b/mate-core/mate-starter-common/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-common/src/main/java/vip/mate/core/common/constant/MateConstant.java b/mate-core/mate-starter-common/src/main/java/vip/mate/core/common/constant/MateConstant.java index d3388325..aa28cb67 100644 --- a/mate-core/mate-starter-common/src/main/java/vip/mate/core/common/constant/MateConstant.java +++ b/mate-core/mate-starter-common/src/main/java/vip/mate/core/common/constant/MateConstant.java @@ -13,7 +13,7 @@ public class MateConstant { /** * 应用版本号 */ - public static final String MATE_APP_VERSION = "4.0.10-SNAPSHOT"; + public static final String MATE_APP_VERSION = "4.0.10"; /** * Spring 应用名 prop key diff --git a/mate-core/mate-starter-database/pom.xml b/mate-core/mate-starter-database/pom.xml index 650a8578..81ab7ce0 100644 --- a/mate-core/mate-starter-database/pom.xml +++ b/mate-core/mate-starter-database/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-dependencies/pom.xml b/mate-core/mate-starter-dependencies/pom.xml index daf06e1a..ec438ee8 100644 --- a/mate-core/mate-starter-dependencies/pom.xml +++ b/mate-core/mate-starter-dependencies/pom.xml @@ -12,7 +12,7 @@ vip.mate mate-starter-dependencies - 4.0.10-SNAPSHOT + 4.0.10 pom mate-starter-dependencies based on Spring Cloud Alibaba dependencies @@ -39,7 +39,7 @@ - 4.0.10-SNAPSHOT + 4.0.10 UTF-8 2.5.4 diff --git a/mate-core/mate-starter-dubbo/pom.xml b/mate-core/mate-starter-dubbo/pom.xml index 12326f94..74629865 100644 --- a/mate-core/mate-starter-dubbo/pom.xml +++ b/mate-core/mate-starter-dubbo/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-encrypt/pom.xml b/mate-core/mate-starter-encrypt/pom.xml index 8b20f02b..52f764db 100644 --- a/mate-core/mate-starter-encrypt/pom.xml +++ b/mate-core/mate-starter-encrypt/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-feign/pom.xml b/mate-core/mate-starter-feign/pom.xml index 7f6d0371..87ea8b99 100644 --- a/mate-core/mate-starter-feign/pom.xml +++ b/mate-core/mate-starter-feign/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-file/pom.xml b/mate-core/mate-starter-file/pom.xml index 2f787fe7..1c3236d0 100644 --- a/mate-core/mate-starter-file/pom.xml +++ b/mate-core/mate-starter-file/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-gray/pom.xml b/mate-core/mate-starter-gray/pom.xml index 9bae041e..1eebb13c 100644 --- a/mate-core/mate-starter-gray/pom.xml +++ b/mate-core/mate-starter-gray/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-idempotent/pom.xml b/mate-core/mate-starter-idempotent/pom.xml index ed3370a7..ae16a528 100644 --- a/mate-core/mate-starter-idempotent/pom.xml +++ b/mate-core/mate-starter-idempotent/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-jetcache/pom.xml b/mate-core/mate-starter-jetcache/pom.xml index ebdff730..5bd2bfcb 100644 --- a/mate-core/mate-starter-jetcache/pom.xml +++ b/mate-core/mate-starter-jetcache/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-job/pom.xml b/mate-core/mate-starter-job/pom.xml index 907f67d5..f82e2d02 100644 --- a/mate-core/mate-starter-job/pom.xml +++ b/mate-core/mate-starter-job/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 jar diff --git a/mate-core/mate-starter-kafka/pom.xml b/mate-core/mate-starter-kafka/pom.xml index 529da20e..a9742a01 100644 --- a/mate-core/mate-starter-kafka/pom.xml +++ b/mate-core/mate-starter-kafka/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-lock/pom.xml b/mate-core/mate-starter-lock/pom.xml index f6db0c50..1d2eeffe 100644 --- a/mate-core/mate-starter-lock/pom.xml +++ b/mate-core/mate-starter-lock/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-log/pom.xml b/mate-core/mate-starter-log/pom.xml index 4208d412..0123712d 100644 --- a/mate-core/mate-starter-log/pom.xml +++ b/mate-core/mate-starter-log/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-mail/pom.xml b/mate-core/mate-starter-mail/pom.xml index a3f0150a..7bfb2362 100644 --- a/mate-core/mate-starter-mail/pom.xml +++ b/mate-core/mate-starter-mail/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-mongodb/pom.xml b/mate-core/mate-starter-mongodb/pom.xml index 0cece0ee..70ca0291 100644 --- a/mate-core/mate-starter-mongodb/pom.xml +++ b/mate-core/mate-starter-mongodb/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-mybatis/pom.xml b/mate-core/mate-starter-mybatis/pom.xml index 091208b8..ee04d0a0 100644 --- a/mate-core/mate-starter-mybatis/pom.xml +++ b/mate-core/mate-starter-mybatis/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-oss/pom.xml b/mate-core/mate-starter-oss/pom.xml index ed40df1d..a7399b3f 100644 --- a/mate-core/mate-starter-oss/pom.xml +++ b/mate-core/mate-starter-oss/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-prometheus/pom.xml b/mate-core/mate-starter-prometheus/pom.xml index fa062433..01aec61b 100644 --- a/mate-core/mate-starter-prometheus/pom.xml +++ b/mate-core/mate-starter-prometheus/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-rabbit/pom.xml b/mate-core/mate-starter-rabbit/pom.xml index 53ee411d..f156e8f6 100644 --- a/mate-core/mate-starter-rabbit/pom.xml +++ b/mate-core/mate-starter-rabbit/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-redis/pom.xml b/mate-core/mate-starter-redis/pom.xml index 759f3402..5d55f907 100644 --- a/mate-core/mate-starter-redis/pom.xml +++ b/mate-core/mate-starter-redis/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-rocketmq/pom.xml b/mate-core/mate-starter-rocketmq/pom.xml index 0f91b0d9..74a778ad 100644 --- a/mate-core/mate-starter-rocketmq/pom.xml +++ b/mate-core/mate-starter-rocketmq/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-rule/pom.xml b/mate-core/mate-starter-rule/pom.xml index 963addf8..c308db71 100644 --- a/mate-core/mate-starter-rule/pom.xml +++ b/mate-core/mate-starter-rule/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-seata/pom.xml b/mate-core/mate-starter-seata/pom.xml index 801ad433..99b6e389 100644 --- a/mate-core/mate-starter-seata/pom.xml +++ b/mate-core/mate-starter-seata/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-security/pom.xml b/mate-core/mate-starter-security/pom.xml index 1c61f17f..354987fe 100644 --- a/mate-core/mate-starter-security/pom.xml +++ b/mate-core/mate-starter-security/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-sentinel/pom.xml b/mate-core/mate-starter-sentinel/pom.xml index 7d32bcd7..986ef880 100644 --- a/mate-core/mate-starter-sentinel/pom.xml +++ b/mate-core/mate-starter-sentinel/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-sms/pom.xml b/mate-core/mate-starter-sms/pom.xml index 467a09bd..de4417f8 100644 --- a/mate-core/mate-starter-sms/pom.xml +++ b/mate-core/mate-starter-sms/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-strategy/pom.xml b/mate-core/mate-starter-strategy/pom.xml index ddb334bb..5780f175 100644 --- a/mate-core/mate-starter-strategy/pom.xml +++ b/mate-core/mate-starter-strategy/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-validator/pom.xml b/mate-core/mate-starter-validator/pom.xml index 2f686447..273d5a1f 100644 --- a/mate-core/mate-starter-validator/pom.xml +++ b/mate-core/mate-starter-validator/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/mate-starter-web/pom.xml b/mate-core/mate-starter-web/pom.xml index 98dfaf40..e7049425 100644 --- a/mate-core/mate-starter-web/pom.xml +++ b/mate-core/mate-starter-web/pom.xml @@ -5,7 +5,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-core/pom.xml b/mate-core/pom.xml index 4cebbbfc..24c2ccc6 100644 --- a/mate-core/pom.xml +++ b/mate-core/pom.xml @@ -6,7 +6,7 @@ mate-core vip.mate - 4.0.10-SNAPSHOT + 4.0.10 pom mate-core based on Spring Cloud Alibaba microservice components @@ -67,7 +67,7 @@ - 4.0.10-SNAPSHOT + 4.0.10 2.9.2 1.5.21 1.9.4 diff --git a/mate-examples/pom.xml b/mate-examples/pom.xml index a242349b..67472896 100644 --- a/mate-examples/pom.xml +++ b/mate-examples/pom.xml @@ -5,7 +5,7 @@ matecloud vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-examples/seata-example/pom.xml b/mate-examples/seata-example/pom.xml index 90cda28d..9a9c62c8 100644 --- a/mate-examples/seata-example/pom.xml +++ b/mate-examples/seata-example/pom.xml @@ -5,7 +5,7 @@ mate-examples vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-examples/seata-example/seata-order-example/pom.xml b/mate-examples/seata-example/seata-order-example/pom.xml index 480bcef5..5e333c48 100644 --- a/mate-examples/seata-example/seata-order-example/pom.xml +++ b/mate-examples/seata-example/seata-order-example/pom.xml @@ -5,7 +5,7 @@ seata-example vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-examples/seata-example/seata-point-example/pom.xml b/mate-examples/seata-example/seata-point-example/pom.xml index 345bb6a2..5ea4dbc8 100644 --- a/mate-examples/seata-example/seata-point-example/pom.xml +++ b/mate-examples/seata-example/seata-point-example/pom.xml @@ -5,7 +5,7 @@ seata-example vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-examples/seata-example/seata-user-example/pom.xml b/mate-examples/seata-example/seata-user-example/pom.xml index 520591ad..4a4ef37e 100644 --- a/mate-examples/seata-example/seata-user-example/pom.xml +++ b/mate-examples/seata-example/seata-user-example/pom.xml @@ -5,7 +5,7 @@ seata-example vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-examples/sso-ui-example/pom.xml b/mate-examples/sso-ui-example/pom.xml index 12d7101b..67a31b98 100644 --- a/mate-examples/sso-ui-example/pom.xml +++ b/mate-examples/sso-ui-example/pom.xml @@ -5,7 +5,7 @@ mate-examples vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-gateway/pom.xml b/mate-gateway/pom.xml index 5a66178b..9e4677eb 100644 --- a/mate-gateway/pom.xml +++ b/mate-gateway/pom.xml @@ -5,7 +5,7 @@ matecloud vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-mq/mate-log-producer/pom.xml b/mate-mq/mate-log-producer/pom.xml index e66e7a32..d6f83521 100644 --- a/mate-mq/mate-log-producer/pom.xml +++ b/mate-mq/mate-log-producer/pom.xml @@ -5,7 +5,7 @@ mate-mq vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-mq/mate-message-consumer/pom.xml b/mate-mq/mate-message-consumer/pom.xml index 0f87aa32..a86777bb 100644 --- a/mate-mq/mate-message-consumer/pom.xml +++ b/mate-mq/mate-message-consumer/pom.xml @@ -5,7 +5,7 @@ mate-mq vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-mq/mate-message-producer/pom.xml b/mate-mq/mate-message-producer/pom.xml index 5ef5e02d..b27fa1d8 100644 --- a/mate-mq/mate-message-producer/pom.xml +++ b/mate-mq/mate-message-producer/pom.xml @@ -5,7 +5,7 @@ mate-mq vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-mq/pom.xml b/mate-mq/pom.xml index db8e15c9..dff33ed9 100644 --- a/mate-mq/pom.xml +++ b/mate-mq/pom.xml @@ -5,7 +5,7 @@ matecloud vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-platform/mate-component-api/pom.xml b/mate-platform/mate-component-api/pom.xml index 20ec9f7c..01e015dd 100644 --- a/mate-platform/mate-component-api/pom.xml +++ b/mate-platform/mate-component-api/pom.xml @@ -5,7 +5,7 @@ mate-platform vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-platform/mate-component/pom.xml b/mate-platform/mate-component/pom.xml index 9e0d9c91..5fb09eca 100644 --- a/mate-platform/mate-component/pom.xml +++ b/mate-platform/mate-component/pom.xml @@ -5,7 +5,7 @@ mate-platform vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-platform/mate-system-api/pom.xml b/mate-platform/mate-system-api/pom.xml index 6902d305..a3df8d01 100644 --- a/mate-platform/mate-system-api/pom.xml +++ b/mate-platform/mate-system-api/pom.xml @@ -5,7 +5,7 @@ mate-platform vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-platform/mate-system/pom.xml b/mate-platform/mate-system/pom.xml index 3cb41d4e..5b468990 100644 --- a/mate-platform/mate-system/pom.xml +++ b/mate-platform/mate-system/pom.xml @@ -5,7 +5,7 @@ mate-platform vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-platform/pom.xml b/mate-platform/pom.xml index 863c4f38..aca01f7c 100644 --- a/mate-platform/pom.xml +++ b/mate-platform/pom.xml @@ -5,7 +5,7 @@ matecloud vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-support/mate-admin/pom.xml b/mate-support/mate-admin/pom.xml index 8a8a38aa..1857fff1 100644 --- a/mate-support/mate-admin/pom.xml +++ b/mate-support/mate-admin/pom.xml @@ -5,7 +5,7 @@ mate-support vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-support/mate-code/pom.xml b/mate-support/mate-code/pom.xml index 74ae99a8..cad056ef 100644 --- a/mate-support/mate-code/pom.xml +++ b/mate-support/mate-code/pom.xml @@ -5,7 +5,7 @@ mate-support vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-support/mate-job-admin/pom.xml b/mate-support/mate-job-admin/pom.xml index 0036f088..2f3d3049 100644 --- a/mate-support/mate-job-admin/pom.xml +++ b/mate-support/mate-job-admin/pom.xml @@ -5,7 +5,7 @@ mate-support vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-support/mate-job/pom.xml b/mate-support/mate-job/pom.xml index a4ac8b3e..2a30c3bb 100644 --- a/mate-support/mate-job/pom.xml +++ b/mate-support/mate-job/pom.xml @@ -5,7 +5,7 @@ mate-support vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-support/pom.xml b/mate-support/pom.xml index 299a82fc..d657129a 100644 --- a/mate-support/pom.xml +++ b/mate-support/pom.xml @@ -5,7 +5,7 @@ matecloud vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/mate-uaa/pom.xml b/mate-uaa/pom.xml index 6fc72b0f..3aca7116 100644 --- a/mate-uaa/pom.xml +++ b/mate-uaa/pom.xml @@ -5,7 +5,7 @@ matecloud vip.mate - 4.0.10-SNAPSHOT + 4.0.10 4.0.0 diff --git a/pom.xml b/pom.xml index b816f8a7..680ceb08 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ vip.mate matecloud pom - 4.0.10-SNAPSHOT + 4.0.10 matecloud MateCloud - 基于Spring Cloud Alibaba实现的微服务架构 @@ -24,7 +24,7 @@ - 4.0.10-SNAPSHOT + 4.0.10 1.8 3.8.1 UTF-8 From f834cf71ed72e8fab181331679de0d2b67bfe729 Mon Sep 17 00:00:00 2001 From: matevip <7333791@qq.com> Date: Thu, 9 Sep 2021 06:22:39 +0800 Subject: [PATCH 16/16] =?UTF-8?q?perf:=20=E5=8D=87=E7=BA=A7Dubbo=E8=87=B3[?= =?UTF-8?q?2.7.13,)=EF=BC=8C=E8=A7=A3=E5=86=B3CVE-2021-36162=E5=AE=89?= =?UTF-8?q?=E5=85=A8=E6=BC=8F=E6=B4=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mate-core/mate-starter-dependencies/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mate-core/mate-starter-dependencies/pom.xml b/mate-core/mate-starter-dependencies/pom.xml index ec438ee8..d01508ed 100644 --- a/mate-core/mate-starter-dependencies/pom.xml +++ b/mate-core/mate-starter-dependencies/pom.xml @@ -72,7 +72,7 @@ 2.6.0 - 2.7.12 + [2.7.13,) 1.2.78 2.5.0