diff --git a/doc/sql/easy_retry.sql b/doc/sql/easy_retry.sql index a87b0c296..9704e6a6e 100644 --- a/doc/sql/easy_retry.sql +++ b/doc/sql/easy_retry.sql @@ -42,8 +42,7 @@ CREATE TABLE `retry_dead_letter_0` `ext_attrs` text NOT NULL COMMENT '扩展字段', `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), - KEY `idx_group_name` (`group_name`) USING BTREE, - KEY `idx_scene_name` (`scene_name`) USING BTREE, + KEY `idx_group_name_scene_name` (`group_name`, `scene_name`), KEY `idx_biz_id` (`biz_id`), KEY `idx_biz_no` (`biz_no`) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='重试死信队列' @@ -65,7 +64,9 @@ CREATE TABLE `retry_task_0` `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), - UNIQUE KEY `uk_biz_id` (`biz_id`) + KEY `idx_group_name_scene_name` (`group_name`, `scene_name`), + KEY `idx_retry_status` (`retry_status`), + KEY `idx_biz_id` (`biz_id`) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='重试表' ; @@ -84,8 +85,7 @@ CREATE TABLE `retry_task_log` `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', `error_message` text NOT NULL COMMENT '异常信息', PRIMARY KEY (`id`), - KEY `idx_group_name` (`group_name`), - KEY `idx_scene_name` (`scene_name`), + KEY `idx_group_name_scene_name` (`group_name`, `scene_name`), KEY `idx_retry_status` (`retry_status`), KEY `idx_biz_id` (`biz_id`) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COMMENT='重试日志表' diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/service/RetryTaskService.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/service/RetryTaskService.java index fb792bbc4..f9f07a35c 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/service/RetryTaskService.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/service/RetryTaskService.java @@ -1,6 +1,7 @@ package com.aizuda.easy.retry.server.service; import com.aizuda.easy.retry.server.web.model.base.PageResult; +import com.aizuda.easy.retry.server.web.model.request.BatchDeleteRetryTaskVO; import com.aizuda.easy.retry.server.web.model.request.GenerateRetryBizIdVO; import com.aizuda.easy.retry.server.web.model.request.RetryTaskQueryVO; import com.aizuda.easy.retry.server.web.model.request.RetryTaskUpdateStatusRequestVO; @@ -59,4 +60,13 @@ public interface RetryTaskService { * @return 更新条数 */ int updateRetryTaskExecutorName(RetryTaskUpdateExecutorNameRequestVO requestVO); + + /** + * 批量删除重试数据 + * + * @param requestVO 批量删除重试数据 + * @return + */ + Integer deleteRetryTask(BatchDeleteRetryTaskVO requestVO); + } diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/service/impl/RetryTaskServiceImpl.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/service/impl/RetryTaskServiceImpl.java index 1d51b528d..6ac64f2d2 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/service/impl/RetryTaskServiceImpl.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/service/impl/RetryTaskServiceImpl.java @@ -15,6 +15,7 @@ import com.aizuda.easy.retry.server.service.convert.RetryTaskResponseVOConverter import com.aizuda.easy.retry.server.support.handler.ClientNodeAllocateHandler; import com.aizuda.easy.retry.server.support.strategy.WaitStrategies; import com.aizuda.easy.retry.server.web.model.base.PageResult; +import com.aizuda.easy.retry.server.web.model.request.BatchDeleteRetryTaskVO; import com.aizuda.easy.retry.server.web.model.request.GenerateRetryBizIdVO; import com.aizuda.easy.retry.server.web.model.request.RetryTaskQueryVO; import com.aizuda.easy.retry.server.web.model.request.RetryTaskUpdateStatusRequestVO; @@ -177,21 +178,18 @@ public class RetryTaskServiceImpl implements RetryTaskService { RetryTask retryTask = new RetryTask(); retryTask.setExecutorName(requestVO.getExecutorName()); + retryTask.setRetryStatus(requestVO.getRetryStatus()); retryTask.setUpdateDt(LocalDateTime.now()); - if (!CollectionUtils.isEmpty(requestVO.getIds())) { - // 根据重试数据id,更新执行器名称 - RequestDataHelper.setPartition(requestVO.getGroupName()); - return retryTaskMapper - .update(retryTask, new LambdaUpdateWrapper().in(RetryTask::getId, requestVO.getIds())); - } - - // 更新组下面的场景对应的执行器名称 + // 根据重试数据id,更新执行器名称 RequestDataHelper.setPartition(requestVO.getGroupName()); return retryTaskMapper - .update(retryTask, new LambdaUpdateWrapper() - .eq(RetryTask::getGroupName, requestVO.getGroupName()) - .eq(RetryTask::getSceneName, requestVO.getSceneName()) - ); + .update(retryTask, new LambdaUpdateWrapper().in(RetryTask::getId, requestVO.getIds())); + } + + @Override + public Integer deleteRetryTask(final BatchDeleteRetryTaskVO requestVO) { + RequestDataHelper.setPartition(requestVO.getGroupName()); + return retryTaskMapper.deleteBatchIds(requestVO.getIds()); } } diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/controller/RetryTaskController.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/controller/RetryTaskController.java index 84e21c44b..ef23b0b94 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/controller/RetryTaskController.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/controller/RetryTaskController.java @@ -4,6 +4,7 @@ import com.aizuda.easy.retry.common.core.model.Result; import com.aizuda.easy.retry.server.service.RetryTaskService; import com.aizuda.easy.retry.server.web.annotation.LoginRequired; import com.aizuda.easy.retry.server.web.model.base.PageResult; +import com.aizuda.easy.retry.server.web.model.request.BatchDeleteRetryTaskVO; import com.aizuda.easy.retry.server.web.model.request.GenerateRetryBizIdVO; import com.aizuda.easy.retry.server.web.model.request.RetryTaskQueryVO; import com.aizuda.easy.retry.server.web.model.request.RetryTaskUpdateStatusRequestVO; @@ -12,6 +13,7 @@ import com.aizuda.easy.retry.server.web.model.request.RetryTaskUpdateExecutorNam import com.aizuda.easy.retry.server.web.model.response.RetryTaskResponseVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; @@ -68,8 +70,14 @@ public class RetryTaskController { } @LoginRequired - @PutMapping("/executor-name/batch") + @PutMapping("/batch") public Integer updateRetryTaskExecutorName(@RequestBody @Validated RetryTaskUpdateExecutorNameRequestVO requestVO) { return retryTaskService.updateRetryTaskExecutorName(requestVO); } + + @LoginRequired + @DeleteMapping("/batch") + public Integer deleteRetryTask(@RequestBody @Validated BatchDeleteRetryTaskVO requestVO) { + return retryTaskService.deleteRetryTask(requestVO); + } } diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/model/request/BatchDeleteRetryTaskVO.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/model/request/BatchDeleteRetryTaskVO.java new file mode 100644 index 000000000..aa2a46cd5 --- /dev/null +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/model/request/BatchDeleteRetryTaskVO.java @@ -0,0 +1,30 @@ +package com.aizuda.easy.retry.server.web.model.request; + +import com.aizuda.easy.retry.common.core.enums.RetryStatusEnum; +import lombok.Data; +import org.hibernate.validator.constraints.NotBlank; +import org.hibernate.validator.constraints.NotEmpty; + +import java.util.List; + +/** + * 批量删除重试数据 + * + * @author: shuguang.zhang + * @date : 2023-04-30 22:30 + */ +@Data +public class BatchDeleteRetryTaskVO { + + /** + * 组名称 + */ + @NotBlank(message = "groupName 不能为空") + private String groupName; + + /** + * 重试表id + */ + @NotEmpty(message = "至少选择一项") + private List ids; +} diff --git a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/model/request/RetryTaskUpdateExecutorNameRequestVO.java b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/model/request/RetryTaskUpdateExecutorNameRequestVO.java index 64b482d53..2684ab3d4 100644 --- a/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/model/request/RetryTaskUpdateExecutorNameRequestVO.java +++ b/easy-retry-server/src/main/java/com/aizuda/easy/retry/server/web/model/request/RetryTaskUpdateExecutorNameRequestVO.java @@ -1,7 +1,9 @@ package com.aizuda.easy.retry.server.web.model.request; +import com.aizuda.easy.retry.common.core.enums.RetryStatusEnum; import lombok.Data; import org.hibernate.validator.constraints.NotBlank; +import org.hibernate.validator.constraints.NotEmpty; import java.util.List; @@ -20,15 +22,20 @@ public class RetryTaskUpdateExecutorNameRequestVO { @NotBlank(message = "groupName 不能为空") private String groupName; - @NotBlank(message = "scene 不能为空") - private String sceneName; - - @NotBlank(message = "executorName 不能为空") + /** + * 执行器名称 + */ private String executorName; + /** + * 重试状态 {@link RetryStatusEnum} + */ + private Integer retryStatus; + /** * 重试表id */ + @NotEmpty(message = "至少选择一项") private List ids; } diff --git a/example/src/main/resources/logback-boot.xml b/example/src/main/resources/logback-boot.xml index 0e536bedb..35571c6b0 100644 --- a/example/src/main/resources/logback-boot.xml +++ b/example/src/main/resources/logback-boot.xml @@ -23,9 +23,10 @@ log/sys.%d.%i.log 30 + true - 1KB + 10MB @@ -47,4 +48,4 @@ - \ No newline at end of file + diff --git a/frontend/src/api/manage.js b/frontend/src/api/manage.js index c42c51560..9d1d4c9eb 100644 --- a/frontend/src/api/manage.js +++ b/frontend/src/api/manage.js @@ -15,7 +15,8 @@ const api = { retryTaskById: '/retry-task/', saveRetryTask: '/retry-task', bizIdGenerate: '/retry-task/generate/biz-id', - updateRetryTaskExecutorName: '/retry-task/executor-name/batch', + batchUpdate: '/retry-task/batch', + deleteRetryTask: '/retry-task/batch', updateRetryTaskStatus: '/retry-task/status', retryTaskLogPage: '/retry-task-log/list', retryTaskLogById: '/retry-task-log/', @@ -39,6 +40,22 @@ const api = { export default api +export function batchDelete (data) { + return request({ + url: api.deleteRetryTask, + method: 'delete', + data + }) +} + +export function batchUpdate (data) { + return request({ + url: api.batchUpdate, + method: 'put', + data + }) +} + export function bizIdGenerate (data) { return request({ url: api.bizIdGenerate, diff --git a/frontend/src/views/task/RetryDeadLetterList.vue b/frontend/src/views/task/RetryDeadLetterList.vue index 6fee65ec5..b7ea26dea 100644 --- a/frontend/src/views/task/RetryDeadLetterList.vue +++ b/frontend/src/views/task/RetryDeadLetterList.vue @@ -53,8 +53,8 @@ :rowSelection="options.rowSelection" :scroll="{ x: 2000 }" > - - {{ index + 1 }} + + {{ record.id }} - + + + + diff --git a/frontend/src/views/task/form/SaveRetryTask.vue b/frontend/src/views/task/form/SaveRetryTask.vue index 76b158223..3ddd06f35 100644 --- a/frontend/src/views/task/form/SaveRetryTask.vue +++ b/frontend/src/views/task/form/SaveRetryTask.vue @@ -14,7 +14,7 @@ + v-decorator="['sceneName', { rules: [{ required: true, message: '请选择场景名称' }] }]" > {{ item.sceneName }} @@ -56,7 +56,7 @@ v-decorator="['retryStatus', { rules: [{ required: true, message: '请选择重试状态' }] }]" > {{ value }} - +