From 4a9f55a1b14045f1951d4d0846f6e284d5cb2563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=B0=8F=E4=BA=91?= Date: Mon, 2 Mar 2026 16:07:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A3=9E=E6=8E=A7=E6=8C=87?= =?UTF-8?q?=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vendor/tuoheng/TuohengVendorConfig.java | 12 ++--- .../TuohengDroneControlInstruction.java | 11 +++- .../TuohengMoveBackwardInstruction.java | 50 +++++++++++++++++++ .../TuohengMoveForwardInstruction.java | 50 +++++++++++++++++++ .../TuohengMoveLeftInstruction.java | 50 +++++++++++++++++++ .../TuohengMoveRightInstruction.java | 50 +++++++++++++++++++ .../TuohengRotateLeftInstruction.java | 50 +++++++++++++++++++ .../TuohengRotateRightInstruction.java | 50 +++++++++++++++++++ 8 files changed, 315 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengMoveBackwardInstruction.java create mode 100644 src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengMoveForwardInstruction.java create mode 100644 src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengMoveLeftInstruction.java create mode 100644 src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengMoveRightInstruction.java create mode 100644 src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengRotateLeftInstruction.java create mode 100644 src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengRotateRightInstruction.java diff --git a/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/TuohengVendorConfig.java b/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/TuohengVendorConfig.java index 3dc3d86..722b4a0 100644 --- a/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/TuohengVendorConfig.java +++ b/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/TuohengVendorConfig.java @@ -125,22 +125,22 @@ public class TuohengVendorConfig implements VendorConfig { // 遥感控制命令 transactionMap.put(CommandType.FORWARD, new Transaction("前进", CommandType.FORWARD) - .root(new com.ruoyi.device.domain.impl.machine.vendor.tuoheng.instruction.TuohengDroneControlInstruction("06", "前进")) + .root(new com.ruoyi.device.domain.impl.machine.vendor.tuoheng.instruction.TuohengMoveForwardInstruction()) .setTimeout(5000)); transactionMap.put(CommandType.BACKWARD, new Transaction("后退", CommandType.BACKWARD) - .root(new com.ruoyi.device.domain.impl.machine.vendor.tuoheng.instruction.TuohengDroneControlInstruction("07", "后退")) + .root(new com.ruoyi.device.domain.impl.machine.vendor.tuoheng.instruction.TuohengMoveBackwardInstruction()) .setTimeout(5000)); transactionMap.put(CommandType.LEFT, new Transaction("左移", CommandType.LEFT) - .root(new com.ruoyi.device.domain.impl.machine.vendor.tuoheng.instruction.TuohengDroneControlInstruction("04", "左移")) + .root(new com.ruoyi.device.domain.impl.machine.vendor.tuoheng.instruction.TuohengMoveLeftInstruction()) .setTimeout(5000)); transactionMap.put(CommandType.RIGHT, new Transaction("右移", CommandType.RIGHT) - .root(new com.ruoyi.device.domain.impl.machine.vendor.tuoheng.instruction.TuohengDroneControlInstruction("05", "右移")) + .root(new com.ruoyi.device.domain.impl.machine.vendor.tuoheng.instruction.TuohengMoveRightInstruction()) .setTimeout(5000)); transactionMap.put(CommandType.ROTATE_LEFT, new Transaction("左旋", CommandType.ROTATE_LEFT) - .root(new com.ruoyi.device.domain.impl.machine.vendor.tuoheng.instruction.TuohengDroneControlInstruction("10", "左旋")) + .root(new com.ruoyi.device.domain.impl.machine.vendor.tuoheng.instruction.TuohengRotateLeftInstruction()) .setTimeout(5000)); transactionMap.put(CommandType.ROTATE_RIGHT, new Transaction("右旋", CommandType.ROTATE_RIGHT) - .root(new com.ruoyi.device.domain.impl.machine.vendor.tuoheng.instruction.TuohengDroneControlInstruction("11", "右旋")) + .root(new com.ruoyi.device.domain.impl.machine.vendor.tuoheng.instruction.TuohengRotateRightInstruction()) .setTimeout(5000)); transactionMap.put(CommandType.UP, new Transaction("上升", CommandType.UP) .root(new com.ruoyi.device.domain.impl.machine.vendor.tuoheng.instruction.TuohengDroneControlInstruction("08", "上升")) diff --git a/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengDroneControlInstruction.java b/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengDroneControlInstruction.java index fadb8e9..9f57c2b 100644 --- a/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengDroneControlInstruction.java +++ b/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengDroneControlInstruction.java @@ -31,9 +31,16 @@ public class TuohengDroneControlInstruction extends AbstractInstruction { payload.put("code", "yaogan"); payload.put("yaogan", commandValue); payload.put("value", commandValue); - payload.put("messageID", System.currentTimeMillis()); + payload.put("messageID", context.getCommandParam("messageID", Long.class) != null ? context.getCommandParam("messageID") : System.currentTimeMillis()); payload.put("timestamp", System.currentTimeMillis()); - payload.put("PWM", 35); + + // 根据命令类型设置不同的 PWM 值 + int pwmValue = 35; // 默认值 + if ("04".equals(commandValue) || "05".equals(commandValue) || "06".equals(commandValue) || "07".equals(commandValue)) { + pwmValue = 150; // 左移、右移、向前、向后 + } + payload.put("PWM", pwmValue); + payload.put("desc", description); String topic = "/topic/v1/airportDrone/" + sn + "/control"; diff --git a/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengMoveBackwardInstruction.java b/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengMoveBackwardInstruction.java new file mode 100644 index 0000000..d7aeb71 --- /dev/null +++ b/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengMoveBackwardInstruction.java @@ -0,0 +1,50 @@ +package com.ruoyi.device.domain.impl.machine.vendor.tuoheng.instruction; + +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.device.domain.impl.machine.instruction.AbstractInstruction; +import com.ruoyi.device.domain.impl.machine.instruction.CallbackConfig; +import com.ruoyi.device.domain.impl.machine.instruction.InstructionContext; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class TuohengMoveBackwardInstruction extends AbstractInstruction { + + @Override + public String getName() { + return "TUOHENG_MOVE_BACKWARD"; + } + + @Override + public void executeRemoteCall(InstructionContext context) throws Exception { + String sn = context.getSn(); + log.info("发送拓恒无人机向后指令: sn={}", sn); + + JSONObject payload = new JSONObject(); + payload.put("code", "yaogan"); + payload.put("PWM", 150); + payload.put("yaogan", "07"); + payload.put("messageID", context.getCommandParam("messageID", Long.class) != null ? context.getCommandParam("messageID") : System.currentTimeMillis()); + payload.put("value", "07"); + payload.put("timestamp", System.currentTimeMillis()); + payload.put("desc", "无人机向后"); + + String topic = "/topic/v1/airportDrone/" + sn + "/control"; + context.getMqttClient().sendMessage(topic, payload.toJSONString()); + log.info("向后指令发送成功: topic={}, payload={}", topic, payload.toJSONString()); + } + + @Override + public CallbackConfig getMethodCallbackConfig(InstructionContext context) { + return null; + } + + @Override + public CallbackConfig getStateCallbackConfig(InstructionContext context) { + return null; + } + + @Override + public long getTimeoutMs() { + return 5000; + } +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengMoveForwardInstruction.java b/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengMoveForwardInstruction.java new file mode 100644 index 0000000..087b614 --- /dev/null +++ b/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengMoveForwardInstruction.java @@ -0,0 +1,50 @@ +package com.ruoyi.device.domain.impl.machine.vendor.tuoheng.instruction; + +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.device.domain.impl.machine.instruction.AbstractInstruction; +import com.ruoyi.device.domain.impl.machine.instruction.CallbackConfig; +import com.ruoyi.device.domain.impl.machine.instruction.InstructionContext; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class TuohengMoveForwardInstruction extends AbstractInstruction { + + @Override + public String getName() { + return "TUOHENG_MOVE_FORWARD"; + } + + @Override + public void executeRemoteCall(InstructionContext context) throws Exception { + String sn = context.getSn(); + log.info("发送拓恒无人机向前指令: sn={}", sn); + + JSONObject payload = new JSONObject(); + payload.put("code", "yaogan"); + payload.put("PWM", 150); + payload.put("yaogan", "06"); + payload.put("messageID", context.getCommandParam("messageID", Long.class) != null ? context.getCommandParam("messageID") : System.currentTimeMillis()); + payload.put("value", "06"); + payload.put("timestamp", System.currentTimeMillis()); + payload.put("desc", "无人机向前"); + + String topic = "/topic/v1/airportDrone/" + sn + "/control"; + context.getMqttClient().sendMessage(topic, payload.toJSONString()); + log.info("向前指令发送成功: topic={}, payload={}", topic, payload.toJSONString()); + } + + @Override + public CallbackConfig getMethodCallbackConfig(InstructionContext context) { + return null; + } + + @Override + public CallbackConfig getStateCallbackConfig(InstructionContext context) { + return null; + } + + @Override + public long getTimeoutMs() { + return 5000; + } +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengMoveLeftInstruction.java b/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengMoveLeftInstruction.java new file mode 100644 index 0000000..c195dd8 --- /dev/null +++ b/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengMoveLeftInstruction.java @@ -0,0 +1,50 @@ +package com.ruoyi.device.domain.impl.machine.vendor.tuoheng.instruction; + +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.device.domain.impl.machine.instruction.AbstractInstruction; +import com.ruoyi.device.domain.impl.machine.instruction.CallbackConfig; +import com.ruoyi.device.domain.impl.machine.instruction.InstructionContext; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class TuohengMoveLeftInstruction extends AbstractInstruction { + + @Override + public String getName() { + return "TUOHENG_MOVE_LEFT"; + } + + @Override + public void executeRemoteCall(InstructionContext context) throws Exception { + String sn = context.getSn(); + log.info("发送拓恒无人机左移指令: sn={}", sn); + + JSONObject payload = new JSONObject(); + payload.put("code", "yaogan"); + payload.put("PWM", 150); + payload.put("yaogan", "04"); + payload.put("messageID", context.getCommandParam("messageID", Long.class) != null ? context.getCommandParam("messageID") : System.currentTimeMillis()); + payload.put("value", "04"); + payload.put("timestamp", System.currentTimeMillis()); + payload.put("desc", "无人机左移"); + + String topic = "/topic/v1/airportDrone/" + sn + "/control"; + context.getMqttClient().sendMessage(topic, payload.toJSONString()); + log.info("左移指令发送成功: topic={}, payload={}", topic, payload.toJSONString()); + } + + @Override + public CallbackConfig getMethodCallbackConfig(InstructionContext context) { + return null; + } + + @Override + public CallbackConfig getStateCallbackConfig(InstructionContext context) { + return null; + } + + @Override + public long getTimeoutMs() { + return 5000; + } +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengMoveRightInstruction.java b/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengMoveRightInstruction.java new file mode 100644 index 0000000..080ee61 --- /dev/null +++ b/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengMoveRightInstruction.java @@ -0,0 +1,50 @@ +package com.ruoyi.device.domain.impl.machine.vendor.tuoheng.instruction; + +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.device.domain.impl.machine.instruction.AbstractInstruction; +import com.ruoyi.device.domain.impl.machine.instruction.CallbackConfig; +import com.ruoyi.device.domain.impl.machine.instruction.InstructionContext; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class TuohengMoveRightInstruction extends AbstractInstruction { + + @Override + public String getName() { + return "TUOHENG_MOVE_RIGHT"; + } + + @Override + public void executeRemoteCall(InstructionContext context) throws Exception { + String sn = context.getSn(); + log.info("发送拓恒无人机右移指令: sn={}", sn); + + JSONObject payload = new JSONObject(); + payload.put("code", "yaogan"); + payload.put("PWM", 150); + payload.put("yaogan", "05"); + payload.put("messageID", context.getCommandParam("messageID", Long.class) != null ? context.getCommandParam("messageID") : System.currentTimeMillis()); + payload.put("value", "05"); + payload.put("timestamp", System.currentTimeMillis()); + payload.put("desc", "无人机右移"); + + String topic = "/topic/v1/airportDrone/" + sn + "/control"; + context.getMqttClient().sendMessage(topic, payload.toJSONString()); + log.info("右移指令发送成功: topic={}, payload={}", topic, payload.toJSONString()); + } + + @Override + public CallbackConfig getMethodCallbackConfig(InstructionContext context) { + return null; + } + + @Override + public CallbackConfig getStateCallbackConfig(InstructionContext context) { + return null; + } + + @Override + public long getTimeoutMs() { + return 5000; + } +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengRotateLeftInstruction.java b/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengRotateLeftInstruction.java new file mode 100644 index 0000000..1c7d889 --- /dev/null +++ b/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengRotateLeftInstruction.java @@ -0,0 +1,50 @@ +package com.ruoyi.device.domain.impl.machine.vendor.tuoheng.instruction; + +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.device.domain.impl.machine.instruction.AbstractInstruction; +import com.ruoyi.device.domain.impl.machine.instruction.CallbackConfig; +import com.ruoyi.device.domain.impl.machine.instruction.InstructionContext; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class TuohengRotateLeftInstruction extends AbstractInstruction { + + @Override + public String getName() { + return "TUOHENG_ROTATE_LEFT"; + } + + @Override + public void executeRemoteCall(InstructionContext context) throws Exception { + String sn = context.getSn(); + log.info("发送拓恒无人机左旋指令: sn={}", sn); + + JSONObject payload = new JSONObject(); + payload.put("code", "yaogan"); + payload.put("PWM", 35); + payload.put("yaogan", "10"); + payload.put("messageID", context.getCommandParam("messageID", Long.class) != null ? context.getCommandParam("messageID") : System.currentTimeMillis()); + payload.put("value", "10"); + payload.put("timestamp", System.currentTimeMillis()); + payload.put("desc", "无人机左滚"); + + String topic = "/topic/v1/airportDrone/" + sn + "/control"; + context.getMqttClient().sendMessage(topic, payload.toJSONString()); + log.info("左旋指令发送成功: topic={}, payload={}", topic, payload.toJSONString()); + } + + @Override + public CallbackConfig getMethodCallbackConfig(InstructionContext context) { + return null; + } + + @Override + public CallbackConfig getStateCallbackConfig(InstructionContext context) { + return null; + } + + @Override + public long getTimeoutMs() { + return 5000; + } +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengRotateRightInstruction.java b/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengRotateRightInstruction.java new file mode 100644 index 0000000..c13b8c2 --- /dev/null +++ b/src/main/java/com/ruoyi/device/domain/impl/machine/vendor/tuoheng/instruction/TuohengRotateRightInstruction.java @@ -0,0 +1,50 @@ +package com.ruoyi.device.domain.impl.machine.vendor.tuoheng.instruction; + +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.device.domain.impl.machine.instruction.AbstractInstruction; +import com.ruoyi.device.domain.impl.machine.instruction.CallbackConfig; +import com.ruoyi.device.domain.impl.machine.instruction.InstructionContext; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class TuohengRotateRightInstruction extends AbstractInstruction { + + @Override + public String getName() { + return "TUOHENG_ROTATE_RIGHT"; + } + + @Override + public void executeRemoteCall(InstructionContext context) throws Exception { + String sn = context.getSn(); + log.info("发送拓恒无人机右旋指令: sn={}", sn); + + JSONObject payload = new JSONObject(); + payload.put("code", "yaogan"); + payload.put("PWM", 35); + payload.put("yaogan", "11"); + payload.put("messageID", context.getCommandParam("messageID", Long.class) != null ? context.getCommandParam("messageID") : System.currentTimeMillis()); + payload.put("value", "11"); + payload.put("timestamp", System.currentTimeMillis()); + payload.put("desc", "无人机右滚"); + + String topic = "/topic/v1/airportDrone/" + sn + "/control"; + context.getMqttClient().sendMessage(topic, payload.toJSONString()); + log.info("右旋指令发送成功: topic={}, payload={}", topic, payload.toJSONString()); + } + + @Override + public CallbackConfig getMethodCallbackConfig(InstructionContext context) { + return null; + } + + @Override + public CallbackConfig getStateCallbackConfig(InstructionContext context) { + return null; + } + + @Override + public long getTimeoutMs() { + return 5000; + } +} \ No newline at end of file