diff --git a/easy-retry-client/easy-retry-client-common/src/main/java/com/aizuda/easy/retry/client/common/config/EasyRetryProperties.java b/easy-retry-client/easy-retry-client-common/src/main/java/com/aizuda/easy/retry/client/common/config/EasyRetryProperties.java index 383a139a5..37792db48 100644 --- a/easy-retry-client/easy-retry-client-common/src/main/java/com/aizuda/easy/retry/client/common/config/EasyRetryProperties.java +++ b/easy-retry-client/easy-retry-client-common/src/main/java/com/aizuda/easy/retry/client/common/config/EasyRetryProperties.java @@ -24,7 +24,8 @@ import java.util.Objects; public class EasyRetryProperties { /** - * 服务端对应的group + * 命名空间ID + * 若不填则默认为 SystemConstants::DEFAULT_NAMESPACE */ private String namespace; diff --git a/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/AbstractRetryStrategies.java b/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/AbstractRetryStrategies.java index 87c1c7a36..4dd29be4f 100644 --- a/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/AbstractRetryStrategies.java +++ b/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/AbstractRetryStrategies.java @@ -41,7 +41,7 @@ import java.util.function.Consumer; public abstract class AbstractRetryStrategies implements RetryStrategy { private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); private static String retryErrorMoreThresholdTextMessageFormatter = - "{}环境 重试期间发生非预期异常 \n" + + "{}环境 重试组件异常 \n" + "> IP:{} \n" + "> 空间ID:{} \n" + "> 名称:{} \n" + diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/dataobject/JobBatchQueryDO.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/dataobject/JobBatchQueryDO.java index 42369d41a..7d47624b9 100644 --- a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/dataobject/JobBatchQueryDO.java +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/dataobject/JobBatchQueryDO.java @@ -2,6 +2,8 @@ package com.aizuda.easy.retry.template.datasource.persistence.dataobject; import lombok.Data; +import java.util.List; + /** * @author www.byteblogs.com * @date 2023-10-15 23:03:01 @@ -10,7 +12,7 @@ import lombok.Data; @Data public class JobBatchQueryDO { - private String groupName; + private List groupNames; private Integer taskBatchStatus; private String jobName; private Long jobId; diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/dataobject/JobNotifyConfigQueryDO.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/dataobject/JobNotifyConfigQueryDO.java index 4f8af07d1..6455c5e8b 100644 --- a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/dataobject/JobNotifyConfigQueryDO.java +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/dataobject/JobNotifyConfigQueryDO.java @@ -2,6 +2,8 @@ package com.aizuda.easy.retry.template.datasource.persistence.dataobject; import lombok.Data; +import java.util.List; + /** * @author zuoJunLin * @date 2023-12-02 23:03:01 @@ -10,7 +12,7 @@ import lombok.Data; @Data public class JobNotifyConfigQueryDO { - private String groupName; + private List groupNames; private Long jobId; /** diff --git a/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/JobNotifyConfigMapper.xml b/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/JobNotifyConfigMapper.xml index 9fe0f18b5..5efeb6f1b 100644 --- a/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/JobNotifyConfigMapper.xml +++ b/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/JobNotifyConfigMapper.xml @@ -30,8 +30,11 @@ and a.job_id = #{queryDO.jobId} - - and a.group_name = #{queryDO.groupName} + + and a.group_name IN + + #{groupName} + order by a.id desc diff --git a/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/JobSummaryMapper.xml b/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/JobSummaryMapper.xml new file mode 100644 index 000000000..ebfee3b87 --- /dev/null +++ b/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/JobSummaryMapper.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + INSERT INTO + job_summary (namespace_id, group_name, job_id, trigger_at, + success_num,fail_num,fail_reason,stop_num,stop_reason, cancel_num,cancel_reason) + VALUES + + ( + #{item.namespaceId}, + #{item.groupName}, + #{item.jobId}, + #{item.triggerAt}, + #{item.successNum}, + #{item.failNum}, + #{item.failReason}, + #{item.stopNum}, + #{item.stopReason}, + #{item.cancelNum}, + #{item.cancelReason} + ) + + ON DUPLICATE KEY UPDATE + success_num = values(`success_num`), + fail_num = values(`fail_num`), + fail_reason = values(`fail_reason`), + stop_num = values(`stop_num`), + stop_reason = values(`stop_reason`), + cancel_num = values(`cancel_num`), + cancel_reason = values(`cancel_reason`) + + + + + + + + + + diff --git a/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/JobTaskBatchMapper.xml b/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/JobTaskBatchMapper.xml index dbaf44106..b5f38ab1d 100644 --- a/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/JobTaskBatchMapper.xml +++ b/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/JobTaskBatchMapper.xml @@ -23,8 +23,11 @@ and a.job_id = #{queryDO.jobId} - - and a.group_name = #{queryDO.groupName} + + and a.group_name IN + + #{groupName} + and task_batch_status = #{queryDO.taskBatchStatus} diff --git a/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/RetrySummaryMapper.xml b/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/RetrySummaryMapper.xml new file mode 100644 index 000000000..b85f03ada --- /dev/null +++ b/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/RetrySummaryMapper.xml @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + INSERT INTO + retry_summary (namespace_id, group_name, scene_name, trigger_at, running_num, finish_num, max_count_num, + suspend_num) + VALUES + + ( + #{item.namespaceId}, + #{item.groupName}, + #{item.sceneName}, + #{item.triggerAt}, + #{item.runningNum}, + #{item.finishNum}, + #{item.maxCountNum}, + #{item.suspendNum} + ) + + ON DUPLICATE KEY UPDATE + running_num = values(`running_num`), + finish_num = values(`finish_num`), + max_count_num = values(`max_count_num`), + suspend_num = values(`suspend_num`) + + + + + + + + + + + + diff --git a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/JobNotifyConfigMapper.xml b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/JobNotifyConfigMapper.xml index 9fe0f18b5..5efeb6f1b 100644 --- a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/JobNotifyConfigMapper.xml +++ b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/JobNotifyConfigMapper.xml @@ -30,8 +30,11 @@ and a.job_id = #{queryDO.jobId} - - and a.group_name = #{queryDO.groupName} + + and a.group_name IN + + #{groupName} + order by a.id desc diff --git a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/JobTaskBatchMapper.xml b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/JobTaskBatchMapper.xml index 5467639ea..5c73d437c 100644 --- a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/JobTaskBatchMapper.xml +++ b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/JobTaskBatchMapper.xml @@ -23,8 +23,11 @@ and a.job_id = #{queryDO.jobId} - - and a.group_name = #{queryDO.groupName} + + and a.group_name IN + + #{groupName} + and task_batch_status = #{queryDO.taskBatchStatus} diff --git a/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/JobNotifyConfigMapper.xml b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/JobNotifyConfigMapper.xml index 77a2ed700..751e37b8e 100644 --- a/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/JobNotifyConfigMapper.xml +++ b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/JobNotifyConfigMapper.xml @@ -31,8 +31,11 @@ and a.job_id = #{queryDO.jobId} - - and a.group_name = #{queryDO.groupName} + + and a.group_name IN + + #{groupName} + order by a.id desc diff --git a/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/JobSummaryMapper.xml b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/JobSummaryMapper.xml new file mode 100644 index 000000000..8f76ea971 --- /dev/null +++ b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/JobSummaryMapper.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + INSERT INTO + job_summary (namespace_id, group_name, job_id, trigger_at, + success_num,fail_num,fail_reason,stop_num,stop_reason, cancel_num,cancel_reason) + VALUES + + ( + #{item.namespaceId}, + #{item.groupName}, + #{item.jobId}, + #{item.triggerAt}, + #{item.successNum}, + #{item.failNum}, + #{item.failReason}, + #{item.stopNum}, + #{item.stopReason}, + #{item.cancelNum}, + #{item.cancelReason} + ) + + ON CONFLICT (job_id, trigger_at) DO UPDATE + SET success_num = EXCLUDED.success_num, + fail_num = EXCLUDED.fail_num, + fail_reason = EXCLUDED.fail_reason, + stop_num = EXCLUDED.stop_num, + stop_reason = EXCLUDED.stop_reason, + cancel_num = EXCLUDED.cancel_num, + cancel_reason = EXCLUDED.cancel_reason + + + + + + + + + + diff --git a/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/JobTaskBatchMapper.xml b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/JobTaskBatchMapper.xml index 8a9d4bf49..1364b0475 100644 --- a/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/JobTaskBatchMapper.xml +++ b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/JobTaskBatchMapper.xml @@ -23,8 +23,11 @@ and a.job_id = #{queryDO.jobId} - - and a.group_name = #{queryDO.groupName} + + and a.group_name IN + + #{groupName} + and task_batch_status = #{queryDO.taskBatchStatus} diff --git a/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/RetrySummaryMapper.xml b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/RetrySummaryMapper.xml new file mode 100644 index 000000000..303f1d043 --- /dev/null +++ b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/RetrySummaryMapper.xml @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + INSERT INTO + retry_summary (namespace_id, group_name, scene_name, trigger_at, running_num, finish_num, max_count_num, + suspend_num) + VALUES + + ( + #{item.namespaceId}, + #{item.groupName}, + #{item.sceneName}, + #{item.triggerAt}, + #{item.runningNum}, + #{item.finishNum}, + #{item.maxCountNum}, + #{item.suspendNum} + ) + + ON CONFLICT (namespace_id, group_name, scene_name, trigger_at) DO UPDATE + SET running_num = EXCLUDED.running_num, + finish_num = EXCLUDED.finish_num, + max_count_num = EXCLUDED.max_count_num, + suspend_num = EXCLUDED.suspend_num + + + + + + + + + + + + diff --git a/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/ServerNodeMapper.xml b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/ServerNodeMapper.xml index 9c3ca252e..052d36318 100644 --- a/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/ServerNodeMapper.xml +++ b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/ServerNodeMapper.xml @@ -21,8 +21,12 @@ useGeneratedKeys="true" keyProperty="id"> INSERT INTO server_node (group_name, host_id, host_ip, host_port, expire_at, node_type, ext_attrs, context_path, create_dt) - VALUES (#{groupName}, #{hostId}, #{hostIp}, #{hostPort}, - #{expireAt}, #{nodeType}, #{extAttrs}, #{contextPath}, #{createDt}) + VALUES + + (#{item.namespaceId,jdbcType=VARCHAR}, #{item.groupName,jdbcType=VARCHAR}, #{item.hostId,jdbcType=VARCHAR}, #{item.hostIp,jdbcType=VARCHAR}, + #{item.hostPort,jdbcType=INTEGER}, #{item.expireAt,jdbcType=TIMESTAMP}, #{item.nodeType,jdbcType=TINYINT}, + #{item.extAttrs,jdbcType=VARCHAR}, #{item.contextPath,jdbcType=VARCHAR}, #{item.createDt,jdbcType=TIMESTAMP}) + ON CONFLICT (host_id, host_ip) DO UPDATE SET expire_at = EXCLUDED.expire_at diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/interceptor/AuthenticationInterceptor.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/interceptor/AuthenticationInterceptor.java index d5f05930e..ead16702f 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/interceptor/AuthenticationInterceptor.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/interceptor/AuthenticationInterceptor.java @@ -6,8 +6,10 @@ import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException; import com.aizuda.easy.retry.server.web.model.request.UserSessionVO; 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.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; @@ -26,7 +28,9 @@ import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.lang.reflect.Method; +import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * 系统登陆认证 @@ -44,6 +48,8 @@ public class AuthenticationInterceptor implements HandlerInterceptor { private SystemUserMapper systemUserMapper; @Autowired private NamespaceMapper namespaceMapper; + @Autowired + private SystemUserPermissionMapper systemUserPermissionMapper; @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object object) throws Exception { @@ -82,20 +88,31 @@ public class AuthenticationInterceptor implements HandlerInterceptor { throw new EasyRetryServerException("登陆过期,请重新登陆"); } - systemUser = systemUserMapper.selectOne(new LambdaQueryWrapper().eq(SystemUser::getUsername, systemUser.getUsername())); + systemUser = systemUserMapper.selectById(systemUser.getId()); if (Objects.isNull(systemUser)) { - throw new EasyRetryServerException("{} 用户不存在", systemUser.getUsername()); + throw new EasyRetryServerException("用户不存在"); } Long count = namespaceMapper.selectCount( - new LambdaQueryWrapper().eq(Namespace::getUniqueId, namespaceId)); - Assert.isTrue(count > 0, ()->new EasyRetryServerException("[{}] 命名空间不存在", namespaceId)); + new LambdaQueryWrapper().eq(Namespace::getUniqueId, namespaceId)); + Assert.isTrue(count > 0, () -> new EasyRetryServerException("[{}] 命名空间不存在", namespaceId)); UserSessionVO userSessionVO = new UserSessionVO(); userSessionVO.setId(systemUser.getId()); userSessionVO.setUsername(systemUser.getUsername()); userSessionVO.setRole(systemUser.getRole()); userSessionVO.setNamespaceId(namespaceId); + // 普通用户才获取权限 + if (userSessionVO.isUser()) { + List systemUserPermissions = systemUserPermissionMapper.selectList( + new LambdaQueryWrapper() + .select(SystemUserPermission::getGroupName) + .eq(SystemUserPermission::getSystemUserId, systemUser.getId()) + .eq(SystemUserPermission::getNamespaceId, namespaceId) + ); + userSessionVO.setGroupNames(systemUserPermissions.stream().map(SystemUserPermission::getGroupName).collect(Collectors.toList())); + } + httpServletRequest.setAttribute("currentUser", userSessionVO); // 验证 token diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/UserSessionVO.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/UserSessionVO.java index e25559456..2bf34ffb1 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/UserSessionVO.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/UserSessionVO.java @@ -1,7 +1,11 @@ package com.aizuda.easy.retry.server.web.model.request; +import com.aizuda.easy.retry.server.web.annotation.RoleEnum; import lombok.Data; +import java.util.List; +import java.util.Objects; + /** * @author xiaowoniu * @date 2023-11-22 22:42:26 @@ -18,4 +22,14 @@ public final class UserSessionVO { private String namespaceId; + private List groupNames; + + /** + * 是否是普通用户 + */ + public boolean isUser() { + return Objects.equals(this.role, RoleEnum.USER.getRoleId()); + } + + } 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 491e75242..32e0a9544 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 @@ -160,18 +160,24 @@ public class GroupConfigServiceImpl implements GroupConfigService { @Override public PageResult> getGroupConfigForPage(GroupConfigQueryVO queryVO) { - LambdaQueryWrapper groupConfigLambdaQueryWrapper = new LambdaQueryWrapper<>(); - groupConfigLambdaQueryWrapper.eq(GroupConfig::getNamespaceId, - UserSessionUtils.currentUserSession().getNamespaceId()); + UserSessionVO userSessionVO = UserSessionUtils.currentUserSession(); + String namespaceId = userSessionVO.getNamespaceId(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(GroupConfig::getNamespaceId, namespaceId); + + if (userSessionVO.isUser()) { + queryWrapper.in(GroupConfig::getGroupName, userSessionVO.getGroupNames()); + } + if (StrUtil.isNotBlank(queryVO.getGroupName())) { - groupConfigLambdaQueryWrapper.like(GroupConfig::getGroupName, queryVO.getGroupName() + "%"); + queryWrapper.like(GroupConfig::getGroupName, queryVO.getGroupName() + "%"); } ConfigAccess groupConfigAccess = accessTemplate.getGroupConfigAccess(); - groupConfigLambdaQueryWrapper.orderByDesc(GroupConfig::getId); + queryWrapper.orderByDesc(GroupConfig::getId); PageDTO groupConfigPageDTO = groupConfigAccess.listPage( - new PageDTO<>(queryVO.getPage(), queryVO.getSize()), groupConfigLambdaQueryWrapper); + new PageDTO<>(queryVO.getPage(), queryVO.getSize()), queryWrapper); List records = groupConfigPageDTO.getRecords(); if (CollectionUtils.isEmpty(records)) { return new PageResult<>(groupConfigPageDTO.getCurrent(), groupConfigPageDTO.getSize(), @@ -289,10 +295,15 @@ public class GroupConfigServiceImpl implements GroupConfigService { @Override public List getAllGroupNameList() { - ConfigAccess groupConfigAccess = accessTemplate.getGroupConfigAccess(); + UserSessionVO userSessionVO = UserSessionUtils.currentUserSession(); + if (userSessionVO.isUser()) { + return userSessionVO.getGroupNames(); + } + + ConfigAccess groupConfigAccess = accessTemplate.getGroupConfigAccess(); List groupConfigs = groupConfigAccess.list(new LambdaQueryWrapper() - .in(GroupConfig::getNamespaceId, UserSessionUtils.currentUserSession().getNamespaceId()) + .eq(GroupConfig::getNamespaceId, userSessionVO.getNamespaceId()) .select(GroupConfig::getGroupName)) .stream() .collect(Collectors.toList()); diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobBatchServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobBatchServiceImpl.java index 9e795a39a..c985122dd 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobBatchServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobBatchServiceImpl.java @@ -14,6 +14,7 @@ import com.aizuda.easy.retry.server.job.task.support.stop.JobTaskStopFactory; import com.aizuda.easy.retry.server.job.task.support.stop.TaskStopJobContext; import com.aizuda.easy.retry.server.web.model.base.PageResult; import com.aizuda.easy.retry.server.web.model.request.JobBatchQueryVO; +import com.aizuda.easy.retry.server.web.model.request.UserSessionVO; import com.aizuda.easy.retry.server.web.model.response.JobBatchResponseVO; import com.aizuda.easy.retry.server.web.service.JobBatchService; import com.aizuda.easy.retry.server.web.service.convert.JobBatchResponseVOConverter; @@ -26,9 +27,11 @@ import com.aizuda.easy.retry.template.datasource.persistence.po.Job; import com.aizuda.easy.retry.template.datasource.persistence.po.JobTaskBatch; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.google.common.collect.Lists; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import java.util.List; import java.util.Objects; @@ -51,6 +54,21 @@ public class JobBatchServiceImpl implements JobBatchService { PageDTO pageDTO = new PageDTO<>(queryVO.getPage(), queryVO.getSize()); + UserSessionVO userSessionVO = UserSessionUtils.currentUserSession(); + List groupNames = Lists.newArrayList(); + if (userSessionVO.isUser()) { + groupNames = userSessionVO.getGroupNames(); + } + + if (StrUtil.isNotBlank(queryVO.getGroupName())) { + // 说明当前组不在用户配置的权限中 + if (!CollectionUtils.isEmpty(groupNames) && !groupNames.contains(queryVO.getGroupName())) { + return new PageResult<>(pageDTO, Lists.newArrayList()); + } else { + groupNames = Lists.newArrayList(queryVO.getGroupName()); + } + } + JobBatchQueryDO jobBatchQueryDO = new JobBatchQueryDO(); if (StrUtil.isNotBlank(queryVO.getJobName())) { jobBatchQueryDO.setJobName(queryVO.getJobName() + "%"); @@ -58,8 +76,8 @@ public class JobBatchServiceImpl implements JobBatchService { jobBatchQueryDO.setJobId(queryVO.getJobId()); jobBatchQueryDO.setTaskBatchStatus(queryVO.getTaskBatchStatus()); - jobBatchQueryDO.setGroupName(queryVO.getGroupName()); - jobBatchQueryDO.setNamespaceId(UserSessionUtils.currentUserSession().getNamespaceId()); + jobBatchQueryDO.setGroupNames(groupNames); + jobBatchQueryDO.setNamespaceId(userSessionVO.getNamespaceId()); List batchResponseDOList = jobTaskBatchMapper.selectJobBatchPageList(pageDTO, jobBatchQueryDO); List batchResponseVOList = JobBatchResponseVOConverter.INSTANCE.toJobBatchResponseVOs( diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobNotifyConfigServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobNotifyConfigServiceImpl.java index 106da7062..0813906f1 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobNotifyConfigServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobNotifyConfigServiceImpl.java @@ -7,6 +7,7 @@ import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException; import com.aizuda.easy.retry.server.web.model.base.PageResult; import com.aizuda.easy.retry.server.web.model.request.JobNotifyConfigQueryVO; import com.aizuda.easy.retry.server.web.model.request.JobNotifyConfigRequestVO; +import com.aizuda.easy.retry.server.web.model.request.UserSessionVO; import com.aizuda.easy.retry.server.web.model.response.JobNotifyConfigResponseVO; import com.aizuda.easy.retry.server.web.service.JobNotifyConfigService; import com.aizuda.easy.retry.server.web.service.convert.JobNotifyConfigConverter; @@ -17,11 +18,14 @@ import com.aizuda.easy.retry.template.datasource.persistence.dataobject.JobBatch import com.aizuda.easy.retry.template.datasource.persistence.dataobject.JobNotifyConfigQueryDO; import com.aizuda.easy.retry.template.datasource.persistence.dataobject.JobNotifyConfigResponseDO; import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobNotifyConfigMapper; +import com.aizuda.easy.retry.template.datasource.persistence.po.Job; import com.aizuda.easy.retry.template.datasource.persistence.po.JobNotifyConfig; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import com.google.common.collect.Lists; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import java.time.LocalDateTime; import java.util.List; @@ -41,11 +45,25 @@ public class JobNotifyConfigServiceImpl implements JobNotifyConfigService { @Override public PageResult> getJobNotifyConfigList(JobNotifyConfigQueryVO queryVO) { PageDTO pageDTO = new PageDTO<>(); + UserSessionVO userSessionVO = UserSessionUtils.currentUserSession(); JobNotifyConfigQueryDO jobNotifyConfigQueryDO = new JobNotifyConfigQueryDO(); - jobNotifyConfigQueryDO.setNamespaceId(UserSessionUtils.currentUserSession().getNamespaceId()); - if (StrUtil.isNotBlank(queryVO.getGroupName())) { - jobNotifyConfigQueryDO.setGroupName(queryVO.getGroupName()); + jobNotifyConfigQueryDO.setNamespaceId(userSessionVO.getNamespaceId()); + + List groupNames = Lists.newArrayList(); + if (userSessionVO.isUser()) { + groupNames = userSessionVO.getGroupNames(); } + + if (StrUtil.isNotBlank(queryVO.getGroupName())) { + // 说明当前组不在用户配置的权限中 + if (!CollectionUtils.isEmpty(groupNames) && !groupNames.contains(queryVO.getGroupName())) { + return new PageResult<>(pageDTO, Lists.newArrayList()); + } else { + groupNames = Lists.newArrayList(queryVO.getGroupName()); + } + } + + jobNotifyConfigQueryDO.setGroupNames(groupNames); if (Objects.nonNull(queryVO.getJobId())) { jobNotifyConfigQueryDO.setJobId(queryVO.getJobId()); } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobServiceImpl.java index 7d0ca62c2..632ac8078 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobServiceImpl.java @@ -19,12 +19,14 @@ import com.aizuda.easy.retry.server.web.model.base.PageResult; import com.aizuda.easy.retry.server.web.model.request.JobQueryVO; import com.aizuda.easy.retry.server.web.model.request.JobRequestVO; import com.aizuda.easy.retry.server.web.model.request.JobUpdateJobStatusRequestVO; +import com.aizuda.easy.retry.server.web.model.request.UserSessionVO; import com.aizuda.easy.retry.server.web.model.response.JobResponseVO; import com.aizuda.easy.retry.server.web.service.JobService; import com.aizuda.easy.retry.server.web.service.convert.JobConverter; import com.aizuda.easy.retry.server.web.service.convert.JobResponseVOConverter; import com.aizuda.easy.retry.server.web.util.UserSessionUtils; import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobMapper; +import com.aizuda.easy.retry.template.datasource.persistence.po.GroupConfig; import com.aizuda.easy.retry.template.datasource.persistence.po.Job; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; @@ -58,10 +60,15 @@ public class JobServiceImpl implements JobService { public PageResult> getJobPage(JobQueryVO queryVO) { PageDTO pageDTO = new PageDTO<>(queryVO.getPage(), queryVO.getSize()); - + UserSessionVO userSessionVO = UserSessionUtils.currentUserSession(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Job::getDeleted, StatusEnum.NO.getStatus()); - queryWrapper.eq(Job::getNamespaceId, UserSessionUtils.currentUserSession().getNamespaceId()); + queryWrapper.eq(Job::getNamespaceId, userSessionVO.getNamespaceId()); + + if (userSessionVO.isUser()) { + queryWrapper.in(Job::getGroupName, userSessionVO.getGroupNames()); + } + if (StrUtil.isNotBlank(queryVO.getGroupName())) { queryWrapper.eq(Job::getGroupName, queryVO.getGroupName()); } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/NotifyConfigServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/NotifyConfigServiceImpl.java index c00e5c776..17a43da0b 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/NotifyConfigServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/NotifyConfigServiceImpl.java @@ -7,6 +7,7 @@ import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException; import com.aizuda.easy.retry.server.web.model.base.PageResult; import com.aizuda.easy.retry.server.web.model.request.NotifyConfigQueryVO; import com.aizuda.easy.retry.server.web.model.request.NotifyConfigRequestVO; +import com.aizuda.easy.retry.server.web.model.request.UserSessionVO; import com.aizuda.easy.retry.server.web.model.response.NotifyConfigResponseVO; import com.aizuda.easy.retry.server.web.service.NotifyConfigService; import com.aizuda.easy.retry.server.web.service.convert.NotifyConfigConverter; @@ -14,6 +15,7 @@ import com.aizuda.easy.retry.server.web.service.convert.NotifyConfigResponseVOCo import com.aizuda.easy.retry.server.web.util.UserSessionUtils; import com.aizuda.easy.retry.template.datasource.access.AccessTemplate; import com.aizuda.easy.retry.template.datasource.access.ConfigAccess; +import com.aizuda.easy.retry.template.datasource.persistence.po.GroupConfig; import com.aizuda.easy.retry.template.datasource.persistence.po.NotifyConfig; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; @@ -37,14 +39,22 @@ public class NotifyConfigServiceImpl implements NotifyConfigService { public PageResult> getNotifyConfigList(NotifyConfigQueryVO queryVO) { PageDTO pageDTO = new PageDTO<>(); + UserSessionVO userSessionVO = UserSessionUtils.currentUserSession(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(NotifyConfig::getNamespaceId, UserSessionUtils.currentUserSession().getNamespaceId()); + queryWrapper.eq(NotifyConfig::getNamespaceId, userSessionVO.getNamespaceId()); + + if (userSessionVO.isUser()) { + queryWrapper.in(NotifyConfig::getGroupName, userSessionVO.getGroupNames()); + } + if (StrUtil.isNotBlank(queryVO.getGroupName())) { queryWrapper.eq(NotifyConfig::getGroupName, queryVO.getGroupName()); } if (StrUtil.isNotBlank(queryVO.getSceneName())) { queryWrapper.eq(NotifyConfig::getSceneName, queryVO.getSceneName()); } + + queryWrapper.orderByDesc(NotifyConfig::getId); List notifyConfigs = accessTemplate.getNotifyConfigAccess().listPage(pageDTO, queryWrapper).getRecords(); return new PageResult<>(pageDTO, NotifyConfigResponseVOConverter.INSTANCE.batchConvert(notifyConfigs)); } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryTaskLogServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryTaskLogServiceImpl.java index 01851d517..7a7103797 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryTaskLogServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryTaskLogServiceImpl.java @@ -1,6 +1,7 @@ package com.aizuda.easy.retry.server.web.service.impl; import cn.hutool.core.util.StrUtil; +import com.aizuda.easy.retry.server.web.model.request.UserSessionVO; import com.aizuda.easy.retry.server.web.util.UserSessionUtils; import com.aizuda.easy.retry.template.datasource.persistence.mapper.RetryTaskLogMapper; import com.aizuda.easy.retry.template.datasource.persistence.mapper.RetryTaskLogMessageMapper; @@ -8,6 +9,7 @@ import com.aizuda.easy.retry.template.datasource.persistence.po.RetryTaskLog; import com.aizuda.easy.retry.template.datasource.persistence.po.RetryTaskLogMessage; import com.aizuda.easy.retry.server.web.model.request.RetryTaskLogMessageQueryVO; import com.aizuda.easy.retry.server.web.model.response.RetryTaskLogMessageResponseVO; +import com.aizuda.easy.retry.template.datasource.persistence.po.SceneConfig; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import com.aizuda.easy.retry.server.web.model.base.PageResult; @@ -35,11 +37,16 @@ public class RetryTaskLogServiceImpl implements RetryTaskLogService { @Override public PageResult> getRetryTaskLogPage(RetryTaskLogQueryVO queryVO) { - String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId(); + UserSessionVO userSessionVO = UserSessionUtils.currentUserSession(); + String namespaceId = userSessionVO.getNamespaceId(); PageDTO pageDTO = new PageDTO<>(queryVO.getPage(), queryVO.getSize()); LambdaQueryWrapper retryTaskLogLambdaQueryWrapper = new LambdaQueryWrapper<>(); retryTaskLogLambdaQueryWrapper.eq(RetryTaskLog::getNamespaceId, namespaceId); + if (userSessionVO.isUser()) { + retryTaskLogLambdaQueryWrapper.in(RetryTaskLog::getGroupName, userSessionVO.getGroupNames()); + } + if (StrUtil.isNotBlank(queryVO.getGroupName())) { retryTaskLogLambdaQueryWrapper.eq(RetryTaskLog::getGroupName, queryVO.getGroupName()); } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/SceneConfigServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/SceneConfigServiceImpl.java index 0974c77fb..997fb919f 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/SceneConfigServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/SceneConfigServiceImpl.java @@ -9,6 +9,7 @@ import com.aizuda.easy.retry.server.common.strategy.WaitStrategies; import com.aizuda.easy.retry.server.web.model.base.PageResult; import com.aizuda.easy.retry.server.web.model.request.SceneConfigQueryVO; import com.aizuda.easy.retry.server.web.model.request.SceneConfigRequestVO; +import com.aizuda.easy.retry.server.web.model.request.UserSessionVO; import com.aizuda.easy.retry.server.web.model.response.SceneConfigResponseVO; import com.aizuda.easy.retry.server.web.service.SceneConfigService; import com.aizuda.easy.retry.server.web.service.convert.SceneConfigConverter; @@ -16,6 +17,7 @@ import com.aizuda.easy.retry.server.web.service.convert.SceneConfigResponseVOCon import com.aizuda.easy.retry.server.web.util.UserSessionUtils; import com.aizuda.easy.retry.template.datasource.access.AccessTemplate; import com.aizuda.easy.retry.template.datasource.access.ConfigAccess; +import com.aizuda.easy.retry.template.datasource.persistence.po.NotifyConfig; import com.aizuda.easy.retry.template.datasource.persistence.po.SceneConfig; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -42,9 +44,15 @@ public class SceneConfigServiceImpl implements SceneConfigService { public PageResult> getSceneConfigPageList(SceneConfigQueryVO queryVO) { PageDTO pageDTO = new PageDTO<>(queryVO.getPage(), queryVO.getSize()); - String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId(); + UserSessionVO userSessionVO = UserSessionUtils.currentUserSession(); + String namespaceId = userSessionVO.getNamespaceId(); LambdaQueryWrapper sceneConfigLambdaQueryWrapper = new LambdaQueryWrapper<>(); sceneConfigLambdaQueryWrapper.eq(SceneConfig::getNamespaceId, namespaceId); + + if (userSessionVO.isUser()) { + sceneConfigLambdaQueryWrapper.in(SceneConfig::getGroupName, userSessionVO.getGroupNames()); + } + if (StrUtil.isNotBlank(queryVO.getGroupName())) { sceneConfigLambdaQueryWrapper.eq(SceneConfig::getGroupName, queryVO.getGroupName().trim()); } diff --git a/frontend/src/views/job/form/JobNotifyForm.vue b/frontend/src/views/job/form/JobNotifyForm.vue index a6d41ef7a..6636e86c3 100644 --- a/frontend/src/views/job/form/JobNotifyForm.vue +++ b/frontend/src/views/job/form/JobNotifyForm.vue @@ -12,7 +12,8 @@ hidden v-decorator="['id']" /> - + + 通知场景  - + + 通知类型  - 被@人手机号或钉钉号  + 被@人手机号或钉钉号  - 被@负责人用户id  + 被@负责人用户id
- +
@@ -12,7 +12,8 @@ hidden v-decorator="['id']" /> - + + 通知场景  - + + 通知类型  - 被@人手机号或钉钉号  + 被@人手机号或钉钉号  - 被@人用户id  + 被@人用户id