From d6d6dcda181a8d458ccca20370d1e31e9c12da8e Mon Sep 17 00:00:00 2001 From: taojinlong Date: Sat, 29 May 2021 12:36:20 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=E9=99=90=E5=88=B6=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=9B=86=E5=8F=AA=E6=9C=89=E4=B8=80=E4=B8=AA=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/dataease/service/dataset/ExtractDataService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java index 1ec769d7eb..82df240feb 100644 --- a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java +++ b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java @@ -188,6 +188,7 @@ public class ExtractDataService { datasetTableMapper.selectByExample(example); example.clear(); example.createCriteria().andIdEqualTo(datasetTable.getId()).andSyncStatusNotEqualTo(JobStatus.Underway.name()); + example.or(example.createCriteria().andIdEqualTo(datasetTable.getId()).andSyncStatusIsNull()); return datasetTableMapper.updateByExampleSelective(datasetTable, example) == 0; } From ae733b077620175c9fec118f3b64d89dbb7bdb2a Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Sun, 30 May 2021 20:24:54 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20=E5=88=A0=E9=99=A4=E5=8E=9F=E6=9C=89?= =?UTF-8?q?=E8=8F=9C=E5=8D=95'=E7=B3=BB=E7=BB=9F=E5=8F=82=E6=95=B0'?= =?UTF-8?q?=E3=80=81'=E8=A7=92=E8=89=B2=E7=AE=A1=E7=90=86'=EF=BC=8C?= =?UTF-8?q?=E5=88=9D=E6=AD=A5=E6=95=B4=E5=90=88xpack=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/pom.xml | 7 ++ .../dataease/auth/api/dto/DynamicMenuDto.java | 2 + .../io/dataease/auth/server/AuthServer.java | 15 ++-- .../service/impl/AuthUserServiceImpl.java | 13 ++++ .../service/impl/DynamicMenuServiceImpl.java | 28 +++++++ .../auth/service/impl/ShiroServiceImpl.java | 2 +- .../io/dataease/base/domain/MyPlugin.java | 2 + .../dataease/base/domain/MyPluginExample.java | 60 +++++++++++++++ .../dataease/base/mapper/MyPluginMapper.xml | 31 ++++++-- .../dataease/base/mapper/ext/AuthMapper.java | 2 + .../dataease/base/mapper/ext/AuthMapper.xml | 7 ++ .../dataease/commons/utils/DeFileUtils.java | 11 +++ .../io/dataease/config/MybatisConfig.java | 2 +- .../controller/sys/SysPluginController.java | 14 ++++ .../controller/sys/request/PluginStatus.java | 12 +++ .../dataease/plugins/config/LoadjarUtil.java | 33 ++++---- .../dataease/plugins/config/PluginRunner.java | 53 +++++++++++++ .../plugins/loader/ModuleClassLoader.java | 23 ++++-- .../io/dataease/plugins/loader/MyScanner.java | 39 ++++++++++ .../plugins/loader/MybatisLoader.java | 22 ++++++ .../plugins/server/DisplayServer.java | 32 ++++++++ .../plugins/server/PluginCommonServer.java | 65 ++++++++++++++++ .../dataease/plugins/server/RoleServer.java | 54 +++++++++++++ .../io/dataease/plugins/util/PluginUtils.java | 22 ++++++ .../java/io/dataease/service/FileService.java | 4 +- .../dataease/service/sys/PluginService.java | 76 ++++++++++++++++--- .../db/migration/V2__dataease_ddl.sql | 31 ++++---- .../resources/db/migration/V3__init_data.sql | 7 +- frontend/src/api/system/plugin.js | 11 ++- .../src/components/AsyncComponent/index.vue | 10 ++- frontend/src/store/modules/permission.js | 9 +++ frontend/src/views/system/plugin/index.vue | 8 +- 32 files changed, 635 insertions(+), 72 deletions(-) create mode 100644 backend/src/main/java/io/dataease/controller/sys/request/PluginStatus.java create mode 100644 backend/src/main/java/io/dataease/plugins/config/PluginRunner.java create mode 100644 backend/src/main/java/io/dataease/plugins/loader/MyScanner.java create mode 100644 backend/src/main/java/io/dataease/plugins/loader/MybatisLoader.java create mode 100644 backend/src/main/java/io/dataease/plugins/server/DisplayServer.java create mode 100644 backend/src/main/java/io/dataease/plugins/server/PluginCommonServer.java create mode 100644 backend/src/main/java/io/dataease/plugins/server/RoleServer.java create mode 100644 backend/src/main/java/io/dataease/plugins/util/PluginUtils.java diff --git a/backend/pom.xml b/backend/pom.xml index b2216cd9b2..3e84f3d27a 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -351,6 +351,13 @@ c3p0 0.9.1.2 + + + io.dataease + dataease-plugin-xpack + 1.0 + diff --git a/backend/src/main/java/io/dataease/auth/api/dto/DynamicMenuDto.java b/backend/src/main/java/io/dataease/auth/api/dto/DynamicMenuDto.java index 5b68491943..e83e0f1ced 100644 --- a/backend/src/main/java/io/dataease/auth/api/dto/DynamicMenuDto.java +++ b/backend/src/main/java/io/dataease/auth/api/dto/DynamicMenuDto.java @@ -29,6 +29,8 @@ public class DynamicMenuDto implements Serializable { private Integer type; + private Boolean isPlugin; + private List children; } diff --git a/backend/src/main/java/io/dataease/auth/server/AuthServer.java b/backend/src/main/java/io/dataease/auth/server/AuthServer.java index ce306b470b..51621b4df7 100644 --- a/backend/src/main/java/io/dataease/auth/server/AuthServer.java +++ b/backend/src/main/java/io/dataease/auth/server/AuthServer.java @@ -13,9 +13,11 @@ import io.dataease.auth.util.RsaUtil; import io.dataease.commons.utils.BeanUtils; import io.dataease.commons.utils.CodingUtil; import io.dataease.commons.utils.ServletUtils; -/*import io.dataease.plugins.config.SpringContextUtil; -import io.dataease.plugins.xpack.dto.response.SysSettingDto; -import io.dataease.plugins.xpack.service.DePluginXpackService;*/ + +import io.dataease.plugins.config.SpringContextUtil; + +import io.dataease.plugins.xpack.display.dto.response.SysSettingDto; +import io.dataease.plugins.xpack.display.service.DisPlayXpackService; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; @@ -108,14 +110,15 @@ public class AuthServer implements AuthApi { SysUserEntity userById = authUserService.getUserById(4L); String nickName = userById.getNickName(); // System.out.println(nickName); - /* Map beansOfType = SpringContextUtil.getApplicationContext().getBeansOfType(DePluginXpackService.class); + Map beansOfType = SpringContextUtil.getApplicationContext().getBeansOfType(DisPlayXpackService.class); for (Map.Entry entry : beansOfType.entrySet()) { Object key = entry.getKey(); - DePluginXpackService value = (DePluginXpackService)entry.getValue(); + DisPlayXpackService value = (DisPlayXpackService)entry.getValue(); List sysSettingDtos = value.systemSettings(); + String name = entry.getValue().getClass().getName(); System.out.println("key: "+ key + ", value: "+ name); - }*/ + } return "apple"; } } diff --git a/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java b/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java index 7254206150..c234f58b2e 100644 --- a/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java +++ b/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java @@ -5,6 +5,11 @@ import io.dataease.auth.entity.SysUserEntity; import io.dataease.base.mapper.ext.AuthMapper; import io.dataease.auth.service.AuthUserService; import io.dataease.commons.constants.AuthConstants; +import io.dataease.plugins.common.dto.PluginSysMenu; +import io.dataease.plugins.common.service.PluginMenuService; +import io.dataease.plugins.config.SpringContextUtil; +import io.dataease.plugins.util.PluginUtils; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -53,6 +58,14 @@ public class AuthUserServiceImpl implements AuthUserService { @Override public List permissions(Long userId){ List permissions = authMapper.permissions(userId); + List pluginSysMenus = PluginUtils.pluginMenus(); + if (CollectionUtils.isNotEmpty(pluginSysMenus)) { + List menuIds = authMapper.userMenuIds(userId); + List pluginPermissions = pluginSysMenus.stream(). + filter(sysMenu -> menuIds.contains(sysMenu.getMenuId())) + .map(menu -> menu.getPermission()).collect(Collectors.toList()); + permissions.addAll(pluginPermissions); + } return permissions.stream().filter(StringUtils::isNotEmpty).collect(Collectors.toList()); } diff --git a/backend/src/main/java/io/dataease/auth/service/impl/DynamicMenuServiceImpl.java b/backend/src/main/java/io/dataease/auth/service/impl/DynamicMenuServiceImpl.java index fd2318c068..60f5e4114a 100644 --- a/backend/src/main/java/io/dataease/auth/service/impl/DynamicMenuServiceImpl.java +++ b/backend/src/main/java/io/dataease/auth/service/impl/DynamicMenuServiceImpl.java @@ -6,6 +6,9 @@ import io.dataease.auth.service.DynamicMenuService; import io.dataease.base.domain.SysMenu; import io.dataease.base.domain.SysMenuExample; import io.dataease.base.mapper.SysMenuMapper; +import io.dataease.plugins.common.dto.PluginSysMenu; +import io.dataease.plugins.util.PluginUtils; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -25,6 +28,12 @@ public class DynamicMenuServiceImpl implements DynamicMenuService { sysMenuExample.setOrderByClause(" menu_sort "); List sysMenus = sysMenuMapper.selectByExample(sysMenuExample); List dynamicMenuDtos = sysMenus.stream().map(this::convert).collect(Collectors.toList()); + //增加插件中的菜单 + List pluginSysMenus = PluginUtils.pluginMenus(); + if (CollectionUtils.isNotEmpty(pluginSysMenus) ) { + List pluginDtos = pluginSysMenus.stream().map(this::convert).collect(Collectors.toList()); + dynamicMenuDtos.addAll(pluginDtos); + } List result = buildTree(dynamicMenuDtos); return result; } @@ -44,6 +53,25 @@ public class DynamicMenuServiceImpl implements DynamicMenuService { dynamicMenuDto.setMeta(menuMeta); dynamicMenuDto.setPermission(sysMenu.getPermission()); dynamicMenuDto.setHidden(sysMenu.getHidden()); + dynamicMenuDto.setIsPlugin(false); + return dynamicMenuDto; + } + private DynamicMenuDto convert(PluginSysMenu sysMenu){ + DynamicMenuDto dynamicMenuDto = new DynamicMenuDto(); + dynamicMenuDto.setId(sysMenu.getMenuId()); + dynamicMenuDto.setPid(sysMenu.getPid()); + dynamicMenuDto.setName(sysMenu.getName()); + dynamicMenuDto.setPath(sysMenu.getPath()); + dynamicMenuDto.setRedirect(null); + dynamicMenuDto.setType(sysMenu.getType()); + dynamicMenuDto.setComponent(sysMenu.getComponent()); + MenuMeta menuMeta = new MenuMeta(); + menuMeta.setTitle(sysMenu.getTitle()); + menuMeta.setIcon(sysMenu.getIcon()); + dynamicMenuDto.setMeta(menuMeta); + dynamicMenuDto.setPermission(sysMenu.getPermission()); + dynamicMenuDto.setHidden(sysMenu.getHidden()); + dynamicMenuDto.setIsPlugin(true); return dynamicMenuDto; } diff --git a/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java b/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java index 97df62a17d..8e345c500e 100644 --- a/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java +++ b/backend/src/main/java/io/dataease/auth/service/impl/ShiroServiceImpl.java @@ -47,7 +47,7 @@ public class ShiroServiceImpl implements ShiroService { filterChainDefinitionMap.put("/system/ui/**", ANON); - filterChainDefinitionMap.put("/PluginDemo.js", ANON); + filterChainDefinitionMap.put("/SystemParam.js", ANON); filterChainDefinitionMap.put("/DeXPack.js", ANON); filterChainDefinitionMap.put("/api/auth/test", ANON); diff --git a/backend/src/main/java/io/dataease/base/domain/MyPlugin.java b/backend/src/main/java/io/dataease/base/domain/MyPlugin.java index 2dd3204176..ec73b4cc75 100644 --- a/backend/src/main/java/io/dataease/base/domain/MyPlugin.java +++ b/backend/src/main/java/io/dataease/base/domain/MyPlugin.java @@ -21,6 +21,8 @@ public class MyPlugin implements Serializable { private String creator; + private Boolean loadMybatis; + private Long releaseTime; private Long installTime; diff --git a/backend/src/main/java/io/dataease/base/domain/MyPluginExample.java b/backend/src/main/java/io/dataease/base/domain/MyPluginExample.java index c723bbeee0..b7dc903668 100644 --- a/backend/src/main/java/io/dataease/base/domain/MyPluginExample.java +++ b/backend/src/main/java/io/dataease/base/domain/MyPluginExample.java @@ -624,6 +624,66 @@ public class MyPluginExample { return (Criteria) this; } + public Criteria andLoadMybatisIsNull() { + addCriterion("load_mybatis is null"); + return (Criteria) this; + } + + public Criteria andLoadMybatisIsNotNull() { + addCriterion("load_mybatis is not null"); + return (Criteria) this; + } + + public Criteria andLoadMybatisEqualTo(Boolean value) { + addCriterion("load_mybatis =", value, "loadMybatis"); + return (Criteria) this; + } + + public Criteria andLoadMybatisNotEqualTo(Boolean value) { + addCriterion("load_mybatis <>", value, "loadMybatis"); + return (Criteria) this; + } + + public Criteria andLoadMybatisGreaterThan(Boolean value) { + addCriterion("load_mybatis >", value, "loadMybatis"); + return (Criteria) this; + } + + public Criteria andLoadMybatisGreaterThanOrEqualTo(Boolean value) { + addCriterion("load_mybatis >=", value, "loadMybatis"); + return (Criteria) this; + } + + public Criteria andLoadMybatisLessThan(Boolean value) { + addCriterion("load_mybatis <", value, "loadMybatis"); + return (Criteria) this; + } + + public Criteria andLoadMybatisLessThanOrEqualTo(Boolean value) { + addCriterion("load_mybatis <=", value, "loadMybatis"); + return (Criteria) this; + } + + public Criteria andLoadMybatisIn(List values) { + addCriterion("load_mybatis in", values, "loadMybatis"); + return (Criteria) this; + } + + public Criteria andLoadMybatisNotIn(List values) { + addCriterion("load_mybatis not in", values, "loadMybatis"); + return (Criteria) this; + } + + public Criteria andLoadMybatisBetween(Boolean value1, Boolean value2) { + addCriterion("load_mybatis between", value1, value2, "loadMybatis"); + return (Criteria) this; + } + + public Criteria andLoadMybatisNotBetween(Boolean value1, Boolean value2) { + addCriterion("load_mybatis not between", value1, value2, "loadMybatis"); + return (Criteria) this; + } + public Criteria andReleaseTimeIsNull() { addCriterion("release_time is null"); return (Criteria) this; diff --git a/backend/src/main/java/io/dataease/base/mapper/MyPluginMapper.xml b/backend/src/main/java/io/dataease/base/mapper/MyPluginMapper.xml index 7381c8fb44..d5cfca94b2 100644 --- a/backend/src/main/java/io/dataease/base/mapper/MyPluginMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/MyPluginMapper.xml @@ -10,6 +10,7 @@ + @@ -75,8 +76,8 @@ - plugin_id, `name`, `free`, cost, descript, version, install_type, creator, release_time, - install_time, module_name, bean_name, icon + plugin_id, `name`, `free`, cost, descript, version, install_type, creator, load_mybatis, + release_time, install_time, module_name, bean_name, icon + +