Browse Source

feat:指令结果socket推送

master
guoapeng 6 months ago
parent
commit
199213565c
  1. 2
      src/main/java/com/qyft/gd/controller/CMDController.java
  2. 61
      src/main/java/com/qyft/gd/service/CMDService.java
  3. 3
      src/main/java/com/qyft/gd/service/WebSocketService.java

2
src/main/java/com/qyft/gd/controller/CMDController.java

@ -34,7 +34,7 @@ public class CMDController {
} }
log.info("接收到指令: {}", JSONUtil.toJsonStr(cmdForm)); log.info("接收到指令: {}", JSONUtil.toJsonStr(cmdForm));
if (cmdService.executeCommand(cmdForm)) { if (cmdService.executeCommand(cmdForm)) {
return Result.success(commandId);
return Result.success(cmdForm.getCommandId());
} else { } else {
return Result.failed("无效命令"); return Result.failed("无效命令");
} }

61
src/main/java/com/qyft/gd/service/CMDService.java

@ -3,24 +3,24 @@ package com.qyft.gd.service;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.qyft.gd.common.constant.Commands; import com.qyft.gd.common.constant.Commands;
import com.qyft.gd.common.result.CMDResultCode; import com.qyft.gd.common.result.CMDResultCode;
import com.qyft.gd.config.WebSocketServer;
import com.qyft.gd.device.service.DeviceService; import com.qyft.gd.device.service.DeviceService;
import com.qyft.gd.device.service.DeviceStateService; import com.qyft.gd.device.service.DeviceStateService;
import com.qyft.gd.model.form.CMDForm; import com.qyft.gd.model.form.CMDForm;
import com.qyft.gd.model.vo.ExecutionResult; import com.qyft.gd.model.vo.ExecutionResult;
import com.qyft.gd.model.vo.WebsocketResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Supplier; import java.util.function.Supplier;
@Slf4j
@Service @Service
public class CMDService { public class CMDService {
DeviceService deviceService; DeviceService deviceService;
DeviceStateService deviceStateService; DeviceStateService deviceStateService;
WebSocketService webSocketService;
Map<String, Function<CMDForm, Boolean>> commandMap; Map<String, Function<CMDForm, Boolean>> commandMap;
@Autowired @Autowired
@ -52,7 +52,8 @@ public class CMDService {
private Boolean moveMachineArm(CMDForm cmdForm) { private Boolean moveMachineArm(CMDForm cmdForm) {
List<Supplier<Boolean>> cmdList = new ArrayList<>(); List<Supplier<Boolean>> cmdList = new ArrayList<>();
cmdList.add(() -> deviceService.moveRailArmToPoint(11,22,33)); cmdList.add(() -> deviceService.moveRailArmToPoint(11,22,33));
return run(cmdList);
initExecutorThread(cmdList, cmdForm);
return true;
} }
// 装回盖子 // 装回盖子
private Boolean putBackCap(CMDForm cmdForm) { private Boolean putBackCap(CMDForm cmdForm) {
@ -61,7 +62,8 @@ public class CMDService {
cmdList.add(() -> deviceService.openClaw()); cmdList.add(() -> deviceService.openClaw());
cmdList.add(() -> deviceService.moveRailArmToPoint(4,54,6)); cmdList.add(() -> deviceService.moveRailArmToPoint(4,54,6));
cmdList.add(() -> deviceService.closeClaw()); cmdList.add(() -> deviceService.closeClaw());
return run(cmdList);
initExecutorThread(cmdList, cmdForm);
return true;
} }
// 取试管架盖 // 取试管架盖
private Boolean takeOffCap(CMDForm cmdForm) { private Boolean takeOffCap(CMDForm cmdForm) {
@ -69,25 +71,29 @@ public class CMDService {
cmdList.add(() -> deviceService.moveRailArmToPoint(13,42,53)); cmdList.add(() -> deviceService.moveRailArmToPoint(13,42,53));
cmdList.add(() -> deviceService.openClaw()); cmdList.add(() -> deviceService.openClaw());
cmdList.add(() -> deviceService.moveRailArmToPoint(4,5,6)); cmdList.add(() -> deviceService.moveRailArmToPoint(4,5,6));
return run(cmdList);
initExecutorThread(cmdList, cmdForm);
return true;
} }
// 拍照 // 拍照
private Boolean takePhoto(CMDForm cmdForm) { private Boolean takePhoto(CMDForm cmdForm) {
List<Supplier<Boolean>> cmdList = new ArrayList<>(); List<Supplier<Boolean>> cmdList = new ArrayList<>();
cmdList.add(() -> deviceService.takePhoto()); cmdList.add(() -> deviceService.takePhoto());
return run(cmdList);
initExecutorThread(cmdList, cmdForm);
return true;
} }
// 停止加热 // 停止加热
private Boolean stopHeat(CMDForm cmdForm) { private Boolean stopHeat(CMDForm cmdForm) {
List<Supplier<Boolean>> cmdList = new ArrayList<>(); List<Supplier<Boolean>> cmdList = new ArrayList<>();
cmdList.add(() -> deviceService.stopHeating((String) cmdForm.getParams().get("areaId"))); cmdList.add(() -> deviceService.stopHeating((String) cmdForm.getParams().get("areaId")));
return run(cmdList);
initExecutorThread(cmdList, cmdForm);
return true;
} }
// 开始加热 // 开始加热
private Boolean startHeat(CMDForm cmdForm) { private Boolean startHeat(CMDForm cmdForm) {
List<Supplier<Boolean>> cmdList = new ArrayList<>(); List<Supplier<Boolean>> cmdList = new ArrayList<>();
cmdList.add(() -> deviceService.startHeating((String) cmdForm.getParams().get("areaId"),(Double) cmdForm.getParams().get("temperature"))); cmdList.add(() -> deviceService.startHeating((String) cmdForm.getParams().get("areaId"),(Double) cmdForm.getParams().get("temperature")));
return run(cmdList);
initExecutorThread(cmdList, cmdForm);
return true;
} }
// 开始摇匀 // 开始摇匀
private Boolean startShakeUp(CMDForm cmdForm) { private Boolean startShakeUp(CMDForm cmdForm) {
@ -104,13 +110,15 @@ public class CMDService {
List<Supplier<Boolean>> cmdList = new ArrayList<>(); List<Supplier<Boolean>> cmdList = new ArrayList<>();
cmdList.add(() -> deviceService.startShaking()); cmdList.add(() -> deviceService.startShaking());
cmdList.add(() -> deviceService.setShakingSpeed((Integer) cmdForm.getParams().get("speed"))); cmdList.add(() -> deviceService.setShakingSpeed((Integer) cmdForm.getParams().get("speed")));
return run(cmdList);
initExecutorThread(cmdList, cmdForm);
return true;
} }
// 结束摇匀 // 结束摇匀
private Boolean stopShakeUp(CMDForm cmdForm) { private Boolean stopShakeUp(CMDForm cmdForm) {
List<Supplier<Boolean>> cmdList = new ArrayList<>(); List<Supplier<Boolean>> cmdList = new ArrayList<>();
cmdList.add(() -> deviceService.stopShaking()); cmdList.add(() -> deviceService.stopShaking());
return run(cmdList);
initExecutorThread(cmdList, cmdForm);
return true;
} }
// 移至加液 // 移至加液
@ -125,7 +133,8 @@ public class CMDService {
cmdList.add(() -> deviceService.openClaw()); cmdList.add(() -> deviceService.openClaw());
cmdList.add(() -> deviceService.moveRailArmToPoint(4,5,6)); cmdList.add(() -> deviceService.moveRailArmToPoint(4,5,6));
cmdList.add(() -> deviceService.closeClaw()); cmdList.add(() -> deviceService.closeClaw());
return run(cmdList);
initExecutorThread(cmdList, cmdForm);
return true;
} }
// 加液 // 加液
@ -136,30 +145,46 @@ public class CMDService {
Map<String, Object> params = cmdForm.getParams(); Map<String, Object> params = cmdForm.getParams();
cmdList.add(() -> deviceService.moveLiquidArmToPoint(1,2,3)); cmdList.add(() -> deviceService.moveLiquidArmToPoint(1,2,3));
cmdList.add(() -> deviceService.addLiquid((String) params.get("pumpId"), ((Integer)params.get("volume")))); cmdList.add(() -> deviceService.addLiquid((String) params.get("pumpId"), ((Integer)params.get("volume"))));
return run(cmdList);
initExecutorThread(cmdList, cmdForm);
return true;
} }
// 放下托盘 // 放下托盘
private boolean downTray(CMDForm cmdForm) { private boolean downTray(CMDForm cmdForm) {
List<Supplier<Boolean>> cmdList = new ArrayList<>(); List<Supplier<Boolean>> cmdList = new ArrayList<>();
cmdList.add(() -> deviceService.lowerTray((String) cmdForm.getParams().get("heaterId"))); cmdList.add(() -> deviceService.lowerTray((String) cmdForm.getParams().get("heaterId")));
return run(cmdList);
initExecutorThread(cmdList, cmdForm);
return true;
} }
// 抬起托盘 // 抬起托盘
private boolean upTray(CMDForm cmdForm) { private boolean upTray(CMDForm cmdForm) {
List<Supplier<Boolean>> cmdList = new ArrayList<>(); List<Supplier<Boolean>> cmdList = new ArrayList<>();
cmdList.add(() -> deviceService.raiseTray((String) cmdForm.getParams().get("heaterId"))); cmdList.add(() -> deviceService.raiseTray((String) cmdForm.getParams().get("heaterId")));
return run(cmdList);
initExecutorThread(cmdList, cmdForm);
return true;
}
private void initExecutorThread(List<Supplier<Boolean>> cmdList, CMDForm cmdForm) {
new Thread(() -> run(cmdList, cmdForm)).start();
} }
private boolean run(List<Supplier<Boolean>> cmdList) {
private void run(List<Supplier<Boolean>> cmdList, CMDForm cmdForm) {
ExecutionResult executionResult = new ExecutionResult();
executionResult.setCommandId(cmdForm.getCommandId());
executionResult.setCommandName(cmdForm.getCommand());
// 执行所有命令 // 执行所有命令
for (Supplier<Boolean> command : cmdList) { for (Supplier<Boolean> command : cmdList) {
boolean result = command.get(); boolean result = command.get();
if (!result) { if (!result) {
return false;
log.error("指令执行异常: {}", JSONUtil.toJsonStr(cmdForm));
executionResult.setStatus(CMDResultCode.FAILURE.getCode());
executionResult.setMessage(CMDResultCode.FAILURE.getMsg());
webSocketService.pushMsg("cmd", executionResult);
return;
} }
} }
return true;
executionResult.setStatus(CMDResultCode.SUCCESS.getCode());
executionResult.setMessage(CMDResultCode.SUCCESS.getMsg());
webSocketService.pushMsg("cmd", executionResult);
} }
public boolean executeCommand(CMDForm cmdForm) { public boolean executeCommand(CMDForm cmdForm) {

3
src/main/java/com/qyft/gd/service/WebSocketService.java

@ -7,13 +7,12 @@ import org.springframework.stereotype.Service;
@Service @Service
public class WebSocketService { public class WebSocketService {
public boolean pushMsg(String type, Object result) {
public void pushMsg(String type, Object result) {
WebsocketResult websocketResult = new WebsocketResult(); WebsocketResult websocketResult = new WebsocketResult();
websocketResult.setType(type); websocketResult.setType(type);
websocketResult.setData(result); websocketResult.setData(result);
// 发送消息给客户端 // 发送消息给客户端
WebSocketServer.sendMessageToClients(JSONUtil.toJsonStr(websocketResult)); WebSocketServer.sendMessageToClients(JSONUtil.toJsonStr(websocketResult));
return true;
} }
} }
Loading…
Cancel
Save