From f55ace8ec0845cd62856c38f21b211afd68a51c1 Mon Sep 17 00:00:00 2001 From: zc Date: Tue, 7 Apr 2026 11:02:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BE=E7=89=87=E5=AE=9A=E6=97=B6=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tcp/service/SaveBmpTaskService.java | 89 +++++++++++++++++++ .../controller/vm/VmCommandController.java | 15 +++- 2 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 wms-webapi/src/main/java/top/wms/admin/controller/tcp/service/SaveBmpTaskService.java diff --git a/wms-webapi/src/main/java/top/wms/admin/controller/tcp/service/SaveBmpTaskService.java b/wms-webapi/src/main/java/top/wms/admin/controller/tcp/service/SaveBmpTaskService.java new file mode 100644 index 0000000..da71a39 --- /dev/null +++ b/wms-webapi/src/main/java/top/wms/admin/controller/tcp/service/SaveBmpTaskService.java @@ -0,0 +1,89 @@ +package top.wms.admin.controller.tcp.service; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.TaskScheduler; +import org.springframework.scheduling.support.CronTrigger; +import org.springframework.stereotype.Service; +import top.wms.admin.controller.tcp.manager.ChannelManager; + +import java.util.concurrent.ScheduledFuture; + +/** + * 动态定时任务服务 + * 支持通过接口触发和取消定时任务 + */ +@Slf4j +@Service +public class SaveBmpTaskService { + + @Autowired + private TaskScheduler taskScheduler; + + @Autowired + private ChannelManager channelManager; + + // 存储定时任务的Future对象,用于取消任务 + private ScheduledFuture scheduledTask; + + /** + * 启动定时任务 + * 当用户进入称重管理的扫码核验页面时调用 + */ + public boolean startTask() { + // 先取消可能存在的任务 + stopTask(); + + try { + // 创建并启动定时任务,每1秒执行一次 + scheduledTask = taskScheduler.schedule(() -> { + try { + // 执行任务逻辑 + executeTask(); + } catch (Exception e) { + log.error("定时任务执行失败: {}", e.getMessage()); + } + }, new CronTrigger("*/1 * * * * ?")); + + log.info("定时任务已启动"); + return true; + } catch (Exception e) { + log.error("启动定时任务失败: {}", e.getMessage()); + return false; + } + } + + /** + * 停止定时任务 + * 当用户离开称重管理的扫码核验页面时调用 + */ + public boolean stopTask() { + if (scheduledTask != null && !scheduledTask.isCancelled()) { + scheduledTask.cancel(false); + scheduledTask = null; + log.info("定时任务已停止"); + return true; + } + return false; + } + + /** + * 执行定时任务的具体逻辑 + */ + private void executeTask() { + try { + // 001流程是执行保存图片到本地 + log.debug("执行定时任务,发送命令: 001"); + channelManager.getFirstChannel().writeAndFlush("001"); + } catch (Exception e) { + log.error("执行定时任务失败: {}", e.getMessage()); + } + } + + /** + * 检查定时任务是否正在运行 + */ + public boolean isTaskRunning() { + return scheduledTask != null && !scheduledTask.isCancelled(); + } +} \ No newline at end of file diff --git a/wms-webapi/src/main/java/top/wms/admin/controller/vm/VmCommandController.java b/wms-webapi/src/main/java/top/wms/admin/controller/vm/VmCommandController.java index 26d83e1..4370ebd 100644 --- a/wms-webapi/src/main/java/top/wms/admin/controller/vm/VmCommandController.java +++ b/wms-webapi/src/main/java/top/wms/admin/controller/vm/VmCommandController.java @@ -9,7 +9,7 @@ import org.springframework.web.bind.annotation.*; import top.continew.starter.core.validation.CheckUtils; import top.wms.admin.controller.tcp.config.SimpleRequestMatcher; import top.wms.admin.controller.tcp.manager.ChannelManager; -import top.wms.admin.materialProcess.mapper.MaterialProcessMapper; +import top.wms.admin.controller.tcp.service.SaveBmpTaskService; @Slf4j @RestController @@ -22,6 +22,9 @@ public class VmCommandController { @Autowired private SimpleRequestMatcher requestMatcher; + @Autowired + private SaveBmpTaskService saveBmpTaskService; + @PostMapping("/send") public String sendAndWait(@RequestBody JSONObject js) { String materialProcess = js.getString("materialProcess"); @@ -44,4 +47,14 @@ public class VmCommandController { return response; } + + @GetMapping("/start") + public boolean startTask() { + return saveBmpTaskService.startTask(); + } + + @GetMapping("/stop") + public boolean stopTask() { + return saveBmpTaskService.stopTask(); + } }