Browse Source

feat:新增x、y、z回原点业务指令并实现,实现推入退出业务指令

master
白凤吉 5 months ago
parent
commit
9ca7b463d2
  1. BIN
      matrix-spray.db
  2. 13
      sql/init.sql
  3. 119
      src/main/java/com/qyft/ms/app/common/command/DeviceCommandGenerator.java
  4. 59
      src/main/java/com/qyft/ms/app/handler/impl/MotorXToHome.java
  5. 59
      src/main/java/com/qyft/ms/app/handler/impl/MotorYToHome.java
  6. 59
      src/main/java/com/qyft/ms/app/handler/impl/MotorZToHome.java
  7. 6
      src/main/java/com/qyft/ms/app/handler/impl/NozzlePipelinePreFill.java
  8. 8
      src/main/java/com/qyft/ms/app/handler/impl/NozzlePipelineWash.java
  9. 36
      src/main/java/com/qyft/ms/app/handler/impl/SlideTrayIn.java
  10. 34
      src/main/java/com/qyft/ms/app/handler/impl/SlideTrayOut.java
  11. 16
      src/main/java/com/qyft/ms/app/model/entity/Position.java
  12. 2
      src/main/resources/application.yml

BIN
matrix-spray.db

13
sql/init.sql

@ -101,3 +101,16 @@ VALUES (1, NULL, '玻片位置', 'slide_position', NULL),
(12, 10, 'y轴速度', 'y_speed', 10),
(13, 10, 'z轴速度', 'z_speed', 10),
(14, NULL, '废液桶位置','waste_liquor', '173.08,75,70' );
-- 位置表,用来存储设备固定点位
CREATE TABLE IF NOT EXISTS position (
id INTEGER PRIMARY KEY AUTOINCREMENT,
point_name TEXT NOT NULL,
x REAL NOT NULL,
y REAL NOT NULL,
z REAL NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

119
src/main/java/com/qyft/ms/app/common/command/DeviceCommandGenerator.java

@ -3,6 +3,9 @@ package com.qyft.ms.app.common.command;
import com.qyft.ms.app.model.bo.CMDToDevice;
import java.util.HashMap;
import java.util.Map;
/**
* 生成给设备发送的指令
*/
@ -10,10 +13,10 @@ public class DeviceCommandGenerator {
/**
* {
* cmdName:'getInfoCmd'
* cmdId:'',
* device:'device',
* action:'get'
* cmdName:'getInfoCmd'
* cmdId:'',
* device:'device',
* action:'get'
* }
*/
public static CMDToDevice device_status_get() {
@ -29,10 +32,10 @@ public class DeviceCommandGenerator {
/**
* 获取设备当前湿度
* {
* cmdName:'getInfoCmd'
* cmdId:'',
* device:'temperature',
* action:'get'
* cmdName:'getInfoCmd'
* cmdId:'',
* device:'temperature',
* action:'get'
* }
*/
public static CMDToDevice humidity_get() {
@ -48,10 +51,10 @@ public class DeviceCommandGenerator {
/**
* 开启除湿阀
* {
* cmdName:'controlCmd'
* cmdId:'',
* device:'dehumidifier_valve',
* action:'open|close'
* cmdName:'controlCmd'
* cmdId:'',
* device:'dehumidifier_valve',
* action:'open|close'
* }
*/
public static CMDToDevice dehumidifier_valve_control(String action) {
@ -97,13 +100,97 @@ public class DeviceCommandGenerator {
return "matrix_spray_continue";
}
public static String slide_tray_in() {
return "slide_tray_in";
/**
* 推入玻片托盘
* {
* cmdName:'controlMotorCmd'
* cmdId:'',
* device:'x',
* action:'move',
* param:{
* current:'',//电流
* direction:'forward|backward',
* position:'根据坐标计算',
* speed:''//移动速度
* }
* }
*/
public static CMDToDevice slide_tray_in(int current, int position, int speed) {
int cmdId = CyclicNumberGenerator.getInstance().generateNumber();
CMDToDevice cmdToDevice = new CMDToDevice();
cmdToDevice.setCmdId(cmdId);
cmdToDevice.setCmdName("controlMotorCmd");
cmdToDevice.setDevice("y");
cmdToDevice.setAction("move");
Map<String, Object> params = new HashMap<>();
params.put("current",current );
params.put("direction", "forward");
params.put("position", position);
params.put("speed", speed);
cmdToDevice.setParam(params);
return cmdToDevice;
}
public static String slide_tray_out() {
return "slide_tray_out";
/**
* 推入玻片托盘
* {
* cmdName:'controlMotorCmd'
* cmdId:'',
* device:'x',
* action:'move',
* param:{
* current:'',//电流
* direction:'forward|backward',
* position:'根据坐标计算',
* speed:''//移动速度
* }
* }
*/
public static CMDToDevice slide_tray_out(int current, int position, int speed) {
int cmdId = CyclicNumberGenerator.getInstance().generateNumber();
CMDToDevice cmdToDevice = new CMDToDevice();
cmdToDevice.setCmdId(cmdId);
cmdToDevice.setCmdName("controlMotorCmd");
cmdToDevice.setDevice("y");
cmdToDevice.setAction("move");
Map<String, Object> params = new HashMap<>();
params.put("current",current );
params.put("direction", "forward");
params.put("position", position);
params.put("speed", speed);
cmdToDevice.setParam(params);
return cmdToDevice;
}
public static CMDToDevice motor_x_to_home() {
int cmdId = CyclicNumberGenerator.getInstance().generateNumber();
CMDToDevice cmdToDevice = new CMDToDevice();
cmdToDevice.setCmdId(cmdId);
cmdToDevice.setCmdName("controlMotorCmd");
cmdToDevice.setDevice("x");
cmdToDevice.setAction("origin");
return cmdToDevice;
}
public static CMDToDevice motor_y_to_home() {
int cmdId = CyclicNumberGenerator.getInstance().generateNumber();
CMDToDevice cmdToDevice = new CMDToDevice();
cmdToDevice.setCmdId(cmdId);
cmdToDevice.setCmdName("controlMotorCmd");
cmdToDevice.setDevice("y");
cmdToDevice.setAction("origin");
return cmdToDevice;
}
public static CMDToDevice motor_z_to_home() {
int cmdId = CyclicNumberGenerator.getInstance().generateNumber();
CMDToDevice cmdToDevice = new CMDToDevice();
cmdToDevice.setCmdId(cmdId);
cmdToDevice.setCmdName("controlMotorCmd");
cmdToDevice.setDevice("z");
cmdToDevice.setAction("origin");
return cmdToDevice;
}
}

59
src/main/java/com/qyft/ms/app/handler/impl/MotorXToHome.java

@ -0,0 +1,59 @@
package com.qyft.ms.app.handler.impl;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.qyft.ms.app.common.annotation.CommandMapping;
import com.qyft.ms.app.common.command.CommandFuture;
import com.qyft.ms.app.common.command.CurrentSendCmdMapInstance;
import com.qyft.ms.app.common.command.DeviceCommandGenerator;
import com.qyft.ms.app.common.command.FrontCommandAck;
import com.qyft.ms.app.common.constant.CommandStatus;
import com.qyft.ms.app.handler.CommandHandler;
import com.qyft.ms.app.model.bo.CMDToDevice;
import com.qyft.ms.app.model.form.CMDFormV2;
import com.qyft.ms.device.client.TcpClient;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
/**
* x轴回原点
*/
@Slf4j
@Component
@RequiredArgsConstructor
@Async("asyncExecutor")
@CommandMapping("motor_x_to_home")//业务指令注解
public class MotorXToHome implements CommandHandler {
private final TcpClient deviceClient;
@Override
public void handle(CMDFormV2 cmdForm, ResponseBodyEmitter emitter) throws Exception {
String frontCmdId = cmdForm.getCmdId();
String frontCmdName = cmdForm.getCmdName();
//向前端发送接收到指令
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON);
CMDToDevice motorXToHomeCmdToDevice = DeviceCommandGenerator.motor_x_to_home();//生成指令 回原点
CommandFuture motorXToHomeCmdToDeviceFuture = new CommandFuture();
motorXToHomeCmdToDeviceFuture.setCmdToDevice(motorXToHomeCmdToDevice);
Integer toDeviceCmdId = motorXToHomeCmdToDevice.getCmdId();
CurrentSendCmdMapInstance.getInstance().putCommand(toDeviceCmdId, motorXToHomeCmdToDeviceFuture);//将指令放入map
deviceClient.sendToJSON(motorXToHomeCmdToDevice); //发送指令给设备
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.SEND, "已向设备发送了x轴回原点指令:" + JSONUtil.toJsonStr(motorXToHomeCmdToDevice)), MediaType.APPLICATION_JSON);
motorXToHomeCmdToDeviceFuture.waitForContinue();//等待设备的反馈
JSONObject deviceResult = motorXToHomeCmdToDeviceFuture.getCallbackResult();//拿到设备返回结果
CurrentSendCmdMapInstance.getInstance().removeCommand(toDeviceCmdId);//将指令从map中删除
if (motorXToHomeCmdToDeviceFuture.isReceived()) {
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RESULT, "x轴回原点指令设备反馈:" + JSONUtil.toJsonStr(deviceResult)), MediaType.APPLICATION_JSON);
} else {
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "x轴回原点指令没有响应:" + JSONUtil.toJsonStr(deviceResult)), MediaType.APPLICATION_JSON);
}
}
}

59
src/main/java/com/qyft/ms/app/handler/impl/MotorYToHome.java

@ -0,0 +1,59 @@
package com.qyft.ms.app.handler.impl;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.qyft.ms.app.common.annotation.CommandMapping;
import com.qyft.ms.app.common.command.CommandFuture;
import com.qyft.ms.app.common.command.CurrentSendCmdMapInstance;
import com.qyft.ms.app.common.command.DeviceCommandGenerator;
import com.qyft.ms.app.common.command.FrontCommandAck;
import com.qyft.ms.app.common.constant.CommandStatus;
import com.qyft.ms.app.handler.CommandHandler;
import com.qyft.ms.app.model.bo.CMDToDevice;
import com.qyft.ms.app.model.form.CMDFormV2;
import com.qyft.ms.device.client.TcpClient;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
/**
* z轴回原点
*/
@Slf4j
@Component
@RequiredArgsConstructor
@Async("asyncExecutor")
@CommandMapping("motor_y_to_home")//业务指令注解
public class MotorYToHome implements CommandHandler {
private final TcpClient deviceClient;
@Override
public void handle(CMDFormV2 cmdForm, ResponseBodyEmitter emitter) throws Exception {
String frontCmdId = cmdForm.getCmdId();
String frontCmdName = cmdForm.getCmdName();
//向前端发送接收到指令
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON);
CMDToDevice motorYToHomeCmdToDevice = DeviceCommandGenerator.motor_y_to_home();//生成指令 回原点
CommandFuture motorYToHomeCmdToDeviceFuture = new CommandFuture();
motorYToHomeCmdToDeviceFuture.setCmdToDevice(motorYToHomeCmdToDevice);
Integer toDeviceCmdId = motorYToHomeCmdToDevice.getCmdId();
CurrentSendCmdMapInstance.getInstance().putCommand(toDeviceCmdId, motorYToHomeCmdToDeviceFuture);//将指令放入map
deviceClient.sendToJSON(motorYToHomeCmdToDevice); //发送指令给设备
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.SEND, "已向设备发送了y轴回原点指令:" + JSONUtil.toJsonStr(motorYToHomeCmdToDevice)), MediaType.APPLICATION_JSON);
motorYToHomeCmdToDeviceFuture.waitForContinue();//等待设备的反馈
JSONObject deviceResult = motorYToHomeCmdToDeviceFuture.getCallbackResult();//拿到设备返回结果
CurrentSendCmdMapInstance.getInstance().removeCommand(toDeviceCmdId);//将指令从map中删除
if (motorYToHomeCmdToDeviceFuture.isReceived()) {
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RESULT, "y轴回原点指令设备反馈:" + JSONUtil.toJsonStr(deviceResult)), MediaType.APPLICATION_JSON);
} else {
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "y轴回原点指令没有响应:" + JSONUtil.toJsonStr(deviceResult)), MediaType.APPLICATION_JSON);
}
}
}

59
src/main/java/com/qyft/ms/app/handler/impl/MotorZToHome.java

@ -0,0 +1,59 @@
package com.qyft.ms.app.handler.impl;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.qyft.ms.app.common.annotation.CommandMapping;
import com.qyft.ms.app.common.command.CommandFuture;
import com.qyft.ms.app.common.command.CurrentSendCmdMapInstance;
import com.qyft.ms.app.common.command.DeviceCommandGenerator;
import com.qyft.ms.app.common.command.FrontCommandAck;
import com.qyft.ms.app.common.constant.CommandStatus;
import com.qyft.ms.app.handler.CommandHandler;
import com.qyft.ms.app.model.bo.CMDToDevice;
import com.qyft.ms.app.model.form.CMDFormV2;
import com.qyft.ms.device.client.TcpClient;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
/**
* z轴回原点
*/
@Slf4j
@Component
@RequiredArgsConstructor
@Async("asyncExecutor")
@CommandMapping("motor_z_to_home")//业务指令注解
public class MotorZToHome implements CommandHandler {
private final TcpClient deviceClient;
@Override
public void handle(CMDFormV2 cmdForm, ResponseBodyEmitter emitter) throws Exception {
String frontCmdId = cmdForm.getCmdId();
String frontCmdName = cmdForm.getCmdName();
//向前端发送接收到指令
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON);
CMDToDevice motorZToHomeCmdToDevice = DeviceCommandGenerator.motor_z_to_home();//生成指令 回原点
CommandFuture motorZToHomeCmdToDeviceFuture = new CommandFuture();
motorZToHomeCmdToDeviceFuture.setCmdToDevice(motorZToHomeCmdToDevice);
Integer toDeviceCmdId = motorZToHomeCmdToDevice.getCmdId();
CurrentSendCmdMapInstance.getInstance().putCommand(toDeviceCmdId, motorZToHomeCmdToDeviceFuture);//将指令放入map
deviceClient.sendToJSON(motorZToHomeCmdToDevice); //发送指令给设备
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.SEND, "已向设备发送了z轴回原点指令:" + JSONUtil.toJsonStr(motorZToHomeCmdToDevice)), MediaType.APPLICATION_JSON);
motorZToHomeCmdToDeviceFuture.waitForContinue();//等待设备的反馈
JSONObject deviceResult = motorZToHomeCmdToDeviceFuture.getCallbackResult();//拿到设备返回结果
CurrentSendCmdMapInstance.getInstance().removeCommand(toDeviceCmdId);//将指令从map中删除
if (motorZToHomeCmdToDeviceFuture.isReceived()) {
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RESULT, "z轴回原点指令设备反馈:" + JSONUtil.toJsonStr(deviceResult)), MediaType.APPLICATION_JSON);
} else {
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "z轴回原点指令没有响应:" + JSONUtil.toJsonStr(deviceResult)), MediaType.APPLICATION_JSON);
}
}
}

6
src/main/java/com/qyft/ms/app/handler/impl/NozzlePipelinePreFill.java

@ -26,6 +26,12 @@ public class NozzlePipelinePreFill implements CommandHandler {
@Override
public void handle(CMDFormV2 cmdForm, ResponseBodyEmitter emitter) throws Exception {
String frontCmdId = cmdForm.getCmdId();
String frontCmdName = cmdForm.getCmdName();
Map<String, Object> param = cmdForm.getParam();
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON);//向前端发送接收到指令
}
}

8
src/main/java/com/qyft/ms/app/handler/impl/SprayPipelineWash.java → src/main/java/com/qyft/ms/app/handler/impl/NozzlePipelineWash.java

@ -1,19 +1,13 @@
package com.qyft.ms.app.handler.impl;
import com.qyft.ms.app.common.annotation.CommandMapping;
import com.qyft.ms.app.common.command.FrontCommandAck;
import com.qyft.ms.app.common.constant.CommandStatus;
import com.qyft.ms.app.handler.CommandHandler;
import com.qyft.ms.app.model.form.CMDFormV2;
import com.qyft.ms.device.service.DeviceTcpCMDServiceV2;
import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
import java.io.IOException;
import java.util.Map;
/**
* 处理前端清洗喷嘴管路
*/
@ -21,7 +15,7 @@ import java.util.Map;
@RequiredArgsConstructor
@Async("asyncExecutor")
@CommandMapping("nozzle_pipeline_wash")//业务指令注解
public class SprayPipelineWash implements CommandHandler {
public class NozzlePipelineWash implements CommandHandler {
@Override
public void handle(CMDFormV2 cmdForm, ResponseBodyEmitter emitter) throws Exception {

36
src/main/java/com/qyft/ms/app/handler/impl/SlideTrayIn.java

@ -1,18 +1,23 @@
package com.qyft.ms.app.handler.impl;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.qyft.ms.app.common.annotation.CommandMapping;
import com.qyft.ms.app.common.command.CommandFuture;
import com.qyft.ms.app.common.command.CurrentSendCmdMapInstance;
import com.qyft.ms.app.common.command.DeviceCommandGenerator;
import com.qyft.ms.app.common.command.FrontCommandAck;
import com.qyft.ms.app.common.constant.CommandStatus;
import com.qyft.ms.app.handler.CommandHandler;
import com.qyft.ms.app.model.bo.CMDToDevice;
import com.qyft.ms.app.model.form.CMDFormV2;
import com.qyft.ms.device.service.DeviceTcpCMDServiceV2;
import com.qyft.ms.device.client.TcpClient;
import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
import java.io.IOException;
import java.util.Map;
/**
@ -23,9 +28,36 @@ import java.util.Map;
@Async("asyncExecutor")
@CommandMapping("slide_tray_in")//业务指令注解
public class SlideTrayIn implements CommandHandler {
/**
* 设备通信client
*/
private final TcpClient deviceClient;
@Override
public void handle(CMDFormV2 cmdForm, ResponseBodyEmitter emitter) throws Exception {
String frontCmdId = cmdForm.getCmdId();
String frontCmdName = cmdForm.getCmdName();
//向前端发送接收到指令
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON);
CMDToDevice slideTrayInCmdToDevice = DeviceCommandGenerator.slide_tray_in(5, 0, 2);//生成指令 推入玻片托盘
CommandFuture slideTrayInCmdToDeviceFuture = new CommandFuture();
slideTrayInCmdToDeviceFuture.setCmdToDevice(slideTrayInCmdToDevice);
Integer toDeviceCmdId = slideTrayInCmdToDevice.getCmdId();
CurrentSendCmdMapInstance.getInstance().putCommand(toDeviceCmdId, slideTrayInCmdToDeviceFuture);//将指令放入map
deviceClient.sendToJSON(slideTrayInCmdToDevice); //发送指令给设备
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.SEND, "已向设备发送了推入玻片托盘指令:" + JSONUtil.toJsonStr(slideTrayInCmdToDevice)), MediaType.APPLICATION_JSON);
slideTrayInCmdToDeviceFuture.waitForContinue();//等待设备的反馈
JSONObject deviceResult = slideTrayInCmdToDeviceFuture.getCallbackResult();//拿到设备返回结果
CurrentSendCmdMapInstance.getInstance().removeCommand(toDeviceCmdId);//将指令从map中删除
if (slideTrayInCmdToDeviceFuture.isReceived()) {
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RESULT, "推入玻片托盘指令设备反馈:" + JSONUtil.toJsonStr(deviceResult)), MediaType.APPLICATION_JSON);
}else{
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "推入玻片托盘指令没有响应:" + JSONUtil.toJsonStr(deviceResult)), MediaType.APPLICATION_JSON);
}
}
}

34
src/main/java/com/qyft/ms/app/handler/impl/SlideTrayOut.java

@ -1,10 +1,17 @@
package com.qyft.ms.app.handler.impl;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.qyft.ms.app.common.annotation.CommandMapping;
import com.qyft.ms.app.common.command.CommandFuture;
import com.qyft.ms.app.common.command.CurrentSendCmdMapInstance;
import com.qyft.ms.app.common.command.DeviceCommandGenerator;
import com.qyft.ms.app.common.command.FrontCommandAck;
import com.qyft.ms.app.common.constant.CommandStatus;
import com.qyft.ms.app.handler.CommandHandler;
import com.qyft.ms.app.model.bo.CMDToDevice;
import com.qyft.ms.app.model.form.CMDFormV2;
import com.qyft.ms.device.client.TcpClient;
import com.qyft.ms.device.service.DeviceTcpCMDServiceV2;
import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
@ -23,9 +30,36 @@ import java.util.Map;
@Async("asyncExecutor")
@CommandMapping("slide_tray_out")//业务指令注解
public class SlideTrayOut implements CommandHandler {
/**
* 设备通信client
*/
private final TcpClient deviceClient;
@Override
public void handle(CMDFormV2 cmdForm, ResponseBodyEmitter emitter) throws Exception {
String frontCmdId = cmdForm.getCmdId();
String frontCmdName = cmdForm.getCmdName();
//向前端发送接收到指令
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RECEIVE, "后台已收到指令"), MediaType.APPLICATION_JSON);
//TODO 数值应该从数据库中获取
CMDToDevice slideTrayOutCmdToDevice = DeviceCommandGenerator.slide_tray_out(5, 20, 2);//生成指令 推出玻片托盘
CommandFuture slideTrayOutCmdToDeviceFuture = new CommandFuture();
slideTrayOutCmdToDeviceFuture.setCmdToDevice(slideTrayOutCmdToDevice);
Integer toDeviceCmdId = slideTrayOutCmdToDevice.getCmdId();
CurrentSendCmdMapInstance.getInstance().putCommand(toDeviceCmdId, slideTrayOutCmdToDeviceFuture);//将指令放入map
deviceClient.sendToJSON(slideTrayOutCmdToDevice); //发送指令给设备
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.SEND, "已向设备发送了推出玻片托盘指令:" + JSONUtil.toJsonStr(slideTrayOutCmdToDevice)), MediaType.APPLICATION_JSON);
slideTrayOutCmdToDeviceFuture.waitForContinue();//等待设备的反馈
JSONObject deviceResult = slideTrayOutCmdToDeviceFuture.getCallbackResult();//拿到设备返回结果
CurrentSendCmdMapInstance.getInstance().removeCommand(toDeviceCmdId);//将指令从map中删除
if (slideTrayOutCmdToDeviceFuture.isReceived()) {
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.RESULT, "推出玻片托盘指令设备反馈:" + JSONUtil.toJsonStr(deviceResult)), MediaType.APPLICATION_JSON);
}else{
emitter.send(FrontCommandAck.backstageAck(frontCmdId, frontCmdName, CommandStatus.ERROR, "推出玻片托盘指令没有响应:" + JSONUtil.toJsonStr(deviceResult)), MediaType.APPLICATION_JSON);
}
}
}

16
src/main/java/com/qyft/ms/app/model/entity/Position.java

@ -0,0 +1,16 @@
package com.qyft.ms.app.model.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qyft.ms.system.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = false)
@Schema(description = "位置信息")
@TableName("position")
@Data
public class Position extends BaseEntity {
}

2
src/main/resources/application.yml

@ -37,7 +37,7 @@ tcp:
enable: true # 是否开启 TCP 连接
server-enable: true # 是否开启 TCP 连接
# host: 127.0.0.1
host: 192.168.1.140
host: 192.168.1.168
port: 9080
reconnect: 5000 # 断线重连间隔(单位:毫秒)
timeout: 10000 # 连接超时时间(单位:毫秒)

Loading…
Cancel
Save