From 9173b256fad31ebfbeba298a168619f36a2cb7b4 Mon Sep 17 00:00:00 2001 From: zhuangdashia Date: Wed, 2 Jul 2025 21:51:00 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E5=8F=98=E9=87=8F=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E7=BB=84=E6=9D=83=E9=99=90=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/GroupConfigController.java | 6 ++ .../request/SystemVariableRequestVO.java | 4 ++ .../response/SystemVariableResponseVO.java | 3 + .../web/service/GroupConfigService.java | 5 +- .../service/impl/GroupConfigServiceImpl.java | 10 ++- .../impl/SystemVariableServiceImpl.java | 64 +++++++++++++++---- 6 files changed, 79 insertions(+), 13 deletions(-) diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/GroupConfigController.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/GroupConfigController.java index 5a738c0d..9d7b6f13 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/GroupConfigController.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/GroupConfigController.java @@ -72,6 +72,12 @@ public class GroupConfigController { return groupConfigService.getAllGroupConfigList(namespaceIds); } + @LoginRequired + @PostMapping("/all/group/list") + public List getAllGroupList() { + return groupConfigService.getAllGroupList(); + } + @LoginRequired @GetMapping("/all/group-name/list") public List getAllGroupNameList() { diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/SystemVariableRequestVO.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/SystemVariableRequestVO.java index 68719891..7483b910 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/SystemVariableRequestVO.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/SystemVariableRequestVO.java @@ -5,6 +5,8 @@ import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; import lombok.Data; +import java.util.List; + @Data public class SystemVariableRequestVO { @@ -27,4 +29,6 @@ public class SystemVariableRequestVO { @Size(max = 256, message = "描述长度不能超过256个字符") private String description; + + private List permissions; } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/SystemVariableResponseVO.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/SystemVariableResponseVO.java index 534c055e..4d4daaa7 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/SystemVariableResponseVO.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/SystemVariableResponseVO.java @@ -2,6 +2,7 @@ package com.aizuda.snailjob.server.web.model.response; import lombok.Data; import java.time.LocalDateTime; +import java.util.List; @Data public class SystemVariableResponseVO { @@ -24,6 +25,8 @@ public class SystemVariableResponseVO { private String description; + private List permissions; + private LocalDateTime createDt; private LocalDateTime updateDt; diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/GroupConfigService.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/GroupConfigService.java index f6582293..7d3186ef 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/GroupConfigService.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/GroupConfigService.java @@ -43,4 +43,7 @@ public interface GroupConfigService { boolean deleteByGroupName(String groupName); Map getGroupNameCns(Set uniqueGroupNames); -} + + List getAllGroupList(); + +} \ No newline at end of file diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/GroupConfigServiceImpl.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/GroupConfigServiceImpl.java index 406d24d4..e38b6038 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/GroupConfigServiceImpl.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/GroupConfigServiceImpl.java @@ -254,6 +254,14 @@ public class GroupConfigServiceImpl implements GroupConfigService { return groupConfigResponses; } + @Override + public List getAllGroupList() { + UserSessionVO userSessionVO = UserSessionUtils.currentUserSession(); + List namespaceIds = new ArrayList<>(); + namespaceIds.add(userSessionVO.getNamespaceId()); + return getAllGroupConfigList(namespaceIds); + } + @Override public List getAllGroupNameList() { @@ -266,7 +274,7 @@ public class GroupConfigServiceImpl implements GroupConfigService { List groupConfigs = groupConfigAccess.list(new LambdaQueryWrapper() .eq(GroupConfig::getNamespaceId, userSessionVO.getNamespaceId()) .select(GroupConfig::getGroupName)); - + //TODO ? return StreamUtils.toList(groupConfigs, GroupConfig::getGroupName); } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/SystemVariableServiceImpl.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/SystemVariableServiceImpl.java index 4a300aef..20495fd1 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/SystemVariableServiceImpl.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/SystemVariableServiceImpl.java @@ -8,7 +8,9 @@ import com.aizuda.snailjob.server.common.exception.SnailJobServerException; import com.aizuda.snailjob.server.web.model.base.PageResult; import com.aizuda.snailjob.server.web.model.request.SystemVariableQueryVO; import com.aizuda.snailjob.server.web.model.request.SystemVariableRequestVO; +import com.aizuda.snailjob.server.web.model.request.UserPermissionRequestVO; import com.aizuda.snailjob.server.web.model.request.UserSessionVO; +import com.aizuda.snailjob.server.web.model.response.PermissionsResponseVO; import com.aizuda.snailjob.server.web.model.response.SystemVariableResponseVO; import com.aizuda.snailjob.server.web.service.SystemVariableService; import com.aizuda.snailjob.server.web.util.UserSessionUtils; @@ -21,10 +23,9 @@ import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; @Service @RequiredArgsConstructor @@ -54,14 +55,24 @@ public class SystemVariableServiceImpl implements SystemVariableService { systemVariable.setSystemUserId(userSession.getId()); systemVariable.setNamespaceId(userSession.getNamespaceId()); // 设置 groupNames - if (userSession.isAdmin()) { - // admin用户创建的变量,设置为空或特殊标识,表示所有组都可见 +// if (userSession.isAdmin()) { +// // admin用户创建的变量,设置为空或特殊标识,表示所有组都可见 +// systemVariable.setGroupNames(""); +// } else { +// // 普通用户创建的变量,存储用户所属的组名 +// List userGroupNames = userSession.getGroupNames(); +// systemVariable.setGroupNames(String.join(",", userGroupNames)); +// } + // 增加组权限管理++ + List groupNameList = requestVO.getPermissions(); + if (CollUtil.isEmpty(groupNameList)) { systemVariable.setGroupNames(""); - } else { - // 普通用户创建的变量,存储用户所属的组名 - List userGroupNames = userSession.getGroupNames(); - systemVariable.setGroupNames(String.join(",", userGroupNames)); } + String groupNames = groupNameList.stream() + .map(UserPermissionRequestVO::getGroupName) + .collect(Collectors.joining(",")); + + systemVariable.setGroupNames(groupNames); Assert.isTrue(1 == systemVariableMapper.insert(systemVariable), () -> new SnailJobServerException("添加系统变量失败")); @@ -96,6 +107,16 @@ public class SystemVariableServiceImpl implements SystemVariableService { } } + List groupNameList = requestVO.getPermissions(); + if (CollUtil.isEmpty(groupNameList)) { + existingVariable.setGroupNames(""); + } + String groupNames = groupNameList.stream() + .map(UserPermissionRequestVO::getGroupName) + .collect(Collectors.joining(",")); + + existingVariable.setGroupNames(groupNames); + BeanUtils.copyProperties(requestVO, existingVariable); Assert.isTrue(1 == systemVariableMapper.updateById(existingVariable), () -> new SnailJobServerException("更新系统变量失败")); @@ -148,7 +169,7 @@ public class SystemVariableServiceImpl implements SystemVariableService { w.or().like(SystemVariable::getGroupNames, groupName); } // admin创建的变量(通过查询admin用户ID) - w.or().exists("SELECT 1 FROM sj_system_user su WHERE su.id = sj_system_variable.system_user_id AND su.role = 2"); +// w.or().exists("SELECT 1 FROM sj_system_user su WHERE su.id = sj_system_variable.system_user_id AND su.role = 2"); // return w; }); } @@ -160,6 +181,11 @@ public class SystemVariableServiceImpl implements SystemVariableService { .map(this::convertToResponseVO) .toList(); + responseList.forEach(vo -> { + if(vo.getGroupNames() != null) { + vo.setPermissions(safeConvert(vo.getGroupNames(),vo.getNamespaceId())); + } + }); return new PageResult<>(pageDTO, responseList); } @@ -246,4 +272,20 @@ public class SystemVariableServiceImpl implements SystemVariableService { BeanUtils.copyProperties(systemVariable, responseVO); return responseVO; } + + public static List safeConvert(String namesStr, String namespaceId) { + return Optional.ofNullable(namesStr) + .map(str -> Arrays.stream(str.split(","))) + .orElseGet(Stream::empty) + .filter(name -> !name.trim().isEmpty()) + .map(name -> { + PermissionsResponseVO vo = new PermissionsResponseVO(); + vo.setGroupName(name.trim()); + vo.setNamespaceId(namespaceId); + vo.setNamespaceName(name.trim()); + // 可设置其他默认字段值 + return vo; + }) + .collect(Collectors.toList()); + } } \ No newline at end of file