Browse Source

feat: 设备任务完成推送

master
guoapeng 5 months ago
parent
commit
7c6546c804
  1. 2
      src/main/java/com/qyft/ms/app/common/constant/WebSocketMessageType.java
  2. 99
      src/main/java/com/qyft/ms/app/service/CMDService.java
  3. 2
      src/main/java/com/qyft/ms/device/handler/DeviceMessageHandler.java

2
src/main/java/com/qyft/ms/app/common/constant/WebSocketMessageType.java

@ -8,7 +8,7 @@ public class WebSocketMessageType {
/**
* 设备报警
*/
public static final String ALARM = "alarm";
public static final String WARN = "warn";
/**
* 设备指令反馈
*/

99
src/main/java/com/qyft/ms/app/service/CMDService.java

@ -9,6 +9,9 @@ import com.qyft.ms.app.model.entity.OperationLog;
import com.qyft.ms.app.model.entity.SysSettings;
import com.qyft.ms.app.model.form.CMDForm;
import com.qyft.ms.app.model.vo.ExecutionResult;
import com.qyft.ms.device.controller.DeviceController;
import com.qyft.ms.device.model.bo.DeviceStatus;
import com.qyft.ms.device.service.DeviceStatusService;
import com.qyft.ms.device.service.DeviceTcpCMDService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -30,6 +33,8 @@ public class CMDService {
private final OperationLogService operationLogService;
private final MatrixCraftService matrixCraftService;
private final ISysSettingsService sysSettingsService;
private final DeviceStatusService deviceStatusService;
private volatile boolean running = true;
private void initExecutorThread(List<Supplier<Boolean>> cmdList, CMDForm form) {
@ -185,6 +190,24 @@ public class CMDService {
if (position == null) {
return "position参数错误";
}
// 设置指定轴的电机的运行速度
int movementSpeed = (Integer) params.get("movementSpeed");
cmdList.add(() -> deviceTcpCMDService.setMotorSpeed("x", movementSpeed));
cmdList.add(() -> deviceTcpCMDService.setMotorSpeed("y", movementSpeed));
cmdList.add(() -> deviceTcpCMDService.setMotorSpeed("z", 10));
// 回到原点
cmdList.add(() -> deviceTcpCMDService.moveMotorToPosition("Z", 5));
cmdList.add(() -> deviceTcpCMDService.moveMotorToPosition("X", 5));
cmdList.add(() -> deviceTcpCMDService.moveMotorToPosition("Y", 5));
cmdList.add(() -> deviceTcpCMDService.motorMoveToHome("Z"));
cmdList.add(() -> deviceTcpCMDService.motorMoveToHome("X"));
cmdList.add(() -> deviceTcpCMDService.motorMoveToHome("Y"));
for (int i = 0; i < position.size(); i++) {
Map<String, Integer> p = position.get(i);
@ -216,12 +239,8 @@ public class CMDService {
}
// 将三通阀转至喷涂管路
cmdList.add(deviceTcpCMDService::switchThreeWayValveToSpray);
// 设置指定轴的电机的运行速度
int movementSpeed = (Integer) params.get("movementSpeed");
cmdList.add(() -> deviceTcpCMDService.setMotorSpeed("x", movementSpeed));
cmdList.add(() -> deviceTcpCMDService.setMotorSpeed("y", movementSpeed));
cmdList.add(() -> deviceTcpCMDService.setMotorSpeed("z", 10));
cmdList.add(() -> deviceTcpCMDService.switchThreeWayValve("clear_spray"));
// 移动到指定高度(位置)
int height = (Integer) params.get("height");
@ -291,15 +310,58 @@ public class CMDService {
});
cmdList.add(() -> {
sysSettingsService.updateWorkStatus("idle");
Map<String, String> result = new HashMap<>();
result.put("code", "spray_complete");
result.put("msg", "喷涂任务已完成");
webSocketService.pushMsg(WebSocketMessageType.WARN, result);
return true;
});
initExecutorThread(cmdList, form);
new Thread(() -> {
running = true;
ExecutionResult executionResult = new ExecutionResult();
executionResult.setCommandId(form.getCommandId());
executionResult.setCommandName(form.getCommandName());
// 执行所有命令
for (Supplier<Boolean> command : cmdList) {
boolean result = command.get();
if(!running) {
log.error("指令线程停止: {}", JSONUtil.toJsonStr(form));
executionResult.setStatus(CMDResultCode.FAILURE.getCode());
executionResult.setMessage(CMDResultCode.FAILURE.getMsg());
webSocketService.pushMsg(WebSocketMessageType.CMD, executionResult);
return;
}
// try {
// Thread.sleep(5000);
// } catch (InterruptedException e) {
// throw new RuntimeException(e);
// }
if (!result) {
log.error("指令执行异常: {}", JSONUtil.toJsonStr(form));
executionResult.setStatus(CMDResultCode.FAILURE.getCode());
executionResult.setMessage(CMDResultCode.FAILURE.getMsg());
webSocketService.pushMsg(WebSocketMessageType.CMD, executionResult);
return;
}
}
log.info("指令执行成功: {}", JSONUtil.toJsonStr(form));
executionResult.setStatus(CMDResultCode.SUCCESS.getCode());
executionResult.setMessage(CMDResultCode.SUCCESS.getMsg());
webSocketService.pushMsg(WebSocketMessageType.CMD, executionResult);
}).start();
return "ok";
}
// 结束喷涂
public boolean stopWork(CMDForm form) {
List<Supplier<Boolean>> cmdList = new ArrayList<>();
cmdList.add(() -> {
running = false;
return true;
});
// 停止喷涂
cmdList.add(deviceTcpCMDService::turnOffSyringePump);
// 关闭高压
@ -470,6 +532,19 @@ public class CMDService {
cmdList.add(() -> deviceTcpCMDService.startDehumidify(humidity));
cmdList.add(() -> {
sysSettingsService.updateTargetHumidity(humidity);
while (true) {
double targetHumidity = sysSettingsService.getTargetHumidity();
DeviceStatus deviceStatus = deviceStatusService.getDeviceStatus();
if (deviceStatus.getHumidity()<=targetHumidity ) {
deviceTcpCMDService.controlValve("Dehumidification", false);
sysSettingsService.updateWorkStatus("idle");
Map<String, String> result = new HashMap<>();
result.put("code", "dehumidify_complete");
result.put("msg", "已达到目标湿度");
webSocketService.pushMsg(WebSocketMessageType.WARN, result);
break;
}
}
return true;
});
@ -528,11 +603,11 @@ public class CMDService {
for (Supplier<Boolean> command : cmdList) {
boolean result = command.get();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// try {
// Thread.sleep(5000);
// } catch (InterruptedException e) {
// throw new RuntimeException(e);
// }
if (!result) {
log.error("指令执行异常: {}", JSONUtil.toJsonStr(form));
executionResult.setStatus(CMDResultCode.FAILURE.getCode());

2
src/main/java/com/qyft/ms/device/handler/DeviceMessageHandler.java

@ -44,7 +44,7 @@ public class DeviceMessageHandler extends ChannelInboundHandlerAdapter {
} else if (TcpMessageType.ALARM.equals(jsonRpcResponse.getType())) {//设备报警
log.error("设备报警: {}", serverMsg);
DeviceAlarm deviceAlarm = JSONUtil.toBean(jsonRpcResponse.getData(), DeviceAlarm.class);
webSocketService.pushMsg(WebSocketMessageType.ALARM, deviceAlarm);
webSocketService.pushMsg(WebSocketMessageType.WARN, deviceAlarm);
} else if (TcpMessageType.FEEDBACK.equals(jsonRpcResponse.getType())) {//设备指令反馈
DeviceFeedback deviceFeedback = JSONUtil.toBean(jsonRpcResponse.getData(), DeviceFeedback.class);
this.handleTcpResponse(deviceFeedback);

Loading…
Cancel
Save