From 9cf4a6f2f956e090ddad21864df88f8d7d894553 Mon Sep 17 00:00:00 2001 From: stream Date: Wed, 12 Nov 2025 09:07:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A7=A6=E6=8E=A7=E8=8A=82=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cmvr/edge/client/model/EdgeCommonVO.java | 16 +++--- .../java/com/cmvr/test/enums/ActionEnum.java | 3 ++ .../edge/EdgeTouchOperateService.java | 50 +++++++++++++++++++ .../operator/vi/ViPlayOperateService.java | 32 ++++++------ 4 files changed, 79 insertions(+), 22 deletions(-) create mode 100644 cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/edge/EdgeTouchOperateService.java diff --git a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/model/EdgeCommonVO.java b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/model/EdgeCommonVO.java index e76642b..a3771c6 100644 --- a/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/model/EdgeCommonVO.java +++ b/cmvr-iot-api/cmvr-iot-edge/cmvr-iot-grpc-client/src/main/java/com/cmvr/edge/client/model/EdgeCommonVO.java @@ -1,16 +1,20 @@ package com.cmvr.edge.client.model; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import javax.validation.constraints.NotEmpty; + @Data +@ApiModel("边缘系统通用VO") public class EdgeCommonVO { - /** - * 终端ID - */ + + @ApiModelProperty("终端ID") + @NotEmpty(message = "终端ID不能为空") private String terminalId; - /** - * 设备ID - */ + @ApiModelProperty("设备ID") + @NotEmpty(message = "设备ID不能为空") private String deviceId; } diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/enums/ActionEnum.java b/cmvr-iot-test/src/main/java/com/cmvr/test/enums/ActionEnum.java index cdf2c6a..1cc01f0 100644 --- a/cmvr-iot-test/src/main/java/com/cmvr/test/enums/ActionEnum.java +++ b/cmvr-iot-test/src/main/java/com/cmvr/test/enums/ActionEnum.java @@ -43,6 +43,9 @@ public enum ActionEnum { SPEAKER_PLAYAUDIO("EDGE", "SPEAKER_PLAYAUDIO", "播放音频"), CORPUS_PLAY("EDGE", "CORPUS_PLAY", "播放语料"), + // ---------------机械臂--------------- + TOUCH("EDGE", "TOUCH", "触控"), + // 大模型行为 // ---------------获取触控坐标--------------- TOUCH_COORDINATES("LLM", "TOUCH_COORDINATES", "获取触控坐标"), diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/edge/EdgeTouchOperateService.java b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/edge/EdgeTouchOperateService.java new file mode 100644 index 0000000..0719691 --- /dev/null +++ b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/edge/EdgeTouchOperateService.java @@ -0,0 +1,50 @@ +package com.cmvr.test.flow.runtime.operator.edge; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.cmvr.common.exception.GlobalException; +import com.cmvr.edge.client.model.humanoid.EdgeMoveJVO; +import com.cmvr.edge.client.service.EdgeHumanoidRobotService; +import com.cmvr.test.enums.ActionEnum; +import com.cmvr.test.flow.runtime.message.TaskNodeExecuteMessage; +import com.cmvr.test.flow.runtime.message.TaskNodeExecuteResult; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +@RequiredArgsConstructor +public class EdgeTouchOperateService implements EdgeOperateService { + + private final EdgeHumanoidRobotService edgeHumanoidRobotService; + + @Override + public boolean supports(ActionEnum action) { + return action.name().equals("TOUCH"); + } + + @Override + public TaskNodeExecuteResult execute(TaskNodeExecuteMessage message) { + ActionEnum action = message.getAction(); + JSONObject inputParams = message.getInputParams(); + String terminalId = message.getTerminalId(); + String deviceId = inputParams.getString("deviceId"); + String touchParams = inputParams.getString("touchParams"); + + switch (action) { + case TOUCH: { + EdgeMoveJVO edgeMoveJVO = JSON.parseObject(touchParams, EdgeMoveJVO.class); + edgeMoveJVO.setTerminalId(terminalId); + edgeMoveJVO.setDeviceId(deviceId); + edgeHumanoidRobotService.moveJ(edgeMoveJVO); + break; + } + + default: + throw new GlobalException("不支持的触控操作类型: " + action); + } + return TaskNodeExecuteResult.success(); + } + +} diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/vi/ViPlayOperateService.java b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/vi/ViPlayOperateService.java index 7c5073a..cd77a17 100644 --- a/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/vi/ViPlayOperateService.java +++ b/cmvr-iot-test/src/main/java/com/cmvr/test/flow/runtime/operator/vi/ViPlayOperateService.java @@ -40,24 +40,24 @@ public class ViPlayOperateService implements VIOperateService { String deviceId = inputParams.getString("deviceId"); String audioPath = inputParams.getString("audioPath"); String terminalId = message.getTerminalId(); -// log.info("播放语料成功,deviceId={},audioPath={},terminalId={}", deviceId, audioPath, terminalId); -// edgeSpeakerService.playAudio(terminalId, deviceId, audioPath); -// // 等待播放完成 -// while (true) { -// try { -// Thread.sleep(1000); -// } catch (InterruptedException e) { -// throw new RuntimeException(e); -// } -// SpeakerCommand.GetSpeakerStateCommand.Feedback status = edgeSpeakerService.getStatus(terminalId, deviceId); -// boolean isRunning = status.getState().getIsRunning(); -// if (!isRunning) { -// break; -// } -// } + log.info("播放语料成功,deviceId={},audioPath={},terminalId={}", deviceId, audioPath, terminalId); + edgeSpeakerService.playAudio(terminalId, deviceId, audioPath); + // 等待播放完成 + while (true) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + SpeakerCommand.GetSpeakerStateCommand.Feedback status = edgeSpeakerService.getStatus(terminalId, deviceId); + boolean isRunning = status.getState().getIsRunning(); + if (!isRunning) { + break; + } + } // todo 本机测试播放 - playAudio(audioPath); +// playAudio(audioPath); return TaskNodeExecuteResult.success(); }