feat: 2.5.0
1. namespace新增用户页面开发
This commit is contained in:
parent
07efc4a2a8
commit
0170b22f98
@ -7,7 +7,14 @@
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
🔥🔥🔥 致力提高分布式业务系统一致性的分布式重试平台
|
||||
🔥🔥🔥 灵活,可靠和快速的分布式任务重试和分布式任务调度平台<br> <br/>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
|
||||
> ✅️ 可重放,可管控、为提高分布式业务系统一致性的分布式任务重试平台 <br/>
|
||||
> ✅️ 支持秒级、可中断、可编排的高性能分布式任务调度平台
|
||||
|
||||
</p>
|
||||
|
||||
# 🌸 简介
|
||||
|
@ -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、成功',
|
||||
|
@ -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;
|
||||
|
@ -25,6 +25,8 @@ public class SystemUserPermission implements Serializable {
|
||||
|
||||
private String groupName;
|
||||
|
||||
private String namespaceId;
|
||||
|
||||
private Long systemUserId;
|
||||
|
||||
private LocalDateTime createDt;
|
||||
|
@ -68,9 +68,9 @@ public class GroupConfigController {
|
||||
}
|
||||
|
||||
@LoginRequired
|
||||
@GetMapping("/all/group-name/list")
|
||||
public List<String> getAllGroupNameList(@RequestParam("namespaceId") Long namespaceId) {
|
||||
return groupConfigService.getAllGroupNameList(namespaceId);
|
||||
@PostMapping("/all/group-name/list")
|
||||
public List<GroupConfigResponseVO> getAllGroupNameList(@RequestBody List<String> namespaceIds) {
|
||||
return groupConfigService.getAllGroupNameList(namespaceIds);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
|
@ -45,8 +45,8 @@ public class NamespaceController {
|
||||
return namespaceService.deleteNamespace(id);
|
||||
}
|
||||
|
||||
// @PutMapping
|
||||
public List<NamespaceResponseVO> getNamespaceByUserId(@LoginUser SystemUser systemUser) {
|
||||
return namespaceService.getNamespaceByUserId(systemUser);
|
||||
@GetMapping("/all")
|
||||
public List<NamespaceResponseVO> getAllNamespace() {
|
||||
return namespaceService.getAllNamespace();
|
||||
}
|
||||
}
|
||||
|
@ -14,6 +14,11 @@ public class NamespaceRequestVO {
|
||||
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 命名空间唯一标识
|
||||
*/
|
||||
String uniqueId;
|
||||
|
||||
/**
|
||||
* 名称
|
||||
*/
|
||||
|
@ -29,5 +29,5 @@ public class SystemUserRequestVO {
|
||||
@NotNull(groups = {PutMapping.class, PostMapping.class})
|
||||
private Integer role;
|
||||
|
||||
private List<String> groupNameList;
|
||||
private List<UserPermissionRequestVO> permissions;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
@ -19,8 +19,11 @@ public class SystemUserResponseVO {
|
||||
|
||||
private Integer role;
|
||||
|
||||
@Deprecated
|
||||
private List<String> groupNameList;
|
||||
|
||||
private List<NamespaceResponseVO> namespaceIdList;
|
||||
|
||||
private String token;
|
||||
|
||||
private LocalDateTime createDt;
|
||||
|
@ -23,5 +23,5 @@ public interface GroupConfigService {
|
||||
|
||||
GroupConfigResponseVO getGroupConfigByGroupName(String groupName);
|
||||
|
||||
List<String> getAllGroupNameList(final Long namespaceId);
|
||||
List<GroupConfigResponseVO> getAllGroupNameList(final List<String> namespaceId);
|
||||
}
|
||||
|
@ -21,7 +21,8 @@ public interface NamespaceService {
|
||||
|
||||
PageResult<List<NamespaceResponseVO>> getNamespacePage(NamespaceQueryVO queryVO);
|
||||
|
||||
List<NamespaceResponseVO> getNamespaceByUserId(SystemUser systemUser);
|
||||
|
||||
Boolean deleteNamespace(Long id);
|
||||
|
||||
List<NamespaceResponseVO> getAllNamespace();
|
||||
|
||||
}
|
||||
|
@ -236,14 +236,14 @@ public class GroupConfigServiceImpl implements GroupConfigService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getAllGroupNameList(final Long namespaceId) {
|
||||
public List<GroupConfigResponseVO> getAllGroupNameList(final List<String> namespaceId) {
|
||||
ConfigAccess<GroupConfig> groupConfigAccess = accessTemplate.getGroupConfigAccess();
|
||||
|
||||
return groupConfigAccess.list(new LambdaQueryWrapper<GroupConfig>()
|
||||
.eq(GroupConfig::getNamespaceId, namespaceId)
|
||||
.select(GroupConfig::getGroupName)).stream()
|
||||
.map(GroupConfig::getGroupName)
|
||||
.collect(Collectors.toList());
|
||||
List<GroupConfig> groupConfigs = groupConfigAccess.list(new LambdaQueryWrapper<GroupConfig>()
|
||||
.in(GroupConfig::getNamespaceId, namespaceId)
|
||||
.select(GroupConfig::getGroupName, GroupConfig::getNamespaceId)).stream()
|
||||
.collect(Collectors.toList());
|
||||
return GroupConfigResponseVOConverter.INSTANCE.toGroupConfigResponseVO(groupConfigs);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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<Namespace> 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<Namespace> selectPage = namespaceMapper.selectPage(pageDTO, queryWrapper);
|
||||
return new PageResult<>(pageDTO, NamespaceResponseVOConverter.INSTANCE.toNamespaceResponseVOs(selectPage.getRecords()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NamespaceResponseVO> 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<NamespaceResponseVO> getAllNamespace() {
|
||||
List<Namespace> namespaces = namespaceMapper.selectList(
|
||||
new LambdaQueryWrapper<Namespace>()
|
||||
.select(Namespace::getName, Namespace::getUniqueId)
|
||||
);
|
||||
return NamespaceResponseVOConverter.INSTANCE.toNamespaceResponseVOs(namespaces);
|
||||
}
|
||||
}
|
||||
|
@ -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<SystemUser>().eq(SystemUser::getUsername, requestVO.getUsername()));
|
||||
SystemUser systemUser = systemUserMapper.selectOne(
|
||||
new LambdaQueryWrapper<SystemUser>().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<SystemUserPermission> systemUserPermissions = systemUserPermissionMapper.selectList(new LambdaQueryWrapper<SystemUserPermission>()
|
||||
.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<Namespace> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.select(Namespace::getId, Namespace::getUniqueId, Namespace::getName);
|
||||
if (RoleEnum.USER.getRoleId().equals(systemUser.getRole())) {
|
||||
List<SystemUserPermission> systemUserPermissions = systemUserPermissionMapper.selectList(
|
||||
new LambdaQueryWrapper<SystemUserPermission>()
|
||||
.select(SystemUserPermission::getNamespaceId)
|
||||
.eq(SystemUserPermission::getSystemUserId, systemUser.getId())
|
||||
.groupBy(SystemUserPermission::getNamespaceId));
|
||||
queryWrapper.in(Namespace::getId, systemUserPermissions.stream()
|
||||
.map(SystemUserPermission::getNamespaceId).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
List<Namespace> 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<SystemUserPermission> systemUserPermissions = systemUserPermissionMapper.selectList(new LambdaQueryWrapper<SystemUserPermission>()
|
||||
.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<SystemUser>().eq(SystemUser::getUsername, requestVO.getUsername()));
|
||||
long count = systemUserMapper.selectCount(
|
||||
new LambdaQueryWrapper<SystemUser>().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<String> groupNameList = requestVO.getGroupNameList();
|
||||
List<UserPermissionRequestVO> 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<SystemUser>().eq(SystemUser::getId, requestVO.getId()));
|
||||
SystemUser systemUser = systemUserMapper.selectOne(
|
||||
new LambdaQueryWrapper<SystemUser>().eq(SystemUser::getId, requestVO.getId()));
|
||||
if (Objects.isNull(systemUser)) {
|
||||
throw new EasyRetryServerException("该用户不存在");
|
||||
}
|
||||
|
||||
if (!systemUser.getUsername().equals(requestVO.getUsername())) {
|
||||
long count = systemUserMapper.selectCount(new LambdaQueryWrapper<SystemUser>().eq(SystemUser::getUsername, requestVO.getUsername()));
|
||||
long count = systemUserMapper.selectCount(
|
||||
new LambdaQueryWrapper<SystemUser>().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<String> groupNameList = requestVO.getGroupNameList();
|
||||
if (CollectionUtils.isEmpty(groupNameList) || RoleEnum.ADMIN.getRoleId().equals(requestVO.getRole())) {
|
||||
List<UserPermissionRequestVO> permissions = requestVO.getPermissions();
|
||||
if (CollectionUtils.isEmpty(permissions) || RoleEnum.ADMIN.getRoleId().equals(requestVO.getRole())) {
|
||||
return;
|
||||
}
|
||||
|
||||
systemUserPermissionMapper.delete(new LambdaQueryWrapper<SystemUserPermission>()
|
||||
.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<SystemUserResponseVO> userResponseVOList = SystemUserResponseVOConverter.INSTANCE.batchConvert(userPageDTO.getRecords());
|
||||
List<SystemUserResponseVO> userResponseVOList = SystemUserResponseVOConverter.INSTANCE.batchConvert(
|
||||
userPageDTO.getRecords());
|
||||
|
||||
userResponseVOList.stream()
|
||||
.filter(systemUserResponseVO -> systemUserResponseVO.getRole().equals(RoleEnum.USER.getRoleId()))
|
||||
.forEach(systemUserResponseVO -> {
|
||||
List<SystemUserPermission> systemUserPermissionList = systemUserPermissionMapper.selectList(
|
||||
new LambdaQueryWrapper<SystemUserPermission>()
|
||||
.select(SystemUserPermission::getGroupName)
|
||||
.eq(SystemUserPermission::getSystemUserId, systemUserResponseVO.getId()));
|
||||
.filter(systemUserResponseVO -> systemUserResponseVO.getRole().equals(RoleEnum.USER.getRoleId()))
|
||||
.forEach(systemUserResponseVO -> {
|
||||
List<SystemUserPermission> systemUserPermissionList = systemUserPermissionMapper.selectList(
|
||||
new LambdaQueryWrapper<SystemUserPermission>()
|
||||
.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<SystemUser>().eq(SystemUser::getUsername, username));
|
||||
SystemUser systemUser = systemUserMapper.selectOne(
|
||||
new LambdaQueryWrapper<SystemUser>().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));
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
// })
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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',
|
||||
|
@ -38,19 +38,35 @@
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="权限"
|
||||
label="命名空间"
|
||||
v-if="role !== '2'">
|
||||
<a-select
|
||||
mode="tags"
|
||||
style="width: 100%"
|
||||
:token-separators="[',']"
|
||||
@change="value => handleNamespacesIdChange(value)"
|
||||
v-decorator="[
|
||||
'namespacesIds',
|
||||
{rules: [{ required: true, message: '请分配命名空间'}]}
|
||||
]">
|
||||
<a-select-option v-for="(item, index) in namespaceList" :key="index" :value="item.uniqueId">
|
||||
{{ item.name }} ({{ item.uniqueId }})
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="组"
|
||||
v-if="role !== '2'">
|
||||
<a-select
|
||||
mode="tags"
|
||||
|
||||
style="width: 100%"
|
||||
:token-separators="[',']"
|
||||
v-decorator="[
|
||||
'groupNameList',
|
||||
'groupNames',
|
||||
{rules: [{ required: true, message: '请分配组'}]}
|
||||
]">
|
||||
<a-select-option v-for="(item, index) in groupNameList" :key="index" :value="item">
|
||||
{{ item }}
|
||||
<a-select-option v-for="(item, index) in groupNameList" :key="index" :value="item.name">
|
||||
{{ item.name }} ({{ item.namespaceId }})
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
@ -69,7 +85,7 @@
|
||||
|
||||
<script>
|
||||
import md5 from 'md5'
|
||||
import { getAllGroupNameList, saveUser, getSystemUserByUserName } from '@/api/manage'
|
||||
import { saveUser, getSystemUserByUserName, getAllNamespace, getAllGroupNameList } from '@/api/manage'
|
||||
import pick from 'lodash.pick'
|
||||
|
||||
export default {
|
||||
@ -85,12 +101,13 @@ export default {
|
||||
labelCol: { lg: { span: 7 }, sm: { span: 7 } },
|
||||
wrapperCol: { lg: { span: 10 }, sm: { span: 17 } }
|
||||
},
|
||||
groupNameList: []
|
||||
groupNameList: [],
|
||||
namespaceList: []
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
getAllGroupNameList().then(res => {
|
||||
this.groupNameList = res.data
|
||||
getAllNamespace().then(res => {
|
||||
this.namespaceList = res.data
|
||||
})
|
||||
|
||||
this.$nextTick(() => {
|
||||
@ -105,6 +122,11 @@ export default {
|
||||
handleChange (role) {
|
||||
this.role = role
|
||||
},
|
||||
handleNamespacesIdChange (namespacesIds) {
|
||||
getAllGroupNameList(namespacesIds).then(res => {
|
||||
this.groupNameList = res.data
|
||||
})
|
||||
},
|
||||
handleSubmit (e) {
|
||||
e.preventDefault()
|
||||
this.form.validateFields((err, values) => {
|
||||
@ -135,7 +157,7 @@ export default {
|
||||
new Promise((resolve) => {
|
||||
setTimeout(resolve, 1500)
|
||||
}).then(() => {
|
||||
const formData = pick(data, ['id', 'username', 'role', 'groupNameList'])
|
||||
const formData = pick(data, ['id', 'username', 'role', 'groupNames', 'namespacesIds'])
|
||||
formData.role = formData.role.toString()
|
||||
form.setFieldsValue(formData)
|
||||
})
|
||||
|
Loading…
Reference in New Issue
Block a user