From 0170b22f98154c32345e8c08a5af9a3cfddb8528 Mon Sep 17 00:00:00 2001 From: byteblogs168 <598092184@qq.com> Date: Wed, 22 Nov 2023 18:43:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=202.5.0=201.=20namespace=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E7=94=A8=E6=88=B7=E9=A1=B5=E9=9D=A2=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 +- doc/sql/easy_retry_mysql.sql | 39 +++--- .../persistence/po/GroupConfig.java | 2 +- .../persistence/po/SystemUserPermission.java | 2 + .../web/controller/GroupConfigController.java | 6 +- .../web/controller/NamespaceController.java | 6 +- .../web/model/request/NamespaceRequestVO.java | 5 + .../model/request/SystemUserRequestVO.java | 2 +- .../request/UserPermissionRequestVO.java | 15 +++ .../model/response/SystemUserResponseVO.java | 3 + .../web/service/GroupConfigService.java | 2 +- .../server/web/service/NamespaceService.java | 5 +- .../service/impl/GroupConfigServiceImpl.java | 12 +- .../service/impl/NamespaceServiceImpl.java | 23 ++-- .../service/impl/SystemUserServiceImpl.java | 115 +++++++++++------- frontend/src/api/manage.js | 16 ++- frontend/src/store/modules/app.js | 17 ++- frontend/src/store/mutation-types.js | 1 + frontend/src/views/user/UserForm.vue | 42 +++++-- 19 files changed, 215 insertions(+), 107 deletions(-) create mode 100644 easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/UserPermissionRequestVO.java diff --git a/README.md b/README.md index 53e19bbf2..23aad7779 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,14 @@

- 🔥🔥🔥 致力提高分布式业务系统一致性的分布式重试平台 + 🔥🔥🔥 灵活,可靠和快速的分布式任务重试和分布式任务调度平台

+

+ +

+ +> ✅️ 可重放,可管控、为提高分布式业务系统一致性的分布式任务重试平台
+> ✅️ 支持秒级、可中断、可编排的高性能分布式任务调度平台 +

# 🌸 简介 diff --git a/doc/sql/easy_retry_mysql.sql b/doc/sql/easy_retry_mysql.sql index 8f20440bc..1a3c5ed5b 100644 --- a/doc/sql/easy_retry_mysql.sql +++ b/doc/sql/easy_retry_mysql.sql @@ -7,26 +7,27 @@ USE CREATE TABLE `namespace` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `name` varchar(64) NOT NULL COMMENT '名称', - `unique_id` varchar(64) NOT NULL COMMENT '唯一id', - `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', - `deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '逻辑删除 1、删除', + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(64) NOT NULL COMMENT '名称', + `unique_id` varchar(64) NOT NULL COMMENT '唯一id', + `description` varchar(256) NOT NULL DEFAULT '' COMMENT '描述', + `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', + `deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '逻辑删除 1、删除', PRIMARY KEY (`id`), - KEY `idx_name` (`name`), + KEY `idx_name` (`name`), UNIQUE KEY `uk_unique_id` (`unique_id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='命名空间'; INSERT INTO `namespace` (`id`, `name`, `unique_id`, `create_dt`, `update_dt`, `deleted`) -VALUES (1, 'default', '764d604ec6fc45f68cd92514c40e9e1a', now(), now(), 0); +VALUES (1, 'Default', '764d604ec6fc45f68cd92514c40e9e1a', now(), now(), 0); CREATE TABLE `group_config` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `namespace_id` bigint(20) unsigned NOT NULL DEFAULT 1 COMMENT '命名空间id', + `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id', `group_name` varchar(64) NOT NULL DEFAULT '' COMMENT '组名称', `description` varchar(256) NOT NULL DEFAULT '' COMMENT '组描述', `group_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '组状态 0、未启用 1、启用', @@ -46,8 +47,8 @@ CREATE TABLE `group_config` CREATE TABLE `notify_config` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `namespace_id` bigint(20) unsigned NOT NULL DEFAULT 1 COMMENT '命名空间id', + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', + `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id', `group_name` varchar(64) NOT NULL COMMENT '组名称', `scene_name` varchar(64) NOT NULL COMMENT '场景名称', `notify_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '通知状态 0、未启用 1、启用', @@ -70,7 +71,7 @@ CREATE TABLE `notify_config` CREATE TABLE `retry_dead_letter_0` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `namespace_id` bigint(20) unsigned NOT NULL DEFAULT 1 COMMENT '命名空间id', + `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id', `unique_id` varchar(64) NOT NULL COMMENT '同组下id唯一', `group_name` varchar(64) NOT NULL COMMENT '组名称', `scene_name` varchar(64) NOT NULL COMMENT '场景名称', @@ -95,7 +96,7 @@ CREATE TABLE `retry_dead_letter_0` CREATE TABLE `retry_task_0` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `namespace_id` bigint(20) unsigned NOT NULL DEFAULT 1 COMMENT '命名空间id', + `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id', `unique_id` varchar(64) NOT NULL COMMENT '同组下id唯一', `group_name` varchar(64) NOT NULL COMMENT '组名称', `scene_name` varchar(64) NOT NULL COMMENT '场景名称', @@ -125,7 +126,7 @@ CREATE TABLE `retry_task_0` CREATE TABLE `retry_task_log` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `namespace_id` bigint(20) unsigned NOT NULL DEFAULT 1 COMMENT '命名空间id', + `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id', `unique_id` varchar(64) NOT NULL COMMENT '同组下id唯一', `group_name` varchar(64) NOT NULL COMMENT '组名称', `scene_name` varchar(64) NOT NULL COMMENT '场景名称', @@ -168,7 +169,7 @@ CREATE TABLE `retry_task_log_message` CREATE TABLE `scene_config` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `namespace_id` bigint(20) unsigned NOT NULL DEFAULT 1 COMMENT '命名空间id', + `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id', `scene_name` varchar(64) NOT NULL COMMENT '场景名称', `group_name` varchar(64) NOT NULL COMMENT '组名称', `scene_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '组状态 0、未启用 1、启用', @@ -246,7 +247,7 @@ CREATE TABLE `system_user_permission` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `group_name` varchar(64) NOT NULL COMMENT '组名称', - `namespace_id` bigint(20) unsigned NOT NULL DEFAULT 1 COMMENT '命名空间id', + `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id', `system_user_id` bigint(20) NOT NULL COMMENT '系统用户id', `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', @@ -271,7 +272,7 @@ CREATE TABLE `sequence_alloc` CREATE TABLE `job` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `namespace_id` bigint(20) unsigned NOT NULL DEFAULT 1 COMMENT '命名空间id', + `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id', `group_name` varchar(64) NOT NULL COMMENT '组名称', `job_name` varchar(64) NOT NULL COMMENT '名称', `args_str` text DEFAULT NULL COMMENT '执行方法参数', @@ -307,7 +308,7 @@ CREATE TABLE `job` CREATE TABLE `job_log_message` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `namespace_id` bigint(20) unsigned NOT NULL DEFAULT 1 COMMENT '命名空间id', + `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id', `group_name` varchar(64) NOT NULL COMMENT '组名称', `job_id` bigint(20) NOT NULL COMMENT '任务信息id', `task_batch_id` bigint(20) NOT NULL COMMENT '任务批次id', @@ -350,7 +351,7 @@ CREATE TABLE `job_task` CREATE TABLE `job_task_batch` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', - `namespace_id` bigint(20) unsigned NOT NULL DEFAULT 1 COMMENT '命名空间id', + `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id', `group_name` varchar(64) NOT NULL COMMENT '组名称', `job_id` bigint(20) NOT NULL COMMENT '任务id', `task_batch_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '任务批次状态 0、失败 1、成功', diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/GroupConfig.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/GroupConfig.java index 53f6901ce..5b37bc815 100644 --- a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/GroupConfig.java +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/GroupConfig.java @@ -14,7 +14,7 @@ public class GroupConfig implements Serializable { @TableId(value = "id", type = IdType.AUTO) private Long id; - private Long namespaceId; + private String namespaceId; private String groupName; diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/SystemUserPermission.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/SystemUserPermission.java index 2b07343f0..20ce64104 100644 --- a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/SystemUserPermission.java +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/po/SystemUserPermission.java @@ -25,6 +25,8 @@ public class SystemUserPermission implements Serializable { private String groupName; + private String namespaceId; + private Long systemUserId; private LocalDateTime createDt; diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/GroupConfigController.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/GroupConfigController.java index 6f5604f7f..d8d850b6a 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/GroupConfigController.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/GroupConfigController.java @@ -68,9 +68,9 @@ public class GroupConfigController { } @LoginRequired - @GetMapping("/all/group-name/list") - public List getAllGroupNameList(@RequestParam("namespaceId") Long namespaceId) { - return groupConfigService.getAllGroupNameList(namespaceId); + @PostMapping("/all/group-name/list") + public List getAllGroupNameList(@RequestBody List namespaceIds) { + return groupConfigService.getAllGroupNameList(namespaceIds); } @Deprecated diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/NamespaceController.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/NamespaceController.java index 5d550a45c..2dc0e648d 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/NamespaceController.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/NamespaceController.java @@ -45,8 +45,8 @@ public class NamespaceController { return namespaceService.deleteNamespace(id); } -// @PutMapping - public List getNamespaceByUserId(@LoginUser SystemUser systemUser) { - return namespaceService.getNamespaceByUserId(systemUser); + @GetMapping("/all") + public List getAllNamespace() { + return namespaceService.getAllNamespace(); } } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/NamespaceRequestVO.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/NamespaceRequestVO.java index c7162527f..19db29b2f 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/NamespaceRequestVO.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/NamespaceRequestVO.java @@ -14,6 +14,11 @@ public class NamespaceRequestVO { private Long id; + /** + * 命名空间唯一标识 + */ + String uniqueId; + /** * 名称 */ diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/SystemUserRequestVO.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/SystemUserRequestVO.java index 71d9f78a5..1d681d7c3 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/SystemUserRequestVO.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/SystemUserRequestVO.java @@ -29,5 +29,5 @@ public class SystemUserRequestVO { @NotNull(groups = {PutMapping.class, PostMapping.class}) private Integer role; - private List groupNameList; + private List permissions; } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/UserPermissionRequestVO.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/UserPermissionRequestVO.java new file mode 100644 index 000000000..63ca22644 --- /dev/null +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/UserPermissionRequestVO.java @@ -0,0 +1,15 @@ +package com.aizuda.easy.retry.server.web.model.request; + +import lombok.Data; + +/** + * @author: xiaowoniu + * @date : 2023-11-22 09:15 + * @since : 2.5.0 + */ +@Data +public class UserPermissionRequestVO { + + private String groupName; + private String namespaceId; +} diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/response/SystemUserResponseVO.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/response/SystemUserResponseVO.java index 9012d2873..b032f5007 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/response/SystemUserResponseVO.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/response/SystemUserResponseVO.java @@ -19,8 +19,11 @@ public class SystemUserResponseVO { private Integer role; + @Deprecated private List groupNameList; + private List namespaceIdList; + private String token; private LocalDateTime createDt; diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/GroupConfigService.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/GroupConfigService.java index fc3952df8..b7e42c9c2 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/GroupConfigService.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/GroupConfigService.java @@ -23,5 +23,5 @@ public interface GroupConfigService { GroupConfigResponseVO getGroupConfigByGroupName(String groupName); - List getAllGroupNameList(final Long namespaceId); + List getAllGroupNameList(final List namespaceId); } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/NamespaceService.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/NamespaceService.java index e817c3aac..7acbc1d60 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/NamespaceService.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/NamespaceService.java @@ -21,7 +21,8 @@ public interface NamespaceService { PageResult> getNamespacePage(NamespaceQueryVO queryVO); - List getNamespaceByUserId(SystemUser systemUser); - Boolean deleteNamespace(Long id); + + List getAllNamespace(); + } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/GroupConfigServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/GroupConfigServiceImpl.java index b0fee7a11..60fd4873b 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/GroupConfigServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/GroupConfigServiceImpl.java @@ -236,14 +236,14 @@ public class GroupConfigServiceImpl implements GroupConfigService { } @Override - public List getAllGroupNameList(final Long namespaceId) { + public List getAllGroupNameList(final List namespaceId) { ConfigAccess groupConfigAccess = accessTemplate.getGroupConfigAccess(); - return groupConfigAccess.list(new LambdaQueryWrapper() - .eq(GroupConfig::getNamespaceId, namespaceId) - .select(GroupConfig::getGroupName)).stream() - .map(GroupConfig::getGroupName) - .collect(Collectors.toList()); + List groupConfigs = groupConfigAccess.list(new LambdaQueryWrapper() + .in(GroupConfig::getNamespaceId, namespaceId) + .select(GroupConfig::getGroupName, GroupConfig::getNamespaceId)).stream() + .collect(Collectors.toList()); + return GroupConfigResponseVOConverter.INSTANCE.toGroupConfigResponseVO(groupConfigs); } } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/NamespaceServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/NamespaceServiceImpl.java index 3f0f3dae5..59c61a564 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/NamespaceServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/NamespaceServiceImpl.java @@ -37,7 +37,9 @@ public class NamespaceServiceImpl implements NamespaceService { public Boolean saveNamespace(final NamespaceRequestVO namespaceRequestVO) { Namespace namespace = new Namespace(); namespace.setName(namespaceRequestVO.getName()); - namespace.setUniqueId(IdUtil.simpleUUID()); + if (StrUtil.isBlank(namespaceRequestVO.getUniqueId())) { + namespace.setUniqueId(IdUtil.simpleUUID()); + } return 1 == namespaceMapper.insert(namespace); } @@ -59,22 +61,27 @@ public class NamespaceServiceImpl implements NamespaceService { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); if (StrUtil.isNotBlank(queryVO.getName())) { - queryWrapper.like(Namespace::getName,queryVO.getName() + "%"); + queryWrapper.like(Namespace::getName, queryVO.getName() + "%"); } queryWrapper.eq(Namespace::getDeleted, StatusEnum.NO); queryWrapper.orderByDesc(Namespace::getId); PageDTO selectPage = namespaceMapper.selectPage(pageDTO, queryWrapper); - return new PageResult<>(pageDTO, NamespaceResponseVOConverter.INSTANCE.toNamespaceResponseVOs(selectPage.getRecords())); - } - - @Override - public List getNamespaceByUserId(final SystemUser systemUser) { - return null; + return new PageResult<>(pageDTO, + NamespaceResponseVOConverter.INSTANCE.toNamespaceResponseVOs(selectPage.getRecords())); } @Override public Boolean deleteNamespace(Long id) { return 1 == namespaceMapper.deleteById(id); } + + @Override + public List getAllNamespace() { + List namespaces = namespaceMapper.selectList( + new LambdaQueryWrapper() + .select(Namespace::getName, Namespace::getUniqueId) + ); + return NamespaceResponseVOConverter.INSTANCE.toNamespaceResponseVOs(namespaces); + } } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/SystemUserServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/SystemUserServiceImpl.java index 30bd34474..b847bc66d 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/SystemUserServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/SystemUserServiceImpl.java @@ -5,8 +5,12 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; import com.aizuda.easy.retry.server.common.config.SystemProperties; import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException; +import com.aizuda.easy.retry.server.web.model.request.UserPermissionRequestVO; +import com.aizuda.easy.retry.server.web.service.convert.NamespaceResponseVOConverter; +import com.aizuda.easy.retry.template.datasource.persistence.mapper.NamespaceMapper; import com.aizuda.easy.retry.template.datasource.persistence.mapper.SystemUserMapper; import com.aizuda.easy.retry.template.datasource.persistence.mapper.SystemUserPermissionMapper; +import com.aizuda.easy.retry.template.datasource.persistence.po.Namespace; import com.aizuda.easy.retry.template.datasource.persistence.po.SystemUser; import com.aizuda.easy.retry.template.datasource.persistence.po.SystemUserPermission; import com.aizuda.easy.retry.server.web.service.SystemUserService; @@ -49,12 +53,15 @@ public class SystemUserServiceImpl implements SystemUserService { @Autowired private SystemUserPermissionMapper systemUserPermissionMapper; @Autowired + private NamespaceMapper namespaceMapper; + @Autowired private SystemProperties systemProperties; @Override public SystemUserResponseVO login(SystemUserRequestVO requestVO) { - SystemUser systemUser = systemUserMapper.selectOne(new LambdaQueryWrapper().eq(SystemUser::getUsername, requestVO.getUsername())); + SystemUser systemUser = systemUserMapper.selectOne( + new LambdaQueryWrapper().eq(SystemUser::getUsername, requestVO.getUsername())); if (Objects.isNull(systemUser)) { throw new EasyRetryServerException("用户名或密码错误"); } @@ -69,32 +76,36 @@ public class SystemUserServiceImpl implements SystemUserService { systemUserResponseVO.setToken(token); systemUserResponseVO.setMode(systemProperties.getMode().name()); - if (RoleEnum.ADMIN.getRoleId().equals(systemUser.getRole())) { - return systemUserResponseVO; - } - - List systemUserPermissions = systemUserPermissionMapper.selectList(new LambdaQueryWrapper() - .eq(SystemUserPermission::getSystemUserId, systemUser.getId())); - systemUserResponseVO.setGroupNameList(systemUserPermissions.stream() - .map(SystemUserPermission::getGroupName).collect(Collectors.toList())); + getPermission(systemUser, systemUserResponseVO); return systemUserResponseVO; } + private void getPermission(final SystemUser systemUser, final SystemUserResponseVO systemUserResponseVO) { + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(Namespace::getId, Namespace::getUniqueId, Namespace::getName); + if (RoleEnum.USER.getRoleId().equals(systemUser.getRole())) { + List systemUserPermissions = systemUserPermissionMapper.selectList( + new LambdaQueryWrapper() + .select(SystemUserPermission::getNamespaceId) + .eq(SystemUserPermission::getSystemUserId, systemUser.getId()) + .groupBy(SystemUserPermission::getNamespaceId)); + queryWrapper.in(Namespace::getId, systemUserPermissions.stream() + .map(SystemUserPermission::getNamespaceId).collect(Collectors.toList())); + } + + List namespaces = namespaceMapper.selectList(queryWrapper); + systemUserResponseVO.setNamespaceIdList( + NamespaceResponseVOConverter.INSTANCE.toNamespaceResponseVOs(namespaces)); + } + @Override public SystemUserResponseVO getUserInfo(SystemUser systemUser) { SystemUserResponseVO systemUserResponseVO = SystemUserResponseVOConverter.INSTANCE.convert(systemUser); systemUserResponseVO.setMode(systemProperties.getMode().name()); - if (RoleEnum.ADMIN.getRoleId().equals(systemUser.getRole())) { - return systemUserResponseVO; - } - - List systemUserPermissions = systemUserPermissionMapper.selectList(new LambdaQueryWrapper() - .eq(SystemUserPermission::getSystemUserId, systemUser.getId())); - systemUserResponseVO.setGroupNameList(systemUserPermissions.stream() - .map(SystemUserPermission::getGroupName).collect(Collectors.toList())); - + getPermission(systemUser, systemUserResponseVO); return systemUserResponseVO; } @@ -102,7 +113,8 @@ public class SystemUserServiceImpl implements SystemUserService { @Override @Transactional public void addUser(SystemUserRequestVO requestVO) { - long count = systemUserMapper.selectCount(new LambdaQueryWrapper().eq(SystemUser::getUsername, requestVO.getUsername())); + long count = systemUserMapper.selectCount( + new LambdaQueryWrapper().eq(SystemUser::getUsername, requestVO.getUsername())); if (count > 0) { throw new EasyRetryServerException("该用户已存在"); } @@ -112,19 +124,21 @@ public class SystemUserServiceImpl implements SystemUserService { systemUser.setPassword(SecureUtil.sha256(requestVO.getPassword())); systemUser.setRole(requestVO.getRole()); - Assert.isTrue(1 == systemUserMapper.insert(systemUser), () -> new EasyRetryServerException("新增用户失败")); + Assert.isTrue(1 == systemUserMapper.insert(systemUser), () -> new EasyRetryServerException("新增用户失败")); // 只添加为普通用户添加权限 - List groupNameList = requestVO.getGroupNameList(); + List groupNameList = requestVO.getPermissions(); if (CollectionUtils.isEmpty(groupNameList) || RoleEnum.ADMIN.getRoleId().equals(requestVO.getRole())) { return; } - for (String groupName : groupNameList) { + for (UserPermissionRequestVO permission : groupNameList) { SystemUserPermission systemUserPermission = new SystemUserPermission(); systemUserPermission.setSystemUserId(systemUser.getId()); - systemUserPermission.setGroupName(groupName); - Assert.isTrue(1 == systemUserPermissionMapper.insert(systemUserPermission), () -> new EasyRetryServerException("新增用户权限失败")); + systemUserPermission.setGroupName(permission.getGroupName()); + systemUserPermission.setNamespaceId(permission.getNamespaceId()); + Assert.isTrue(1 == systemUserPermissionMapper.insert(systemUserPermission), + () -> new EasyRetryServerException("新增用户权限失败")); } } @@ -132,13 +146,15 @@ public class SystemUserServiceImpl implements SystemUserService { @Override @Transactional public void update(SystemUserRequestVO requestVO) { - SystemUser systemUser = systemUserMapper.selectOne(new LambdaQueryWrapper().eq(SystemUser::getId, requestVO.getId())); + SystemUser systemUser = systemUserMapper.selectOne( + new LambdaQueryWrapper().eq(SystemUser::getId, requestVO.getId())); if (Objects.isNull(systemUser)) { throw new EasyRetryServerException("该用户不存在"); } if (!systemUser.getUsername().equals(requestVO.getUsername())) { - long count = systemUserMapper.selectCount(new LambdaQueryWrapper().eq(SystemUser::getUsername, requestVO.getUsername())); + long count = systemUserMapper.selectCount( + new LambdaQueryWrapper().eq(SystemUser::getUsername, requestVO.getUsername())); if (count > 0) { throw new EasyRetryServerException("该用户已存在"); } @@ -151,22 +167,24 @@ public class SystemUserServiceImpl implements SystemUserService { systemUser.setRole(requestVO.getRole()); - Assert.isTrue(1 == systemUserMapper.updateById(systemUser), () -> new EasyRetryServerException("更新用户失败")); + Assert.isTrue(1 == systemUserMapper.updateById(systemUser), () -> new EasyRetryServerException("更新用户失败")); // 只添加为普通用户添加权限 - List groupNameList = requestVO.getGroupNameList(); - if (CollectionUtils.isEmpty(groupNameList) || RoleEnum.ADMIN.getRoleId().equals(requestVO.getRole())) { + List permissions = requestVO.getPermissions(); + if (CollectionUtils.isEmpty(permissions) || RoleEnum.ADMIN.getRoleId().equals(requestVO.getRole())) { return; } systemUserPermissionMapper.delete(new LambdaQueryWrapper() - .eq(SystemUserPermission::getSystemUserId, systemUser.getId())); + .eq(SystemUserPermission::getSystemUserId, systemUser.getId())); - for (String groupName : groupNameList) { + for (UserPermissionRequestVO permission : permissions) { SystemUserPermission systemUserPermission = new SystemUserPermission(); systemUserPermission.setSystemUserId(systemUser.getId()); - systemUserPermission.setGroupName(groupName); - Assert.isTrue(1 == systemUserPermissionMapper.insert(systemUserPermission), () -> new EasyRetryServerException("更新用户权限失败")); + systemUserPermission.setGroupName(permission.getGroupName()); + systemUserPermission.setNamespaceId(permission.getNamespaceId()); + Assert.isTrue(1 == systemUserPermissionMapper.insert(systemUserPermission), + () -> new EasyRetryServerException("更新用户权限失败")); } } @@ -180,28 +198,31 @@ public class SystemUserServiceImpl implements SystemUserService { systemUserLambdaQueryWrapper.like(SystemUser::getUsername, "%" + queryVO.getUsername() + "%"); } - userPageDTO = systemUserMapper.selectPage(userPageDTO, systemUserLambdaQueryWrapper.orderByDesc(SystemUser::getId)); + userPageDTO = systemUserMapper.selectPage(userPageDTO, + systemUserLambdaQueryWrapper.orderByDesc(SystemUser::getId)); - List userResponseVOList = SystemUserResponseVOConverter.INSTANCE.batchConvert(userPageDTO.getRecords()); + List userResponseVOList = SystemUserResponseVOConverter.INSTANCE.batchConvert( + userPageDTO.getRecords()); userResponseVOList.stream() - .filter(systemUserResponseVO -> systemUserResponseVO.getRole().equals(RoleEnum.USER.getRoleId())) - .forEach(systemUserResponseVO -> { - List systemUserPermissionList = systemUserPermissionMapper.selectList( - new LambdaQueryWrapper() - .select(SystemUserPermission::getGroupName) - .eq(SystemUserPermission::getSystemUserId, systemUserResponseVO.getId())); + .filter(systemUserResponseVO -> systemUserResponseVO.getRole().equals(RoleEnum.USER.getRoleId())) + .forEach(systemUserResponseVO -> { + List systemUserPermissionList = systemUserPermissionMapper.selectList( + new LambdaQueryWrapper() + .select(SystemUserPermission::getGroupName) + .eq(SystemUserPermission::getSystemUserId, systemUserResponseVO.getId())); - systemUserResponseVO.setGroupNameList(systemUserPermissionList.stream() - .map(SystemUserPermission::getGroupName).collect(Collectors.toList())); - }); + systemUserResponseVO.setGroupNameList(systemUserPermissionList.stream() + .map(SystemUserPermission::getGroupName).collect(Collectors.toList())); + }); return new PageResult<>(userPageDTO, userResponseVOList); } @Override public SystemUserResponseVO getSystemUserByUserName(String username) { - SystemUser systemUser = systemUserMapper.selectOne(new LambdaQueryWrapper().eq(SystemUser::getUsername, username)); + SystemUser systemUser = systemUserMapper.selectOne( + new LambdaQueryWrapper().eq(SystemUser::getUsername, username)); if (Objects.isNull(systemUser)) { throw new EasyRetryServerException("用户不存在"); } @@ -220,7 +241,7 @@ public class SystemUserServiceImpl implements SystemUserService { private String getToken(SystemUser systemUser) { String sign = systemUser.getPassword(); return JWT.create().withExpiresAt(new Date(System.currentTimeMillis() + EXPIRE_TIME)) - .withAudience(JsonUtil.toJsonString(SystemUserResponseVOConverter.INSTANCE.convert(systemUser))) - .sign(Algorithm.HMAC256(sign)); + .withAudience(JsonUtil.toJsonString(SystemUserResponseVOConverter.INSTANCE.convert(systemUser))) + .sign(Algorithm.HMAC256(sign)); } } diff --git a/frontend/src/api/manage.js b/frontend/src/api/manage.js index 7ab1c6edb..5b2811af5 100644 --- a/frontend/src/api/manage.js +++ b/frontend/src/api/manage.js @@ -50,11 +50,19 @@ const api = { addNamespace: '/namespace', updateNamespace: '/namespace', namespaceList: '/namespace/list', - delNamespace: '/namespace/' + delNamespace: '/namespace/', + allNamespace: '/namespace/all' } export default api +export function getAllNamespace () { + return request({ + url: api.allNamespace, + method: 'get' + }) +} + export function delNamespace (id) { return request({ url: api.delNamespace + id, @@ -215,11 +223,11 @@ export function getGroupConfigForPage (parameter) { }) } -export function getAllGroupNameList (parameter) { +export function getAllGroupNameList (data) { return request({ url: api.allGroupNameList, - method: 'get', - params: parameter + method: 'post', + data }) } diff --git a/frontend/src/store/modules/app.js b/frontend/src/store/modules/app.js index a3ec7613d..8aa75db4c 100644 --- a/frontend/src/store/modules/app.js +++ b/frontend/src/store/modules/app.js @@ -12,7 +12,7 @@ import { TOGGLE_WEAK, TOGGLE_MULTI_TAB, // i18n - APP_LANGUAGE + APP_LANGUAGE, APP_NAMESPACE } from '@/store/mutation-types' import { loadLanguageAsync } from '@/locales' @@ -29,6 +29,7 @@ const app = { color: '', weak: false, multiTab: true, + namespace: '', lang: 'zh-CN', _antLocale: {} }, @@ -80,6 +81,10 @@ const app = { [TOGGLE_MULTI_TAB]: (state, bool) => { storage.set(TOGGLE_MULTI_TAB, bool) state.multiTab = bool + }, + [APP_NAMESPACE]: (state, namespace) => { + storage.set(APP_NAMESPACE, namespace) + state.namespace = namespace } }, actions: { @@ -92,6 +97,16 @@ const app = { reject(e) }) }) + }, + setNamespace ({ commit }, namespaceId) { + return new Promise((resolve, reject) => { + commit(APP_NAMESPACE, namespaceId) + // loadLanguageAsync(lang).then(() => { + // resolve() + // }).catch((e) => { + // reject(e) + // }) + }) } } } diff --git a/frontend/src/store/mutation-types.js b/frontend/src/store/mutation-types.js index 4439479f3..e0a9a487a 100644 --- a/frontend/src/store/mutation-types.js +++ b/frontend/src/store/mutation-types.js @@ -12,6 +12,7 @@ export const TOGGLE_COLOR = 'color' export const TOGGLE_WEAK = 'weak' export const TOGGLE_MULTI_TAB = 'multi_tab' export const APP_LANGUAGE = 'app_language' +export const APP_NAMESPACE = 'app_namespace' export const CONTENT_WIDTH_TYPE = { Fluid: 'Fluid', diff --git a/frontend/src/views/user/UserForm.vue b/frontend/src/views/user/UserForm.vue index 2e8f99f19..45b9f3fc2 100644 --- a/frontend/src/views/user/UserForm.vue +++ b/frontend/src/views/user/UserForm.vue @@ -38,19 +38,35 @@ + + + {{ item.name }} ({{ item.uniqueId }}) + + + + - - {{ item }} + + {{ item.name }} ({{ item.namespaceId }}) @@ -69,7 +85,7 @@