diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/access/TaskAccess.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/access/TaskAccess.java index ec77cd51..0ba69194 100644 --- a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/access/TaskAccess.java +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/access/TaskAccess.java @@ -16,22 +16,22 @@ import java.util.List; */ public interface TaskAccess extends Access { - List list(String groupName, LambdaQueryWrapper query); + List list(String groupName, String namespaceId, LambdaQueryWrapper query); - T one(String groupName, LambdaQueryWrapper query); + T one(String groupName, String namespaceId, LambdaQueryWrapper query); - int update(String groupName, T t, LambdaUpdateWrapper query); + int update(String groupName, String namespaceId, T t, LambdaUpdateWrapper query); - int updateById(String groupName, T t); + int updateById(String groupName, String namespaceId, T t); - int delete(String groupName, LambdaQueryWrapper query); + int delete(String groupName, String namespaceId, LambdaQueryWrapper query); - int insert(String groupName, T t); + int insert(String groupName, String namespaceId, T t); - int batchInsert(String groupName, List list); + int batchInsert(String groupName, String namespaceId, List list); - PageDTO listPage(String groupName, PageDTO iPage, LambdaQueryWrapper query); + PageDTO listPage(String groupName, String namespaceId, PageDTO iPage, LambdaQueryWrapper query); - long count(String groupName, LambdaQueryWrapper query); + long count(String groupName, String namespaceId, LambdaQueryWrapper query); } diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/access/task/AbstractTaskAccess.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/access/task/AbstractTaskAccess.java index 0d3d9913..fb729fcc 100644 --- a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/access/task/AbstractTaskAccess.java +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/access/task/AbstractTaskAccess.java @@ -33,60 +33,61 @@ public abstract class AbstractTaskAccess implements TaskAccess { * 设置分区 * * @param groupName 组名称 + * @param namespaceId 命名空间id */ - public void setPartition(String groupName) { - RequestDataHelper.setPartition(groupName); + public void setPartition(String groupName, String namespaceId) { + RequestDataHelper.setPartition(groupName, namespaceId); } @Override - public List list(String groupName, LambdaQueryWrapper query) { - setPartition(groupName); + public List list(String groupName, String namespaceId, LambdaQueryWrapper query) { + setPartition(groupName, namespaceId); return doList(query); } @Override - public int update(String groupName, T t, LambdaUpdateWrapper query) { - setPartition(groupName); + public int update(String groupName, String namespaceId, T t, LambdaUpdateWrapper query) { + setPartition(groupName, namespaceId); return doUpdate(t, query); } protected abstract int doUpdate(T t, LambdaUpdateWrapper query); @Override - public int updateById(String groupName, T t) { - setPartition(groupName); + public int updateById(String groupName, String namespaceId, T t) { + setPartition(groupName, namespaceId); return doUpdateById(t); } @Override - public int delete(String groupName, LambdaQueryWrapper query) { - setPartition(groupName); + public int delete(String groupName, String namespaceId, LambdaQueryWrapper query) { + setPartition(groupName, namespaceId); return doDelete(query); } @Override - public int insert(String groupName, T t) { - setPartition(groupName); + public int insert(String groupName, String namespaceId, T t) { + setPartition(groupName, namespaceId); return doInsert(t); } @Override - public int batchInsert(String groupName, List list) { - setPartition(groupName); + public int batchInsert(String groupName, String namespaceId, List list) { + setPartition(groupName, namespaceId); return doBatchInsert(list); } protected abstract int doBatchInsert(List list); @Override - public PageDTO listPage(final String groupName, final PageDTO iPage, final LambdaQueryWrapper query) { - setPartition(groupName); + public PageDTO listPage(String groupName, String namespaceId, final PageDTO iPage, final LambdaQueryWrapper query) { + setPartition(groupName, namespaceId); return doListPage(iPage, query); } @Override - public T one(String groupName, LambdaQueryWrapper query) { - setPartition(groupName); + public T one(String groupName, String namespaceId, LambdaQueryWrapper query) { + setPartition(groupName, namespaceId); return doOne(query); } @@ -95,8 +96,8 @@ public abstract class AbstractTaskAccess implements TaskAccess { protected abstract PageDTO doListPage(final PageDTO iPage, final LambdaQueryWrapper query); @Override - public long count(final String groupName, final LambdaQueryWrapper query) { - setPartition(groupName); + public long count(String groupName, String namespaceId, final LambdaQueryWrapper query) { + setPartition(groupName, namespaceId); return doCount(query); } diff --git a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/utils/RequestDataHelper.java b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/utils/RequestDataHelper.java index 1e8cc4ab..c8e09e2e 100644 --- a/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/utils/RequestDataHelper.java +++ b/easy-retry-datasource/easy-retry-datasource-template/src/main/java/com/aizuda/easy/retry/template/datasource/utils/RequestDataHelper.java @@ -55,16 +55,19 @@ public class RequestDataHelper { * * @param groupName 组名称 */ - public static void setPartition(String groupName) { + public static void setPartition(String groupName, String namespaceId) { - if (StrUtil.isBlank(groupName)) { - throw new EasyRetryDatasourceException("组名称不能为空"); + if (StrUtil.isBlank(groupName) && StrUtil.isNotBlank(namespaceId)) { + throw new EasyRetryDatasourceException("组名称或者命名空间ID不能为空"); } GroupConfigMapper groupConfigMapper = SpringContext.getBeanByType(GroupConfigMapper.class); - GroupConfig groupConfig = groupConfigMapper.selectOne(new LambdaQueryWrapper() - .eq(GroupConfig::getGroupName, groupName)); + GroupConfig groupConfig = groupConfigMapper.selectOne( + new LambdaQueryWrapper() + .select(GroupConfig::getGroupPartition) + .eq(GroupConfig::getNamespaceId, namespaceId) + .eq(GroupConfig::getGroupName, groupName)); if (Objects.isNull(groupConfig)) { throw new EasyRetryDatasourceException("groupName:[{}]不存在", groupName); } @@ -105,7 +108,6 @@ public class RequestDataHelper { } - public static void remove() { REQUEST_DATA.remove(); } diff --git a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/ServerNodeMapper.xml b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/ServerNodeMapper.xml index ce01502b..e43d8038 100644 --- a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/ServerNodeMapper.xml +++ b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/ServerNodeMapper.xml @@ -22,10 +22,10 @@ insert into server_node (namespace_id, group_name, host_id, host_ip, host_port, expire_at, node_type, ext_attrs, context_path, create_dt) values - - #{item.namespaceId,jdbcType=VARCHAR}, #{item.groupName,jdbcType=VARCHAR}, #{item.hostId,jdbcType=VARCHAR}, #{item.hostIp,jdbcType=VARCHAR}, + + (#{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} + #{item.extAttrs,jdbcType=VARCHAR}, #{item.contextPath,jdbcType=VARCHAR}, #{item.createDt,jdbcType=TIMESTAMP}) ON DUPLICATE KEY UPDATE expire_at = values(`expire_at`) diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/dto/NotifyConfigPartitionTask.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/dto/NotifyConfigPartitionTask.java new file mode 100644 index 00000000..8bc6d44d --- /dev/null +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/dto/NotifyConfigPartitionTask.java @@ -0,0 +1,39 @@ +package com.aizuda.easy.retry.server.retry.task.dto; + +import com.aizuda.easy.retry.server.common.dto.PartitionTask; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * @author xiaowoniu + * @date 2023-10-25 22:23:24 + * @since 2.5.0 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class NotifyConfigPartitionTask extends PartitionTask { + + + private String namespaceId; + + private String groupName; + + private String sceneName; + + private Integer notifyStatus; + + private Integer notifyType; + + private String notifyAttribute; + + private Integer notifyThreshold; + + private Integer notifyScene; + + private Integer rateLimiterStatus; + + private Integer rateLimiterThreshold; + +} 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 1b58edd3..a6686135 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 @@ -61,34 +61,33 @@ public abstract class AbstractGenerator implements TaskGenerator { //客户端上报任务根据幂等id去重 List taskInfos = taskContext.getTaskInfos().stream().collect(Collectors.collectingAndThen( - Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TaskContext.TaskInfo::getIdempotentId))), - ArrayList::new)); + Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TaskContext.TaskInfo::getIdempotentId))), + ArrayList::new)); Set idempotentIdSet = taskInfos.stream().map(TaskContext.TaskInfo::getIdempotentId) - .collect(Collectors.toSet()); + .collect(Collectors.toSet()); TaskAccess retryTaskAccess = accessTemplate.getRetryTaskAccess(); // 获取相关的任务,用户幂等校验 - RequestDataHelper.setPartition(taskContext.getGroupName()); - List retryTasks = retryTaskAccess.list(taskContext.getGroupName(), - new LambdaQueryWrapper() - .eq(RetryTask::getNamespaceId, taskContext.getNamespaceId()) - .eq(RetryTask::getGroupName, taskContext.getGroupName()) - .eq(RetryTask::getSceneName, taskContext.getSceneName()) - .eq(RetryTask::getRetryStatus, RetryStatusEnum.RUNNING.getStatus()) - .eq(RetryTask::getTaskType, TaskTypeEnum.RETRY.getType()) - .in(RetryTask::getIdempotentId, idempotentIdSet)); + List retryTasks = retryTaskAccess.list(taskContext.getGroupName(), taskContext.getNamespaceId(), + new LambdaQueryWrapper() + .eq(RetryTask::getNamespaceId, taskContext.getNamespaceId()) + .eq(RetryTask::getGroupName, taskContext.getGroupName()) + .eq(RetryTask::getSceneName, taskContext.getSceneName()) + .eq(RetryTask::getRetryStatus, RetryStatusEnum.RUNNING.getStatus()) + .eq(RetryTask::getTaskType, TaskTypeEnum.RETRY.getType()) + .in(RetryTask::getIdempotentId, idempotentIdSet)); Map> retryTaskMap = retryTasks.stream() - .collect(Collectors.groupingBy(RetryTask::getIdempotentId)); + .collect(Collectors.groupingBy(RetryTask::getIdempotentId)); List waitInsertTasks = new ArrayList<>(); List waitInsertTaskLogs = new ArrayList<>(); LocalDateTime now = LocalDateTime.now(); for (TaskContext.TaskInfo taskInfo : taskInfos) { Pair, List> pair = doConvertTask(retryTaskMap, taskContext, now, taskInfo, - sceneConfig); + sceneConfig); waitInsertTasks.addAll(pair.getKey()); waitInsertTaskLogs.addAll(pair.getValue()); } @@ -98,10 +97,11 @@ public abstract class AbstractGenerator implements TaskGenerator { } Assert.isTrue( - waitInsertTasks.size() == retryTaskAccess.batchInsert(taskContext.getGroupName(), waitInsertTasks), - () -> new EasyRetryServerException("failed to report data")); + waitInsertTasks.size() == retryTaskAccess.batchInsert(taskContext.getGroupName(), + taskContext.getNamespaceId(), waitInsertTasks), + () -> new EasyRetryServerException("failed to report data")); Assert.isTrue(waitInsertTaskLogs.size() == retryTaskLogMapper.batchInsert(waitInsertTaskLogs), - () -> new EasyRetryServerException("新增重试日志失败")); + () -> new EasyRetryServerException("新增重试日志失败")); } /** @@ -111,17 +111,17 @@ public abstract class AbstractGenerator implements TaskGenerator { * @param sceneConfig */ private Pair, List> doConvertTask(Map> retryTaskMap, - TaskContext taskContext, LocalDateTime now, - TaskInfo taskInfo, SceneConfig sceneConfig) { + TaskContext taskContext, LocalDateTime now, + TaskInfo taskInfo, SceneConfig sceneConfig) { List waitInsertTasks = new ArrayList<>(); List waitInsertTaskLogs = new ArrayList<>(); // 判断是否存在与幂等ID相同的任务 List list = retryTaskMap.getOrDefault(taskInfo.getIdempotentId(), new ArrayList<>()).stream() - .filter(retryTask -> - taskContext.getGroupName().equals(retryTask.getGroupName()) - && taskContext.getNamespaceId().equals(retryTask.getNamespaceId()) - && taskContext.getSceneName().equals(retryTask.getSceneName())).collect(Collectors.toList()); + .filter(retryTask -> + taskContext.getGroupName().equals(retryTask.getGroupName()) + && taskContext.getNamespaceId().equals(retryTask.getNamespaceId()) + && taskContext.getSceneName().equals(retryTask.getSceneName())).collect(Collectors.toList()); // 说明存在相同的任务 if (!CollectionUtils.isEmpty(list)) { LogUtils.warn(log, "interrupted reporting in retrying task. [{}]", JsonUtil.toJsonString(taskInfo)); @@ -164,21 +164,21 @@ public abstract class AbstractGenerator implements TaskGenerator { private SceneConfig checkAndInitScene(TaskContext taskContext) { SceneConfig sceneConfig = accessTemplate.getSceneConfigAccess() - .getSceneConfigByGroupNameAndSceneName(taskContext.getGroupName(), taskContext.getSceneName(), - taskContext.getNamespaceId()); + .getSceneConfigByGroupNameAndSceneName(taskContext.getGroupName(), taskContext.getSceneName(), + taskContext.getNamespaceId()); if (Objects.isNull(sceneConfig)) { GroupConfig groupConfig = accessTemplate.getGroupConfigAccess() - .getGroupConfigByGroupName(taskContext.getGroupName(), taskContext.getNamespaceId()); + .getGroupConfigByGroupName(taskContext.getGroupName(), taskContext.getNamespaceId()); if (Objects.isNull(groupConfig)) { throw new EasyRetryServerException( - "failed to report data, no group configuration found. groupName:[{}]", taskContext.getGroupName()); + "failed to report data, no group configuration found. groupName:[{}]", taskContext.getGroupName()); } if (groupConfig.getInitScene().equals(StatusEnum.NO.getStatus())) { throw new EasyRetryServerException( - "failed to report data, no scene configuration found. groupName:[{}] sceneName:[{}]", - taskContext.getGroupName(), taskContext.getSceneName()); + "failed to report data, no scene configuration found. groupName:[{}] sceneName:[{}]", + taskContext.getGroupName(), taskContext.getSceneName()); } else { // 若配置了默认初始化场景配置,则发现上报数据的时候未配置场景,默认生成一个场景 sceneConfig = initScene(taskContext.getGroupName(), taskContext.getSceneName(), taskContext.getNamespaceId()); @@ -206,7 +206,7 @@ public abstract class AbstractGenerator implements TaskGenerator { sceneConfig.setMaxRetryCount(DelayLevelEnum._21.getLevel()); sceneConfig.setDescription("自动初始化场景"); Assert.isTrue(1 == accessTemplate.getSceneConfigAccess().insert(sceneConfig), - () -> new EasyRetryServerException("init scene error")); + () -> new EasyRetryServerException("init scene error")); return sceneConfig; } diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/service/RetryService.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/service/RetryService.java index 1aadfa1d..fc7a2940 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/service/RetryService.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/service/RetryService.java @@ -17,8 +17,9 @@ public interface RetryService { * 迁移到达最大重试次数到死信队列 * 删除重试完成的数据 * - * @param groupId 组id + * @param groupName 组id + * @param namespaceId 命名空间id * @return true- 处理成功 false- 处理失败 */ - Boolean moveDeadLetterAndDelFinish(String groupId); + Boolean moveDeadLetterAndDelFinish(String groupName, String namespaceId); } diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/service/impl/RetryServiceImpl.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/service/impl/RetryServiceImpl.java index 5282e608..e8f1cc49 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/service/impl/RetryServiceImpl.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/service/impl/RetryServiceImpl.java @@ -1,4 +1,5 @@ package com.aizuda.easy.retry.server.retry.task.service.impl; + import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import com.aizuda.easy.retry.common.core.enums.RetryStatusEnum; @@ -20,6 +21,7 @@ import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; + import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -42,16 +44,17 @@ public class RetryServiceImpl implements RetryService { @Transactional @Override - public Boolean moveDeadLetterAndDelFinish(String groupName) { + public Boolean moveDeadLetterAndDelFinish(String groupName, String namespaceId) { TaskAccess retryTaskAccess = accessTemplate.getRetryTaskAccess(); - RequestDataHelper.setPartition(groupName); - List callbackRetryTasks = retryTaskAccess.listPage(groupName, new PageDTO<>(0, 100), - new LambdaQueryWrapper() - .in(RetryTask::getRetryStatus, RetryStatusEnum.MAX_COUNT.getStatus(), - RetryStatusEnum.FINISH.getStatus()) - .eq(RetryTask::getTaskType, TaskTypeEnum.CALLBACK.getType()) - .eq(RetryTask::getGroupName, groupName)).getRecords(); + RequestDataHelper.setPartition(groupName, namespaceId); + List callbackRetryTasks = retryTaskAccess.listPage(groupName, namespaceId, new PageDTO<>(0, 100), + new LambdaQueryWrapper() + .eq(RetryTask::getNamespaceId, namespaceId) + .in(RetryTask::getRetryStatus, RetryStatusEnum.MAX_COUNT.getStatus(), + RetryStatusEnum.FINISH.getStatus()) + .eq(RetryTask::getTaskType, TaskTypeEnum.CALLBACK.getType()) + .eq(RetryTask::getGroupName, groupName)).getRecords(); if (CollectionUtils.isEmpty(callbackRetryTasks)) { return Boolean.TRUE; @@ -62,44 +65,46 @@ public class RetryServiceImpl implements RetryService { return callbackTaskUniqueId.substring(callbackTaskUniqueId.lastIndexOf(StrUtil.UNDERLINE) + 1); }).collect(Collectors.toSet()); - List retryTasks = accessTemplate.getRetryTaskAccess().list(groupName, new LambdaQueryWrapper() - .eq(RetryTask::getTaskType, TaskTypeEnum.RETRY.getType()) - .in(RetryTask::getUniqueId, uniqueIdSet) - ); + List retryTasks = accessTemplate.getRetryTaskAccess() + .list(groupName, namespaceId, new LambdaQueryWrapper() + .eq(RetryTask::getNamespaceId, namespaceId) + .eq(RetryTask::getTaskType, TaskTypeEnum.RETRY.getType()) + .in(RetryTask::getUniqueId, uniqueIdSet) + ); // 迁移重试失败的数据 List waitMoveDeadLetters = new ArrayList<>(); List maxCountRetryTaskList = retryTasks.stream() - .filter(retryTask -> retryTask.getRetryStatus().equals(RetryStatusEnum.MAX_COUNT.getStatus())).collect( - Collectors.toList()); + .filter(retryTask -> retryTask.getRetryStatus().equals(RetryStatusEnum.MAX_COUNT.getStatus())).collect( + Collectors.toList()); if (!CollectionUtils.isEmpty(maxCountRetryTaskList)) { waitMoveDeadLetters.addAll(maxCountRetryTaskList); } List maxCountCallbackRetryTaskList = callbackRetryTasks.stream() - .filter(retryTask -> retryTask.getRetryStatus().equals(RetryStatusEnum.MAX_COUNT.getStatus())).collect( - Collectors.toList()); + .filter(retryTask -> retryTask.getRetryStatus().equals(RetryStatusEnum.MAX_COUNT.getStatus())).collect( + Collectors.toList()); if (!CollectionUtils.isEmpty(maxCountRetryTaskList)) { waitMoveDeadLetters.addAll(maxCountCallbackRetryTaskList); } - moveDeadLetters(groupName, waitMoveDeadLetters); + moveDeadLetters(groupName, namespaceId, waitMoveDeadLetters); // 删除重试完成的数据 Set waitDelRetryFinishSet = new HashSet<>(); Set finishRetryIdList = retryTasks.stream() - .filter(retryTask -> retryTask.getRetryStatus().equals(RetryStatusEnum.FINISH.getStatus())) - .map(RetryTask::getId) - .collect(Collectors.toSet()); + .filter(retryTask -> retryTask.getRetryStatus().equals(RetryStatusEnum.FINISH.getStatus())) + .map(RetryTask::getId) + .collect(Collectors.toSet()); if (!CollectionUtils.isEmpty(finishRetryIdList)) { waitDelRetryFinishSet.addAll(finishRetryIdList); } Set finishCallbackRetryIdList = callbackRetryTasks.stream() - .filter(retryTask -> retryTask.getRetryStatus().equals(RetryStatusEnum.FINISH.getStatus())) - .map(RetryTask::getId) - .collect(Collectors.toSet()); + .filter(retryTask -> retryTask.getRetryStatus().equals(RetryStatusEnum.FINISH.getStatus())) + .map(RetryTask::getId) + .collect(Collectors.toSet()); // 迁移重试失败的数据 if (!CollectionUtils.isEmpty(finishCallbackRetryIdList)) { @@ -111,9 +116,11 @@ public class RetryServiceImpl implements RetryService { } Assert.isTrue(waitDelRetryFinishSet.size() == accessTemplate.getRetryTaskAccess() - .delete(groupName, new LambdaQueryWrapper() - .eq(RetryTask::getGroupName, groupName).in(RetryTask::getId, waitDelRetryFinishSet)), - () -> new EasyRetryServerException("删除重试数据失败 [{}]", JsonUtil.toJsonString(retryTasks))); + .delete(groupName, namespaceId, new LambdaQueryWrapper() + .eq(RetryTask::getNamespaceId, namespaceId) + .eq(RetryTask::getGroupName, groupName) + .in(RetryTask::getId, waitDelRetryFinishSet)), + () -> new EasyRetryServerException("删除重试数据失败 [{}]", JsonUtil.toJsonString(retryTasks))); return Boolean.TRUE; } @@ -123,7 +130,7 @@ public class RetryServiceImpl implements RetryService { * @param groupName 组id * @param retryTasks 待迁移数据 */ - private void moveDeadLetters(String groupName, List retryTasks) { + private void moveDeadLetters(String groupName, String namespaceId, List retryTasks) { if (CollectionUtils.isEmpty(retryTasks)) { return; } @@ -134,14 +141,17 @@ public class RetryServiceImpl implements RetryService { retryDeadLetter.setCreateDt(now); } Assert.isTrue(retryDeadLetters.size() == accessTemplate - .getRetryDeadLetterAccess().batchInsert(groupName, retryDeadLetters), - () -> new EasyRetryServerException("插入死信队列失败 [{}]", JsonUtil.toJsonString(retryDeadLetters))); + .getRetryDeadLetterAccess().batchInsert(groupName, namespaceId, retryDeadLetters), + () -> new EasyRetryServerException("插入死信队列失败 [{}]", JsonUtil.toJsonString(retryDeadLetters))); TaskAccess retryTaskAccess = accessTemplate.getRetryTaskAccess(); List ids = retryTasks.stream().map(RetryTask::getId).collect(Collectors.toList()); - Assert.isTrue(retryTasks.size() == retryTaskAccess.delete(groupName, new LambdaQueryWrapper() - .eq(RetryTask::getGroupName, groupName).in(RetryTask::getId, ids)), - () -> new EasyRetryServerException("删除重试数据失败 [{}]", JsonUtil.toJsonString(retryTasks))); + Assert.isTrue(retryTasks.size() == retryTaskAccess.delete(groupName, namespaceId, + new LambdaQueryWrapper() + .eq(RetryTask::getNamespaceId, namespaceId) + .eq(RetryTask::getGroupName, groupName) + .in(RetryTask::getId, ids)), + () -> new EasyRetryServerException("删除重试数据失败 [{}]", JsonUtil.toJsonString(retryTasks))); context.publishEvent(new RetryTaskFailDeadLetterAlarmEvent(retryDeadLetters)); } diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/RetryTaskConverter.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/RetryTaskConverter.java index 38c869d6..1654207b 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/RetryTaskConverter.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/RetryTaskConverter.java @@ -1,9 +1,11 @@ package com.aizuda.easy.retry.server.retry.task.support; import com.aizuda.easy.retry.server.model.dto.RetryTaskDTO; +import com.aizuda.easy.retry.server.retry.task.dto.NotifyConfigPartitionTask; import com.aizuda.easy.retry.server.retry.task.dto.RetryPartitionTask; import com.aizuda.easy.retry.server.retry.task.generator.task.TaskContext; import com.aizuda.easy.retry.server.retry.task.support.timer.RetryTimerContext; +import com.aizuda.easy.retry.template.datasource.persistence.po.NotifyConfig; import com.aizuda.easy.retry.template.datasource.persistence.po.RetryDeadLetter; import com.aizuda.easy.retry.template.datasource.persistence.po.RetryTask; import com.aizuda.easy.retry.template.datasource.persistence.po.RetryTaskLog; @@ -41,4 +43,6 @@ public interface RetryTaskConverter { List toRetryTaskLogPartitionTasks(List retryTaskLogList); RetryTimerContext toRetryTimerContext(RetryPartitionTask retryPartitionTask); + + List toNotifyConfigPartitionTask(List notifyConfigs); } diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecCallbackUnitActor.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecCallbackUnitActor.java index 28caaf2b..2512cc73 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecCallbackUnitActor.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/exec/ExecCallbackUnitActor.java @@ -116,7 +116,7 @@ public class ExecCallbackUnitActor extends AbstractActor { String retryTaskUniqueId = callbackRetryTaskHandler.getRetryTaskUniqueId(callbackTask.getUniqueId()); TaskAccess retryTaskAccess = accessTemplate.getRetryTaskAccess(); - RetryTask retryTask = retryTaskAccess.one(callbackTask.getGroupName(), + RetryTask retryTask = retryTaskAccess.one(callbackTask.getGroupName(), callbackTask.getNamespaceId(), new LambdaQueryWrapper() .select(RetryTask::getRetryStatus) .eq(RetryTask::getNamespaceId, serverNode.getNamespaceId()) diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/result/FailureActor.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/result/FailureActor.java index 3d549b49..a9fc0d9b 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/result/FailureActor.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/result/FailureActor.java @@ -87,7 +87,7 @@ public class FailureActor extends AbstractActor { retryTask.setUpdateDt(LocalDateTime.now()); Assert.isTrue(1 == accessTemplate.getRetryTaskAccess() - .updateById(retryTask.getGroupName(), retryTask), + .updateById(retryTask.getGroupName(), retryTask.getNamespaceId(), retryTask), () -> new EasyRetryServerException("更新重试任务失败. groupName:[{}] uniqueId:[{}]", retryTask.getGroupName(), retryTask.getUniqueId())); diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/result/FinishActor.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/result/FinishActor.java index 62dcde19..366860f3 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/result/FinishActor.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/result/FinishActor.java @@ -38,7 +38,7 @@ import java.time.LocalDateTime; @Component(ActorGenerator.FINISH_ACTOR) @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) @Slf4j -public class FinishActor extends AbstractActor { +public class FinishActor extends AbstractActor { @Autowired private AccessTemplate accessTemplate; @@ -52,28 +52,28 @@ public class FinishActor extends AbstractActor { @Override public Receive createReceive() { - return receiveBuilder().match(RetryTask.class, retryTask->{ + return receiveBuilder().match(RetryTask.class, retryTask -> { LogUtils.info(log, "FinishActor params:[{}]", retryTask); retryTask.setRetryStatus(RetryStatusEnum.FINISH.getStatus()); try { - transactionTemplate.execute(new TransactionCallbackWithoutResult() { - @Override - protected void doInTransactionWithoutResult(TransactionStatus status) { + transactionTemplate.execute(new TransactionCallbackWithoutResult() { + @Override + protected void doInTransactionWithoutResult(TransactionStatus status) { - retryTask.setUpdateDt(LocalDateTime.now()); - Assert.isTrue(1 == accessTemplate.getRetryTaskAccess() - .updateById(retryTask.getGroupName(), retryTask), - () -> new EasyRetryServerException("更新重试任务失败. groupName:[{}] uniqueId:[{}]", - retryTask.getGroupName(), retryTask.getUniqueId())); + retryTask.setUpdateDt(LocalDateTime.now()); + Assert.isTrue(1 == accessTemplate.getRetryTaskAccess() + .updateById(retryTask.getGroupName(), retryTask.getNamespaceId(), retryTask), + () -> new EasyRetryServerException("更新重试任务失败. groupName:[{}] uniqueId:[{}]", + retryTask.getGroupName(), retryTask.getUniqueId())); - // 创建一个回调任务 - callbackRetryTaskHandler.create(retryTask); - } - }); + // 创建一个回调任务 + callbackRetryTaskHandler.create(retryTask); + } + }); - }catch (Exception e) { + } catch (Exception e) { LogUtils.error(log, "更新重试任务失败", e); } finally { // 清除幂等标识位 diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/result/NoRetryActor.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/result/NoRetryActor.java index 3ac5efb7..af2b23c7 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/result/NoRetryActor.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/dispatch/actor/result/NoRetryActor.java @@ -50,11 +50,11 @@ public class NoRetryActor extends AbstractActor { try { retryTask.setUpdateDt(LocalDateTime.now()); Assert.isTrue(1 == accessTemplate.getRetryTaskAccess() - .updateById(retryTask.getGroupName(),retryTask), () -> - new EasyRetryServerException("更新重试任务失败. groupName:[{}] uniqueId:[{}]", - retryTask.getGroupName(), retryTask.getUniqueId())); - }catch (Exception e) { - LogUtils.error(log,"更新重试任务失败", e); + .updateById(retryTask.getGroupName(), retryTask.getNamespaceId() , retryTask), () -> + new EasyRetryServerException("更新重试任务失败. groupName:[{}] uniqueId:[{}]", + retryTask.getGroupName(), retryTask.getUniqueId())); + } catch (Exception e) { + LogUtils.error(log, "更新重试任务失败", e); } finally { // 清除幂等标识位 idempotentStrategy.clear(Pair.of(retryTask.getGroupName(), retryTask.getNamespaceId()), retryTask.getId()); 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 b32f692b..5d00d5ff 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 @@ -183,7 +183,7 @@ public abstract class AbstractScanGroup extends AbstractActor { public List listAvailableTasks(String groupName, String namespaceId, Long lastId, Integer taskType) { List retryTasks = accessTemplate.getRetryTaskAccess() - .listPage(groupName, new PageDTO<>(0, systemProperties.getRetryPullPageSize()), + .listPage(groupName, namespaceId, new PageDTO<>(0, systemProperties.getRetryPullPageSize()), new LambdaQueryWrapper() .select(RetryTask::getId, RetryTask::getNextTriggerAt, RetryTask::getUniqueId, RetryTask::getGroupName, RetryTask::getRetryCount, RetryTask::getSceneName, diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/handler/CallbackRetryTaskHandler.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/handler/CallbackRetryTaskHandler.java index f061f143..a21e3dc4 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/handler/CallbackRetryTaskHandler.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/handler/CallbackRetryTaskHandler.java @@ -81,14 +81,13 @@ public class CallbackRetryTaskHandler { try { Assert.isTrue(1 == accessTemplate.getRetryTaskAccess() - .insert(callbackRetryTask.getGroupName(), callbackRetryTask), + .insert(callbackRetryTask.getGroupName(), callbackRetryTask.getNamespaceId(), callbackRetryTask), () -> new EasyRetryServerException("failed to report data")); } catch (DuplicateKeyException e) { log.warn("回调数据重复新增. [{}]", JsonUtil.toJsonString(retryTask)); return; } - // 初始化回调日志 RetryTaskLog retryTaskLog = RetryTaskLogConverter.INSTANCE.toRetryTask(callbackRetryTask); // 记录重试日志 diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/schedule/RetryErrorMoreThresholdAlarmSchedule.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/schedule/RetryErrorMoreThresholdAlarmSchedule.java index a1cc6d45..ade7f401 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/schedule/RetryErrorMoreThresholdAlarmSchedule.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/schedule/RetryErrorMoreThresholdAlarmSchedule.java @@ -4,22 +4,33 @@ import com.aizuda.easy.retry.common.core.alarm.Alarm; import com.aizuda.easy.retry.common.core.alarm.AlarmContext; import com.aizuda.easy.retry.common.core.alarm.EasyRetryAlarmFactory; import com.aizuda.easy.retry.common.core.enums.NotifySceneEnum; +import com.aizuda.easy.retry.common.core.enums.StatusEnum; import com.aizuda.easy.retry.common.core.log.LogUtils; import com.aizuda.easy.retry.common.core.util.EnvironmentUtils; import com.aizuda.easy.retry.common.core.util.HostUtils; import com.aizuda.easy.retry.server.common.Lifecycle; +import com.aizuda.easy.retry.server.common.dto.PartitionTask; import com.aizuda.easy.retry.server.common.schedule.AbstractSchedule; import com.aizuda.easy.retry.server.common.util.DateUtils; +import com.aizuda.easy.retry.server.common.util.PartitionTaskUtils; +import com.aizuda.easy.retry.server.retry.task.dto.NotifyConfigPartitionTask; +import com.aizuda.easy.retry.server.retry.task.dto.RetryPartitionTask; +import com.aizuda.easy.retry.server.retry.task.support.RetryTaskConverter; import com.aizuda.easy.retry.template.datasource.access.AccessTemplate; import com.aizuda.easy.retry.template.datasource.access.TaskAccess; import com.aizuda.easy.retry.template.datasource.persistence.po.NotifyConfig; import com.aizuda.easy.retry.template.datasource.persistence.po.RetryDeadLetter; +import com.aizuda.easy.retry.template.datasource.persistence.po.RetryTaskLog; 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; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; + import java.time.Duration; import java.time.Instant; import java.time.LocalDateTime; @@ -36,11 +47,11 @@ import java.util.List; @Slf4j public class RetryErrorMoreThresholdAlarmSchedule extends AbstractSchedule implements Lifecycle { private static String retryErrorMoreThresholdTextMessageFormatter = - "{}环境 重试失败数据监控 \n" + - "> 组名称:{} \n" + - "> 场景名称:{} \n" + - "> 时间窗口:{} ~ {} \n" + - "> **共计:{}** \n"; + "{}环境 重试失败数据监控 \n" + + "> 组名称:{} \n" + + "> 场景名称:{} \n" + + "> 时间窗口:{} ~ {} \n" + + "> **共计:{}** \n"; @Autowired private EasyRetryAlarmFactory easyRetryAlarmFactory; @@ -60,35 +71,51 @@ public class RetryErrorMoreThresholdAlarmSchedule extends AbstractSchedule imple @Override protected void doExecute() { LogUtils.info(log, "retryErrorMoreThreshold time[{}] ip:[{}]", LocalDateTime.now(), HostUtils.getIp()); - for (SceneConfig sceneConfig : accessTemplate.getSceneConfigAccess().getAllConfigSceneList()) { - List notifyConfigs = accessTemplate.getNotifyConfigAccess().getNotifyConfigByGroupNameAndSceneName(sceneConfig.getGroupName(),sceneConfig.getSceneName(), NotifySceneEnum.MAX_RETRY_ERROR.getNotifyScene()); - if (CollectionUtils.isEmpty(notifyConfigs)) { - continue; - } - // x分钟内、x组、x场景进入死信队列的数据量 - LocalDateTime now = LocalDateTime.now(); - TaskAccess retryDeadLetterAccess = accessTemplate.getRetryDeadLetterAccess(); - long count = retryDeadLetterAccess.count(sceneConfig.getGroupName(), new LambdaQueryWrapper(). + PartitionTaskUtils.process(this::getNotifyConfigPartitions, this::doHandler, 0); + } + + private void doHandler(List partitionTasks) { + + for (PartitionTask partitionTask : partitionTasks) { + doSendAlarm((NotifyConfigPartitionTask) partitionTask); + } + } + + private void doSendAlarm(NotifyConfigPartitionTask notifyConfigPartitionTask) { + // x分钟内、x组、x场景进入死信队列的数据量 + LocalDateTime now = LocalDateTime.now(); + TaskAccess retryDeadLetterAccess = accessTemplate.getRetryDeadLetterAccess(); + long count = retryDeadLetterAccess.count(notifyConfigPartitionTask.getGroupName(), notifyConfigPartitionTask.getNamespaceId(), + new LambdaQueryWrapper(). between(RetryDeadLetter::getCreateDt, now.minusMinutes(30), now) - .eq(RetryDeadLetter::getGroupName,sceneConfig.getGroupName()) - .eq(RetryDeadLetter::getSceneName,sceneConfig.getSceneName())); - for (NotifyConfig notifyConfig : notifyConfigs) { - if (count > notifyConfig.getNotifyThreshold()) { - // 预警 - AlarmContext context = AlarmContext.build().text(retryErrorMoreThresholdTextMessageFormatter, - EnvironmentUtils.getActiveProfile(), - sceneConfig.getGroupName(), - sceneConfig.getSceneName(), - DateUtils.format(now.minusMinutes(30), - DateUtils.NORM_DATETIME_PATTERN), - DateUtils.toNowFormat(DateUtils.NORM_DATETIME_PATTERN), count) - .title("{}环境 场景重试失败数量超过阈值", EnvironmentUtils.getActiveProfile()) - .notifyAttribute(notifyConfig.getNotifyAttribute()); - Alarm alarmType = easyRetryAlarmFactory.getAlarmType(notifyConfig.getNotifyType()); - alarmType.asyncSendMessage(context); - } - } - } + .eq(RetryDeadLetter::getGroupName, notifyConfigPartitionTask.getGroupName()) + .eq(RetryDeadLetter::getSceneName, notifyConfigPartitionTask.getSceneName())); + if (count > notifyConfigPartitionTask.getNotifyThreshold()) { + // 预警 + AlarmContext context = AlarmContext.build() + .text(retryErrorMoreThresholdTextMessageFormatter, + EnvironmentUtils.getActiveProfile(), + notifyConfigPartitionTask.getGroupName(), + notifyConfigPartitionTask.getSceneName(), + DateUtils.format(now.minusMinutes(30), + DateUtils.NORM_DATETIME_PATTERN), + DateUtils.toNowFormat(DateUtils.NORM_DATETIME_PATTERN), count) + .title("{}环境 场景重试失败数量超过阈值", EnvironmentUtils.getActiveProfile()) + .notifyAttribute(notifyConfigPartitionTask.getNotifyAttribute()); + Alarm alarmType = easyRetryAlarmFactory.getAlarmType(notifyConfigPartitionTask.getNotifyType()); + alarmType.asyncSendMessage(context); + } + } + + private List getNotifyConfigPartitions(Long startId) { + + List notifyConfigs = accessTemplate.getNotifyConfigAccess() + .listPage(new PageDTO<>(startId, 1000), new LambdaQueryWrapper() + .eq(NotifyConfig::getNotifyStatus, StatusEnum.YES.getStatus()) + .eq(NotifyConfig::getNotifyScene, NotifySceneEnum.MAX_RETRY_ERROR.getNotifyScene())) + .getRecords(); + + return RetryTaskConverter.INSTANCE.toNotifyConfigPartitionTask(notifyConfigs); } @Override diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/schedule/RetryTaskMoreThresholdAlarmSchedule.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/schedule/RetryTaskMoreThresholdAlarmSchedule.java index 3d6f53f4..6945733a 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/schedule/RetryTaskMoreThresholdAlarmSchedule.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/schedule/RetryTaskMoreThresholdAlarmSchedule.java @@ -5,17 +5,23 @@ import com.aizuda.easy.retry.common.core.alarm.AlarmContext; import com.aizuda.easy.retry.common.core.alarm.EasyRetryAlarmFactory; import com.aizuda.easy.retry.common.core.enums.NotifySceneEnum; import com.aizuda.easy.retry.common.core.enums.RetryStatusEnum; +import com.aizuda.easy.retry.common.core.enums.StatusEnum; import com.aizuda.easy.retry.common.core.log.LogUtils; import com.aizuda.easy.retry.common.core.util.EnvironmentUtils; import com.aizuda.easy.retry.common.core.util.HostUtils; import com.aizuda.easy.retry.server.common.Lifecycle; +import com.aizuda.easy.retry.server.common.dto.PartitionTask; import com.aizuda.easy.retry.server.common.schedule.AbstractSchedule; import com.aizuda.easy.retry.server.common.util.DateUtils; +import com.aizuda.easy.retry.server.common.util.PartitionTaskUtils; +import com.aizuda.easy.retry.server.retry.task.dto.NotifyConfigPartitionTask; +import com.aizuda.easy.retry.server.retry.task.support.RetryTaskConverter; import com.aizuda.easy.retry.template.datasource.access.AccessTemplate; import com.aizuda.easy.retry.template.datasource.persistence.po.NotifyConfig; import com.aizuda.easy.retry.template.datasource.persistence.po.RetryTask; 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 lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -38,11 +44,11 @@ import java.util.List; @RequiredArgsConstructor public class RetryTaskMoreThresholdAlarmSchedule extends AbstractSchedule implements Lifecycle { private static String retryTaskMoreThresholdTextMessageFormatter = - "{}环境 重试数据监控 \n" + - "> 组名称:{} \n" + - "> 场景名称:{} \n" + - "> 告警时间:{} \n" + - "> **共计:{}** \n"; + "{}环境 重试数据监控 \n" + + "> 组名称:{} \n" + + "> 场景名称:{} \n" + + "> 告警时间:{} \n" + + "> **共计:{}** \n"; private final EasyRetryAlarmFactory easyRetryAlarmFactory; private final AccessTemplate accessTemplate; @@ -60,33 +66,49 @@ public class RetryTaskMoreThresholdAlarmSchedule extends AbstractSchedule implem @Override protected void doExecute() { LogUtils.info(log, "retryTaskMoreThreshold time[{}] ip:[{}]", LocalDateTime.now(), HostUtils.getIp()); - for (SceneConfig sceneConfig : accessTemplate.getSceneConfigAccess().getAllConfigSceneList()) { - List notifyConfigs = accessTemplate.getNotifyConfigAccess().getNotifyConfigByGroupNameAndSceneName(sceneConfig.getGroupName(),sceneConfig.getSceneName(), NotifySceneEnum.MAX_RETRY.getNotifyScene()); - if (CollectionUtils.isEmpty(notifyConfigs)) { - continue; - } - long count = accessTemplate.getRetryTaskAccess().count(sceneConfig.getGroupName(), new LambdaQueryWrapper() - .eq(RetryTask::getGroupName, sceneConfig.getGroupName()) - .eq(RetryTask::getSceneName,sceneConfig.getSceneName()) - .eq(RetryTask::getRetryStatus, RetryStatusEnum.RUNNING.getStatus())); - for (NotifyConfig notifyConfig : notifyConfigs) { - if (count > notifyConfig.getNotifyThreshold()) { - // 预警 - AlarmContext context = AlarmContext.build() - .text(retryTaskMoreThresholdTextMessageFormatter, - EnvironmentUtils.getActiveProfile(), - sceneConfig.getGroupName(), - sceneConfig.getSceneName(), - DateUtils.toNowFormat(DateUtils.NORM_DATETIME_PATTERN), - count) - .title("{}环境 场景重试数量超过阈值", EnvironmentUtils.getActiveProfile()) - .notifyAttribute(notifyConfig.getNotifyAttribute()); - Alarm alarmType = easyRetryAlarmFactory.getAlarmType(notifyConfig.getNotifyType()); - alarmType.asyncSendMessage(context); - } - } - } + PartitionTaskUtils.process(this::getNotifyConfigPartitions, this::doHandler, 0); + } + + private void doHandler(List partitionTasks) { + for (PartitionTask partitionTask : partitionTasks) { + doSendAlarm((NotifyConfigPartitionTask) partitionTask); } + } + + private void doSendAlarm(NotifyConfigPartitionTask partitionTask) { + long count = accessTemplate.getRetryTaskAccess() + .count(partitionTask.getGroupName(), partitionTask.getNamespaceId(), + new LambdaQueryWrapper() + .eq(RetryTask::getNamespaceId, partitionTask.getNamespaceId()) + .eq(RetryTask::getGroupName, partitionTask.getGroupName()) + .eq(RetryTask::getSceneName, partitionTask.getSceneName()) + .eq(RetryTask::getRetryStatus, RetryStatusEnum.RUNNING.getStatus())); + if (count > partitionTask.getNotifyThreshold()) { + // 预警 + AlarmContext context = AlarmContext.build() + .text(retryTaskMoreThresholdTextMessageFormatter, + EnvironmentUtils.getActiveProfile(), + partitionTask.getGroupName(), + partitionTask.getSceneName(), + DateUtils.toNowFormat(DateUtils.NORM_DATETIME_PATTERN), + count) + .title("{}环境 场景重试数量超过阈值", EnvironmentUtils.getActiveProfile()) + .notifyAttribute(partitionTask.getNotifyAttribute()); + Alarm alarmType = easyRetryAlarmFactory.getAlarmType(partitionTask.getNotifyType()); + alarmType.asyncSendMessage(context); + } + } + + private List getNotifyConfigPartitions(Long startId) { + + List notifyConfigs = accessTemplate.getNotifyConfigAccess() + .listPage(new PageDTO<>(startId, 1000), new LambdaQueryWrapper() + .eq(NotifyConfig::getNotifyStatus, StatusEnum.YES.getStatus()) + .eq(NotifyConfig::getNotifyScene, NotifySceneEnum.MAX_RETRY.getNotifyScene())) + .getRecords(); + + return RetryTaskConverter.INSTANCE.toNotifyConfigPartitionTask(notifyConfigs); + } @Override public String lockName() { 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 78e9b330..7cff7e92 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 @@ -1,5 +1,6 @@ package com.aizuda.easy.retry.server.retry.task.support.schedule; +import cn.hutool.core.lang.Pair; import com.aizuda.easy.retry.common.core.enums.StatusEnum; import com.aizuda.easy.retry.common.core.log.LogUtils; import com.aizuda.easy.retry.server.common.Lifecycle; @@ -47,14 +48,18 @@ public class RetryTaskSchedule extends AbstractSchedule implements Lifecycle { @Override protected void doExecute() { try { - Set groupNameList = accessTemplate.getGroupConfigAccess() + Set> groupNameList = accessTemplate.getGroupConfigAccess() .list(new LambdaQueryWrapper() - .select(GroupConfig::getGroupName) + .select(GroupConfig::getGroupName, GroupConfig::getNamespaceId) .eq(GroupConfig::getGroupStatus, StatusEnum.YES.getStatus())) - .stream().map(GroupConfig::getGroupName).collect(Collectors.toSet()); + .stream().map(groupConfig -> { - for (String groupName : groupNameList) { - retryService.moveDeadLetterAndDelFinish(groupName); + + return Pair.of(groupConfig.getGroupName(), groupConfig.getNamespaceId()); + }).collect(Collectors.toSet()); + + for (Pair pair : groupNameList) { + retryService.moveDeadLetterAndDelFinish(pair.getKey(), pair.getValue()); } } catch (Exception e) { diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/CallbackTimerTask.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/CallbackTimerTask.java index 4d2928bd..d9e0e0c3 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/CallbackTimerTask.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/CallbackTimerTask.java @@ -36,11 +36,12 @@ public class CallbackTimerTask extends AbstractTimerTask { log.info("回调任务执行 {}", LocalDateTime.now()); AccessTemplate accessTemplate = SpringContext.getBeanByType(AccessTemplate.class); TaskAccess retryTaskAccess = accessTemplate.getRetryTaskAccess(); - RetryTask retryTask = retryTaskAccess.one(context.getGroupName(), new LambdaQueryWrapper() - .eq(RetryTask::getNamespaceId, context.getNamespaceId()) - .eq(RetryTask::getGroupName, context.getGroupName()) - .eq(RetryTask::getUniqueId, context.getUniqueId()) - .eq(RetryTask::getRetryStatus, RetryStatusEnum.RUNNING.getStatus())); + RetryTask retryTask = retryTaskAccess.one(context.getGroupName(), context.getNamespaceId(), + new LambdaQueryWrapper() + .eq(RetryTask::getNamespaceId, context.getNamespaceId()) + .eq(RetryTask::getGroupName, context.getGroupName()) + .eq(RetryTask::getUniqueId, context.getUniqueId()) + .eq(RetryTask::getRetryStatus, RetryStatusEnum.RUNNING.getStatus())); if (Objects.isNull(retryTask)) { return; } diff --git a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/RetryTimerTask.java b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/RetryTimerTask.java index 87e4b300..b165ac0e 100644 --- a/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/RetryTimerTask.java +++ b/easy-retry-server/easy-retry-server-retry-task/src/main/java/com/aizuda/easy/retry/server/retry/task/support/timer/RetryTimerTask.java @@ -31,10 +31,11 @@ public class RetryTimerTask extends AbstractTimerTask { } @Override - public void doRun(final Timeout timeout){ + public void doRun(final Timeout timeout) { AccessTemplate accessTemplate = SpringContext.getBeanByType(AccessTemplate.class); TaskAccess retryTaskAccess = accessTemplate.getRetryTaskAccess(); - RetryTask retryTask = retryTaskAccess.one(context.getGroupName(), new LambdaQueryWrapper() + RetryTask retryTask = retryTaskAccess.one(context.getGroupName(), context.getNamespaceId(), + new LambdaQueryWrapper() .eq(RetryTask::getNamespaceId, context.getNamespaceId()) .eq(RetryTask::getGroupName, context.getGroupName()) .eq(RetryTask::getUniqueId, context.getUniqueId()) diff --git a/easy-retry-server/easy-retry-server-starter/src/main/resources/admin/js/app.0a7ab201.js b/easy-retry-server/easy-retry-server-starter/src/main/resources/admin/js/app.0a7ab201.js new file mode 100644 index 00000000..a45f14d1 --- /dev/null +++ b/easy-retry-server/easy-retry-server-starter/src/main/resources/admin/js/app.0a7ab201.js @@ -0,0 +1 @@ +(function(e){function t(t){for(var a,r,i=t[0],c=t[1],u=t[2],l=0,d=[];ldiv[type=dialog]");i||(i=document.createElement("div"),i.setAttribute("type","dialog"),document.body.appendChild(i));var c=function(e,t){if(e instanceof Function){var n=e();n instanceof Promise?n.then((function(e){e&&t()})):n&&t()}else e||t()},u=new e({data:function(){return{visible:!0}},router:s.$router,store:s.$store,mounted:function(){var e=this;this.$on("close",(function(t){e.handleClose()}))},methods:{handleClose:function(){var e=this;c(this.$refs._component.onCancel,(function(){e.visible=!1,e.$refs._component.$emit("close"),e.$refs._component.$emit("cancel"),u.$destroy()}))},handleOk:function(){var e=this;c(this.$refs._component.onOK||this.$refs._component.onOk,(function(){e.visible=!1,e.$refs._component.$emit("close"),e.$refs._component.$emit("ok"),u.$destroy()}))}},render:function(e){var s=this,i=o&&o.model;i&&delete o.model;var c=Object.assign({},i&&{model:i}||{},{attrs:Object.assign({},Object(a["a"])({},o.attrs||o),{visible:this.visible}),on:Object.assign({},Object(a["a"])({},o.on||o),{ok:function(){s.handleOk()},cancel:function(){s.handleClose()}})}),u=n&&n.model;u&&delete n.model;var l=Object.assign({},u&&{model:u}||{},{ref:"_component",attrs:Object.assign({},Object(a["a"])({},n&&n.attrs||n)),on:Object.assign({},Object(a["a"])({},n&&n.on||n))});return e(r["a"],c,[e(t,l)])}}).$mount(i)}}Object.defineProperty(e.prototype,"$dialog",{get:function(){return function(){t.apply(this,arguments)}}})}},"29fd":function(e,t,n){"use strict";n.r(t);var a=n("5530"),r=n("4404");t["default"]=Object(a["a"])({},r["default"])},"2a47":function(e,t,n){},"31fc":function(e,t,n){"use strict";var a,r,o=n("8bbf"),s=n.n(o),i=new s.a,c=n("5530"),u=(n("b0c0"),n("7db0"),n("d3b7"),n("4de4"),n("caad"),n("2532"),n("159b"),n("d81d"),{name:"MultiTab",data:function(){return{fullPathList:[],pages:[],activeKey:"",newTabIndex:0}},created:function(){var e=this;i.$on("open",(function(t){if(!t)throw new Error("multi-tab: open tab ".concat(t," err"));e.activeKey=t})).$on("close",(function(t){t?e.closeThat(t):e.closeThat(e.activeKey)})).$on("rename",(function(t){var n=t.key,a=t.name;try{var r=e.pages.find((function(e){return e.path===n}));r.meta.customTitle=a,e.$forceUpdate()}catch(o){}})),this.pages.push(this.$route),this.fullPathList.push(this.$route.fullPath),this.selectedLastPath()},methods:{onEdit:function(e,t){this[t](e)},remove:function(e){this.pages=this.pages.filter((function(t){return t.fullPath!==e})),this.fullPathList=this.fullPathList.filter((function(t){return t!==e})),this.fullPathList.includes(this.activeKey)||this.selectedLastPath()},selectedLastPath:function(){this.activeKey=this.fullPathList[this.fullPathList.length-1]},closeThat:function(e){this.fullPathList.length>1?this.remove(e):this.$message.info("这是最后一个标签了, 无法被关闭")},closeLeft:function(e){var t=this,n=this.fullPathList.indexOf(e);n>0?this.fullPathList.forEach((function(e,a){an&&t.remove(e)})):this.$message.info("右侧没有标签")},closeAll:function(e){var t=this,n=this.fullPathList.indexOf(e);this.fullPathList.forEach((function(e,a){a!==n&&t.remove(e)}))},closeMenuClick:function(e,t){this[e](t)},renderTabPaneMenu:function(e){var t=this,n=this.$createElement;return n("a-menu",{on:Object(c["a"])({},{click:function(n){var a=n.key;n.item,n.domEvent;t.closeMenuClick(a,e)}})},[n("a-menu-item",{key:"closeThat"},["关闭当前标签"]),n("a-menu-item",{key:"closeRight"},["关闭右侧"]),n("a-menu-item",{key:"closeLeft"},["关闭左侧"]),n("a-menu-item",{key:"closeAll"},["关闭全部"])])},renderTabPane:function(e,t){var n=this.$createElement,a=this.renderTabPaneMenu(t);return n("a-dropdown",{attrs:{overlay:a,trigger:["contextmenu"]}},[n("span",{style:{userSelect:"none"}},[e])])}},watch:{$route:function(e){this.activeKey=e.fullPath,this.fullPathList.indexOf(e.fullPath)<0&&(this.fullPathList.push(e.fullPath),this.pages.push(e))},activeKey:function(e){this.$router.push({path:e})}},render:function(){var e=this,t=arguments[0],n=this.onEdit,a=this.$data.pages,r=a.map((function(n){return t("a-tab-pane",{style:{height:0},attrs:{tab:e.renderTabPane(n.meta.customTitle||n.meta.title,n.fullPath),closable:a.length>1},key:n.fullPath})}));return t("div",{class:"ant-pro-multi-tab"},[t("div",{class:"ant-pro-multi-tab-wrapper"},[t("a-tabs",{attrs:{hideAdd:!0,type:"editable-card",tabBarStyle:{background:"#FFF",margin:0,paddingLeft:"16px",paddingTop:"1px"}},on:Object(c["a"])({},{edit:n}),model:{value:e.activeKey,callback:function(t){e.activeKey=t}}},[r])])])}}),l=u,d=n("2877"),f=Object(d["a"])(l,a,r,!1,null,null,null),m=f.exports,h=(n("3489"),{open:function(e){i.$emit("open",e)},rename:function(e,t){i.$emit("rename",{key:e,name:t})},closeCurrentPage:function(){this.close()},close:function(e){i.$emit("close",e)}});m.install=function(e){e.prototype.$multiTab||(h.instance=i,e.prototype.$multiTab=h,e.component("multi-tab",m))};t["a"]=m},3489:function(e,t,n){},4360:function(e,t,n){"use strict";var a,r=n("8bbf"),o=n.n(r),s=n("5880"),i=n.n(s),c=n("ade3"),u=(n("d3b7"),n("8ded")),l=n.n(u),d=n("9fb0"),f=n("bf0f"),m={state:{sideCollapsed:!1,isMobile:!1,theme:"dark",layout:"",contentWidth:"",fixedHeader:!1,fixedSidebar:!1,autoHideHeader:!1,color:"",weak:!1,multiTab:!0,namespace:"",lang:"zh-CN",_antLocale:{}},mutations:(a={},Object(c["a"])(a,d["e"],(function(e,t){e.sideCollapsed=t,l.a.set(d["e"],t)})),Object(c["a"])(a,d["l"],(function(e,t){e.isMobile=t})),Object(c["a"])(a,d["n"],(function(e,t){e.theme=t,l.a.set(d["n"],t)})),Object(c["a"])(a,d["k"],(function(e,t){e.layout=t,l.a.set(d["k"],t)})),Object(c["a"])(a,d["h"],(function(e,t){e.fixedHeader=t,l.a.set(d["h"],t)})),Object(c["a"])(a,d["i"],(function(e,t){e.fixedSidebar=t,l.a.set(d["i"],t)})),Object(c["a"])(a,d["g"],(function(e,t){e.contentWidth=t,l.a.set(d["g"],t)})),Object(c["a"])(a,d["j"],(function(e,t){e.autoHideHeader=t,l.a.set(d["j"],t)})),Object(c["a"])(a,d["f"],(function(e,t){e.color=t,l.a.set(d["f"],t)})),Object(c["a"])(a,d["o"],(function(e,t){e.weak=t,l.a.set(d["o"],t)})),Object(c["a"])(a,d["b"],(function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};e.lang=t,e._antLocale=n,l.a.set(d["b"],t)})),Object(c["a"])(a,d["m"],(function(e,t){l.a.set(d["m"],t),e.multiTab=t})),Object(c["a"])(a,d["c"],(function(e,t){l.a.set(d["c"],t),e.namespace=t})),a),actions:{setLang:function(e,t){var n=e.commit;return new Promise((function(e,a){n(d["b"],t),Object(f["c"])(t).then((function(){e()})).catch((function(e){a(e)}))}))},setNamespace:function(e,t){var n=e.commit;return new Promise((function(e,a){n(d["c"],t)}))}}},h=m,p=(n("b0c0"),n("d81d"),n("b775")),b={Login:"/auth/login",Logout:"/auth/logout",ForgePassword:"/auth/forge-password",Register:"/auth/register",twoStepCode:"/auth/2step-code",SendSms:"/account/sms",SendSmsErr:"/account/sms_err",UserInfo:"/user/info",UserMenu:"/user/nav"};function g(e){return Object(p["b"])({url:b.Login,method:"post",data:e})}function y(){return Object(p["b"])({url:b.UserInfo,method:"get",headers:{"Content-Type":"application/json;charset=UTF-8"}})}var k=n("ca00"),v={state:{token:"",name:"",welcome:"",avatar:"",roles:[],info:{},namespaces:[]},mutations:{SET_TOKEN:function(e,t){e.token=t},SET_NAME:function(e,t){var n=t.name,a=t.welcome;e.name=n,e.welcome=a},SET_AVATAR:function(e,t){e.avatar=t},SET_ROLES:function(e,t){e.roles=t},SET_INFO:function(e,t){e.info=t},SET_NAMESPACES:function(e,t){e.namespaces=t,l.a.get(d["c"])||l.a.set(d["c"],t[0].uniqueId)}},actions:{Login:function(e,t){var n=e.commit;return new Promise((function(e,a){g(t).then((function(t){var a=t.data;l.a.set(d["a"],a.token,252e5),n("SET_TOKEN",a.token),n("SET_NAMESPACES",a.namespaceIds),e()})).catch((function(e){a(e)}))}))},GetInfo:function(e){var t=e.commit;return new Promise((function(e,n){y().then((function(a){var r=a.data;if(r["role"]={permissions:Object(k["b"])(r.role,r.mode)},t("SET_NAMESPACES",r.namespaceIds),r.role&&r.role.permissions.length>0){var o=r.role;o.permissions=r.role.permissions,o.permissions.map((function(e){null!=e.actionEntitySet&&e.actionEntitySet.length>0?e.actionList=(e.actionEntitySet||{}).map((function(e){return e.action})):e.actionList=[]})),o.permissionList=o.permissions.map((function(e){return e.permissionId})),t("SET_ROLES",r.role),t("SET_INFO",r)}else n(new Error("getInfo: roles must be a non-null array !"));t("SET_NAME",{name:r.username,welcome:Object(k["d"])()}),e(a)})).catch((function(e){n(e)}))}))},Logout:function(e){var t=e.commit;e.state;return new Promise((function(e){t("SET_TOKEN",""),t("SET_ROLES",[]),l.a.remove(d["a"]),l.a.remove(d["c"]),e()}))}}},C=v,N=(n("caad"),n("2532"),n("4de4"),n("99af"),n("d73b")),w=n("cd3f"),S=n.n(w);function j(e,t){if(t.meta&&t.meta.permission){for(var n=!1,a=0,r=e.length;adiv[type=loading]");n||(n=document.createElement("div"),n.setAttribute("type","loading"),n.setAttribute("class","ant-loading-wrapper"),document.body.appendChild(n));var a=Object.assign({visible:!1,size:"large",tip:"Loading..."},t),r=new e({data:function(){return Object(je["a"])({},a)},render:function(){var e=arguments[0],t=this.tip,n={};return this.tip&&(n.tip=t),this.visible?e(ze,{props:Object(je["a"])({},n)}):null}}).$mount(n);function o(e){var t=Object(je["a"])(Object(je["a"])({},a),e),n=t.visible,o=t.size,s=t.tip;r.$set(r,"visible",n),s&&r.$set(r,"tip",s),o&&r.$set(r,"size",o)}return{instance:r,update:o}}},Le={show:function(e){this.instance.update(Object(je["a"])(Object(je["a"])({},e),{},{visible:!0}))},hide:function(){this.instance.update({visible:!1})}},Te=function(e,t){e.prototype.$loading||(Le.instance=Oe.newInstance(e,t),e.prototype.$loading=Le)},xe={version:Pe,install:Te},_e=n("3835"),Ee={add:{key:"add",label:"新增"},delete:{key:"delete",label:"删除"},edit:{key:"edit",label:"修改"},query:{key:"query",label:"查询"},get:{key:"get",label:"详情"},enable:{key:"enable",label:"启用"},disable:{key:"disable",label:"禁用"},import:{key:"import",label:"导入"},export:{key:"export",label:"导出"}};function Ae(e){Ae.installed||(!e.prototype.$auth&&Object.defineProperties(e.prototype,{$auth:{get:function(){var e=this;return function(t){var n=t.split("."),a=Object(_e["a"])(n,2),r=a[0],o=a[1],s=e.$store.getters.roles.permissions;return s.find((function(e){return e.permissionId===r})).actionList.findIndex((function(e){return e===o}))>-1}}}}),!e.prototype.$enum&&Object.defineProperties(e.prototype,{$enum:{get:function(){return function(e){var t=Ee;return e&&e.split(".").forEach((function(e){t=t&&t[e]||null})),t}}}}))}var Me=Ae;r.a.directive("action",{inserted:function(e,t,n){var a=t.arg,r=C["a"].getters.roles,o=n.context.$route.meta.permission,s=o instanceof String&&[o]||o;r.permissions.forEach((function(t){s.includes(t.permissionId)&&t.actionList&&!t.actionList.includes(a)&&(e.parentNode&&e.parentNode.removeChild(e)||(e.style.display="none"))}))}});r.a.use(ke["a"]),r.a.use(ye["a"]),r.a.use(ge["a"]),r.a.use(be["a"]),r.a.use(pe["a"]),r.a.use(he["a"]),r.a.use(me["a"]),r.a.use(fe["a"]),r.a.use(de["b"]),r.a.use(le["a"]),r.a.use(ue["a"]),r.a.use(ce["a"]),r.a.use(ie["a"]),r.a.use(se["a"]),r.a.use(oe["a"]),r.a.use(re["a"]),r.a.use(ae["a"]),r.a.use(ne["a"]),r.a.use(te["a"]),r.a.use(ee["a"]),r.a.use(X["b"]),r.a.use(Z["a"]),r.a.use(J["a"]),r.a.use(Q["a"]),r.a.use(Y["a"]),r.a.use(K["a"]),r.a.use(H["a"]),r.a.use(W["a"]),r.a.use(V["a"]),r.a.use(G["a"]),r.a.use(q["a"]),r.a.use(B["a"]),r.a.use(D["a"]),r.a.use(U["a"]),r.a.use($["a"]),r.a.use(R["a"]),r.a.use(F["a"]),r.a.use(I["b"]),r.a.use(M["a"]),r.a.use(A["a"]),r.a.use(E["a"]),r.a.use(_["a"]),r.a.prototype.$confirm=se["a"].confirm,r.a.prototype.$message=x["a"],r.a.prototype.$notification=T["a"],r.a.prototype.$info=se["a"].info,r.a.prototype.$success=se["a"].success,r.a.prototype.$error=se["a"].error,r.a.prototype.$warning=se["a"].warning,r.a.use(ve["a"]),r.a.use(we["a"]),r.a.use(Se["a"]),r.a.use(xe),r.a.use(Me),r.a.use(Ne.a);var Ie=n("323e"),Fe=n.n(Ie);n("fddb");Fe.a.configure({showSpinner:!1});var Re=["login","register","registerResult"],$e="/user/login",Ue="/dashboard/workplace";v.beforeEach((function(e,t,n){Fe.a.start(),e.meta&&"undefined"!==typeof e.meta.title&&c("".concat(Object(l["b"])(e.meta.title)," - ").concat(u)),z.a.get(P["a"])?e.path===$e?(n({path:Ue}),Fe.a.done()):0===C["a"].getters.roles.length?C["a"].dispatch("GetInfo").then((function(a){var r=a.data&&a.data.role;C["a"].dispatch("GenerateRoutes",{roles:r}).then((function(){C["a"].getters.addRouters.forEach((function(e){v.addRoute(e)}));var a=decodeURIComponent(t.query.redirect||e.path);e.path===a?n(Object(je["a"])(Object(je["a"])({},e),{},{replace:!0})):n({path:a})}))})).catch((function(){C["a"].dispatch("Logout").then((function(){n({path:$e,query:{redirect:e.fullPath}})}))})):n():Re.includes(e.name)?n():(n({path:$e,query:{redirect:e.fullPath}}),Fe.a.done())})),v.afterEach((function(){Fe.a.done()}));var De=n("c1df"),Be=n.n(De);n("5c3a");Be.a.locale("zh-cn"),r.a.filter("NumberFormat",(function(e){if(!e)return"0";var t=e.toString().replace(/(\d)(?=(?:\d{3})+$)/g,"$1,");return t})),r.a.filter("dayjs",(function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"YYYY-MM-DD HH:mm:ss";return Be()(e).format(t)})),r.a.filter("moment",(function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"YYYY-MM-DD HH:mm:ss";return Be()(e).format(t)}));n("861f");var qe=n("9dd7");n("b5fe");r.a.config.productionTip=!1,r.a.use(N["a"]),r.a.component("pro-layout",w["d"]),r.a.component("page-container",w["b"]),r.a.component("page-header-wrapper",w["b"]),r.a.use(qe["a"]),window.umi_plugin_ant_themeVar=S.theme,new r.a({router:v,store:C["a"],i18n:l["a"],created:L,render:function(e){return e(p)}}).$mount("#app")},5880:function(e,t){e.exports=Vuex},"5b62":function(e,t,n){e.exports=n.p+"img/logo.af534ed8.png"},6389:function(e,t){e.exports=VueRouter},"69c3":function(e,t,n){"use strict";n.r(t),t["default"]={"result.fail.error.title":"Submission Failed","result.fail.error.description":"Please check and modify the following information before resubmitting.","result.fail.error.hint-title":"The content you submitted has the following error:","result.fail.error.hint-text1":"Your account has been frozen","result.fail.error.hint-btn1":"Thaw immediately","result.fail.error.hint-text2":"Your account is not yet eligible to apply","result.fail.error.hint-btn2":"Upgrade immediately","result.fail.error.btn-text":"Return to modify"}},"6e2f":function(e,t,n){"use strict";n.r(t),t["default"]={submit:"Submit",save:"Save","submit.ok":"Submit successfully","save.ok":"Saved successfully"}},"743d":function(e,t,n){"use strict";n.r(t);var a=n("5530"),r=n("8b45"),o=n("0ff2"),s=n.n(o),i=n("6e2f"),c=n("771d"),u=n("5030"),l=n("928e"),d=n("dea1"),f=n("ffb6"),m=n("78a1"),h=n("29fd"),p={antLocale:r["a"],momentName:"eu",momentLocale:s.a};t["default"]=Object(a["a"])(Object(a["a"])(Object(a["a"])(Object(a["a"])(Object(a["a"])(Object(a["a"])(Object(a["a"])(Object(a["a"])(Object(a["a"])({message:"-","layouts.usermenu.dialog.title":"Message","layouts.usermenu.dialog.content":"Are you sure you would like to logout?","layouts.userLayout.title":"Easy to use distributed exception retry service platform"},p),i["default"]),c["default"]),u["default"]),l["default"]),d["default"]),f["default"]),m["default"]),h["default"])},"771d":function(e,t,n){"use strict";n.r(t),t["default"]={"menu.welcome":"Welcome","menu.home":"Home","menu.dashboard":"Dashboard","menu.dashboard.analysis":"Analysis","menu.dashboard.monitor":"Monitor","menu.dashboard.workplace":"Workplace","menu.form":"Form","menu.form.basic-form":"Basic Form","menu.form.step-form":"Step Form","menu.form.step-form.info":"Step Form(write transfer information)","menu.form.step-form.confirm":"Step Form(confirm transfer information)","menu.form.step-form.result":"Step Form(finished)","menu.form.advanced-form":"Advanced Form","menu.list":"List","menu.list.table-list":"Search Table","menu.list.basic-list":"Basic List","menu.list.card-list":"Card List","menu.list.search-list":"Search List","menu.list.search-list.articles":"Search List(articles)","menu.list.search-list.projects":"Search List(projects)","menu.list.search-list.applications":"Search List(applications)","menu.profile":"Profile","menu.profile.basic":"Basic Profile","menu.profile.advanced":"Advanced Profile","menu.result":"Result","menu.result.success":"Success","menu.result.fail":"Fail","menu.exception":"Exception","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"Trigger","menu.account":"Account","menu.account.center":"Account Center","menu.account.settings":"Account Settings","menu.account.trigger":"Trigger Error","menu.account.logout":"Logout"}},"78a1":function(e,t,n){"use strict";n.r(t);var a=n("5530"),r=n("44e5"),o=n("69c3");t["default"]=Object(a["a"])(Object(a["a"])({},r["default"]),o["default"])},"7d35":function(e,t,n){"use strict";n("f678")},"861f":function(e,t,n){},"8bbf":function(e,t){e.exports=Vue},"8eeb4":function(e,t,n){var a=n("b2b7");e.exports={__esModule:!0,default:a.svgComponent({tag:"svg",attrsMap:{viewBox:"0 0 128 128",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"},children:[{tag:"title",children:[{text:"Vue"}]},{tag:"desc",children:[{text:"Created with Sketch."}]},{tag:"defs",children:[{tag:"linearGradient",attrsMap:{x1:"69.644116%",y1:"0%",x2:"69.644116%",y2:"100%",id:"linearGradient-1"},children:[{tag:"stop",attrsMap:{"stop-color":"#29CDFF",offset:"0%"}},{tag:"stop",attrsMap:{"stop-color":"#148EFF",offset:"37.8600687%"}},{tag:"stop",attrsMap:{"stop-color":"#0A60FF",offset:"100%"}}]},{tag:"linearGradient",attrsMap:{x1:"-19.8191553%",y1:"-36.7931464%",x2:"138.57919%",y2:"157.637507%",id:"linearGradient-2"},children:[{tag:"stop",attrsMap:{"stop-color":"#29CDFF",offset:"0%"}},{tag:"stop",attrsMap:{"stop-color":"#0F78FF",offset:"100%"}}]},{tag:"linearGradient",attrsMap:{x1:"68.1279872%",y1:"-35.6905737%",x2:"30.4400914%",y2:"114.942679%",id:"linearGradient-3"},children:[{tag:"stop",attrsMap:{"stop-color":"#FA8E7D",offset:"0%"}},{tag:"stop",attrsMap:{"stop-color":"#F74A5C",offset:"51.2635191%"}},{tag:"stop",attrsMap:{"stop-color":"#F51D2C",offset:"100%"}}]}]},{tag:"g",attrsMap:{id:"Vue",stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},children:[{tag:"g",attrsMap:{id:"Group",transform:"translate(19.000000, 9.000000)"},children:[{tag:"path",attrsMap:{d:"M89.96,90.48 C78.58,93.48 68.33,83.36 67.62,82.48 L46.6604487,62.2292258 C45.5023849,61.1103236 44.8426845,59.5728835 44.8296987,57.9626396 L44.5035564,17.5209948 C44.4948861,16.4458744 44.0537714,15.4195095 43.2796864,14.6733517 L29.6459999,1.53153737 C28.055475,-0.00160504005 25.5232423,0.0449126588 23.9900999,1.63543756 C23.2715121,2.38092066 22.87,3.37600834 22.87,4.41143746 L22.87,64.3864751 C22.87,67.0807891 23.9572233,69.6611067 25.885409,71.5429748 L63.6004615,108.352061 C65.9466323,110.641873 69.6963584,110.624605 72.0213403,108.313281",id:"Path-Copy",fill:"url(#linearGradient-1)","fill-rule":"nonzero",transform:"translate(56.415000, 54.831157) scale(-1, 1) translate(-56.415000, -54.831157) "}},{tag:"path",attrsMap:{d:"M68,90.1163122 C56.62,93.1163122 45.46,83.36 44.75,82.48 L23.7904487,62.2292258 C22.6323849,61.1103236 21.9726845,59.5728835 21.9596987,57.9626396 L21.6335564,17.5209948 C21.6248861,16.4458744 21.1837714,15.4195095 20.4096864,14.6733517 L6.7759999,1.53153737 C5.185475,-0.00160504005 2.65324232,0.0449126588 1.12009991,1.63543756 C0.401512125,2.38092066 3.90211878e-13,3.37600834 3.90798505e-13,4.41143746 L3.94351218e-13,64.3864751 C3.94681177e-13,67.0807891 1.08722326,69.6611067 3.01540903,71.5429748 L40.7807092,108.401101 C43.1069304,110.671444 46.8180151,110.676525 49.1504445,108.412561",id:"Path",fill:"url(#linearGradient-2)","fill-rule":"nonzero"}},{tag:"path",attrsMap:{d:"M43.2983488,19.0991931 L27.5566079,3.88246244 C26.7624281,3.11476967 26.7409561,1.84862177 27.5086488,1.05444194 C27.8854826,0.664606611 28.4044438,0.444472651 28.9466386,0.444472651 L60.3925021,0.444472651 C61.4970716,0.444472651 62.3925021,1.33990315 62.3925021,2.44447265 C62.3925021,2.9858375 62.1730396,3.50407742 61.7842512,3.88079942 L46.0801285,19.0975301 C45.3051579,19.8484488 44.0742167,19.8491847 43.2983488,19.0991931 Z",id:"Path",fill:"url(#linearGradient-3)"}}]}]}]})}},"928e":function(e,t,n){"use strict";n.r(t),t["default"]={"user.login.userName":"userName","user.login.password":"password","user.login.username.placeholder":"Please enter the username","user.login.password.placeholder":"Please enter the password","user.login.message-invalid-credentials":"Invalid username or password","user.login.message-invalid-verification-code":"Invalid verification code","user.login.tab-login-credentials":"Credentials","user.login.tab-login-mobile":"Mobile number","user.login.mobile.placeholder":"Mobile number","user.login.mobile.verification-code.placeholder":"Verification code","user.login.remember-me":"Remember me","user.login.forgot-password":"Forgot your password?","user.login.sign-in-with":"Sign in with","user.login.signup":"Sign up","user.login.login":"Login","user.register.register":"Register","user.register.email.placeholder":"Email","user.register.password.placeholder":"Password ","user.register.password.popover-message":"Please enter at least 6 characters. Please do not use passwords that are easy to guess. ","user.register.confirm-password.placeholder":"Confirm password","user.register.get-verification-code":"Get code","user.register.sign-in":"Already have an account?","user.register-result.msg":"Account:registered at {email}","user.register-result.activation-email":"The activation email has been sent to your email address and is valid for 24 hours. Please log in to the email in time and click on the link in the email to activate the account.","user.register-result.back-home":"Back to home","user.register-result.view-mailbox":"View mailbox","user.email.required":"Please enter your email!","user.email.wrong-format":"The email address is in the wrong format!","user.userName.required":"Please enter account name or email address","user.password.required":"Please enter your password!","user.password.twice.msg":"The passwords entered twice do not match!","user.password.strength.msg":"The password is not strong enough","user.password.strength.strong":"Strength: strong","user.password.strength.medium":"Strength: medium","user.password.strength.low":"Strength: low","user.password.strength.short":"Strength: too short","user.confirm-password.required":"Please confirm your password!","user.phone-number.required":"Please enter your phone number!","user.phone-number.wrong-format":"Please enter a valid phone number","user.verification-code.required":"Please enter the verification code!"}},"9fb0":function(e,t,n){"use strict";n.d(t,"a",(function(){return a})),n.d(t,"e",(function(){return r})),n.d(t,"l",(function(){return o})),n.d(t,"n",(function(){return s})),n.d(t,"k",(function(){return i})),n.d(t,"h",(function(){return c})),n.d(t,"i",(function(){return u})),n.d(t,"g",(function(){return l})),n.d(t,"j",(function(){return d})),n.d(t,"f",(function(){return f})),n.d(t,"o",(function(){return m})),n.d(t,"m",(function(){return h})),n.d(t,"b",(function(){return p})),n.d(t,"c",(function(){return b})),n.d(t,"d",(function(){return g}));var a="Access-Token",r="sidebar_type",o="is_mobile",s="nav_theme",i="layout",c="fixed_header",u="fixed_sidebar",l="content_width",d="auto_hide_header",f="color",m="weak",h="multi_tab",p="app_language",b="app_namespace",g={Fluid:"Fluid",Fixed:"Fixed"}},b775:function(e,t,n){"use strict";n.d(t,"a",(function(){return m}));n("d3b7");var a=n("cebe"),r=n.n(a),o=n("4360"),s=n("8ded"),i=n.n(s),c=n("56cd"),u={vm:{},install:function(e,t){this.installed||(this.installed=!0,t&&(e.axios=t,Object.defineProperties(e.prototype,{axios:{get:function(){return t}},$http:{get:function(){return t}}})))}},l=n("9fb0"),d=r.a.create({baseURL:"/easy-retry",timeout:6e3}),f=function(e){if(e.response){var t=e.response.data,n=i.a.get(l["a"]);403===e.response.status&&c["a"].error({message:"Forbidden",description:t.message}),401!==e.response.status||t.result&&t.result.isLogin||(c["a"].error({message:"Unauthorized",description:"Authorization verification failed"}),n&&o["a"].dispatch("Logout").then((function(){setTimeout((function(){window.location.reload()}),1500)})))}return Promise.reject(e)};d.interceptors.request.use((function(e){var t=i.a.get(l["a"]),n=i.a.get(l["c"]);return t&&(e.headers["EASY-RETRY-AUTH"]=t),n&&(e.headers["EASY-RETRY-NAMESPACE-ID"]=n),e}),f),d.interceptors.response.use((function(e){var t=e.data,n=t.status,a=t.message;return 0===n?(c["a"].error({message:a||"Error",duration:3}),Promise.reject(new Error(a||"Error"))):e.data}),f);var m={vm:{},install:function(e){e.use(u,d)}};t["b"]=d},b781:function(e,t,n){"use strict";n.r(t),t["default"]={"dashboard.analysis.test":"Gongzhuan No.{no} shop","dashboard.analysis.introduce":"Introduce","dashboard.analysis.total-sales":"Total Sales","dashboard.analysis.day-sales":"Daily Sales","dashboard.analysis.visits":"Visits","dashboard.analysis.visits-trend":"Visits Trend","dashboard.analysis.visits-ranking":"Visits Ranking","dashboard.analysis.day-visits":"Daily Visits","dashboard.analysis.week":"WoW Change","dashboard.analysis.day":"DoD Change","dashboard.analysis.payments":"Payments","dashboard.analysis.conversion-rate":"Conversion Rate","dashboard.analysis.operational-effect":"Operational Effect","dashboard.analysis.sales-trend":"Stores Sales Trend","dashboard.analysis.sales-ranking":"Sales Ranking","dashboard.analysis.all-year":"All Year","dashboard.analysis.all-month":"All Month","dashboard.analysis.all-week":"All Week","dashboard.analysis.all-day":"All day","dashboard.analysis.search-users":"Search Users","dashboard.analysis.per-capita-search":"Per Capita Search","dashboard.analysis.online-top-search":"Online Top Search","dashboard.analysis.the-proportion-of-sales":"The Proportion Of Sales","dashboard.analysis.dropdown-option-one":"Operation one","dashboard.analysis.dropdown-option-two":"Operation two","dashboard.analysis.channel.all":"ALL","dashboard.analysis.channel.online":"Online","dashboard.analysis.channel.stores":"Stores","dashboard.analysis.sales":"Sales","dashboard.analysis.traffic":"Traffic","dashboard.analysis.table.rank":"Rank","dashboard.analysis.table.search-keyword":"Keyword","dashboard.analysis.table.users":"Users","dashboard.analysis.table.weekly-range":"Weekly Range"}},bf0f:function(e,t,n){"use strict";n.d(t,"c",(function(){return g})),n.d(t,"b",(function(){return y}));var a=n("5530"),r=(n("d3b7"),n("caad"),n("3ca3"),n("ddb0"),n("8bbf")),o=n.n(r),s=n("a925"),i=n("8ded"),c=n.n(i),u=n("c1df"),l=n.n(u),d=n("743d");o.a.use(s["a"]);var f="en-US",m={"en-US":Object(a["a"])({},d["default"])},h=new s["a"]({silentTranslationWarn:!0,locale:f,fallbackLocale:f,messages:m}),p=[f];function b(e){return h.locale=e,document.querySelector("html").setAttribute("lang",e),e}function g(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f;return new Promise((function(t){return c.a.set("lang",e),h.locale!==e?p.includes(e)?t(b(e)):n("4aa4")("./".concat(e)).then((function(t){var n=t.default;return h.setLocaleMessage(e,n),p.push(e),l.a.updateLocale(n.momentName,n.momentLocale),b(e)})):t(e)}))}function y(e){return h.t("".concat(e))}t["a"]=h},ca00:function(e,t,n){"use strict";n.d(t,"c",(function(){return r})),n.d(t,"d",(function(){return o})),n.d(t,"b",(function(){return s})),n.d(t,"a",(function(){return i}));n("ac1f");var a=n("e30b");function r(){var e=new Date,t=e.getHours();return t<9?"早上好":t<=11?"上午好":t<=13?"中午好":t<20?"下午好":"晚上好"}function o(){var e=["休息一会儿吧","准备吃什么呢?","要不要打一把 DOTA","我猜你可能累了"],t=Math.floor(Math.random()*e.length);return e[t]}function s(e,t){return a[t][e]}function i(){return"https://www.easyretry.com"}},cebe:function(e,t){e.exports=axios},d73b:function(e,t,n){"use strict";n.d(t,"a",(function(){return Fe})),n.d(t,"b",(function(){return Re}));n("d3b7"),n("3ca3"),n("ddb0");var a,r,o,s,i=function(){var e=this,t=e._self._c;return t("div",{class:["user-layout-wrapper",e.isMobile&&"mobile"],attrs:{id:"userLayout"}},[t("div",{staticClass:"container"},[t("div",{staticClass:"user-layout-content"},[t("div",{staticClass:"top"},[t("div",{staticClass:"header"},[t("a",{attrs:{href:"/"}},[t("img",{staticClass:"logo",attrs:{src:n("5b62")}}),t("span",{staticClass:"title"},[e._v("Easy Retry")]),t("span",{staticClass:"desc",staticStyle:{"font-size":"16px","font-weight":"600"}},[e._v("v"+e._s(e.version))])])]),t("div",{staticClass:"desc"},[e._v(" "+e._s(e.$t("layouts.userLayout.title"))+" ")])]),t("router-view"),t("div",{staticClass:"footer"},[t("div",{staticClass:"links"},[t("a",{staticStyle:{margin:"10px"},attrs:{href:"mailto:598092184@qq.com",target:"_blank"}},[t("icon-font",{staticStyle:{fontSize:"20px"},attrs:{type:"icon-youxiang"}})],1),t("a",{staticStyle:{margin:"10px"},attrs:{href:"https://github.com/aizuda/easy-retry",target:"_blank"}},[t("icon-font",{staticStyle:{fontSize:"20px"},attrs:{type:"icon-github2"}})],1),t("a",{staticStyle:{margin:"10px"},attrs:{href:"https://gitee.com/aizuda/easy-retry",target:"_blank"}},[t("icon-font",{staticStyle:{fontSize:"20px"},attrs:{type:"icon-GITEE"}})],1)]),t("div",{staticClass:"copyright"},[e._v(" Copyright © "+e._s(e.year)+" Easy-Retry "),t("span",{staticClass:"desc",staticStyle:{"font-size":"16px","font-weight":"600"}},[e._v("v"+e._s(e.version))])])])],1)])])},c=[],u=(n("8fb1"),n("0c63")),l=n("5530"),d=n("5880"),f={computed:Object(l["a"])({},Object(d["mapState"])({isMobile:function(e){return e.app.isMobile}}))},m=(n("9d5c"),n("a600")),h=(n("fbd8"),n("55f1")),p=(n("d81d"),n("2a47"),n("bf0f")),b={computed:Object(l["a"])({},Object(d["mapState"])({currentLang:function(e){return e.app.lang}})),methods:{setLang:function(e){this.$store.dispatch("setLang",e)}}},g=b,y=["zh-CN","zh-TW","en-US","pt-BR"],k={"zh-CN":"简体中文","zh-TW":"繁体中文","en-US":"English","pt-BR":"Português"},v={"zh-CN":"🇨🇳","zh-TW":"🇭🇰","en-US":"🇺🇸","pt-BR":"🇧🇷"},C={props:{prefixCls:{type:String,default:"ant-pro-drop-down"}},name:"SelectLang",mixins:[g],render:function(){var e=this,t=arguments[0],n=this.prefixCls,a=function(t){var n=t.key;e.setLang(n)},r=t(h["a"],{class:["menu","ant-pro-header-menu"],attrs:{selectedKeys:[this.currentLang]},on:{click:a}},[y.map((function(e){return t(h["a"].Item,{key:e},[t("span",{attrs:{role:"img","aria-label":k[e]}},[v[e]])," ",k[e]])}))]);return t(m["a"],{attrs:{overlay:r,placement:"bottomRight"}},[t("span",{class:n},[t(u["a"],{attrs:{type:"global",title:Object(p["b"])("navBar.lang")}})])])}},N=C,w=n("0fea"),S=u["a"].createFromIconfontCN({scriptUrl:"//at.alicdn.com/t/c/font_1460205_qu2antnauc.js"}),j={name:"UserLayout",data:function(){return{year:(new Date).getFullYear(),version:""}},components:{SelectLang:N,IconFont:S},mixins:[f],created:function(){var e=this;Object(w["Q"])().then((function(t){e.version=t.data}))},mounted:function(){document.body.classList.add("userLayout")},beforeDestroy:function(){document.body.classList.remove("userLayout")}},z=j,P=(n("4db8"),n("2877")),O=Object(P["a"])(z,i,c,!1,null,"77578f85",null),L=O.exports,T=function(){var e=this,t=e._self._c;return t("div",[t("router-view")],1)},x=[],_={name:"BlankLayout"},E=_,A=Object(P["a"])(E,T,x,!1,null,"7f25f9eb",null),M=(A.exports,function(){var e=this,t=e._self._c;return t("pro-layout",e._b({attrs:{menus:e.menus,collapsed:e.collapsed,mediaQuery:e.query,isMobile:e.isMobile,handleMediaQuery:e.handleMediaQuery,handleCollapse:e.handleCollapse,i18nRender:e.i18nRender},scopedSlots:e._u([{key:"menuHeaderRender",fn:function(){return[t("div",[t("img",{attrs:{src:n("5b62")}}),t("h1",[e._v(e._s(e.title))])])]},proxy:!0},{key:"headerContentRender",fn:function(){return[t("div",[t("a-tooltip",{attrs:{title:"刷新页面"}},[t("a-icon",{staticStyle:{"font-size":"18px",cursor:"pointer"},attrs:{type:"reload"},on:{click:function(){e.$router.go(0)}}})],1)],1)]},proxy:!0},{key:"rightContentRender",fn:function(){return[t("right-content",{attrs:{"top-menu":"topmenu"===e.settings.layout,"is-mobile":e.isMobile,theme:e.settings.theme}})]},proxy:!0},{key:"footerRender",fn:function(){return[t("global-footer")]},proxy:!0}])},"pro-layout",e.settings,!1),[e.isProPreviewSite&&!e.collapsed?t("ads"):e._e(),e.isDev?t("setting-drawer",{attrs:{settings:e.settings},on:{change:e.handleSettingChange}},[t("div",{staticStyle:{margin:"12px 0"}},[e._v(" This is SettingDrawer custom footer content. ")])]):e._e(),t("router-view")],1)}),I=[],F=(n("7db0"),n("c0d2")),R=n("9fb0"),$=n("e819"),U=function(){var e=this,t=e._self._c;return t("div",{class:e.wrpCls},[t("Namespace"),t("a",{class:e.prefixCls,attrs:{href:"https://www.easyretry.com",target:"_blank"}},[t("a-icon",{style:{fontSize:"18px",color:"#08c"},attrs:{type:"question-circle"}})],1),t("avatar-dropdown",{class:e.prefixCls,attrs:{menu:e.showMenu,"current-user":e.currentUser}})],1)},D=[],B=n("ade3"),q=(n("b0c0"),function(){var e=this,t=e._self._c;return e.currentUser&&e.currentUser.name?t("a-dropdown",{attrs:{placement:"bottomRight"},scopedSlots:e._u([{key:"overlay",fn:function(){return[t("a-menu",{staticClass:"ant-pro-drop-down menu",attrs:{"selected-keys":[]}},[t("a-menu-item",{key:"logout",on:{click:e.handleLogout}},[t("a-icon",{attrs:{type:"logout"}}),e._v(" "+e._s(e.$t("menu.account.logout"))+" ")],1)],1)]},proxy:!0}],null,!1,3699420034)},[t("span",{staticClass:"ant-pro-account-avatar"},[t("a-avatar",{staticClass:"antd-pro-global-header-index-avatar",attrs:{size:"small",src:"https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png"}}),t("span",[e._v(e._s(e.currentUser.name))])],1)]):t("span",[t("a-spin",{style:{marginLeft:8,marginRight:8},attrs:{size:"small"}})],1)}),G=[],V=(n("cd17"),n("ed3b")),W={name:"AvatarDropdown",props:{currentUser:{type:Object,default:function(){return null}},menu:{type:Boolean,default:!0}},methods:{handleToCenter:function(){this.$router.push({path:"/account/center"})},handleToSettings:function(){this.$router.push({path:"/account/settings"})},handleLogout:function(e){var t=this;V["a"].confirm({title:this.$t("layouts.usermenu.dialog.title"),content:this.$t("layouts.usermenu.dialog.content"),onOk:function(){return t.$store.dispatch("Logout").then((function(){t.$router.push({name:"login"})}))},onCancel:function(){}})}}},H=W,K=(n("f4ba"),Object(P["a"])(H,q,G,!1,null,"fd4de960",null)),Y=K.exports,Q=function(){var e=this,t=e._self._c;return e.namespaceIds&&e.namespaceIds.length>0?t("a-dropdown",[t("a-menu",{attrs:{slot:"overlay"},on:{click:e.handleMenuClick},slot:"overlay"},e._l(e.namespaceIds,(function(n){return t("a-menu-item",{key:n.uniqueId},[t("a",{attrs:{href:"javascript:;"}},[e._v(e._s(n.name))])])})),1),t("a-button",{attrs:{shape:"round"}},[e._v(" "+e._s(e.name)+" "),t("a-icon",{attrs:{type:"down"}})],1)],1):t("span",[t("a-spin",{style:{marginLeft:8,marginRight:8},attrs:{size:"small"}})],1)},J=[],Z={computed:Object(l["a"])({},Object(d["mapState"])({currentLang:function(e){return e.app.lang}})),methods:{setNamespace:function(e){this.$store.dispatch("setNamespace",e)}}},X=Z,ee=n("8ded"),te=n.n(ee),ne={mixins:[X],data:function(){return{namespaceIds:[],name:"Default"}},computed:{refreshNamespace:function(){return this.$store.getters.namespaces}},watch:{refreshNamespace:function(e){this.namespaceIds=e}},mounted:function(){var e=this;setTimeout((function(){e.namespaceIds=e.$store.getters.namespaces,e.name=e.namespaceIds.find((function(e){return e.uniqueId===te.a.get(R["c"])})).name}),1500)},methods:{handleMenuClick:function(e){var t=this;this.name=this.namespaceIds.find((function(t){return t.uniqueId===e.key})).name,this.$store.dispatch("setNamespace",e.key),setTimeout((function(){t.$router.go(0)}),500)}}},ae=ne,re=Object(P["a"])(ae,Q,J,!1,null,null,null),oe=re.exports,se={name:"RightContent",components:{AvatarDropdown:Y,SelectLang:N,Namespace:oe},props:{prefixCls:{type:String,default:"ant-pro-global-header-index-action"},isMobile:{type:Boolean,default:function(){return!1}},topMenu:{type:Boolean,required:!0},theme:{type:String,required:!0}},data:function(){return{showMenu:!0,currentUser:{}}},computed:{wrpCls:function(){return Object(B["a"])({"ant-pro-global-header-index-right":!0},"ant-pro-global-header-index-".concat(this.isMobile||!this.topMenu?"light":this.theme),!0)}},mounted:function(){var e=this;setTimeout((function(){e.currentUser={name:e.$store.getters.nickname}}),1500)}},ie=se,ce=Object(P["a"])(ie,U,D,!1,null,null,null),ue=ce.exports,le=function(){var e=this,t=e._self._c;return t("global-footer",{staticClass:"footer custom-render",scopedSlots:e._u([{key:"links",fn:function(){return[t("a",{attrs:{href:"https://www.easyretry.com/",target:"_blank"}},[e._v("Easy Retry")]),t("a",{attrs:{href:"http://aizuda.com/",target:"_blank"}},[e._v("Team Aizudai")]),t("a",{attrs:{href:"https://github.com/byteblogs168",target:"_blank"}},[e._v("@byteblogs168")])]},proxy:!0},{key:"copyright",fn:function(){return[t("a",{staticStyle:{margin:"10px"},attrs:{href:"mailto:598092184@qq.com",target:"_blank"}},[t("icon-font",{staticStyle:{fontSize:"20px"},attrs:{type:"icon-youxiang"}})],1),t("a",{staticStyle:{margin:"10px"},attrs:{href:"https://github.com/aizuda/easy-retry",target:"_blank"}},[t("icon-font",{staticStyle:{fontSize:"20px"},attrs:{type:"icon-github2"}})],1),t("a",{staticStyle:{margin:"10px"},attrs:{href:"https://gitee.com/aizuda/easy-retry",target:"_blank"}},[t("icon-font",{staticStyle:{fontSize:"20px"},attrs:{type:"icon-GITEE"}})],1)]},proxy:!0}])})},de=[],fe=u["a"].createFromIconfontCN({scriptUrl:"//at.alicdn.com/t/c/font_1460205_qu2antnauc.js"}),me={name:"ProGlobalFooter",components:{GlobalFooter:F["a"],IconFont:fe}},he=me,pe=Object(P["a"])(he,le,de,!1,null,null,null),be=pe.exports,ge="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js",ye={props:{isMobile:Boolean},mounted:function(){},methods:{load:function(){if(ge){var e=document.createElement("script");e.id="_adsbygoogle_js",e.src=ge,this.$el.appendChild(e),setTimeout((function(){(window.adsbygoogle||[]).push({})}),2e3)}}},render:function(){var e=arguments[0];return e("div",{class:"business-pro-ad"},[e("a",{attrs:{href:"https://store.antdv.com/pro/",target:"_blank"}},["(推荐) 企业级商用版 Admin Pro 现已发售,采用 Vue3 + TS 欢迎购买。"])])}},ke=ye,ve=(n("13cf"),Object(P["a"])(ke,a,r,!1,null,"4109f67d",null)),Ce=ve.exports,Ne=n("8eeb4"),we=n.n(Ne),Se={name:"BasicLayout",components:{SettingDrawer:F["c"],RightContent:ue,GlobalFooter:be,LogoSvg:we.a,Ads:Ce},data:function(){return{isProPreviewSite:!1,isDev:!1,menus:[],collapsed:!1,title:$["a"].title,settings:{layout:$["a"].layout,contentWidth:"sidemenu"===$["a"].layout?R["d"].Fluid:$["a"].contentWidth,theme:$["a"].navTheme,primaryColor:$["a"].primaryColor,fixedHeader:$["a"].fixedHeader,fixSiderbar:$["a"].fixSiderbar,colorWeak:$["a"].colorWeak,hideHintAlert:!1,hideCopyButton:!1},query:{},isMobile:!1}},computed:Object(l["a"])({},Object(d["mapState"])({mainMenu:function(e){return e.permission.addRouters}})),created:function(){var e=this,t=this.mainMenu.find((function(e){return"/"===e.path}));this.menus=t&&t.children||[],this.$watch("collapsed",(function(){e.$store.commit(R["e"],e.collapsed)})),this.$watch("isMobile",(function(){e.$store.commit(R["l"],e.isMobile)}))},mounted:function(){var e=this,t=navigator.userAgent;t.indexOf("Edge")>-1&&this.$nextTick((function(){e.collapsed=!e.collapsed,setTimeout((function(){e.collapsed=!e.collapsed}),16)}))},methods:{i18nRender:p["b"],handleMediaQuery:function(e){this.query=e,!this.isMobile||e["screen-xs"]?!this.isMobile&&e["screen-xs"]&&(this.isMobile=!0,this.collapsed=!1,this.settings.contentWidth=R["d"].Fluid):this.isMobile=!1},handleCollapse:function(e){this.collapsed=e},handleSettingChange:function(e){var t=e.type,n=e.value;switch(t&&(this.settings[t]=n),t){case"contentWidth":this.settings[t]=n;break;case"layout":"sidemenu"===n?this.settings.contentWidth=R["d"].Fluid:(this.settings.fixSiderbar=!1,this.settings.contentWidth=R["d"].Fixed);break}}}},je=Se,ze=(n("7d35"),Object(P["a"])(je,M,I,!1,null,null,null)),Pe=ze.exports,Oe={name:"RouteView",props:{keepAlive:{type:Boolean,default:!0}},data:function(){return{}},render:function(){var e=arguments[0],t=this.$route.meta,n=this.$store.getters,a=e("keep-alive",[e("router-view")]),r=e("router-view");return(n.multiTab||t.keepAlive)&&(this.keepAlive||n.multiTab||t.keepAlive)?a:r}},Le=Oe,Te=Object(P["a"])(Le,o,s,!1,null,null,null),xe=(Te.exports,function(){var e=this,t=e._self._c;return t("page-header-wrapper",[t("router-view")],1)}),_e=[],Ee={name:"PageView"},Ae=Ee,Me=Object(P["a"])(Ae,xe,_e,!1,null,null,null),Ie=(Me.exports,{name:"RouteView",render:function(e){return e("router-view")}}),Fe=[{path:"/",name:"index",component:Pe,meta:{title:"menu.home"},redirect:"/dashboard/analysis",children:[{path:"/dashboard",name:"dashboard",redirect:"/dashboard/analysis",hideChildrenInMenu:!0,component:Ie,meta:{title:"menu.dashboard",keepAlive:!0,icon:"dashboard",permission:["dashboard"]},children:[{path:"/dashboard/analysis",name:"Analysis",component:function(){return Promise.all([n.e("chunk-54cc2708"),n.e("chunk-609588eb"),n.e("chunk-0c81c3d2")]).then(n.bind(null,"2f3a"))},meta:{title:"menu.dashboard.analysis",keepAlive:!0,permission:["dashboard"]}},{path:"/dashboard/pods",name:"PodList",component:function(){return Promise.all([n.e("chunk-54cc2708"),n.e("chunk-609588eb"),n.e("chunk-74bac939")]).then(n.bind(null,"9141d"))},meta:{title:"menu.dashboard.analysis",keepAlive:!0,permission:["dashboard"]}}]},{path:"/namespace",name:"namespace",component:function(){return Promise.all([n.e("chunk-54cc2708"),n.e("chunk-609588eb"),n.e("chunk-ffa9b700"),n.e("chunk-5d2732ba")]).then(n.bind(null,"272d"))},meta:{title:"命名空间",icon:"team",permission:["namespace"]}},{path:"/group",name:"GroupConfigList",component:Ie,hideChildrenInMenu:!0,redirect:"/group/list",meta:{title:"组管理",hideChildrenInMenu:!0,icon:"team",permission:["group"]},children:[{path:"/group/list",name:"basicConfigList",component:function(){return Promise.all([n.e("chunk-54cc2708"),n.e("chunk-609588eb"),n.e("chunk-23853474")]).then(n.bind(null,"ba93"))},meta:{title:"组配置列表",hidden:!0,icon:"team",permission:["group"]}},{path:"/group/config",name:"GroupConfig",hidden:!0,component:function(){return Promise.all([n.e("chunk-54cc2708"),n.e("chunk-ffa9b700"),n.e("chunk-5d6686e0")]).then(n.bind(null,"e9413"))},meta:{title:"组信息配置",hidden:!0,hideChildrenInMenu:!0,icon:"profile",permission:["group"]}},{path:"/group/info",name:"GroupInfo",hidden:!0,component:function(){return n.e("chunk-5e4dab78").then(n.bind(null,"9b4b"))},meta:{title:"组配置详情",hidden:!0,hideChildrenInMenu:!0,icon:"profile",permission:["group"]}}]},{path:"/retry",name:"RetryTask",component:Ie,redirect:"/retry/list",meta:{title:"重试任务管理",icon:"schedule",permission:["retryTask"]},children:[{path:"/retry/list",name:"RetryTaskList",component:function(){return Promise.all([n.e("chunk-54cc2708"),n.e("chunk-609588eb"),n.e("chunk-220c1da9")]).then(n.bind(null,"9d75"))},meta:{title:"重试任务",icon:"profile",keepAlive:!0,permission:["retryTask"]}},{path:"/retry/info",name:"RetryTaskInfo",hidden:!0,component:function(){return Promise.all([n.e("chunk-54cc2708"),n.e("chunk-609588eb"),n.e("chunk-35f76107")]).then(n.bind(null,"99f5"))},meta:{title:"重试任务详情",icon:"profile",keepAlive:!0,permission:["retryTask"]}},{path:"/retry/dead-letter/list",name:"RetryDeadLetterList",component:function(){return Promise.all([n.e("chunk-54cc2708"),n.e("chunk-609588eb"),n.e("chunk-268a3da1")]).then(n.bind(null,"dafb"))},meta:{title:"死信任务",icon:"profile",permission:["retryDeadLetter"]}},{path:"/retry/dead-letter/info",name:"RetryDeadLetterInfo",hidden:!0,component:function(){return n.e("chunk-2d0c8f97").then(n.bind(null,"56bb"))},meta:{title:"死信任务详情",icon:"profile",permission:["retryDeadLetter"]}},{path:"/retry/log/list",name:"RetryLogList",component:function(){return Promise.all([n.e("chunk-54cc2708"),n.e("chunk-609588eb"),n.e("chunk-41e3265e")]).then(n.bind(null,"0564"))},meta:{title:"重试日志",icon:"profile",permission:["retryLog"]}},{path:"/retry/log/info",name:"RetryLogInfo",hidden:!0,component:function(){return Promise.all([n.e("chunk-54cc2708"),n.e("chunk-609588eb"),n.e("chunk-251479d0")]).then(n.bind(null,"5fe2"))},meta:{title:"重试日志详情",icon:"profile",permission:["retryLog"]}},{path:"/retry/scene/list",name:"SceneList",component:function(){return Promise.all([n.e("chunk-54cc2708"),n.e("chunk-609588eb"),n.e("chunk-5b7b2d68")]).then(n.bind(null,"51b5"))},meta:{title:"场景列表",icon:"profile",keepAlive:!0,permission:["retryTask"]}},{path:"/retry/scene/config",name:"SceneFrom",hidden:!0,component:function(){return n.e("chunk-77a3ecf2").then(n.bind(null,"f595"))},meta:{title:"场景配置",icon:"profile",keepAlive:!0,permission:["retryTask"]}},{path:"/retry/notify/list",name:"NotifyList",component:function(){return Promise.all([n.e("chunk-54cc2708"),n.e("chunk-609588eb"),n.e("chunk-748d9b9d")]).then(n.bind(null,"7016"))},meta:{title:"通知列表",icon:"profile",keepAlive:!0,permission:["retryTask"]}},{path:"/retry/notify/config",name:"NotifyFrom",hidden:!0,component:function(){return n.e("chunk-198954bd").then(n.bind(null,"398e"))},meta:{title:"通知配置",icon:"profile",keepAlive:!0,permission:["retryTask"]}}]},{path:"/job",name:"Job",component:Ie,redirect:"/job/list",meta:{title:"定时任务管理",icon:"profile",permission:["job"]},children:[{path:"/job/list",name:"JobList",component:function(){return Promise.all([n.e("chunk-54cc2708"),n.e("chunk-609588eb"),n.e("chunk-1098698c")]).then(n.bind(null,"76ff"))},meta:{title:"任务信息",keepAlive:!0,icon:"profile",permission:["job"]}},{path:"/job/info",name:"JobInfo",hidden:!0,component:function(){return n.e("chunk-2b85f358").then(n.bind(null,"6289"))},meta:{title:"定时任务详情",keepAlive:!0,icon:"profile",permission:["job"]}},{path:"/job/config",name:"JobFrom",hidden:!0,component:function(){return n.e("chunk-4327ccd0").then(n.bind(null,"d291"))},meta:{title:"任务配置",icon:"profile",permission:["job"]}},{path:"/job/batch/list",name:"JobBatchList",component:function(){return Promise.all([n.e("chunk-54cc2708"),n.e("chunk-609588eb"),n.e("chunk-672e297b"),n.e("chunk-56d0ab76")]).then(n.bind(null,"29e5"))},meta:{title:"任务批次",icon:"profile",permission:["jobBatch"]}},{path:"/job/batch/info",name:"JobBatchInfo",hidden:!0,component:function(){return Promise.all([n.e("chunk-54cc2708"),n.e("chunk-609588eb"),n.e("chunk-672e297b"),n.e("chunk-2d0aa660")]).then(n.bind(null,"119c"))},meta:{title:"任务批次详情",icon:"profile",permission:["jobBatch"]}},{path:"/job/task/list",name:"JobTaskList",hidden:!0,component:function(){return Promise.all([n.e("chunk-54cc2708"),n.e("chunk-609588eb"),n.e("chunk-672e297b")]).then(n.bind(null,"36e8"))},meta:{title:"任务项",icon:"profile",permission:["jobBatch"]}}]},{path:"/user-list",name:"UserList",component:function(){return Promise.all([n.e("chunk-54cc2708"),n.e("chunk-609588eb"),n.e("chunk-073344ab")]).then(n.bind(null,"1faf"))},meta:{title:"用户管理",icon:"user",permission:["user"]}},{path:"/user-form",name:"UserForm",hidden:!0,component:function(){return n.e("chunk-d8216538").then(n.bind(null,"bf80"))},meta:{title:"新增或更新用户",icon:"profile",permission:["userForm"]}}]},{path:"*",redirect:"/404",hidden:!0}],Re=[{path:"/user",component:L,redirect:"/user/login",hidden:!0,children:[{path:"login",name:"login",component:function(){return n.e("user").then(n.bind(null,"ac2a"))}},{path:"recover",name:"recover",component:void 0}]},{path:"/404",component:function(){return n.e("fail").then(n.bind(null,"cc89"))}}]},dea1:function(e,t,n){"use strict";n.r(t);var a=n("5530"),r=n("b781");t["default"]=Object(a["a"])({},r["default"])},e06b:function(e,t,n){},e30b:function(e,t,n){n("99af");var a=[{roleId:2,permissionId:"group",permissionName:"组配置",actionEntitySet:[{action:"add",describe:"新增",defaultCheck:!1},{action:"edit",describe:"更新",defaultCheck:!1},{action:"stop",describe:"停止",defaultCheck:!1}]},{roleId:2,permissionId:"user",permissionName:"用户"},{roleId:2,permissionId:"userForm",permissionName:"新增或更新用户"},{roleId:2,permissionId:"basicConfig",permissionName:"基础信息配置"},{roleId:1,permissionId:"namespace",permissionName:"命名空间"}],r=[{roleId:2,permissionId:"dashboard",permissionName:"看板"},{roleId:2,permissionId:"retryTask",permissionName:"任务管理"},{roleId:2,permissionId:"retryDeadLetter",permissionName:"死信队列管理"},{roleId:2,permissionId:"retryLog",permissionName:"重试日志管理"}],o=[{roleId:2,permissionId:"dashboard",permissionName:"看板"},{roleId:1,permissionId:"job",permissionName:"定时任务管理",actionEntitySet:[{action:"del",describe:"新增",defaultCheck:!1}]},{roleId:1,permissionId:"jobBatch",permissionName:"任务批次"}],s=[{roleId:1,permissionId:"group",permissionName:"组配置",actionEntitySet:[]}],i=[{roleId:1,permissionId:"dashboard",permissionName:"看板"},{roleId:1,permissionId:"retryTask",permissionName:"任务管理"},{roleId:1,permissionId:"retryDeadLetter",permissionName:"死信队列管理"},{roleId:1,permissionId:"retryLog",permissionName:"重试日志管理"}],c=[{roleId:1,permissionId:"dashboard",permissionName:"看板"},{roleId:1,permissionId:"job",permissionName:"定时任务管理"},{roleId:1,permissionId:"jobBatch",permissionName:"任务批次"}],u={RETRY:{1:[].concat(i,s),2:[].concat(r,a)},JOB:{1:[].concat(c,s),2:[].concat(o,a)},ALL:{1:[].concat(i,c,s),2:[].concat(r,o,a)}};e.exports=u},e819:function(e,t,n){"use strict";t["a"]={navTheme:"dark",primaryColor:"#1890ff",layout:"sidemenu",contentWidth:"Fluid",fixedHeader:!0,fixSiderbar:!0,colorWeak:!1,menu:{locale:!0},title:"Easy Retry",pwa:!1,iconfontUrl:"https://www.easyretry.com/",production:!0}},f4ba:function(e,t,n){"use strict";n("e06b")},f678:function(e,t,n){},fddb:function(e,t,n){},ffb6:function(e,t,n){"use strict";n.r(t);var a=n("5530"),r=n("0af2");t["default"]=Object(a["a"])({},r["default"])}}); \ No newline at end of file diff --git a/easy-retry-server/easy-retry-server-starter/src/main/resources/admin/js/chunk-073344ab.c36c7671.js b/easy-retry-server/easy-retry-server-starter/src/main/resources/admin/js/chunk-073344ab.c36c7671.js new file mode 100644 index 00000000..ba9bde9d --- /dev/null +++ b/easy-retry-server/easy-retry-server-starter/src/main/resources/admin/js/chunk-073344ab.c36c7671.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-073344ab","chunk-2d0c8f97"],{"1faf":function(e,t,r){"use strict";r.r(t);r("d3b7"),r("25f0");var a=function(){var e=this,t=e._self._c;return t("a-card",{attrs:{bordered:!1}},[t("div",{staticClass:"table-page-search-wrapper"},[t("a-form",{attrs:{layout:"inline"}},[t("a-row",{attrs:{gutter:48}},[t("a-col",{attrs:{md:8,sm:24}},[t("a-form-item",{attrs:{label:"用户名"}},[t("a-input",{attrs:{placeholder:"请输入用户名",allowClear:""},model:{value:e.queryParam.username,callback:function(t){e.$set(e.queryParam,"username",t)},expression:"queryParam.username"}})],1)],1),t("a-col",{attrs:{md:e.advanced?24:8,sm:24}},[t("span",{staticClass:"table-page-search-submitButtons",style:e.advanced&&{float:"right",overflow:"hidden"}||{}},[t("a-button",{attrs:{type:"primary"},on:{click:function(t){return e.$refs.table.refresh(!0)}}},[e._v("查询")]),t("a-button",{staticStyle:{"margin-left":"8px"},on:{click:function(){return e.queryParam={}}}},[e._v("重置")])],1)])],1)],1)],1),t("div",{staticClass:"table-operator"},[t("a-button",{attrs:{type:"primary",icon:"plus"},on:{click:function(t){return e.handleNew()}}},[e._v("新建")])],1),t("s-table",{ref:"table",attrs:{size:"default",rowKey:"key",columns:e.columns,data:e.loadData,alert:e.options.alert,rowSelection:e.options.rowSelection},scopedSlots:e._u([{key:"serial",fn:function(r,a){return t("span",{},[e._v(" "+e._s(a.id)+" ")])}},{key:"username",fn:function(r,a){return t("span",{},[1===a.role?t("a",{attrs:{href:"#"},on:{click:function(t){return e.handlerDetail(a)}}},[e._v(e._s(r))]):t("span",[e._v(e._s(r))])])}},{key:"groupNameList",fn:function(r,a){return t("span",{},[e._v(" "+e._s(2===a.role?"所有组":r.toString())+" ")])}},{key:"role",fn:function(r,a){return t("span",{},[e._v(" "+e._s(2===a.role?"管理员":"普通用户")+" ")])}},{key:"action",fn:function(r,a){return t("span",{},[[t("a",{on:{click:function(t){return e.handleEdit(a)}}},[e._v("编辑")]),t("a-divider",{attrs:{type:"vertical"}}),t("a-popconfirm",{attrs:{title:"是否确认删除这个用户吗?","ok-text":"删除","cancel-text":"取消"},on:{confirm:function(t){return e.handleDel(a)}}},[t("a",{attrs:{href:"javascript:;"}},[e._v("删除")])])]],2)}}])}),t("Drawer",{attrs:{title:"用户权限",placement:"right",width:800,visibleAmplify:!1,visible:e.openDrawer},on:{closeDrawer:e.onClose}},[t("a-descriptions",{attrs:{column:8,bordered:""}},e._l(e.systemPermissions,(function(r){return t("a-descriptions-item",{key:r.namespaceId,attrs:{label:r.namespaceName+" ("+r.namespaceId+")",span:8}},e._l(r.groupNames,(function(r){return t("a-tag",{key:r,attrs:{color:"#64a6ea"}},[e._v(" "+e._s(r)+" ")])})),1)})),1)],1)],1)},n=[],s=r("261e"),o=r("27e3"),i=r("c1df"),l=r.n(i),c=r("0fea"),u=r("2af9"),d=r("56bb"),p={name:"TableListWrapper",components:{Drawer:u["c"],RetryDeadLetterInfo:d["default"],AInput:o["a"],ATextarea:s["a"],STable:u["k"]},data:function(){var e=this;return{currentComponet:"List",record:"",mdl:{},advanced:!1,queryParam:{},columns:[{title:"#",scopedSlots:{customRender:"serial"}},{title:"用户名",dataIndex:"username",scopedSlots:{customRender:"username"}},{title:"角色",dataIndex:"role",scopedSlots:{customRender:"role"}},{title:"更新时间",dataIndex:"updateDt",customRender:function(e){return l()(e).format("YYYY-MM-DD HH:mm:ss")}},{title:"操作",width:"10%",dataIndex:"action",scopedSlots:{customRender:"action"}}],loadData:function(t){return Object(c["E"])(Object.assign(t,e.queryParam)).then((function(e){return e}))},selectedRowKeys:[],selectedRows:[],options:{alert:{show:!0,clear:function(){e.selectedRowKeys=[]}},rowSelection:{selectedRowKeys:this.selectedRowKeys,onChange:this.onSelectChange}},optionAlertShow:!1,openDrawer:!1,systemPermissions:[]}},filters:{},methods:{handleNew:function(){this.$router.push("/user-form")},handleEdit:function(e){this.record=e||"",this.$router.push({path:"/user-form",query:{username:e.username}})},handleDel:function(e){var t=this;Object(c["k"])(e.id).then((function(e){t.$refs.table.refresh(!0),t.$message.success("删除成功")}))},handleGoBack:function(){this.record="",this.currentComponet="List"},handlerDetail:function(e){var t=this;Object(c["D"])(e.id).then((function(e){t.systemPermissions=e.data,t.openDrawer=!0}))},onClose:function(){this.openDrawer=!this.openDrawer}},watch:{"$route.path":function(){this.record="",this.currentComponet="List"}}},f=p,m=(r("3296"),r("2877")),h=Object(m["a"])(f,a,n,!1,null,null,null);t["default"]=h.exports},3296:function(e,t,r){"use strict";r("e593")},"56bb":function(e,t,r){"use strict";r.r(t);r("ac1f"),r("5319"),r("b0c0");var a=function(){var e=this,t=e._self._c;return t("div",[e.showHeader?t("page-header-wrapper",{staticStyle:{margin:"-24px -1px 0"},on:{back:function(){return e.$router.replace("/retry/dead-letter/list")}}},[t("div")]):e._e(),t("a-card",{attrs:{bordered:!1}},[null!==e.retryDealLetterInfo?t("a-descriptions",{attrs:{title:"",column:e.column,bordered:""}},[t("a-descriptions-item",{attrs:{label:"组名称"}},[e._v(" "+e._s(e.retryDealLetterInfo.groupName)+" ")]),t("a-descriptions-item",{attrs:{label:"场景名称"}},[e._v(" "+e._s(e.retryDealLetterInfo.sceneName)+" ")]),t("a-descriptions-item",{attrs:{label:"业务id",span:"2"}},[e._v(" "+e._s(e.retryDealLetterInfo.idempotentId)+" ")]),t("a-descriptions-item",{attrs:{label:"业务编号"}},[e._v(" "+e._s(e.retryDealLetterInfo.bizNo)+" ")]),t("a-descriptions-item",{attrs:{label:"数据类型"}},[t("a-tag",{attrs:{color:e.taskType[e.retryDealLetterInfo.taskType].color}},[e._v(" "+e._s(e.taskType[e.retryDealLetterInfo.taskType].name)+" ")])],1),t("a-descriptions-item",{attrs:{label:"创建时间"}},[e._v(" "+e._s(e.retryDealLetterInfo.createDt)+" ")]),t("a-descriptions-item",{attrs:{label:"执行器名称",span:"2"}},[e._v(" "+e._s(e.retryDealLetterInfo.executorName)+" ")]),t("a-descriptions-item",{attrs:{label:"扩展参数",span:"3"}},[e._v(" "+e._s(e.retryDealLetterInfo.bizNo)+" ")]),t("a-descriptions-item",{attrs:{label:"参数",span:"3"}},[e._v(" "+e._s(e.retryDealLetterInfo.argsStr)+" ")])],1):e._e()],1)],1)},n=[],s=(r("a9e3"),r("0fea")),o={name:"RetryDeadLetterInfo",props:{showHeader:{type:Boolean,default:!0},column:{type:Number,default:3}},data:function(){return{retryDealLetterInfo:null,taskType:{1:{name:"重试数据",color:"#d06892"},2:{name:"回调数据",color:"#f5a22d"}}}},created:function(){var e=this.$route.query.id,t=this.$route.query.groupName;e&&t&&this.retryDeadLetterById(e,t)},methods:{retryDeadLetterById:function(e,t){var r=this;Object(s["t"])(e,{groupName:t}).then((function(e){r.retryDealLetterInfo=e.data}))}}},i=o,l=r("2877"),c=Object(l["a"])(i,a,n,!1,null,"7c315ea2",null);t["default"]=c.exports},e593:function(e,t,r){}}]); \ No newline at end of file diff --git a/easy-retry-server/easy-retry-server-starter/src/main/resources/admin/js/chunk-5d2732ba.8582e5c8.js b/easy-retry-server/easy-retry-server-starter/src/main/resources/admin/js/chunk-5d2732ba.8582e5c8.js new file mode 100644 index 00000000..e4b32226 --- /dev/null +++ b/easy-retry-server/easy-retry-server-starter/src/main/resources/admin/js/chunk-5d2732ba.8582e5c8.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-5d2732ba"],{"0a1b":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a("92fa"),n=w(r),i=a("41b2"),s=w(i),o=a("6042"),l=w(o);t.fixControlledValue=C,t.resolveOnChange=T,t.getInputClassName=z;var u=a("4d26"),d=w(u),f=a("516f"),c=w(f),p=a("0464"),h=w(p),m=a("8bc7"),v=w(m),b=a("73c8"),g=a("bad7"),y=a("1fde"),x=w(y);function w(e){return e&&e.__esModule?e:{default:e}}function $(){}function C(e){return"undefined"===typeof e||null===e?"":e}function T(e,t,a){if(a){var r=t;if("click"===t.type){Object.defineProperty(r,"target",{writable:!0}),Object.defineProperty(r,"currentTarget",{writable:!0}),r.target=e,r.currentTarget=e;var n=e.value;return e.value="",a(r),void(e.value=n)}a(r)}}function z(e,t,a){var r;return(0,d["default"])(e,(r={},(0,l["default"])(r,e+"-sm","small"===t),(0,l["default"])(r,e+"-lg","large"===t),(0,l["default"])(r,e+"-disabled",a),r))}t["default"]={name:"AInput",inheritAttrs:!1,model:{prop:"value",event:"change.value"},props:(0,s["default"])({},v["default"]),inject:{configProvider:{default:function(){return g.ConfigConsumerProps}}},data:function(){var e=this.$props,t="undefined"===typeof e.value?e.defaultValue:e.value;return{stateValue:"undefined"===typeof t?"":t}},watch:{value:function(e){this.stateValue=e}},mounted:function(){var e=this;this.$nextTick((function(){e.autoFocus&&e.focus(),e.clearPasswordValueAttribute()}))},beforeDestroy:function(){this.removePasswordTimeout&&clearTimeout(this.removePasswordTimeout)},methods:{onBlur:function(e){this.$forceUpdate();var t=(0,b.getListeners)(this),a=t.blur;a&&a(e)},focus:function(){this.$refs.input.focus()},blur:function(){this.$refs.input.blur()},select:function(){this.$refs.input.select()},setValue:function(e,t){this.stateValue!==e&&((0,b.hasProp)(this,"value")||(this.stateValue=e,this.$nextTick((function(){t&&t()}))))},onChange:function(e){this.$emit("change.value",e.target.value),this.$emit("change",e),this.$emit("input",e)},handleReset:function(e){var t=this;this.setValue("",(function(){t.focus()})),T(this.$refs.input,e,this.onChange)},renderInput:function(e){var t=this.$createElement,a=(0,h["default"])(this.$props,["prefixCls","addonBefore","addonAfter","prefix","suffix","allowClear","value","defaultValue","lazy","size","inputType","className"]),r=this.stateValue,n=this.handleKeyDown,i=this.handleChange,o=this.size,l=this.disabled,u={directives:[{name:"ant-input"}],domProps:{value:C(r)},attrs:(0,s["default"])({},a,this.$attrs),on:(0,s["default"])({},(0,b.getListeners)(this),{keydown:n,input:i,change:$,blur:this.onBlur}),class:z(e,o,l),ref:"input",key:"ant-input"};return t("input",u)},clearPasswordValueAttribute:function(){var e=this;this.removePasswordTimeout=setTimeout((function(){e.$refs.input&&e.$refs.input.getAttribute&&"password"===e.$refs.input.getAttribute("type")&&e.$refs.input.hasAttribute("value")&&e.$refs.input.removeAttribute("value")}))},handleChange:function(e){var t=e.target,a=t.value,r=t.composing;(e.isComposing||r)&&this.lazy||this.stateValue===a||(this.setValue(a,this.clearPasswordValueAttribute),T(this.$refs.input,e,this.onChange))},handleKeyDown:function(e){13===e.keyCode&&this.$emit("pressEnter",e),this.$emit("keydown",e)}},render:function(){var e=arguments[0];if("textarea"===this.$props.type){var t={props:this.$props,attrs:this.$attrs,on:(0,s["default"])({},(0,b.getListeners)(this),{input:this.handleChange,keydown:this.handleKeyDown,change:$,blur:this.onBlur})};return e(c["default"],(0,n["default"])([t,{ref:"input"}]))}var a=this.$props.prefixCls,r=this.$data.stateValue,i=this.configProvider.getPrefixCls,o=i("input",a),l=(0,b.getComponentFromProp)(this,"addonAfter"),u=(0,b.getComponentFromProp)(this,"addonBefore"),d=(0,b.getComponentFromProp)(this,"suffix"),f=(0,b.getComponentFromProp)(this,"prefix"),p={props:(0,s["default"])({},(0,b.getOptionProps)(this),{prefixCls:o,inputType:"input",value:C(r),element:this.renderInput(o),handleReset:this.handleReset,addonAfter:l,addonBefore:u,suffix:d,prefix:f}),on:(0,b.getListeners)(this)};return e(x["default"],p)}}},"133a":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.svgBaseProps=void 0,t.getThemeFromTypeName=u,t.removeTypeTheme=d,t.withThemeSuffix=f,t.alias=c;var r=a("a7e2"),n=i(r);function i(e){return e&&e.__esModule?e:{default:e}}t.svgBaseProps={width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true",focusable:"false"};var s=/-fill$/,o=/-o$/,l=/-twotone$/;function u(e){var t=null;return s.test(e)?t="filled":o.test(e)?t="outlined":l.test(e)&&(t="twoTone"),t}function d(e){return e.replace(s,"").replace(o,"").replace(l,"")}function f(e,t){var a=e;return"filled"===t?a+="-fill":"outlined"===t?a+="-o":"twoTone"===t?a+="-twotone":(0,n["default"])(!1,"Icon","This icon '"+e+"' has unknown theme '"+t+"'"),a}function c(e){var t=e;switch(e){case"cross":t="close";break;case"interation":t="interaction";break;case"canlendar":t="calendar";break;case"colum-height":t="column-height";break;default:}return(0,n["default"])(t===e,"Icon","Icon '"+e+"' was a typo and is now deprecated, please use '"+t+"' instead."),t}},"1fde":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a("6042"),n=h(r);t.hasPrefixSuffix=m;var i=a("4d26"),s=h(i),o=a("50f6"),l=h(o),u=a("0a1b"),d=a("7b44"),f=h(d),c=a("d2f9"),p=a("73c8");function h(e){return e&&e.__esModule?e:{default:e}}function m(e){return!!((0,p.getComponentFromProp)(e,"prefix")||(0,p.getComponentFromProp)(e,"suffix")||e.$props.allowClear)}var v=["text","input"],b={props:{prefixCls:f["default"].string,inputType:f["default"].oneOf(v),value:f["default"].any,defaultValue:f["default"].any,allowClear:f["default"].bool,element:f["default"].any,handleReset:f["default"].func,disabled:f["default"].bool,size:f["default"].oneOf(["small","large","default"]),suffix:f["default"].any,prefix:f["default"].any,addonBefore:f["default"].any,addonAfter:f["default"].any,className:f["default"].string,readOnly:f["default"].bool},methods:{renderClearIcon:function(e){var t=this.$createElement,a=this.$props,r=a.allowClear,n=a.value,i=a.disabled,s=a.readOnly,o=a.inputType,u=a.handleReset;if(!r||i||s||void 0===n||null===n||""===n)return null;var d=o===v[0]?e+"-textarea-clear-icon":e+"-clear-icon";return t(l["default"],{attrs:{type:"close-circle",theme:"filled",role:"button"},on:{click:u},class:d})},renderSuffix:function(e){var t=this.$createElement,a=this.$props,r=a.suffix,n=a.allowClear;return r||n?t("span",{class:e+"-suffix"},[this.renderClearIcon(e),r]):null},renderLabeledIcon:function(e,t){var a,r=this.$createElement,i=this.$props,o=this.renderSuffix(e);if(!m(this))return(0,c.cloneElement)(t,{props:{value:i.value}});var l=i.prefix?r("span",{class:e+"-prefix"},[i.prefix]):null,d=(0,s["default"])(i.className,e+"-affix-wrapper",(a={},(0,n["default"])(a,e+"-affix-wrapper-sm","small"===i.size),(0,n["default"])(a,e+"-affix-wrapper-lg","large"===i.size),(0,n["default"])(a,e+"-affix-wrapper-input-with-clear-btn",i.suffix&&i.allowClear&&this.$props.value),a));return r("span",{class:d,style:i.style},[l,(0,c.cloneElement)(t,{style:null,props:{value:i.value},class:(0,u.getInputClassName)(e,i.size,i.disabled)}),o])},renderInputWithLabel:function(e,t){var a,r=this.$createElement,i=this.$props,o=i.addonBefore,l=i.addonAfter,u=i.style,d=i.size,f=i.className;if(!o&&!l)return t;var p=e+"-group",h=p+"-addon",m=o?r("span",{class:h},[o]):null,v=l?r("span",{class:h},[l]):null,b=(0,s["default"])(e+"-wrapper",(0,n["default"])({},p,o||l)),g=(0,s["default"])(f,e+"-group-wrapper",(a={},(0,n["default"])(a,e+"-group-wrapper-sm","small"===d),(0,n["default"])(a,e+"-group-wrapper-lg","large"===d),a));return r("span",{class:g,style:u},[r("span",{class:b},[m,(0,c.cloneElement)(t,{style:null}),v])])},renderTextAreaWithClearIcon:function(e,t){var a=this.$createElement,r=this.$props,n=r.value,i=r.allowClear,o=r.className,l=r.style;if(!i)return(0,c.cloneElement)(t,{props:{value:n}});var u=(0,s["default"])(o,e+"-affix-wrapper",e+"-affix-wrapper-textarea-with-clear-btn");return a("span",{class:u,style:l},[(0,c.cloneElement)(t,{style:null,props:{value:n}}),this.renderClearIcon(e)])},renderClearableLabeledInput:function(){var e=this.$props,t=e.prefixCls,a=e.inputType,r=e.element;return a===v[0]?this.renderTextAreaWithClearIcon(t,r):this.renderInputWithLabel(t,this.renderLabeledIcon(t,r))}},render:function(){return this.renderClearableLabeledInput()}};t["default"]=b},"272d":function(e,t,a){"use strict";a.r(t);var r=function(){var e=this,t=e._self._c;return t("div",[t("a-card",{attrs:{bordered:!1}},[t("div",{staticClass:"table-page-search-wrapper"},[t("a-form",{attrs:{layout:"inline"}},[t("a-row",{attrs:{gutter:48}},[t("a-col",{attrs:{md:8,sm:24}},[t("a-form-item",{attrs:{label:"用户名"}},[t("a-input",{attrs:{placeholder:"请输入空间名称/唯一标识",allowClear:""},model:{value:e.queryParam.keyword,callback:function(t){e.$set(e.queryParam,"keyword",t)},expression:"queryParam.keyword"}})],1)],1),t("a-col",{attrs:{md:e.advanced?24:8,sm:24}},[t("span",{staticClass:"table-page-search-submitButtons",style:e.advanced&&{float:"right",overflow:"hidden"}||{}},[t("a-button",{attrs:{type:"primary"},on:{click:function(t){return e.$refs.table.refresh(!0)}}},[e._v("查询")]),t("a-button",{staticStyle:{"margin-left":"8px"},on:{click:function(){return e.queryParam={}}}},[e._v("重置")])],1)])],1)],1)],1),t("div",{staticClass:"table-operator"},[t("a-button",{attrs:{type:"primary",icon:"plus"},on:{click:function(t){return e.handleNew()}}},[e._v("新建")])],1),t("s-table",{ref:"table",attrs:{size:"default",rowKey:function(e){return e.id},columns:e.columns,data:e.loadData,alert:e.options.alert,rowSelection:e.options.rowSelection},scopedSlots:e._u([{key:"serial",fn:function(a){return t("span",{},[e._v(" "+e._s(a.id)+" ")])}},{key:"action",fn:function(a,r){return t("span",{},[[t("a",{on:{click:function(t){return e.handleEdit(r)}}},[e._v("编辑")])]],2)}}])})],1),t("NamespaceForm",{ref:"namespaceFormRef",attrs:{isEdit:e.isEdit},on:{refreshTable:e.refreshTable}})],1)},n=[],i=a("0a1b"),s=a.n(i),o=a("516f"),l=a.n(o),u=a("2af9"),d=a("c1df"),f=a.n(d),c=a("0fea"),p=function(){var e=this,t=e._self._c;return t("a-modal",{attrs:{visible:e.visible,title:"命名空间配置",width:"650px"},on:{ok:e.handleOk,cancel:function(t){e.visible=!1}}},[t("a-form",e._b({attrs:{form:e.form,"body-style":{padding:"24px 32px"}},on:{submit:e.handleOk}},"a-form",e.formItemLayout,!1),[t("a-form-item",[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["id"],expression:"['id']"}],attrs:{hidden:""}})],1),t("a-form-item",{attrs:{label:"唯一标识(默认UUID)"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["uniqueId",{rules:[{required:!1,message:"请输入空间名称",whitespace:!0},{required:!1,max:64,message:"最多支持64个字符!"},{validator:e.validate,trigger:["change","blur"]}]}],expression:"[\n 'uniqueId',\n {rules: [{ required: false, message: '请输入空间名称', whitespace: true},{required: false, max: 64, message: '最多支持64个字符!'}, {validator: validate, trigger: ['change', 'blur']}]}\n ]"}],attrs:{placeholder:"唯一标识",disabled:e.isEdit}})],1),t("a-form-item",{attrs:{label:"空间名称"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["name",{rules:[{required:!0,message:"请输入空间名称",whitespace:!0}]}],expression:"[\n 'name',\n {rules: [{ required: true, message: '请输入空间名称', whitespace: true}]}\n ]"}],attrs:{placeholder:"请输入空间名称"}})],1)],1)],1)},h=[],m=(a("ac1f"),a("d3b7"),a("88bc")),v=a.n(m),b={name:"NamespaceForm",props:{isEdit:{type:Boolean,default:!1}},data:function(){return{form:this.$form.createForm(this),role:0,formType:"create",formItemLayout:{labelCol:{lg:{span:7},sm:{span:7}},wrapperCol:{lg:{span:10},sm:{span:17}}},visible:!1}},methods:{isShow:function(e){this.formType=e?"edit":"create",this.loadEditInfo(e),this.visible=!0,this.form.resetFields()},validate:function(e,t,a){var r=/^[A-Za-z0-9_]+$/;r.test(t)||a(new Error("仅支持数字字母下划线")),a()},handleOk:function(e){var t=this;e.preventDefault(),this.form.validateFields((function(e,a){e||(t.isEdit?Object(c["S"])(a).then((function(e){t.$message.success("操作成功"),t.$emit("refreshTable",1),t.visible=!1})):Object(c["a"])(a).then((function(e){t.$message.success("操作成功"),t.$emit("refreshTable",1),t.visible=!1})),t.$store.dispatch("GetInfo"))}))},loadEditInfo:function(e){this.formType="edit";var t=this.form;new Promise((function(e){setTimeout(e,100)})).then((function(){var a=v()(e,["id","name","uniqueId"]);t.setFieldsValue(a)}))}}},g=b,y=a("2877"),x=Object(y["a"])(g,p,h,!1,null,"88477890",null),w=x.exports,$={name:"NamespaceList",components:{AInput:s.a,ATextarea:l.a,STable:u["k"],NamespaceForm:w},data:function(){var e=this;return{mdl:{},advanced:!1,queryParam:{},columns:[{title:"#",width:"5%",scopedSlots:{customRender:"serial"}},{title:"名称",dataIndex:"name"},{title:"UniqueId",dataIndex:"uniqueId"},{title:"创建时间",dataIndex:"updateDt",customRender:function(e){return f()(e).format("YYYY-MM-DD HH:mm:ss")}},{title:"更新时间",dataIndex:"createDt",customRender:function(e){return f()(e).format("YYYY-MM-DD HH:mm:ss")}},{title:"操作",width:"10%",dataIndex:"action",scopedSlots:{customRender:"action"}}],loadData:function(t){return Object(c["I"])(Object.assign(t,e.queryParam)).then((function(e){return e}))},selectedRowKeys:[],selectedRows:[],options:{alert:{show:!0,clear:function(){e.selectedRowKeys=[]}},rowSelection:{selectedRowKeys:this.selectedRowKeys,onChange:this.onSelectChange}},optionAlertShow:!1,isEdit:!1}},filters:{},methods:{handleNew:function(){this.isEdit=!1,this.$refs.namespaceFormRef.isShow()},refreshTable:function(e){this.$refs.table.refresh()},handleEdit:function(e){this.isEdit=!0,this.$refs.namespaceFormRef.isShow(e)},handleDel:function(e){var t=this;Object(c["j"])(e.id).then((function(e){t.$message.success("删除成功"),t.$refs.table.refresh(),t.$store.dispatch("GetInfo")}))},handleGoBack:function(){this.record="",this.currentComponet="List"}},watch:{"$route.path":function(){this.record="",this.currentComponet="List"}}},C=$,T=Object(y["a"])(C,r,n,!1,null,"2f23227b",null);t["default"]=T.exports},"50f6":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a("92fa"),n=S(r),i=a("41b2"),s=S(i),o=a("6042"),l=S(o),u=a("9b57"),d=S(u),f=a("4d26"),c=S(f),p=a("3a9b6"),h=I(p),m=a("8520"),v=S(m),b=a("7b44"),g=S(b),y=a("bbf5"),x=S(y),w=a("133a"),$=a("a7e2"),C=S($),T=a("3f5f"),z=S(T),_=a("f3dc"),A=a("73c8"),O=a("baff"),P=S(O);function I(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t["default"]=e,t}function S(e){return e&&e.__esModule?e:{default:e}}v["default"].add.apply(v["default"],(0,d["default"])(Object.keys(h).filter((function(e){return"default"!==e})).map((function(e){return h[e]})))),(0,_.setTwoToneColor)("#1890ff");var k="outlined",E=void 0;function F(e,t,a){var r,i=a.$props,o=a.$slots,u=(0,A.getListeners)(a),d=i.type,f=i.component,p=i.viewBox,h=i.spin,m=i.theme,b=i.twoToneColor,g=i.rotate,y=i.tabIndex,x=(0,A.filterEmpty)(o["default"]);x=0===x.length?void 0:x,(0,C["default"])(Boolean(d||f||x),"Icon","Icon should have `type` prop or `component` prop or `children`.");var $=(0,c["default"])((r={},(0,l["default"])(r,"anticon",!0),(0,l["default"])(r,"anticon-"+d,!!d),r)),T=(0,c["default"])((0,l["default"])({},"anticon-spin",!!h||"loading"===d)),z=g?{msTransform:"rotate("+g+"deg)",transform:"rotate("+g+"deg)"}:void 0,_={attrs:(0,s["default"])({},w.svgBaseProps,{viewBox:p}),class:T,style:z};p||delete _.attrs.viewBox;var O=function(){if(f)return e(f,_,[x]);if(x){(0,C["default"])(Boolean(p)||1===x.length&&"use"===x[0].tag,"Icon","Make sure that you provide correct `viewBox` prop (default `0 0 1024 1024`) to the icon.");var t={attrs:(0,s["default"])({},w.svgBaseProps),class:T,style:z};return e("svg",(0,n["default"])([t,{attrs:{viewBox:p}}]),[x])}if("string"===typeof d){var a=d;if(m){var r=(0,w.getThemeFromTypeName)(d);(0,C["default"])(!r||m===r,"Icon","The icon name '"+d+"' already specify a theme '"+r+"', the 'theme' prop '"+m+"' will be ignored.")}return a=(0,w.withThemeSuffix)((0,w.removeTypeTheme)((0,w.alias)(a)),E||m||k),e(v["default"],{attrs:{focusable:"false",type:a,primaryColor:b},class:T,style:z})}},P=y;void 0===P&&"click"in u&&(P=-1);var I={attrs:{"aria-label":d&&t.icon+": "+d,tabIndex:P},on:u,class:$,staticClass:""};return e("i",I,[O()])}var V={name:"AIcon",props:{tabIndex:g["default"].number,type:g["default"].string,component:g["default"].any,viewBox:g["default"].any,spin:g["default"].bool.def(!1),rotate:g["default"].number,theme:g["default"].oneOf(["filled","outlined","twoTone"]),twoToneColor:g["default"].string,role:g["default"].string},render:function(e){var t=this;return e(z["default"],{attrs:{componentName:"Icon"},scopedSlots:{default:function(a){return F(e,a,t)}}})}};V.createFromIconfontCN=x["default"],V.getTwoToneColor=_.getTwoToneColor,V.setTwoToneColor=_.setTwoToneColor,V.install=function(e){e.use(P["default"]),e.component(V.name,V)},t["default"]=V},"516f":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a("92fa"),n=y(r),i=a("41b2"),s=y(i),o=a("1fde"),l=y(o),u=a("ccf8"),d=y(u),f=a("8bc7"),c=y(f),p=a("73c8"),h=y(p),m=a("bad7"),v=a("0a1b"),b=a("7b44"),g=y(b);function y(e){return e&&e.__esModule?e:{default:e}}var x=(0,s["default"])({},c["default"],{autosize:g["default"].oneOfType([Object,Boolean]),autoSize:g["default"].oneOfType([Object,Boolean])});t["default"]={name:"ATextarea",inheritAttrs:!1,model:{prop:"value",event:"change.value"},props:(0,s["default"])({},x),inject:{configProvider:{default:function(){return m.ConfigConsumerProps}}},data:function(){var e="undefined"===typeof this.value?this.defaultValue:this.value;return{stateValue:"undefined"===typeof e?"":e}},computed:{},watch:{value:function(e){this.stateValue=e}},mounted:function(){var e=this;this.$nextTick((function(){e.autoFocus&&e.focus()}))},methods:{setValue:function(e,t){(0,h["default"])(this,"value")||(this.stateValue=e,this.$nextTick((function(){t&&t()})))},handleKeyDown:function(e){13===e.keyCode&&this.$emit("pressEnter",e),this.$emit("keydown",e)},onChange:function(e){this.$emit("change.value",e.target.value),this.$emit("change",e),this.$emit("input",e)},handleChange:function(e){var t=this,a=e.target,r=a.value,n=a.composing;(e.isComposing||n)&&this.lazy||this.stateValue===r||(this.setValue(e.target.value,(function(){t.$refs.resizableTextArea.resizeTextarea()})),(0,v.resolveOnChange)(this.$refs.resizableTextArea.$refs.textArea,e,this.onChange))},focus:function(){this.$refs.resizableTextArea.$refs.textArea.focus()},blur:function(){this.$refs.resizableTextArea.$refs.textArea.blur()},handleReset:function(e){var t=this;this.setValue("",(function(){t.$refs.resizableTextArea.renderTextArea(),t.focus()})),(0,v.resolveOnChange)(this.$refs.resizableTextArea.$refs.textArea,e,this.onChange)},renderTextArea:function(e){var t=this.$createElement,a=(0,p.getOptionProps)(this),r={props:(0,s["default"])({},a,{prefixCls:e}),on:(0,s["default"])({},(0,p.getListeners)(this),{input:this.handleChange,keydown:this.handleKeyDown}),attrs:this.$attrs};return t(d["default"],(0,n["default"])([r,{ref:"resizableTextArea"}]))}},render:function(){var e=arguments[0],t=this.stateValue,a=this.prefixCls,r=this.configProvider.getPrefixCls,n=r("input",a),i={props:(0,s["default"])({},(0,p.getOptionProps)(this),{prefixCls:n,inputType:"text",value:(0,v.fixControlledValue)(t),element:this.renderTextArea(n),handleReset:this.handleReset}),on:(0,p.getListeners)(this)};return e(l["default"],i)}}},"8bc7":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a("7b44"),n=i(r);function i(e){return e&&e.__esModule?e:{default:e}}t["default"]={prefixCls:n["default"].string,inputPrefixCls:n["default"].string,defaultValue:n["default"].oneOfType([n["default"].string,n["default"].number]),value:n["default"].oneOfType([n["default"].string,n["default"].number]),placeholder:[String,Number],type:{default:"text",type:String},name:String,size:n["default"].oneOf(["small","large","default"]),disabled:n["default"].bool,readOnly:n["default"].bool,addonBefore:n["default"].any,addonAfter:n["default"].any,prefix:n["default"].any,suffix:n["default"].any,autoFocus:Boolean,allowClear:Boolean,lazy:{default:!0,type:Boolean},maxLength:n["default"].number,loading:n["default"].bool,className:n["default"].string}},a7e2:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.resetWarned=void 0;var r=a("1db9"),n=i(r);function i(e){return e&&e.__esModule?e:{default:e}}t.resetWarned=r.resetWarned,t["default"]=function(e,t){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";(0,n["default"])(e,"[antdv: "+t+"] "+a)}},a7f2:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a("6dd8"),n=i(r);function i(e){return e&&e.__esModule?e:{default:e}}var s={name:"ResizeObserver",props:{disabled:Boolean},data:function(){return this.currentElement=null,this.resizeObserver=null,{width:0,height:0}},mounted:function(){this.onComponentUpdated()},updated:function(){this.onComponentUpdated()},beforeDestroy:function(){this.destroyObserver()},methods:{onComponentUpdated:function(){var e=this.$props.disabled;if(e)this.destroyObserver();else{var t=this.$el,a=t!==this.currentElement;a&&(this.destroyObserver(),this.currentElement=t),!this.resizeObserver&&t&&(this.resizeObserver=new n["default"](this.onResize),this.resizeObserver.observe(t))}},onResize:function(e){var t=e[0].target,a=t.getBoundingClientRect(),r=a.width,n=a.height,i=Math.floor(r),s=Math.floor(n);if(this.width!==i||this.height!==s){var o={width:i,height:s};this.width=i,this.height=s,this.$emit("resize",o)}},destroyObserver:function(){this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null)}},render:function(){return this.$slots["default"][0]}};t["default"]=s},ab92:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=l;var r=a("c449"),n=i(r);function i(e){return e&&e.__esModule?e:{default:e}}var s=0,o={};function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,a=s++,r=t;function i(){r-=1,r<=0?(e(),delete o[a]):o[a]=(0,n["default"])(i)}return o[a]=(0,n["default"])(i),a}l.cancel=function(e){void 0!==e&&(n["default"].cancel(o[e]),delete o[e])},l.ids=o},bbf5:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a("8e8e"),n=l(r);t["default"]=d;var i=a("50f6"),s=l(i),o=a("73c8");function l(e){return e&&e.__esModule?e:{default:e}}var u=new Set;function d(e){var t=e.scriptUrl,a=e.extraCommonProps,r=void 0===a?{}:a;if("undefined"!==typeof document&&"undefined"!==typeof window&&"function"===typeof document.createElement&&"string"===typeof t&&t.length&&!u.has(t)){var i=document.createElement("script");i.setAttribute("src",t),i.setAttribute("data-namespace",t),u.add(t),document.body.appendChild(i)}var l={functional:!0,name:"AIconfont",props:s["default"].props,render:function(e,t){var a=t.props,i=t.slots,l=t.listeners,u=t.data,d=a.type,f=(0,n["default"])(a,["type"]),c=i(),p=c["default"],h=null;d&&(h=e("use",{attrs:{"xlink:href":"#"+d}})),p&&(h=p);var m=(0,o.mergeProps)(r,u,{props:f,on:l});return e(s["default"],m,[h])}};return l}},bfb7:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.calculateNodeStyling=o,t["default"]=l;var r="\n min-height:0 !important;\n max-height:none !important;\n height:0 !important;\n visibility:hidden !important;\n overflow:hidden !important;\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important\n",n=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","font-variant","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"],i={},s=void 0;function o(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=e.getAttribute("id")||e.getAttribute("data-reactid")||e.getAttribute("name");if(t&&i[a])return i[a];var r=window.getComputedStyle(e),s=r.getPropertyValue("box-sizing")||r.getPropertyValue("-moz-box-sizing")||r.getPropertyValue("-webkit-box-sizing"),o=parseFloat(r.getPropertyValue("padding-bottom"))+parseFloat(r.getPropertyValue("padding-top")),l=parseFloat(r.getPropertyValue("border-bottom-width"))+parseFloat(r.getPropertyValue("border-top-width")),u=n.map((function(e){return e+":"+r.getPropertyValue(e)})).join(";"),d={sizingStyle:u,paddingSize:o,borderSize:l,boxSizing:s};return t&&a&&(i[a]=d),d}function l(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;s||(s=document.createElement("textarea"),document.body.appendChild(s)),e.getAttribute("wrap")?s.setAttribute("wrap",e.getAttribute("wrap")):s.removeAttribute("wrap");var i=o(e,t),l=i.paddingSize,u=i.borderSize,d=i.boxSizing,f=i.sizingStyle;s.setAttribute("style",f+";"+r),s.value=e.value||e.placeholder||"";var c=Number.MIN_SAFE_INTEGER,p=Number.MAX_SAFE_INTEGER,h=s.scrollHeight,m=void 0;if("border-box"===d?h+=u:"content-box"===d&&(h-=l),null!==a||null!==n){s.value=" ";var v=s.scrollHeight-l;null!==a&&(c=v*a,"border-box"===d&&(c=c+l+u),h=Math.max(c,h)),null!==n&&(p=v*n,"border-box"===d&&(p=p+l+u),m=h>p?"":"hidden",h=Math.min(p,h))}return{height:h+"px",minHeight:c+"px",maxHeight:p+"px",overflowY:m}}},ccf8:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a("92fa"),n=O(r),i=a("6042"),s=O(i),o=a("41b2"),l=O(o),u=a("a7f2"),d=O(u),f=a("0464"),c=O(f),p=a("4d26"),h=O(p),m=a("bfb7"),v=O(m),b=a("ab92"),g=O(b),y=a("a7e2"),x=O(y),w=a("48bb"),$=O(w),C=a("8bc7"),T=O(C),z=a("7b44"),_=O(z),A=a("73c8");function O(e){return e&&e.__esModule?e:{default:e}}var P=0,I=1,S=2,k=(0,l["default"])({},T["default"],{autosize:_["default"].oneOfType([Object,Boolean]),autoSize:_["default"].oneOfType([Object,Boolean])}),E={name:"ResizableTextArea",props:k,data:function(){return{textareaStyles:{},resizeStatus:P}},mixins:[$["default"]],mounted:function(){var e=this;this.$nextTick((function(){e.resizeTextarea()}))},beforeDestroy:function(){g["default"].cancel(this.nextFrameActionId),g["default"].cancel(this.resizeFrameId)},watch:{value:function(){var e=this;this.$nextTick((function(){e.resizeTextarea()}))}},methods:{handleResize:function(e){var t=this.$data.resizeStatus,a=this.$props.autoSize;t===P&&(this.$emit("resize",e),a&&this.resizeOnNextFrame())},resizeOnNextFrame:function(){g["default"].cancel(this.nextFrameActionId),this.nextFrameActionId=(0,g["default"])(this.resizeTextarea)},resizeTextarea:function(){var e=this,t=this.$props.autoSize||this.$props.autosize;if(t&&this.$refs.textArea){var a=t.minRows,r=t.maxRows,n=(0,v["default"])(this.$refs.textArea,!1,a,r);this.setState({textareaStyles:n,resizeStatus:I},(function(){g["default"].cancel(e.resizeFrameId),e.resizeFrameId=(0,g["default"])((function(){e.setState({resizeStatus:S},(function(){e.resizeFrameId=(0,g["default"])((function(){e.setState({resizeStatus:P}),e.fixFirefoxAutoScroll()}))}))}))}))}},fixFirefoxAutoScroll:function(){try{if(document.activeElement===this.$refs.textArea){var e=this.$refs.textArea.selectionStart,t=this.$refs.textArea.selectionEnd;this.$refs.textArea.setSelectionRange(e,t)}}catch(a){}},renderTextArea:function(){var e=this.$createElement,t=(0,A.getOptionProps)(this),a=t.prefixCls,r=t.autoSize,i=t.autosize,o=t.disabled,u=this.$data,f=u.textareaStyles,p=u.resizeStatus;(0,x["default"])(void 0===i,"Input.TextArea","autosize is deprecated, please use autoSize instead.");var m=(0,c["default"])(t,["prefixCls","autoSize","autosize","defaultValue","allowClear","type","lazy","value"]),v=(0,h["default"])(a,(0,s["default"])({},a+"-disabled",o)),b={};"value"in t&&(b.value=t.value||"");var g=(0,l["default"])({},f,p===I?{overflowX:"hidden",overflowY:"hidden"}:null),y={attrs:m,domProps:b,style:g,class:v,on:(0,c["default"])((0,A.getListeners)(this),"pressEnter"),directives:[{name:"ant-input"}]};return e(d["default"],{on:{resize:this.handleResize},attrs:{disabled:!(r||i)}},[e("textarea",(0,n["default"])([y,{ref:"textArea"}]))])}},render:function(){return this.renderTextArea()}};t["default"]=E},f3dc:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setTwoToneColor=s,t.getTwoToneColor=o;var r=a("8520"),n=i(r);function i(e){return e&&e.__esModule?e:{default:e}}function s(e){return n["default"].setTwoToneColors({primaryColor:e})}function o(){var e=n["default"].getTwoToneColors();return e.primaryColor}}}]); \ No newline at end of file diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/NamespaceQueryVO.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/NamespaceQueryVO.java index fa14acf0..9edf2ce3 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/NamespaceQueryVO.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/NamespaceQueryVO.java @@ -13,6 +13,6 @@ import lombok.EqualsAndHashCode; @Data public class NamespaceQueryVO extends BaseQueryVO { - private String name; + private String keyword; } 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 c3bc87e1..491e7524 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 @@ -69,8 +69,9 @@ public class GroupConfigServiceImpl implements GroupConfigService { ConfigAccess groupConfigAccess = accessTemplate.getGroupConfigAccess(); Assert.isTrue(groupConfigAccess.count(new LambdaQueryWrapper() - .eq(GroupConfig::getGroupName, groupConfigRequestVO.getGroupName())) == 0, - () -> new EasyRetryServerException("GroupName已经存在 {}", groupConfigRequestVO.getGroupName())); + .eq(GroupConfig::getNamespaceId, systemUser.getNamespaceId()) + .eq(GroupConfig::getGroupName, groupConfigRequestVO.getGroupName())) == 0, + () -> new EasyRetryServerException("GroupName已经存在 {}", groupConfigRequestVO.getGroupName())); // 保存组配置 doSaveGroupConfig(systemUser, groupConfigRequestVO); @@ -94,8 +95,8 @@ public class GroupConfigServiceImpl implements GroupConfigService { sequenceAlloc.setStep(systemProperties.getStep()); sequenceAlloc.setUpdateDt(LocalDateTime.now()); Assert.isTrue(1 == sequenceAllocMapper.insert(sequenceAlloc), - () -> new EasyRetryServerException("failed to save sequence generation rule configuration [{}].", - groupConfigRequestVO.getGroupName())); + () -> new EasyRetryServerException("failed to save sequence generation rule configuration [{}].", + groupConfigRequestVO.getGroupName())); } @Override @@ -107,7 +108,9 @@ public class GroupConfigServiceImpl implements GroupConfigService { ConfigAccess groupConfigAccess = accessTemplate.getGroupConfigAccess(); long count = groupConfigAccess.count( - new LambdaQueryWrapper().eq(GroupConfig::getGroupName, groupName)); + new LambdaQueryWrapper() + .eq(GroupConfig::getNamespaceId, namespaceId) + .eq(GroupConfig::getGroupName, groupName)); if (count <= 0) { return false; } @@ -117,20 +120,19 @@ public class GroupConfigServiceImpl implements GroupConfigService { // 使用@TableField(value = "version", update= "%s+1") 进行更新version, 这里必须初始化一个值 groupConfig.setVersion(1); Assert.isTrue(systemProperties.getTotalPartition() > groupConfigRequestVO.getGroupPartition(), - () -> new EasyRetryServerException("分区超过最大分区. [{}]", systemProperties.getTotalPartition() - 1)); + () -> new EasyRetryServerException("分区超过最大分区. [{}]", systemProperties.getTotalPartition() - 1)); Assert.isTrue(groupConfigRequestVO.getGroupPartition() >= 0, - () -> new EasyRetryServerException("分区不能是负数.")); + () -> new EasyRetryServerException("分区不能是负数.")); // 校验retry_task_x和retry_dead_letter_x是否存在 - checkGroupPartition(groupConfig); - + checkGroupPartition(groupConfig, namespaceId); Assert.isTrue(1 == groupConfigAccess.update(groupConfig, - new LambdaUpdateWrapper() - .eq(GroupConfig::getNamespaceId,namespaceId) - .eq(GroupConfig::getGroupName, groupName)), - () -> new EasyRetryServerException("exception occurred while adding group. groupConfigVO[{}]", - groupConfigRequestVO)); + new LambdaUpdateWrapper() + .eq(GroupConfig::getNamespaceId, namespaceId) + .eq(GroupConfig::getGroupName, groupName)), + () -> new EasyRetryServerException("exception occurred while adding group. groupConfigVO[{}]", + groupConfigRequestVO)); if (SystemModeEnum.isRetry(systemProperties.getMode())) { // 同步版本, 版本为0代表需要同步到客户端 @@ -150,9 +152,9 @@ public class GroupConfigServiceImpl implements GroupConfigService { groupConfig.setGroupStatus(status); ConfigAccess groupConfigAccess = accessTemplate.getGroupConfigAccess(); return groupConfigAccess.update(groupConfig, - new LambdaUpdateWrapper() + new LambdaUpdateWrapper() - .eq(GroupConfig::getGroupName, groupName)) == 1; + .eq(GroupConfig::getGroupName, groupName)) == 1; } @Override @@ -160,7 +162,7 @@ public class GroupConfigServiceImpl implements GroupConfigService { LambdaQueryWrapper groupConfigLambdaQueryWrapper = new LambdaQueryWrapper<>(); groupConfigLambdaQueryWrapper.eq(GroupConfig::getNamespaceId, - UserSessionUtils.currentUserSession().getNamespaceId()); + UserSessionUtils.currentUserSession().getNamespaceId()); if (StrUtil.isNotBlank(queryVO.getGroupName())) { groupConfigLambdaQueryWrapper.like(GroupConfig::getGroupName, queryVO.getGroupName() + "%"); } @@ -169,24 +171,24 @@ public class GroupConfigServiceImpl implements GroupConfigService { groupConfigLambdaQueryWrapper.orderByDesc(GroupConfig::getId); PageDTO groupConfigPageDTO = groupConfigAccess.listPage( - new PageDTO<>(queryVO.getPage(), queryVO.getSize()), groupConfigLambdaQueryWrapper); + new PageDTO<>(queryVO.getPage(), queryVO.getSize()), groupConfigLambdaQueryWrapper); List records = groupConfigPageDTO.getRecords(); if (CollectionUtils.isEmpty(records)) { return new PageResult<>(groupConfigPageDTO.getCurrent(), groupConfigPageDTO.getSize(), - groupConfigPageDTO.getTotal()); + groupConfigPageDTO.getTotal()); } PageResult> pageResult = new PageResult<>(groupConfigPageDTO.getCurrent(), - groupConfigPageDTO.getSize(), groupConfigPageDTO.getTotal()); + groupConfigPageDTO.getSize(), groupConfigPageDTO.getTotal()); List responseVOList = GroupConfigResponseVOConverter.INSTANCE.toGroupConfigResponseVO( - records); + records); for (GroupConfigResponseVO groupConfigResponseVO : responseVOList) { Optional.ofNullable(IdGeneratorMode.modeOf(groupConfigResponseVO.getIdGeneratorMode())) - .ifPresent(idGeneratorMode -> { - groupConfigResponseVO.setIdGeneratorModeName(idGeneratorMode.getDesc()); - }); + .ifPresent(idGeneratorMode -> { + groupConfigResponseVO.setIdGeneratorModeName(idGeneratorMode.getDesc()); + }); } pageResult.setData(responseVOList); @@ -203,50 +205,50 @@ public class GroupConfigServiceImpl implements GroupConfigService { groupConfig.setDescription(Optional.ofNullable(groupConfigRequestVO.getDescription()).orElse(StrUtil.EMPTY)); if (Objects.isNull(groupConfigRequestVO.getGroupPartition())) { groupConfig.setGroupPartition( - HashUtil.bkdrHash(groupConfigRequestVO.getGroupName()) % systemProperties.getTotalPartition()); + HashUtil.bkdrHash(groupConfigRequestVO.getGroupName()) % systemProperties.getTotalPartition()); } else { Assert.isTrue(systemProperties.getTotalPartition() > groupConfigRequestVO.getGroupPartition(), - () -> new EasyRetryServerException("分区超过最大分区. [{}]", systemProperties.getTotalPartition() - 1)); + () -> new EasyRetryServerException("分区超过最大分区. [{}]", systemProperties.getTotalPartition() - 1)); Assert.isTrue(groupConfigRequestVO.getGroupPartition() >= 0, - () -> new EasyRetryServerException("分区不能是负数.")); + () -> new EasyRetryServerException("分区不能是负数.")); } groupConfig.setBucketIndex( - HashUtil.bkdrHash(groupConfigRequestVO.getGroupName()) % systemProperties.getBucketTotal()); + HashUtil.bkdrHash(groupConfigRequestVO.getGroupName()) % systemProperties.getBucketTotal()); ConfigAccess groupConfigAccess = accessTemplate.getGroupConfigAccess(); Assert.isTrue(1 == groupConfigAccess.insert(groupConfig), - () -> new EasyRetryServerException("新增组异常异常 groupConfigVO[{}]", groupConfigRequestVO)); + () -> new EasyRetryServerException("新增组异常异常 groupConfigVO[{}]", groupConfigRequestVO)); // 校验retry_task_x和retry_dead_letter_x是否存在 - checkGroupPartition(groupConfig); + checkGroupPartition(groupConfig, systemUser.getNamespaceId()); } /** * 校验retry_task_x和retry_dead_letter_x是否存在 */ - private void checkGroupPartition(GroupConfig groupConfig) { + private void checkGroupPartition(GroupConfig groupConfig, String namespaceId) { try { TaskAccess retryTaskAccess = accessTemplate.getRetryTaskAccess(); - retryTaskAccess.one(groupConfig.getGroupName(), - new LambdaQueryWrapper().eq(RetryTask::getId, 1)); + retryTaskAccess.count(groupConfig.getGroupName(), namespaceId, + new LambdaQueryWrapper().eq(RetryTask::getId, 1)); } catch (BadSqlGrammarException e) { Optional.ofNullable(e.getMessage()).ifPresent(s -> { if (s.contains("retry_task_" + groupConfig.getGroupPartition()) && s.contains("doesn't exist")) { throw new EasyRetryServerException("分区:[{}] '未配置表retry_task_{}', 请联系管理员进行配置", - groupConfig.getGroupPartition(), groupConfig.getGroupPartition()); + groupConfig.getGroupPartition(), groupConfig.getGroupPartition()); } }); } try { TaskAccess retryTaskAccess = accessTemplate.getRetryDeadLetterAccess(); - retryTaskAccess.one(groupConfig.getGroupName(), - new LambdaQueryWrapper().eq(RetryDeadLetter::getId, 1)); + retryTaskAccess.one(groupConfig.getGroupName(), groupConfig.getNamespaceId(), + new LambdaQueryWrapper().eq(RetryDeadLetter::getId, 1)); } catch (BadSqlGrammarException e) { Optional.ofNullable(e.getMessage()).ifPresent(s -> { if (s.contains("retry_dead_letter_" + groupConfig.getGroupPartition()) && s.contains("doesn't exist")) { throw new EasyRetryServerException("分区:[{}] '未配置表retry_dead_letter_{}', 请联系管理员进行配置", - groupConfig.getGroupPartition(), groupConfig.getGroupPartition()); + groupConfig.getGroupPartition(), groupConfig.getGroupPartition()); } }); } @@ -257,10 +259,12 @@ public class GroupConfigServiceImpl implements GroupConfigService { ConfigAccess groupConfigAccess = accessTemplate.getGroupConfigAccess(); GroupConfig groupConfig = groupConfigAccess.one( - new LambdaQueryWrapper().eq(GroupConfig::getGroupName, groupName)); + new LambdaQueryWrapper() + .eq(GroupConfig::getNamespaceId, UserSessionUtils.currentUserSession().getNamespaceId()) + .eq(GroupConfig::getGroupName, groupName)); GroupConfigResponseVO groupConfigResponseVO = GroupConfigResponseVOConverter.INSTANCE.toGroupConfigResponseVO( - groupConfig); + groupConfig); Optional.ofNullable(IdGeneratorMode.modeOf(groupConfig.getIdGeneratorMode())).ifPresent(idGeneratorMode -> { groupConfigResponseVO.setIdGeneratorModeName(idGeneratorMode.getDesc()); @@ -271,7 +275,7 @@ public class GroupConfigServiceImpl implements GroupConfigService { @Override public List getAllGroupConfigList(final List namespaceIds) { - if(CollectionUtils.isEmpty(namespaceIds)) { + if (CollectionUtils.isEmpty(namespaceIds)) { return new ArrayList<>(); } @@ -288,10 +292,10 @@ public class GroupConfigServiceImpl implements GroupConfigService { ConfigAccess groupConfigAccess = accessTemplate.getGroupConfigAccess(); List groupConfigs = groupConfigAccess.list(new LambdaQueryWrapper() - .in(GroupConfig::getNamespaceId, UserSessionUtils.currentUserSession().getNamespaceId()) - .select(GroupConfig::getGroupName)) - .stream() - .collect(Collectors.toList()); + .in(GroupConfig::getNamespaceId, UserSessionUtils.currentUserSession().getNamespaceId()) + .select(GroupConfig::getGroupName)) + .stream() + .collect(Collectors.toList()); return groupConfigs.stream().map(GroupConfig::getGroupName).collect(Collectors.toList()); } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/NamespaceServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/NamespaceServiceImpl.java index cd7b6870..76d04cae 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/NamespaceServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/NamespaceServiceImpl.java @@ -67,8 +67,10 @@ public class NamespaceServiceImpl implements NamespaceService { PageDTO pageDTO = new PageDTO<>(queryVO.getPage(), queryVO.getSize()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - if (StrUtil.isNotBlank(queryVO.getName())) { - queryWrapper.like(Namespace::getName, queryVO.getName() + "%"); + if (StrUtil.isNotBlank(queryVO.getKeyword())) { + queryWrapper.like(Namespace::getName, queryVO.getKeyword().trim() + "%") + .or().like(Namespace::getUniqueId, queryVO.getKeyword().trim() + "%") + ; } queryWrapper.eq(Namespace::getDeleted, StatusEnum.NO); diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryDeadLetterServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryDeadLetterServiceImpl.java index a16d11cb..daa78909 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryDeadLetterServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryDeadLetterServiceImpl.java @@ -67,8 +67,9 @@ public class RetryDeadLetterServiceImpl implements RetryDeadLetterService { return new PageResult<>(pageDTO, new ArrayList<>()); } + String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(RetryDeadLetter::getNamespaceId, UserSessionUtils.currentUserSession().getNamespaceId()); + queryWrapper.eq(RetryDeadLetter::getNamespaceId, namespaceId); queryWrapper.eq(RetryDeadLetter::getGroupName, queryVO.getGroupName()); if (StrUtil.isNotBlank(queryVO.getSceneName())) { @@ -88,17 +89,19 @@ public class RetryDeadLetterServiceImpl implements RetryDeadLetterService { } PageDTO retryDeadLetterPageDTO = accessTemplate.getRetryDeadLetterAccess() - .listPage(queryVO.getGroupName(), pageDTO, queryWrapper); + .listPage(queryVO.getGroupName(), namespaceId, pageDTO, queryWrapper); return new PageResult<>(retryDeadLetterPageDTO, - RetryDeadLetterResponseVOConverter.INSTANCE.batchConvert(retryDeadLetterPageDTO.getRecords())); + RetryDeadLetterResponseVOConverter.INSTANCE.batchConvert(retryDeadLetterPageDTO.getRecords())); } @Override public RetryDeadLetterResponseVO getRetryDeadLetterById(String groupName, Long id) { + String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId(); + TaskAccess retryDeadLetterAccess = accessTemplate.getRetryDeadLetterAccess(); - RetryDeadLetter retryDeadLetter = retryDeadLetterAccess.one(groupName, - new LambdaQueryWrapper().eq(RetryDeadLetter::getId, id)); + RetryDeadLetter retryDeadLetter = retryDeadLetterAccess.one(groupName, namespaceId, + new LambdaQueryWrapper().eq(RetryDeadLetter::getId, id)); return RetryDeadLetterResponseVOConverter.INSTANCE.convert(retryDeadLetter); } @@ -106,32 +109,32 @@ public class RetryDeadLetterServiceImpl implements RetryDeadLetterService { @Transactional public int rollback(BatchRollBackRetryDeadLetterVO rollBackRetryDeadLetterVO) { + String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId(); + String groupName = rollBackRetryDeadLetterVO.getGroupName(); List ids = rollBackRetryDeadLetterVO.getIds(); TaskAccess retryDeadLetterAccess = accessTemplate.getRetryDeadLetterAccess(); - List retryDeadLetterList = retryDeadLetterAccess.list(groupName, - new LambdaQueryWrapper().in(RetryDeadLetter::getId, ids)); + List retryDeadLetterList = retryDeadLetterAccess.list(groupName, namespaceId, + new LambdaQueryWrapper().in(RetryDeadLetter::getId, ids)); Assert.notEmpty(retryDeadLetterList, () -> new EasyRetryServerException("数据不存在")); - String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId(); - ConfigAccess sceneConfigAccess = accessTemplate.getSceneConfigAccess(); Set sceneNameSet = retryDeadLetterList.stream().map(RetryDeadLetter::getSceneName) - .collect(Collectors.toSet()); + .collect(Collectors.toSet()); List sceneConfigs = sceneConfigAccess.list(new LambdaQueryWrapper() - .eq(SceneConfig::getNamespaceId, namespaceId) - .in(SceneConfig::getSceneName, sceneNameSet)); + .eq(SceneConfig::getNamespaceId, namespaceId) + .in(SceneConfig::getSceneName, sceneNameSet)); Map sceneConfigMap = sceneConfigs.stream().collect(Collectors.toMap((sceneConfig) -> - sceneConfig.getGroupName() + sceneConfig.getSceneName(), Function.identity())); + sceneConfig.getGroupName() + sceneConfig.getSceneName(), Function.identity())); List waitRollbackList = new ArrayList<>(); for (RetryDeadLetter retryDeadLetter : retryDeadLetterList) { SceneConfig sceneConfig = sceneConfigMap.get( - retryDeadLetter.getGroupName() + retryDeadLetter.getSceneName()); + retryDeadLetter.getGroupName() + retryDeadLetter.getSceneName()); Assert.notNull(sceneConfig, - () -> new EasyRetryServerException("未查询到场景. [{}]", retryDeadLetter.getSceneName())); + () -> new EasyRetryServerException("未查询到场景. [{}]", retryDeadLetter.getSceneName())); RetryTask retryTask = RetryTaskConverter.INSTANCE.toRetryTask(retryDeadLetter); retryTask.setRetryStatus(RetryStatusEnum.RUNNING.getStatus()); @@ -148,16 +151,16 @@ public class RetryDeadLetterServiceImpl implements RetryDeadLetterService { } TaskAccess retryTaskAccess = accessTemplate.getRetryTaskAccess(); - Assert.isTrue(waitRollbackList.size() == retryTaskAccess.batchInsert(groupName, waitRollbackList), - () -> new EasyRetryServerException("新增重试任务失败")); + Assert.isTrue(waitRollbackList.size() == retryTaskAccess.batchInsert(groupName, namespaceId, waitRollbackList), + () -> new EasyRetryServerException("新增重试任务失败")); Set waitDelRetryDeadLetterIdSet = retryDeadLetterList.stream().map(RetryDeadLetter::getId) - .collect(Collectors.toSet()); - Assert.isTrue(waitDelRetryDeadLetterIdSet.size() == retryDeadLetterAccess.delete(groupName, - new LambdaQueryWrapper() - .eq(RetryDeadLetter::getGroupName, groupName) - .in(RetryDeadLetter::getId, waitDelRetryDeadLetterIdSet)), - () -> new EasyRetryServerException("删除死信队列数据失败")) + .collect(Collectors.toSet()); + Assert.isTrue(waitDelRetryDeadLetterIdSet.size() == retryDeadLetterAccess.delete(groupName, namespaceId, + new LambdaQueryWrapper() + .eq(RetryDeadLetter::getGroupName, groupName) + .in(RetryDeadLetter::getId, waitDelRetryDeadLetterIdSet)), + () -> new EasyRetryServerException("删除死信队列数据失败")) ; // 变更日志的状态 @@ -166,11 +169,11 @@ public class RetryDeadLetterServiceImpl implements RetryDeadLetterService { Set uniqueIdSet = waitRollbackList.stream().map(RetryTask::getUniqueId).collect(Collectors.toSet()); int update = retryTaskLogMapper.update(retryTaskLog, new LambdaUpdateWrapper() - .eq(RetryTaskLog::getNamespaceId, namespaceId) - .in(RetryTaskLog::getUniqueId, uniqueIdSet) - .eq(RetryTaskLog::getGroupName, groupName)); + .eq(RetryTaskLog::getNamespaceId, namespaceId) + .in(RetryTaskLog::getUniqueId, uniqueIdSet) + .eq(RetryTaskLog::getGroupName, groupName)); Assert.isTrue(update == uniqueIdSet.size(), - () -> new EasyRetryServerException("回滚日志状态失败, 可能原因: 日志信息缺失或存在多个相同uniqueId")); + () -> new EasyRetryServerException("回滚日志状态失败, 可能原因: 日志信息缺失或存在多个相同uniqueId")); return update; } @@ -179,10 +182,10 @@ public class RetryDeadLetterServiceImpl implements RetryDeadLetterService { public int batchDelete(BatchDeleteRetryDeadLetterVO deadLetterVO) { TaskAccess retryDeadLetterAccess = accessTemplate.getRetryDeadLetterAccess(); String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId(); - return retryDeadLetterAccess.delete(deadLetterVO.getGroupName(), - new LambdaQueryWrapper() - .eq(RetryDeadLetter::getNamespaceId, namespaceId) - .eq(RetryDeadLetter::getGroupName, deadLetterVO.getGroupName()) - .in(RetryDeadLetter::getId, deadLetterVO.getIds())); + return retryDeadLetterAccess.delete(deadLetterVO.getGroupName(), namespaceId, + new LambdaQueryWrapper() + .eq(RetryDeadLetter::getNamespaceId, namespaceId) + .eq(RetryDeadLetter::getGroupName, deadLetterVO.getGroupName()) + .in(RetryDeadLetter::getId, deadLetterVO.getIds())); } } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryTaskServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryTaskServiceImpl.java index e9f42f38..5fed4a20 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryTaskServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/RetryTaskServiceImpl.java @@ -119,49 +119,49 @@ public class RetryTaskServiceImpl implements RetryTaskService { retryTaskLambdaQueryWrapper.eq(RetryTask::getRetryStatus, queryVO.getRetryStatus()); } - RequestDataHelper.setPartition(queryVO.getGroupName()); - retryTaskLambdaQueryWrapper.select(RetryTask::getId, RetryTask::getBizNo, RetryTask::getIdempotentId, RetryTask::getGroupName, RetryTask::getNextTriggerAt, RetryTask::getRetryCount, RetryTask::getRetryStatus, RetryTask::getUpdateDt, RetryTask::getSceneName, RetryTask::getUniqueId, RetryTask::getTaskType); - pageDTO = accessTemplate.getRetryTaskAccess().listPage(queryVO.getGroupName(), pageDTO, - retryTaskLambdaQueryWrapper.orderByDesc(RetryTask::getCreateDt)); + pageDTO = accessTemplate.getRetryTaskAccess() + .listPage(queryVO.getGroupName(), namespaceId, + pageDTO, + retryTaskLambdaQueryWrapper.orderByDesc(RetryTask::getCreateDt)); return new PageResult<>(pageDTO, RetryTaskResponseVOConverter.INSTANCE.toRetryTaskResponseVO(pageDTO.getRecords())); } @Override public RetryTaskResponseVO getRetryTaskById(String groupName, Long id) { - RequestDataHelper.setPartition(groupName); TaskAccess retryTaskAccess = accessTemplate.getRetryTaskAccess(); - RetryTask retryTask = retryTaskAccess.one(groupName, - new LambdaQueryWrapper().eq(RetryTask::getId, id)); + RetryTask retryTask = retryTaskAccess.one(groupName, UserSessionUtils.currentUserSession().getNamespaceId(), + new LambdaQueryWrapper() + .eq(RetryTask::getId, id)); return RetryTaskResponseVOConverter.INSTANCE.toRetryTaskResponseVO(retryTask); } @Override @Transactional - public int updateRetryTaskStatus(RetryTaskUpdateStatusRequestVO retryTaskUpdateStatusRequestVO) { + public int updateRetryTaskStatus(RetryTaskUpdateStatusRequestVO requestVO) { - RetryStatusEnum retryStatusEnum = RetryStatusEnum.getByStatus(retryTaskUpdateStatusRequestVO.getRetryStatus()); + RetryStatusEnum retryStatusEnum = RetryStatusEnum.getByStatus(requestVO.getRetryStatus()); if (Objects.isNull(retryStatusEnum)) { - throw new EasyRetryServerException("重试状态错误. [{}]", retryTaskUpdateStatusRequestVO.getRetryStatus()); + throw new EasyRetryServerException("重试状态错误. [{}]", requestVO.getRetryStatus()); } String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId(); TaskAccess retryTaskAccess = accessTemplate.getRetryTaskAccess(); - RetryTask retryTask = retryTaskAccess.one(retryTaskUpdateStatusRequestVO.getGroupName(), + RetryTask retryTask = retryTaskAccess.one(requestVO.getGroupName(), namespaceId, new LambdaQueryWrapper() .eq(RetryTask::getNamespaceId, namespaceId) - .eq(RetryTask::getId, retryTaskUpdateStatusRequestVO.getId())); + .eq(RetryTask::getId, requestVO.getId())); if (Objects.isNull(retryTask)) { throw new EasyRetryServerException("未查询到重试任务"); } - retryTask.setRetryStatus(retryTaskUpdateStatusRequestVO.getRetryStatus()); - retryTask.setGroupName(retryTaskUpdateStatusRequestVO.getGroupName()); + retryTask.setRetryStatus(requestVO.getRetryStatus()); + retryTask.setGroupName(requestVO.getGroupName()); // 若恢复重试则需要重新计算下次触发时间 if (RetryStatusEnum.RUNNING.getStatus().equals(retryStatusEnum.getStatus())) { @@ -194,7 +194,7 @@ public class RetryTaskServiceImpl implements RetryTaskService { } retryTask.setUpdateDt(LocalDateTime.now()); - return retryTaskAccess.updateById(retryTaskUpdateStatusRequestVO.getGroupName(), retryTask); + return retryTaskAccess.updateById(requestVO.getGroupName(), namespaceId, retryTask); } @Override @@ -273,7 +273,7 @@ public class RetryTaskServiceImpl implements RetryTaskService { String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId(); // 根据重试数据id,更新执行器名称 TaskAccess retryTaskAccess = accessTemplate.getRetryTaskAccess(); - return retryTaskAccess.update(requestVO.getGroupName(), retryTask, + return retryTaskAccess.update(requestVO.getGroupName(), namespaceId, retryTask, new LambdaUpdateWrapper() .eq(RetryTask::getNamespaceId, namespaceId) .eq(RetryTask::getGroupName, requestVO.getGroupName()) @@ -284,7 +284,7 @@ public class RetryTaskServiceImpl implements RetryTaskService { public Integer deleteRetryTask(final BatchDeleteRetryTaskVO requestVO) { TaskAccess retryTaskAccess = accessTemplate.getRetryTaskAccess(); String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId(); - return retryTaskAccess.delete(requestVO.getGroupName(), + return retryTaskAccess.delete(requestVO.getGroupName(), namespaceId, new LambdaQueryWrapper() .eq(RetryTask::getNamespaceId, namespaceId) .eq(RetryTask::getGroupName, requestVO.getGroupName()) @@ -355,7 +355,8 @@ public class RetryTaskServiceImpl implements RetryTaskService { List uniqueIds = requestVO.getUniqueIds(); String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId(); - List list = accessTemplate.getRetryTaskAccess().list(requestVO.getGroupName(), + List list = accessTemplate.getRetryTaskAccess().list( + requestVO.getGroupName(), namespaceId, new LambdaQueryWrapper() .eq(RetryTask::getNamespaceId, namespaceId) .eq(RetryTask::getTaskType, TaskTypeEnum.RETRY.getType()) @@ -379,7 +380,7 @@ public class RetryTaskServiceImpl implements RetryTaskService { String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId(); - List list = accessTemplate.getRetryTaskAccess().list(requestVO.getGroupName(), + List list = accessTemplate.getRetryTaskAccess().list(requestVO.getGroupName(), namespaceId, new LambdaQueryWrapper() .eq(RetryTask::getNamespaceId, namespaceId) .eq(RetryTask::getTaskType, TaskTypeEnum.CALLBACK.getType()) 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 bc71d7ed..2ab4b871 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 @@ -54,7 +54,7 @@ public class SceneConfigServiceImpl implements SceneConfigService { } pageDTO = accessTemplate.getSceneConfigAccess() - .listPage(pageDTO, sceneConfigLambdaQueryWrapper.orderByDesc(SceneConfig::getCreateDt)); + .listPage(pageDTO, sceneConfigLambdaQueryWrapper.orderByDesc(SceneConfig::getCreateDt)); return new PageResult<>(pageDTO, SceneConfigResponseVOConverter.INSTANCE.batchConvert(pageDTO.getRecords())); @@ -66,11 +66,11 @@ public class SceneConfigServiceImpl implements SceneConfigService { String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId(); List sceneConfigs = accessTemplate.getSceneConfigAccess() - .list(new LambdaQueryWrapper() - .select(SceneConfig::getSceneName, SceneConfig::getDescription) - .eq(SceneConfig::getNamespaceId, namespaceId) - .eq(SceneConfig::getGroupName, groupName) - .orderByDesc(SceneConfig::getCreateDt)); + .list(new LambdaQueryWrapper() + .select(SceneConfig::getSceneName, SceneConfig::getDescription) + .eq(SceneConfig::getNamespaceId, namespaceId) + .eq(SceneConfig::getGroupName, groupName) + .orderByDesc(SceneConfig::getCreateDt)); return SceneConfigResponseVOConverter.INSTANCE.batchConvert(sceneConfigs); } @@ -79,23 +79,29 @@ public class SceneConfigServiceImpl implements SceneConfigService { public Boolean saveSceneConfig(SceneConfigRequestVO requestVO) { checkExecuteInterval(requestVO); - String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId(); + ConfigAccess sceneConfigAccess = accessTemplate.getSceneConfigAccess(); + Assert.isTrue(0 == sceneConfigAccess.count( + new LambdaQueryWrapper() + .eq(SceneConfig::getNamespaceId, namespaceId) + .eq(SceneConfig::getGroupName, requestVO.getGroupName()) + .eq(SceneConfig::getSceneName, requestVO.getSceneName()) + + ), () -> new EasyRetryServerException("场景名称重复. {}", requestVO.getSceneName())); SceneConfig sceneConfig = SceneConfigConverter.INSTANCE.toSceneConfigRequestVO(requestVO); sceneConfig.setCreateDt(LocalDateTime.now()); sceneConfig.setNamespaceId(namespaceId); - ConfigAccess sceneConfigAccess = accessTemplate.getSceneConfigAccess(); Assert.isTrue(1 == sceneConfigAccess.insert(sceneConfig), - () -> new EasyRetryServerException("failed to insert scene. sceneConfig:[{}]", - JsonUtil.toJsonString(sceneConfig))); + () -> new EasyRetryServerException("failed to insert scene. sceneConfig:[{}]", + JsonUtil.toJsonString(sceneConfig))); return Boolean.TRUE; } private static void checkExecuteInterval(SceneConfigRequestVO requestVO) { if (Lists.newArrayList(WaitStrategies.WaitStrategyEnum.FIXED.getType(), - WaitStrategies.WaitStrategyEnum.RANDOM.getType()) - .contains(requestVO.getBackOff())) { + WaitStrategies.WaitStrategyEnum.RANDOM.getType()) + .contains(requestVO.getBackOff())) { if (Integer.parseInt(requestVO.getTriggerInterval()) < 10) { throw new EasyRetryServerException("间隔时间不得小于10"); } @@ -120,19 +126,19 @@ public class SceneConfigServiceImpl implements SceneConfigService { sceneConfig.setTriggerInterval(Optional.ofNullable(sceneConfig.getTriggerInterval()).orElse(StrUtil.EMPTY)); Assert.isTrue(1 == accessTemplate.getSceneConfigAccess().update(sceneConfig, - new LambdaUpdateWrapper() - .eq(SceneConfig::getNamespaceId, namespaceId) - .eq(SceneConfig::getGroupName, requestVO.getGroupName()) - .eq(SceneConfig::getSceneName, requestVO.getSceneName())), - () -> new EasyRetryServerException("failed to update scene. sceneConfig:[{}]", - JsonUtil.toJsonString(sceneConfig))); + new LambdaUpdateWrapper() + .eq(SceneConfig::getNamespaceId, namespaceId) + .eq(SceneConfig::getGroupName, requestVO.getGroupName()) + .eq(SceneConfig::getSceneName, requestVO.getSceneName())), + () -> new EasyRetryServerException("failed to update scene. sceneConfig:[{}]", + JsonUtil.toJsonString(sceneConfig))); return Boolean.TRUE; } @Override public SceneConfigResponseVO getSceneConfigDetail(Long id) { SceneConfig sceneConfig = accessTemplate.getSceneConfigAccess().one(new LambdaQueryWrapper() - .eq(SceneConfig::getId, id)); + .eq(SceneConfig::getId, id)); return SceneConfigResponseVOConverter.INSTANCE.convert(sceneConfig); } } diff --git a/frontend/src/views/namespace/NamespaceForm.vue b/frontend/src/views/namespace/NamespaceForm.vue index 8b3cebeb..53f1c82d 100644 --- a/frontend/src/views/namespace/NamespaceForm.vue +++ b/frontend/src/views/namespace/NamespaceForm.vue @@ -13,7 +13,7 @@ :disabled="isEdit" v-decorator="[ 'uniqueId', - {rules: [{ required: false, message: '请输入空间名称', whitespace: true},{required: true, max: 64, message: '最多支持64个字符!'}, {validator: validate, trigger: ['change', 'blur']}]} + {rules: [{ required: false, message: '请输入空间名称', whitespace: true},{required: false, max: 64, message: '最多支持64个字符!'}, {validator: validate, trigger: ['change', 'blur']}]} ]" /> - + @@ -36,12 +36,6 @@ {{ record.id }} - - - - - -