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
👉 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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