From 478f8c4549bacea552504a7f824af6d6b29a840c Mon Sep 17 00:00:00 2001 From: lifangliang Date: Fri, 29 Aug 2025 16:31:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../printserver/main/PrintController.java | 29 +++++++++++++++++++ .../main/service/PrintQueueService.java | 24 +++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/src/main/java/com/goeing/printserver/main/PrintController.java b/src/main/java/com/goeing/printserver/main/PrintController.java index 977b0f7..3c20085 100644 --- a/src/main/java/com/goeing/printserver/main/PrintController.java +++ b/src/main/java/com/goeing/printserver/main/PrintController.java @@ -123,6 +123,35 @@ public class PrintController implements PrintService { return result; } + /** + * 取消单个任务 + * + * @param taskId 任务ID + * @return 取消结果 + */ + @DeleteMapping("queue/task/{taskId}") + public Map cancelTask(@PathVariable String taskId) { + Map result = new HashMap<>(); + try { + boolean cancelled = printQueueService.cancelTask(taskId); + if (cancelled) { + result.put("success", true); + result.put("message", "任务已取消"); + result.put("taskId", taskId); + } else { + result.put("success", false); + result.put("message", "未找到指定任务"); + result.put("taskId", taskId); + } + } catch (Exception e) { + result.put("success", false); + result.put("message", "取消任务失败: " + e.getMessage()); + result.put("taskId", taskId); + } + result.put("timestamp", System.currentTimeMillis()); + return result; + } + /** * 搜索打印任务 * diff --git a/src/main/java/com/goeing/printserver/main/service/PrintQueueService.java b/src/main/java/com/goeing/printserver/main/service/PrintQueueService.java index 69cfdfe..f15cd17 100644 --- a/src/main/java/com/goeing/printserver/main/service/PrintQueueService.java +++ b/src/main/java/com/goeing/printserver/main/service/PrintQueueService.java @@ -383,6 +383,30 @@ public class PrintQueueService { return clearedCount; } + /** + * 取消指定任务 + * @param taskId 任务ID + * @return 是否成功取消 + */ + public boolean cancelTask(String taskId) { + // 检查当前任务 + if (currentTask != null && taskId.equals(currentTask.getId())) { + log.info("取消当前正在执行的任务: {}", taskId); + currentTask.setStatus("cancelled"); + currentTask = null; + return true; + } + + // 从队列中移除任务 + boolean removed = printQueue.removeIf(task -> taskId.equals(task.getId())); + if (removed) { + log.info("成功从队列中取消任务: {}", taskId); + } else { + log.warn("未找到要取消的任务: {}", taskId); + } + return removed; + } + /** * 获取历史服务实例 *