From 72d689b6a5ca5661425d829f0a3f195a122728f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=87=A4=E5=90=89?= Date: Wed, 7 May 2025 19:28:24 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E8=AE=BE=E5=A4=87=E6=8C=87=E4=BB=A4?= =?UTF-8?q?=E5=8F=8D=E9=A6=88=E6=94=B9=E4=B8=BA=E4=BA=8B=E4=BB=B6=E6=96=B9?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gd/app/core/event/CommandFeedbackEvent.java | 16 +++++++++++++ .../app/core/listener/CommandFeedbackListener.java | 18 ++++++++++++++ .../com/iflytop/gd/hardware/HardwareService.java | 28 +++++++++------------- 3 files changed, 45 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/iflytop/gd/app/core/event/CommandFeedbackEvent.java create mode 100644 src/main/java/com/iflytop/gd/app/core/listener/CommandFeedbackListener.java diff --git a/src/main/java/com/iflytop/gd/app/core/event/CommandFeedbackEvent.java b/src/main/java/com/iflytop/gd/app/core/event/CommandFeedbackEvent.java new file mode 100644 index 0000000..7b472e8 --- /dev/null +++ b/src/main/java/com/iflytop/gd/app/core/event/CommandFeedbackEvent.java @@ -0,0 +1,16 @@ +package com.iflytop.gd.app.core.event; + +import cn.hutool.json.JSONObject; +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +@Getter +public class CommandFeedbackEvent extends ApplicationEvent { + private final JSONObject jsonResponse; + + public CommandFeedbackEvent(Object source, JSONObject jsonResponse) { + super(source); + this.jsonResponse = jsonResponse; + } + +} \ No newline at end of file diff --git a/src/main/java/com/iflytop/gd/app/core/listener/CommandFeedbackListener.java b/src/main/java/com/iflytop/gd/app/core/listener/CommandFeedbackListener.java new file mode 100644 index 0000000..0e660a9 --- /dev/null +++ b/src/main/java/com/iflytop/gd/app/core/listener/CommandFeedbackListener.java @@ -0,0 +1,18 @@ +package com.iflytop.gd.app.core.listener; + +import com.iflytop.gd.app.core.event.CommandFeedbackEvent; +import com.iflytop.gd.app.service.DeviceCommandService; +import lombok.RequiredArgsConstructor; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class CommandFeedbackListener { + private final DeviceCommandService deviceCommandService; + + @EventListener + public void handleCommandFeedbackEvent(CommandFeedbackEvent event) { + deviceCommandService.completeCommandResponse(event.getJsonResponse()); + } +} diff --git a/src/main/java/com/iflytop/gd/hardware/HardwareService.java b/src/main/java/com/iflytop/gd/hardware/HardwareService.java index 343822c..86ccef6 100644 --- a/src/main/java/com/iflytop/gd/hardware/HardwareService.java +++ b/src/main/java/com/iflytop/gd/hardware/HardwareService.java @@ -5,7 +5,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; -import com.iflytop.gd.app.service.DeviceCommandService; +import com.iflytop.gd.app.core.event.CommandFeedbackEvent; import com.iflytop.gd.common.cmd.DeviceCommand; import com.iflytop.gd.common.enums.cmd.CmdDevice; import com.iflytop.gd.hardware.command.CommandHandler; @@ -14,12 +14,12 @@ import com.iflytop.gd.hardware.command.checker.SupportMethod; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Component; import java.security.InvalidParameterException; import java.util.HashMap; import java.util.Map; -import java.util.concurrent.ExecutorService; import java.util.concurrent.ThreadPoolExecutor; @@ -27,20 +27,18 @@ import java.util.concurrent.ThreadPoolExecutor; @Component @RequiredArgsConstructor public class HardwareService { - private final DeviceCommandService deviceCommandService; + private final ApplicationEventPublisher eventPublisher; private final Map cmdHandlers = new HashMap<>(); ThreadPoolExecutor executor = ThreadUtil.newFixedExecutor(50, "hardware-service", true); @PostConstruct - public void postInit() - { + public void postInit() { } - public boolean sendCommand(DeviceCommand cmd) - { + public boolean sendCommand(DeviceCommand cmd) { if (executor.getQueue().remainingCapacity() == 0) { log.error("线程池队列已满,无法提交任务"); return false; @@ -49,8 +47,7 @@ public class HardwareService { return true; } - void handleCommand(DeviceCommand cmd) - { + void handleCommand(DeviceCommand cmd) { DeviceResponse response = new DeviceResponse(); response.setCmdId(cmd.getCmdId()); try { @@ -58,21 +55,18 @@ public class HardwareService { SupportMethod.checkMethod(strMethod); - if(cmdHandlers.containsKey(cmd.getDevice())) { + if (cmdHandlers.containsKey(cmd.getDevice())) { cmdHandlers.get(cmd.getDevice()).sendCommand(cmd); response.setSuccess(Boolean.TRUE); - } - else { + } else { throw new InvalidParameterException(StrUtil.format("[Device]: {}", cmd.getDevice())); } - } - catch (Exception e) { + } catch (Exception e) { response.setSuccess(Boolean.FALSE); - } - finally { + } finally { JSONObject jsonResponse = JSONUtil.parseObj(response); - deviceCommandService.completeCommandResponse(jsonResponse); + eventPublisher.publishEvent(new CommandFeedbackEvent(this, jsonResponse)); } } }