diff --git a/src/main/java/com/qyft/gd/common/result/CMDResultCode.java b/src/main/java/com/qyft/gd/common/result/CMDResultCode.java index b2294f8..624d224 100644 --- a/src/main/java/com/qyft/gd/common/result/CMDResultCode.java +++ b/src/main/java/com/qyft/gd/common/result/CMDResultCode.java @@ -10,7 +10,7 @@ import java.io.Serializable; @NoArgsConstructor public enum CMDResultCode implements IResultCode, Serializable { SUCCESS("D0000", "执行完毕"), - FAILURE("D0000", "执行失败"); + FAILURE("D1111", "执行失败"); @Override public String getCode() { diff --git a/src/main/java/com/qyft/gd/service/WebSocketServer.java b/src/main/java/com/qyft/gd/config/WebSocketServer.java similarity index 97% rename from src/main/java/com/qyft/gd/service/WebSocketServer.java rename to src/main/java/com/qyft/gd/config/WebSocketServer.java index 264d63d..83626b8 100644 --- a/src/main/java/com/qyft/gd/service/WebSocketServer.java +++ b/src/main/java/com/qyft/gd/config/WebSocketServer.java @@ -1,4 +1,4 @@ -package com.qyft.gd.service; +package com.qyft.gd.config; import jakarta.websocket.*; diff --git a/src/main/java/com/qyft/gd/controller/directive/DirectiveController.java b/src/main/java/com/qyft/gd/controller/directive/DirectiveController.java deleted file mode 100644 index 61ba590..0000000 --- a/src/main/java/com/qyft/gd/controller/directive/DirectiveController.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.qyft.gd.controller.directive; - -import com.qyft.gd.model.dto.directive.DirectiveDto; -import com.qyft.gd.service.DirectiveService; -import com.qyft.gd.system.common.result.Result; -import com.qyft.gd.system.service.UserService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 指令控制器 - */ -@Tag(name = "指令") -@RestController -@RequestMapping("/api/directive") -@RequiredArgsConstructor -@Slf4j -public class DirectiveController { - - @Resource - private DirectiveService directiveService; - - @Operation(summary = "发送指令") - @PostMapping("/sendDirective") - public Result sendDirective(@RequestBody DirectiveDto dto) { - directiveService.sendDirective(dto); - return Result.success(); - } -} \ No newline at end of file diff --git a/src/main/java/com/qyft/gd/model/dto/directive/DirectiveDto.java b/src/main/java/com/qyft/gd/model/dto/directive/DirectiveDto.java deleted file mode 100644 index 6ed7642..0000000 --- a/src/main/java/com/qyft/gd/model/dto/directive/DirectiveDto.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.qyft.gd.model.dto.directive; - -import com.qyft.gd.enums.DirectiveTypeEnum; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -@Schema(name = "指令数据") -@Data -public class DirectiveDto { - - @Schema(description = "指令类型") - private DirectiveTypeEnum type; - - @Schema(description = "指令配置") - private String option; -} diff --git a/src/main/java/com/qyft/gd/model/vo/ExecutionResult.java b/src/main/java/com/qyft/gd/model/vo/ExecutionResult.java index 7aa004f..2f7f400 100644 --- a/src/main/java/com/qyft/gd/model/vo/ExecutionResult.java +++ b/src/main/java/com/qyft/gd/model/vo/ExecutionResult.java @@ -8,6 +8,8 @@ public class ExecutionResult { * 任务id */ private String commandId; + + private String commandName; /** * 执行结果 */ diff --git a/src/main/java/com/qyft/gd/model/vo/WebsocketResult.java b/src/main/java/com/qyft/gd/model/vo/WebsocketResult.java new file mode 100644 index 0000000..6c125c4 --- /dev/null +++ b/src/main/java/com/qyft/gd/model/vo/WebsocketResult.java @@ -0,0 +1,15 @@ +package com.qyft.gd.model.vo; + +import lombok.Data; + +@Data +public class WebsocketResult { + /** + * 推送类型(指令 cmd,报警 warn ,状态 status) + */ + private String type; + /** + * 执行结果 + */ + private ExecutionResult data; +} \ No newline at end of file diff --git a/src/main/java/com/qyft/gd/service/CMDService.java b/src/main/java/com/qyft/gd/service/CMDService.java index 9722ad4..940e66b 100644 --- a/src/main/java/com/qyft/gd/service/CMDService.java +++ b/src/main/java/com/qyft/gd/service/CMDService.java @@ -3,37 +3,155 @@ package com.qyft.gd.service; import cn.hutool.json.JSONUtil; import com.qyft.gd.common.constant.Commands; import com.qyft.gd.common.result.CMDResultCode; +import com.qyft.gd.config.WebSocketServer; import com.qyft.gd.device.service.DeviceService; import com.qyft.gd.model.form.CMDForm; import com.qyft.gd.model.vo.ExecutionResult; -import lombok.RequiredArgsConstructor; +import com.qyft.gd.model.vo.WebsocketResult; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + @Service -@RequiredArgsConstructor public class CMDService { DeviceService deviceService; + Map> commandMap; - public boolean executeCommand(CMDForm cmdForm) { - switch (cmdForm.getCommand()) { - case Commands.UP_TRAY: - upTray(cmdForm); - break; - case Commands.DOWN_TRAY: - break; - default: - return false; - } + @Autowired + public CMDService(DeviceService deviceService) { + this.deviceService = deviceService; + // 初始化命令映射 + this.commandMap = new HashMap<>(); + commandMap.put(Commands.UP_TRAY, this::upTray); + commandMap.put(Commands.DOWN_TRAY, this::downTray); + commandMap.put(Commands.INJECT_FLUID, this::injectFluid); + commandMap.put(Commands.KEEP_HEAT, this::keepHeat); + commandMap.put(Commands.MOVE_TO_ACTION_AREA, this::moveToActionArea); + commandMap.put(Commands.CHECK_ACTION_AREA, this::checkActionArea); + commandMap.put(Commands.SHAKE_UP, this::shakeUp); + commandMap.put(Commands.START_HEAT, this::startHeat); + commandMap.put(Commands.STOP_HEAT, this::stopHeat); + commandMap.put(Commands.TAKE_PHOTO, this::takePhoto); + commandMap.put(Commands.MOVE_TO_UNUSUAL, this::moveToUnusual); + commandMap.put(Commands.MOVE_TO_HEAT_AREA, this::moveToHeatArea); + commandMap.put(Commands.TAKE_OFF_CAP, this::takeOffCap); + commandMap.put(Commands.PUT_BACK_CAP, this::putBackCap); + commandMap.put(Commands.MOVE_MACHINE_ARM, this::moveMachineArm); + commandMap.put(Commands.GET_LIQUID_AMOUNT, this::getLiquidAmount); + commandMap.put(Commands.MOVE_TUBE, this::moveTube); + } + + private Boolean moveTube(CMDForm cmdForm) { + //TODO 执行指令 + return true; + } + + private Boolean getLiquidAmount(CMDForm cmdForm) { + //TODO 执行指令 + return true; + } + + private Boolean moveMachineArm(CMDForm cmdForm) { + //TODO 执行指令 + return true; + } + + private Boolean putBackCap(CMDForm cmdForm) { + //TODO 执行指令 + return true; + } + + private Boolean takeOffCap(CMDForm cmdForm) { + //TODO 执行指令 + return true; + } + + private Boolean moveToHeatArea(CMDForm cmdForm) { + //TODO 执行指令 + return true; + } + + private Boolean moveToUnusual(CMDForm cmdForm) { + //TODO 执行指令 + return true; + } + + private Boolean takePhoto(CMDForm cmdForm) { + //TODO 执行指令 + return true; + } + + private Boolean stopHeat(CMDForm cmdForm) { + //TODO 执行指令 return true; } - private void upTray(CMDForm cmdForm) { + private Boolean startHeat(CMDForm cmdForm) { + //TODO 执行指令 + return true; + } + + private Boolean shakeUp(CMDForm cmdForm) { + //TODO 执行指令 + return true; + } + + private Boolean checkActionArea(CMDForm cmdForm) { + //TODO 执行指令 + return true; + } + + private Boolean moveToActionArea(CMDForm cmdForm) { + //TODO 执行指令 + return true; + } + + private Boolean keepHeat(CMDForm cmdForm) { + //TODO 执行指令 + return true; + } + + private Boolean injectFluid(CMDForm cmdForm) { + //TODO 执行指令 + return true; + } + + private boolean downTray(CMDForm cmdForm) { + //TODO 执行指令 + return false; + } + + private boolean upTray(CMDForm cmdForm) { + //TODO 执行指令 + return true; + } + + public boolean executeCommand(CMDForm cmdForm) { + String commandName = cmdForm.getCommand(); + Function command = commandMap.get(commandName); + if (command == null) { + return false; + } + WebsocketResult websocketResult = new WebsocketResult(); + websocketResult.setType("cmd"); ExecutionResult executionResult = new ExecutionResult(); executionResult.setCommandId(cmdForm.getCommandId()); - executionResult.setStatus(CMDResultCode.SUCCESS.getCode()); - executionResult.setMessage(CMDResultCode.SUCCESS.getMsg()); - WebSocketServer.sendMessageToClients(JSONUtil.toJsonStr(executionResult)); + executionResult.setCommandName(cmdForm.getCommand()); + boolean result =command.apply(cmdForm); + if(result) { + executionResult.setStatus(CMDResultCode.SUCCESS.getCode()); + executionResult.setMessage(CMDResultCode.SUCCESS.getMsg()); + }else { + executionResult.setStatus(CMDResultCode.FAILURE.getCode()); + executionResult.setMessage(CMDResultCode.FAILURE.getMsg()); + } + websocketResult.setData(executionResult); + // 发送消息给客户端 + WebSocketServer.sendMessageToClients(JSONUtil.toJsonStr(websocketResult)); + return true; } - } diff --git a/src/main/java/com/qyft/gd/service/DirectiveService.java b/src/main/java/com/qyft/gd/service/DirectiveService.java deleted file mode 100644 index 5af682b..0000000 --- a/src/main/java/com/qyft/gd/service/DirectiveService.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.qyft.gd.service; - - -import com.qyft.gd.model.dto.directive.DirectiveDto; - -public interface DirectiveService { - - void sendDirective(DirectiveDto dto); -} diff --git a/src/main/java/com/qyft/gd/service/impl/DirectiveServiceImpl.java b/src/main/java/com/qyft/gd/service/impl/DirectiveServiceImpl.java deleted file mode 100644 index 114734a..0000000 --- a/src/main/java/com/qyft/gd/service/impl/DirectiveServiceImpl.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.qyft.gd.service.impl; - -import com.qyft.gd.model.dto.directive.DirectiveDto; -import com.qyft.gd.service.DirectiveService; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -/** - * 指令实现类 - */ -@Service -@RequiredArgsConstructor -public class DirectiveServiceImpl implements DirectiveService { - @Override - public void sendDirective(DirectiveDto dto) { - // 发送指令 - } -}