diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/ServerNodeMapper.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/ServerNodeMapper.java index 164a7f5d..72af75af 100644 --- a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/ServerNodeMapper.java +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/persistence/mapper/ServerNodeMapper.java @@ -12,7 +12,7 @@ import java.util.List; @Mapper public interface ServerNodeMapper extends BaseMapper { - int insertOrUpdate(List records); + int insertOrUpdate(@Param("records") List records); int deleteByExpireAt(@Param("endTime") LocalDateTime endTime); 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 bf8f6df5..12cf767f 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 @@ -19,9 +19,9 @@ SELECT a.*, b.job_name, b.task_type, b.block_strategy, b.trigger_type FROM job_task_batch a join job b on a.job_id = b.id - namespace_id = #{queryDO.namespaceId} + a.namespace_id = #{queryDO.namespaceId} - and job_id = #{queryDO.jobId} + and a.job_id = #{queryDO.jobId} and a.group_name = #{queryDO.groupName} diff --git a/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/RetryDeadLetterMapper.xml b/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/RetryDeadLetterMapper.xml index 03d35378..4d4e0bc5 100644 --- a/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/RetryDeadLetterMapper.xml +++ b/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/RetryDeadLetterMapper.xml @@ -3,6 +3,7 @@ + @@ -15,16 +16,16 @@ - id, unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, create_dt, task_type + id, namespace_id, unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, create_dt, task_type - insert into retry_dead_letter (id, unique_id, group_name, scene_name, + insert into retry_dead_letter (namespace_id, unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, create_dt ) values - (#{retryDeadLetter.id,jdbcType=BIGINT}, #{retryDeadLetter.uniqueId,jdbcType=VARCHAR}, #{retryDeadLetter.groupName,jdbcType=VARCHAR}, #{retryDeadLetter.sceneName,jdbcType=VARCHAR}, + (#{retryDeadLetter.namespaceId,jdbcType=VARCHAR}, #{retryDeadLetter.uniqueId,jdbcType=VARCHAR}, #{retryDeadLetter.groupName,jdbcType=VARCHAR}, #{retryDeadLetter.sceneName,jdbcType=VARCHAR}, #{retryDeadLetter.idempotentId,jdbcType=VARCHAR}, #{retryDeadLetter.bizNo,jdbcType=VARCHAR}, #{retryDeadLetter.executorName,jdbcType=VARCHAR}, #{retryDeadLetter.argsStr,jdbcType=VARCHAR}, #{retryDeadLetter.extAttrs,jdbcType=VARCHAR}, #{retryDeadLetter.createDt,jdbcType=TIMESTAMP}) diff --git a/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/RetryTaskMapper.xml b/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/RetryTaskMapper.xml index a2b707f2..4b376c1c 100644 --- a/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/RetryTaskMapper.xml +++ b/easy-retry-datasource/easy-retry-mariadb-datasource/src/main/resources/mariadb/mapper/RetryTaskMapper.xml @@ -3,6 +3,7 @@ + @@ -19,15 +20,15 @@ - id, unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, next_trigger_at, retry_count, retry_status, + id, namespace_id, unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, next_trigger_at, retry_count, retry_status, create_dt, update_dt, task_type - INSERT INTO retry_task (unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, next_trigger_at, task_type, retry_status, create_dt) + INSERT INTO retry_task (namespace_id, unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, next_trigger_at, task_type, retry_status, create_dt) VALUES - (#{item.uniqueId}, #{item.groupName}, #{item.sceneName}, #{item.idempotentId}, #{item.bizNo}, #{item.executorName}, #{item.argsStr}, #{item.extAttrs}, #{item.nextTriggerAt}, #{item.taskType}, #{item.retryStatus}, #{item.createDt}) + (#{item.namespaceId}, #{item.uniqueId}, #{item.groupName}, #{item.sceneName}, #{item.idempotentId}, #{item.bizNo}, #{item.executorName}, #{item.argsStr}, #{item.extAttrs}, #{item.nextTriggerAt}, #{item.taskType}, #{item.retryStatus}, #{item.createDt}) 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 37d256fc..80bfcd29 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 @@ -19,9 +19,9 @@ SELECT a.*, b.job_name, b.task_type, b.block_strategy, b.trigger_type FROM job_task_batch a join job b on a.job_id = b.id - namespace_id = #{queryDO.namespaceId} + a.namespace_id = #{queryDO.namespaceId} - and job_id = #{queryDO.jobId} + and a.job_id = #{queryDO.jobId} and a.group_name = #{queryDO.groupName} diff --git a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/RetryDeadLetterMapper.xml b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/RetryDeadLetterMapper.xml index 03d35378..633b8607 100644 --- a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/RetryDeadLetterMapper.xml +++ b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/RetryDeadLetterMapper.xml @@ -3,6 +3,7 @@ + @@ -18,13 +19,13 @@ id, unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, create_dt, task_type - insert into retry_dead_letter (id, unique_id, group_name, scene_name, + insert into retry_dead_letter (namespace_id, unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, create_dt ) values - (#{retryDeadLetter.id,jdbcType=BIGINT}, #{retryDeadLetter.uniqueId,jdbcType=VARCHAR}, #{retryDeadLetter.groupName,jdbcType=VARCHAR}, #{retryDeadLetter.sceneName,jdbcType=VARCHAR}, + (#{retryDeadLetter.namespaceId,jdbcType=VARCHAR}, #{retryDeadLetter.uniqueId,jdbcType=VARCHAR}, #{retryDeadLetter.groupName,jdbcType=VARCHAR}, #{retryDeadLetter.sceneName,jdbcType=VARCHAR}, #{retryDeadLetter.idempotentId,jdbcType=VARCHAR}, #{retryDeadLetter.bizNo,jdbcType=VARCHAR}, #{retryDeadLetter.executorName,jdbcType=VARCHAR}, #{retryDeadLetter.argsStr,jdbcType=VARCHAR}, #{retryDeadLetter.extAttrs,jdbcType=VARCHAR}, #{retryDeadLetter.createDt,jdbcType=TIMESTAMP}) diff --git a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/RetryTaskMapper.xml b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/RetryTaskMapper.xml index f6d69dc8..c0d45d3b 100644 --- a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/RetryTaskMapper.xml +++ b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/RetryTaskMapper.xml @@ -3,6 +3,7 @@ + @@ -19,15 +20,15 @@ - id, unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, next_trigger_at, retry_count, retry_status, + id, namespace_id, unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, next_trigger_at, retry_count, retry_status, create_dt, update_dt, task_type - INSERT INTO retry_task (unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, next_trigger_at, task_type, retry_status, create_dt) + INSERT INTO retry_task (namespace_id, unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, next_trigger_at, task_type, retry_status, create_dt) VALUES - (#{item.uniqueId}, #{item.groupName}, #{item.sceneName}, #{item.idempotentId}, #{item.bizNo}, #{item.executorName}, #{item.argsStr}, #{item.extAttrs}, #{item.nextTriggerAt}, #{item.taskType}, #{item.retryStatus}, #{item.createDt}) + (#{item.namespaceId}, #{item.uniqueId}, #{item.groupName}, #{item.sceneName}, #{item.idempotentId}, #{item.bizNo}, #{item.executorName}, #{item.argsStr}, #{item.extAttrs}, #{item.nextTriggerAt}, #{item.taskType}, #{item.retryStatus}, #{item.createDt}) diff --git a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/SystemUserPermissionMapper.xml b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/SystemUserPermissionMapper.xml index 2b12206f..cc26e118 100644 --- a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/SystemUserPermissionMapper.xml +++ b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/SystemUserPermissionMapper.xml @@ -7,6 +7,7 @@ + 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 bf8f6df5..12cf767f 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 @@ -19,9 +19,9 @@ SELECT a.*, b.job_name, b.task_type, b.block_strategy, b.trigger_type FROM job_task_batch a join job b on a.job_id = b.id - namespace_id = #{queryDO.namespaceId} + a.namespace_id = #{queryDO.namespaceId} - and job_id = #{queryDO.jobId} + and a.job_id = #{queryDO.jobId} and a.group_name = #{queryDO.groupName} diff --git a/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/RetryDeadLetterMapper.xml b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/RetryDeadLetterMapper.xml index 337e82e5..528c39e8 100644 --- a/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/RetryDeadLetterMapper.xml +++ b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/RetryDeadLetterMapper.xml @@ -3,6 +3,7 @@ + @@ -15,16 +16,16 @@ - id, unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, create_dt, task_type + id, namespace_id, unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, create_dt, task_type - insert into retry_dead_letter (id, unique_id, group_name, scene_name, + insert into retry_dead_letter (namespace_id, unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, create_dt ) values - (#{retryDeadLetter.id,jdbcType=BIGINT}, #{retryDeadLetter.uniqueId,jdbcType=VARCHAR}, #{retryDeadLetter.groupName,jdbcType=VARCHAR}, #{retryDeadLetter.sceneName,jdbcType=VARCHAR}, + (#{retryDeadLetter.namespaceId,jdbcType=VARCHAR}, #{retryDeadLetter.uniqueId,jdbcType=VARCHAR}, #{retryDeadLetter.groupName,jdbcType=VARCHAR}, #{retryDeadLetter.sceneName,jdbcType=VARCHAR}, #{retryDeadLetter.idempotentId,jdbcType=VARCHAR}, #{retryDeadLetter.bizNo,jdbcType=VARCHAR}, #{retryDeadLetter.executorName,jdbcType=VARCHAR}, #{retryDeadLetter.argsStr,jdbcType=VARCHAR}, #{retryDeadLetter.extAttrs,jdbcType=VARCHAR}, #{retryDeadLetter.createDt,jdbcType=TIMESTAMP}) diff --git a/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/RetryTaskMapper.xml b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/RetryTaskMapper.xml index f81bd6e2..b193e345 100644 --- a/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/RetryTaskMapper.xml +++ b/easy-retry-datasource/easy-retry-postgres-datasource/src/main/resources/postgres/mapper/RetryTaskMapper.xml @@ -3,6 +3,7 @@ + @@ -19,15 +20,15 @@ - id, unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, next_trigger_at, retry_count, retry_status, + id, namespace_id, unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, next_trigger_at, retry_count, retry_status, create_dt, update_dt, task_type - INSERT INTO retry_task (unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, next_trigger_at, task_type, retry_status, create_dt) + INSERT INTO retry_task (namespace_id, unique_id, group_name, scene_name, idempotent_id, biz_no, executor_name, args_str, ext_attrs, next_trigger_at, task_type, retry_status, create_dt) VALUES - (#{item.uniqueId}, #{item.groupName}, #{item.sceneName}, #{item.idempotentId}, #{item.bizNo}, #{item.executorName}, #{item.argsStr}, #{item.extAttrs}, #{item.nextTriggerAt}, #{item.taskType}, #{item.retryStatus}, #{item.createDt}) + (#{item.namespaceId}, #{item.uniqueId}, #{item.groupName}, #{item.sceneName}, #{item.idempotentId}, #{item.bizNo}, #{item.executorName}, #{item.argsStr}, #{item.extAttrs}, #{item.nextTriggerAt}, #{item.taskType}, #{item.retryStatus}, #{item.createDt}) diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/ScanJobTaskActor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/ScanJobTaskActor.java index 99132b6a..36b68727 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/ScanJobTaskActor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/ScanJobTaskActor.java @@ -159,7 +159,7 @@ public class ScanJobTaskActor extends AbstractActor { new LambdaQueryWrapper() .select(Job::getGroupName, Job::getNextTriggerAt, Job::getBlockStrategy, Job::getTriggerType, Job::getTriggerInterval, Job::getExecutorTimeout, Job::getTaskType, Job::getResident, - Job::getId) + Job::getId, Job::getNamespaceId) .eq(Job::getJobStatus, StatusEnum.YES.getStatus()) .eq(Job::getDeleted, StatusEnum.NO.getStatus()) .in(Job::getBucketIndex, scanTask.getBuckets()) diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/generator/task/AbstractGenerator.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/generator/task/AbstractGenerator.java index f220f453..1b58edd3 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/generator/task/AbstractGenerator.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/generator/task/AbstractGenerator.java @@ -129,7 +129,7 @@ public abstract class AbstractGenerator implements TaskGenerator { } RetryTask retryTask = RetryTaskConverter.INSTANCE.toRetryTask(taskInfo); - retryTask.setNamespaceId(sceneConfig.getNamespaceId()); + retryTask.setNamespaceId(taskContext.getNamespaceId()); retryTask.setUniqueId(getIdGenerator(taskContext.getGroupName(), taskContext.getNamespaceId())); retryTask.setTaskType(TaskTypeEnum.RETRY.getType()); retryTask.setGroupName(taskContext.getGroupName()); diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java index 6101c3de..b32f692b 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java @@ -186,7 +186,8 @@ public abstract class AbstractScanGroup extends AbstractActor { .listPage(groupName, new PageDTO<>(0, systemProperties.getRetryPullPageSize()), new LambdaQueryWrapper() .select(RetryTask::getId, RetryTask::getNextTriggerAt, RetryTask::getUniqueId, - RetryTask::getGroupName, RetryTask::getRetryCount, RetryTask::getSceneName) + RetryTask::getGroupName, RetryTask::getRetryCount, RetryTask::getSceneName, + RetryTask::getNamespaceId) .eq(RetryTask::getRetryStatus, RetryStatusEnum.RUNNING.getStatus()) .eq(RetryTask::getGroupName, groupName) .eq(RetryTask::getNamespaceId, namespaceId) diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/schedule/RetryTaskSchedule.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/schedule/RetryTaskSchedule.java index 4f3d9dc7..78e9b330 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/schedule/RetryTaskSchedule.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/schedule/RetryTaskSchedule.java @@ -49,7 +49,8 @@ public class RetryTaskSchedule extends AbstractSchedule implements Lifecycle { try { Set groupNameList = accessTemplate.getGroupConfigAccess() .list(new LambdaQueryWrapper() - .select(GroupConfig::getGroupName).eq(GroupConfig::getGroupStatus, StatusEnum.YES)) + .select(GroupConfig::getGroupName) + .eq(GroupConfig::getGroupStatus, StatusEnum.YES.getStatus())) .stream().map(GroupConfig::getGroupName).collect(Collectors.toSet()); for (String groupName : groupNameList) { diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/SystemUserController.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/SystemUserController.java index bd24d7ae..a1fcaf60 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/SystemUserController.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/SystemUserController.java @@ -1,6 +1,7 @@ package com.aizuda.easy.retry.server.web.controller; import com.aizuda.easy.retry.server.web.model.request.UserSessionVO; +import com.aizuda.easy.retry.server.web.model.response.PermissionsResponseVO; import com.aizuda.easy.retry.server.web.service.SystemUserService; import com.aizuda.easy.retry.server.web.model.base.PageResult; import com.aizuda.easy.retry.server.web.model.request.SystemUserQueryVO; @@ -62,6 +63,12 @@ public class SystemUserController { return systemUserService.getSystemUserByUserName(username); } + @LoginRequired(role = RoleEnum.ADMIN) + @GetMapping("/user-permissions/{id}") + public List getSystemUserPermissionByUserName(@PathVariable("id") Long id) { + return systemUserService.getSystemUserPermissionByUserName(id); + } + @LoginRequired @DeleteMapping("/user/{id}") public boolean delUser(@PathVariable("id") Long id) { diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/JobRequestVO.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/JobRequestVO.java index ba99ef3d..b5b62570 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/JobRequestVO.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/JobRequestVO.java @@ -29,12 +29,6 @@ public class JobRequestVO { @NotBlank(message = "jobName 不能为空") private String jobName; - /** - * 命名空间id - */ - @NotNull(message = "命名空间id 不能为空") - private String namespaceId; - /** * 重试状态 0、关闭、1、开启 */ diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/NotifyConfigRequestVO.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/NotifyConfigRequestVO.java index 987f68d3..b6518cd6 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/NotifyConfigRequestVO.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/NotifyConfigRequestVO.java @@ -20,12 +20,6 @@ public class NotifyConfigRequestVO { @Pattern(regexp = "^[A-Za-z0-9_]{1,64}$", message = "仅支持长度为1~64字符且类型为数字、字母和下划线") private String groupName; - /** - * 命名空间id - */ - @NotNull(message = "命名空间id 不能为空") - private String namespaceId; - private String sceneName; @NotNull(message = "通知状态不能为空") diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/response/PermissionsResponseVO.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/response/PermissionsResponseVO.java index f97a01e9..db7f9f09 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/response/PermissionsResponseVO.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/response/PermissionsResponseVO.java @@ -2,6 +2,9 @@ package com.aizuda.easy.retry.server.web.model.response; import lombok.Data; +import java.util.List; +import java.util.Set; + /** * @author: xiaowoniu * @date : 2023-11-23 14:01 @@ -12,4 +15,6 @@ public class PermissionsResponseVO { private String groupName; private String namespaceId; + private String namespaceName; + private Set groupNames; } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/SystemUserService.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/SystemUserService.java index 93c09ac9..76ed4d87 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/SystemUserService.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/SystemUserService.java @@ -4,6 +4,7 @@ import com.aizuda.easy.retry.server.web.model.request.UserSessionVO; import com.aizuda.easy.retry.server.web.model.base.PageResult; import com.aizuda.easy.retry.server.web.model.request.SystemUserQueryVO; import com.aizuda.easy.retry.server.web.model.request.SystemUserRequestVO; +import com.aizuda.easy.retry.server.web.model.response.PermissionsResponseVO; import com.aizuda.easy.retry.server.web.model.response.SystemUserResponseVO; import java.util.List; @@ -31,4 +32,6 @@ public interface SystemUserService { SystemUserResponseVO getSystemUserByUserName(String username); boolean delUser(Long id); + + List getSystemUserPermissionByUserName(Long id); } 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 78cd506f..24780744 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 @@ -122,6 +122,7 @@ public class JobServiceImpl implements JobService { job.setBucketIndex(HashUtil.bkdrHash(jobRequestVO.getGroupName() + jobRequestVO.getJobName()) % systemProperties.getBucketTotal()); job.setNextTriggerAt(calculateNextTriggerAt(jobRequestVO, DateUtils.toNowMilli())); + job.setNamespaceId(UserSessionUtils.currentUserSession().getNamespaceId()); return 1 == jobMapper.insert(job); } 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 c75283f0..c00e5c77 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 @@ -53,7 +53,7 @@ public class NotifyConfigServiceImpl implements NotifyConfigService { public Boolean saveNotify(NotifyConfigRequestVO requestVO) { NotifyConfig notifyConfig = NotifyConfigConverter.INSTANCE.toNotifyConfig(requestVO); notifyConfig.setCreateDt(LocalDateTime.now()); - + notifyConfig.setNamespaceId(UserSessionUtils.currentUserSession().getNamespaceId()); ConfigAccess notifyConfigAccess = accessTemplate.getNotifyConfigAccess(); Assert.isTrue(1 == notifyConfigAccess.insert(notifyConfig), 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 b9d8254a..bc71d7ed 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 @@ -122,8 +122,8 @@ public class SceneConfigServiceImpl implements SceneConfigService { Assert.isTrue(1 == accessTemplate.getSceneConfigAccess().update(sceneConfig, new LambdaUpdateWrapper() .eq(SceneConfig::getNamespaceId, namespaceId) - .eq(SceneConfig::getGroupName, sceneConfig.getGroupName()) - .eq(SceneConfig::getSceneName, sceneConfig.getSceneName())), + .eq(SceneConfig::getGroupName, requestVO.getGroupName()) + .eq(SceneConfig::getSceneName, requestVO.getSceneName())), () -> new EasyRetryServerException("failed to update scene. sceneConfig:[{}]", JsonUtil.toJsonString(sceneConfig))); return Boolean.TRUE; 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 c7b2cd7d..62d98486 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 @@ -1,12 +1,15 @@ package com.aizuda.easy.retry.server.web.service.impl; import cn.hutool.core.lang.Assert; +import cn.hutool.core.lang.Pair; 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.common.triple.Triple; import com.aizuda.easy.retry.server.web.model.request.UserPermissionRequestVO; import com.aizuda.easy.retry.server.web.model.request.UserSessionVO; +import com.aizuda.easy.retry.server.web.model.response.PermissionsResponseVO; import com.aizuda.easy.retry.server.web.service.convert.NamespaceResponseVOConverter; import com.aizuda.easy.retry.server.web.service.convert.PermissionsResponseVOConverter; import com.aizuda.easy.retry.template.datasource.persistence.mapper.NamespaceMapper; @@ -27,14 +30,13 @@ import com.aizuda.easy.retry.server.web.model.base.PageResult; import com.aizuda.easy.retry.server.web.model.request.SystemUserQueryVO; import com.aizuda.easy.retry.server.web.model.request.SystemUserRequestVO; import com.aizuda.easy.retry.server.web.model.response.SystemUserResponseVO; +import com.google.common.collect.Lists; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; -import java.util.Date; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -230,30 +232,57 @@ public class SystemUserServiceImpl implements SystemUserService { } SystemUserResponseVO responseVO = SystemUserResponseVOConverter.INSTANCE.convert(systemUser); - if (RoleEnum.ADMIN.getRoleId().equals(systemUser.getRole())) { - return responseVO; - } + getPermission(systemUser.getRole(), systemUser.getId(), responseVO); List systemUserPermissions = systemUserPermissionMapper.selectList( - new LambdaQueryWrapper() - .select(SystemUserPermission::getNamespaceId, SystemUserPermission::getGroupName) - .eq(SystemUserPermission::getSystemUserId, responseVO.getId())); - - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.select(Namespace::getId, Namespace::getUniqueId, Namespace::getName); - queryWrapper.in(Namespace::getUniqueId, systemUserPermissions.stream() - .map(SystemUserPermission::getNamespaceId).distinct().collect(Collectors.toList())); - List namespaces = namespaceMapper.selectList(queryWrapper); - responseVO.setNamespaceIds( - NamespaceResponseVOConverter.INSTANCE.toNamespaceResponseVOs(namespaces)); - + new LambdaQueryWrapper() + .select(SystemUserPermission::getNamespaceId, SystemUserPermission::getGroupName) + .eq(SystemUserPermission::getSystemUserId, responseVO.getId())); responseVO.setPermissions(PermissionsResponseVOConverter.INSTANCE.toPermissionsResponseVOs(systemUserPermissions)); + return responseVO; } @Override + public List getSystemUserPermissionByUserName(Long id) { + + List systemUserPermissions = systemUserPermissionMapper.selectList( + new LambdaQueryWrapper() + .select(SystemUserPermission::getNamespaceId, SystemUserPermission::getGroupName) + .eq(SystemUserPermission::getSystemUserId, id)); + + if (CollectionUtils.isEmpty(systemUserPermissions)) { + return Lists.newArrayList(); + } + + Map> permissionsMap = systemUserPermissions.stream().collect(Collectors.groupingBy(SystemUserPermission::getNamespaceId)); + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(Namespace::getId, Namespace::getUniqueId, Namespace::getName); + queryWrapper.in(Namespace::getUniqueId, permissionsMap.keySet()); + List namespaces = namespaceMapper.selectList(queryWrapper); + Map map = namespaces.stream().collect(Collectors.toMap(Namespace::getUniqueId, Namespace::getName)); + + List response = new ArrayList<>(); + permissionsMap.forEach((namespaceId, values) -> { + PermissionsResponseVO responseVO = new PermissionsResponseVO(); + responseVO.setNamespaceName(map.get(namespaceId)); + responseVO.setNamespaceId(namespaceId); + responseVO.setGroupNames(values.stream().map(SystemUserPermission::getGroupName).collect(Collectors.toSet())); + response.add(responseVO); + }); + + return response; + } + + @Override + @Transactional public boolean delUser(final Long id) { + systemUserPermissionMapper.delete( + new LambdaQueryWrapper() + .eq(SystemUserPermission::getSystemUserId, id) + ); return 1 == systemUserMapper.deleteById(id); } diff --git a/frontend/src/api/manage.js b/frontend/src/api/manage.js index 58ce92cf..8b2e52ff 100644 --- a/frontend/src/api/manage.js +++ b/frontend/src/api/manage.js @@ -36,6 +36,7 @@ const api = { delUser: '/user/', saveUser: '/user', systemUserByUserName: '/user/username/user-info', + systemUserPermissionByUserId: '/user-permissions/', countTask: '/dashboard/task/count', countDispatch: '/dashboard/dispatch/count', countActivePod: '/dashboard/active-pod/count', @@ -359,6 +360,13 @@ export function getSystemUserByUserName (parameter) { }) } +export function getSystemUserPermissionByUserId (id) { + return request({ + url: api.systemUserPermissionByUserId + id, + method: 'get' + }) +} + export function getNotifyConfigList (parameter) { return request({ url: api.notifyConfigList, diff --git a/frontend/src/components/Drawer/Drawer.vue b/frontend/src/components/Drawer/Drawer.vue new file mode 100644 index 00000000..beda6de8 --- /dev/null +++ b/frontend/src/components/Drawer/Drawer.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/frontend/src/components/Drawer/index.js b/frontend/src/components/Drawer/index.js new file mode 100644 index 00000000..fbc0ba50 --- /dev/null +++ b/frontend/src/components/Drawer/index.js @@ -0,0 +1,3 @@ +import Drawer from './Drawer.vue' + +export default Drawer diff --git a/frontend/src/components/index.js b/frontend/src/components/index.js index 4a16a1d6..6837a3cb 100644 --- a/frontend/src/components/index.js +++ b/frontend/src/components/index.js @@ -25,6 +25,7 @@ import IconSelector from '@/components/IconSelector' import TagSelect from '@/components/TagSelect' import StandardFormRow from '@/components/StandardFormRow' import ArticleListContent from '@/components/ArticleListContent' +import Drawer from '@/components/Drawer' import Dialog from '@/components/Dialog' @@ -53,6 +54,6 @@ export { StandardFormRow, ArticleListContent, G2Line, - + Drawer, Dialog } diff --git a/frontend/src/config/router.config.js b/frontend/src/config/router.config.js index 1158b339..aa9da1bf 100644 --- a/frontend/src/config/router.config.js +++ b/frontend/src/config/router.config.js @@ -76,20 +76,20 @@ export const asyncRouterMap = [ name: 'RetryTaskInfo', hidden: true, component: () => import('@/views/task/RetryTaskInfo'), - meta: { title: '任务管理详情', icon: 'profile', keepAlive: true, permission: ['retryTask'] } + meta: { title: '重试任务详情', icon: 'profile', keepAlive: true, permission: ['retryTask'] } }, { path: '/retry/dead-letter/list', name: 'RetryDeadLetterList', component: () => import('@/views/task/RetryDeadLetterList'), - meta: { title: '死信队列', icon: 'profile', permission: ['retryDeadLetter'] } + meta: { title: '死信任务', icon: 'profile', permission: ['retryDeadLetter'] } }, { path: '/retry/dead-letter/info', name: 'RetryDeadLetterInfo', hidden: true, component: () => import('@/views/task/RetryDeadLetterInfo'), - meta: { title: '死信队列管理详情', icon: 'profile', permission: ['retryDeadLetter'] } + meta: { title: '死信任务详情', icon: 'profile', permission: ['retryDeadLetter'] } }, { path: '/retry/log/list', @@ -143,14 +143,14 @@ export const asyncRouterMap = [ path: '/job/list', name: 'JobList', component: () => import('@/views/job/JobList'), - meta: { title: '任务信息', icon: 'profile', permission: ['job'] } + meta: { title: '任务信息', keepAlive: true, icon: 'profile', permission: ['job'] } }, { path: '/job/info', name: 'JobInfo', hidden: true, component: () => import('@/views/job/JobInfo'), - meta: { title: '定时任务详情', icon: 'profile', permission: ['job'] } + meta: { title: '定时任务详情', keepAlive: true, icon: 'profile', permission: ['job'] } }, { path: '/job/config', diff --git a/frontend/src/views/job/JobBatchInfo.vue b/frontend/src/views/job/JobBatchInfo.vue index 46281aac..905adcf5 100644 --- a/frontend/src/views/job/JobBatchInfo.vue +++ b/frontend/src/views/job/JobBatchInfo.vue @@ -1,10 +1,10 @@ diff --git a/frontend/src/views/task/RetryDeadLetterList.vue b/frontend/src/views/task/RetryDeadLetterList.vue index fec63fec..4b2a015b 100644 --- a/frontend/src/views/task/RetryDeadLetterList.vue +++ b/frontend/src/views/task/RetryDeadLetterList.vue @@ -66,10 +66,10 @@ :data="loadData" :alert="options.alert" :rowSelection="options.rowSelection" - :scroll="{ x: 2000 }" + :scroll="{ x: 1800 }" > - - {{ record.id }} + + {{ text }} @@ -110,6 +110,18 @@ + + + + @@ -125,12 +137,15 @@ import { deleteRetryDeadLetter } from '@/api/manage' -import { STable } from '@/components' +import { Drawer, STable } from '@/components' import moment from 'moment' +import RetryDeadLetterInfo from '@/views/task/RetryDeadLetterInfo' export default { name: 'RetryDeadLetterList', components: { + RetryDeadLetterInfo, + Drawer, AInput, ATextarea, STable @@ -157,9 +172,10 @@ export default { // 表头 columns: [ { - title: '#', - scopedSlots: { customRender: 'serial' }, - width: '5%' + title: 'UniqueId', + dataIndex: 'uniqueId', + fixed: 'left', + scopedSlots: { customRender: 'uniqueId' } }, { title: '组名称', @@ -171,11 +187,6 @@ export default { dataIndex: 'sceneName', ellipsis: true }, - { - title: 'UniqueId', - dataIndex: 'uniqueId', - width: '10%' - }, { title: '幂等id', dataIndex: 'idempotentId', @@ -189,15 +200,13 @@ export default { { title: '任务类型', dataIndex: 'taskType', - scopedSlots: { customRender: 'taskType' }, - width: '5%' + scopedSlots: { customRender: 'taskType' } }, { title: '创建时间', dataIndex: 'createDt', sorter: true, - customRender: (text) => moment(text).format('YYYY-MM-DD HH:mm:ss'), - ellipsis: true + customRender: (text) => moment(text).format('YYYY-MM-DD HH:mm:ss') }, { title: '操作', @@ -227,7 +236,9 @@ export default { }, optionAlertShow: false, groupNameList: [], - sceneList: [] + sceneList: [], + currentShowRecord: null, + openDrawer: false } }, created () { @@ -267,6 +278,7 @@ export default { this.advanced = !this.advanced }, handleInfo (record) { + record = record || this.currentShowRecord this.$router.push({ path: '/retry/dead-letter/info', query: { id: record.id, groupName: record.groupName } }) }, onClick ({ key }) { @@ -314,6 +326,17 @@ export default { onSelectChange (selectedRowKeys, selectedRows) { this.selectedRowKeys = selectedRowKeys this.selectedRows = selectedRows + }, + handlerOpenDrawer (record) { + this.currentShowRecord = record + this.openDrawer = true + setTimeout(() => { + this.$refs.retryDeadLetterInfoRef.retryDeadLetterById(record.id, record.groupName) + }, 200) + }, + onClose () { + this.openDrawer = false + this.currentShowRecord = null } } } diff --git a/frontend/src/views/task/RetryLogInfo.vue b/frontend/src/views/task/RetryLogInfo.vue index 57945f8b..ac243d64 100644 --- a/frontend/src/views/task/RetryLogInfo.vue +++ b/frontend/src/views/task/RetryLogInfo.vue @@ -1,10 +1,10 @@ + + + + + @@ -86,12 +99,15 @@ import ATextarea from 'ant-design-vue/es/input/TextArea' import AInput from 'ant-design-vue/es/input/Input' import { getAllGroupNameList, getRetryTaskLogPage, getSceneList } from '@/api/manage' -import { STable } from '@/components' +import { Drawer, STable } from '@/components' import moment from 'moment' +import RetryLogInfo from '@/views/task/RetryLogInfo' export default { name: 'RetryTaskLog', components: { + RetryLogInfo, + Drawer, AInput, ATextarea, STable @@ -140,15 +156,11 @@ export default { }, // 表头 columns: [ - { - title: '#', - scopedSlots: { customRender: 'serial' }, - width: '5%' - }, { title: 'UniqueId', dataIndex: 'uniqueId', - width: '10%' + width: '10%', + scopedSlots: { customRender: 'uniqueId' } }, { title: '组名称', @@ -227,7 +239,9 @@ export default { sceneList: [], groupName: '', uniqueId: '', - sceneName: '' + sceneName: '', + currentShowRecord: null, + openDrawer: false } }, created () { @@ -257,8 +271,19 @@ export default { this.advanced = !this.advanced }, handleInfo (record) { - console.log(record) + record = record || this.currentShowRecord this.$router.push({ path: '/retry/log/info', query: { id: record.id } }) + }, + handlerOpenDrawer (record) { + this.currentShowRecord = record + this.openDrawer = true + setTimeout(() => { + this.$refs.retryLogInfoRef.getRetryTaskLogById(record.id) + }, 1000) + }, + onClose () { + this.openDrawer = false + this.currentShowRecord = null } } } diff --git a/frontend/src/views/task/RetryTaskInfo.vue b/frontend/src/views/task/RetryTaskInfo.vue index f832e48c..c062ec74 100644 --- a/frontend/src/views/task/RetryTaskInfo.vue +++ b/frontend/src/views/task/RetryTaskInfo.vue @@ -1,10 +1,10 @@