From c708a30443117146112d001031bda22464e339b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?DESKTOP-9ERGOBP=5C=E4=BB=BB=E7=BB=B4=E7=82=B3?= Date: Mon, 20 Oct 2025 11:02:57 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BF=AE=E6=94=B9=E3=80=91=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=80=83=E8=AF=95=E5=89=A9=E4=BD=99=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=BC=82=E5=B8=B8=E9=97=AA=E5=8A=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/autoTools/AutoToolsController.java | 24 ++++++++++++------- .../module/judgement/service/TaskManager.java | 8 +++++++ 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/admin/autoTools/AutoToolsController.java b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/admin/autoTools/AutoToolsController.java index db9df7b3..2e5c84cd 100644 --- a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/admin/autoTools/AutoToolsController.java +++ b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/admin/autoTools/AutoToolsController.java @@ -157,11 +157,9 @@ public class AutoToolsController { securityProperties.getTokenHeader(), securityProperties.getTokenParameter()); // 获取登录用户 LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); - // userId 是否存在 - String wsKey = taskManager.getTaskById(String.valueOf(loginUser.getId())); - if (wsKey != null) { - // 停止任务 - taskManager.stopTask(wsKey); + // 通过ID 直接停止 + if (loginUser != null) { + taskManager.stopTaskByUserId(String.valueOf(loginUser.getId())); } int startTime = 0; // 查找对应的task @@ -213,7 +211,9 @@ public class AutoToolsController { // 返回数据-网络状态 stuTheExamInfo.setNetwork("强"); // 创建对应的线程池 - taskManager.startTask(stuInTheExam, stuTheExamInfo, token, countdown, new AtomicInteger(0), loginUser.getId() + "_" + stuInTheExam.getTaskId() + "_" + stuInTheExam.getPaperId()); + if (loginUser != null) { + taskManager.startTask(stuInTheExam, stuTheExamInfo, token, countdown, new AtomicInteger(0), loginUser.getId() + "_" + stuInTheExam.getTaskId() + "_" + stuInTheExam.getPaperId()); + } return CommonResult.success(token); } return CommonResult.success("未登录"); @@ -261,8 +261,10 @@ public class AutoToolsController { securityProperties.getTokenHeader(), securityProperties.getTokenParameter()); ExamRestartPaperVo examRestartPaperVo = new ExamRestartPaperVo(); // 如果继续考试,需要关闭之前的,重新开始ws - String taskManagerId = loginUser.getId() + "_" + stuInTheExam.getTaskId() + "_" + stuInTheExam.getPaperId(); - taskManager.stopTask(taskManagerId); + // 通过ID 直接停止 + if (loginUser != null) { + taskManager.stopTaskByUserId(String.valueOf(loginUser.getId())); + } // 获取试卷详情 ExamPaperVo examPaperVo = educationPaperQuService.selectPaperQuListByPaperId(stuInTheExam.getPaperId()); // 获取剩余的时间 @@ -353,6 +355,12 @@ public class AutoToolsController { userId += "_" + taskId + "_" + paperId; // 删除对应的线程池 taskManager.stopTask(userId); + // 为了确保停止成功,笨办法在请求另一个停止接口 + try { + taskManager.stopTaskByUserId(String.valueOf(userId)); + } catch (Exception e) { + e.printStackTrace(); + } return CommonResult.success(true); } diff --git a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/service/TaskManager.java b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/service/TaskManager.java index 19f5c421..241d86d6 100644 --- a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/service/TaskManager.java +++ b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/service/TaskManager.java @@ -93,6 +93,14 @@ public class TaskManager { .orElse(null); } + /**通过ID结束任务*/ + public void stopTaskByUserId(String userId) { + tasks.keySet().stream() + .filter(key -> key.startsWith(userId + "_")) + .findFirst().ifPresent(this::stopTask); + } + + /** 全部停止(可选) */ public void stopAll() { tasks.forEach((k, f) -> f.cancel(false));