Browse Source

接收设备报警信息

master
白凤吉 6 months ago
parent
commit
077827d2eb
  1. 71
      src/main/java/com/qyft/gd/device/controller/TestController.java
  2. 4
      src/main/java/com/qyft/gd/device/handler/DeviceMessageHandler.java
  3. 7
      src/main/java/com/qyft/gd/device/model/bo/DeviceAlarm.java
  4. 18
      src/main/java/com/qyft/gd/device/service/DeviceService.java
  5. 8
      src/main/java/com/qyft/gd/system/model/entity/Role.java
  6. 8
      src/main/java/com/qyft/gd/system/model/entity/User.java

71
src/main/java/com/qyft/gd/device/controller/TestController.java

@ -2,6 +2,7 @@ package com.qyft.gd.device.controller;
import com.qyft.gd.device.model.bo.DeviceStatus;
import com.qyft.gd.device.service.DeviceService;
import com.qyft.gd.device.service.DeviceStateService;
import com.qyft.gd.system.common.result.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -12,9 +13,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@Tag(name = "测试")
@RestController
@RequestMapping("/api/test")
@ -22,6 +20,7 @@ import java.util.List;
@Slf4j
public class TestController {
private final DeviceService deviceService;
private final DeviceStateService deviceStateService;
@Operation(summary = "开门")
@GetMapping("/openDoor")
@ -253,65 +252,23 @@ public class TestController {
return Result.failed("拍照失败");
}
}
@Operation(summary = "生成设备状态实体")
@GetMapping("/getDeviceStatus")
public Result<DeviceStatus> getDeviceStatus() {
// 创建 RailArm 对象
DeviceStatus.RailArm railArm = new DeviceStatus.RailArm();
railArm.setX(100);
railArm.setY(200);
railArm.setZ(300);
railArm.setJoint1(45.5);
railArm.setJoint2(90.0);
railArm.setRailDistance(10.5);
railArm.setClawDistance(5.5);
railArm.setSpeed(20);
railArm.setClawStatus(true); // 夹爪张开状态
// 创建 LiquidArm 对象
DeviceStatus.LiquidArm liquidArm = new DeviceStatus.LiquidArm();
liquidArm.setX(150);
liquidArm.setY(250);
liquidArm.setZ(350);
liquidArm.setJoint1(30.0);
liquidArm.setJoint2(60.0);
liquidArm.setSpeed(15);
// 创建 Pump 对象 (8个 Pump)
List<DeviceStatus.Pump> pumps = new ArrayList<>();
for (int i = 1; i <= 8; i++) {
DeviceStatus.Pump pump = new DeviceStatus.Pump();
pump.setPumpId("PUMP00" + i);
pump.setFlowRate(100 + i * 10); // 设置流量
pumps.add(pump);
}
DeviceStatus deviceStatus = deviceStateService.getDeviceStatus();
return Result.success(deviceStatus);
}
// 创建 Heater 对象 (6个 Heater)
List<DeviceStatus.Heater> heaters = new ArrayList<>();
for (int i = 1; i <= 6; i++) {
DeviceStatus.Heater heater = new DeviceStatus.Heater();
heater.setHeaterId("HEATER00" + i);
heater.setTrayStatus(i % 2 == 0); // 偶数加热器托盘状态为存在奇数为无托盘
heater.setTrayHeight(i * 0.5); // 设置托盘高度
heater.setTraySpeed(0.8 + i * 0.1); // 设置托盘速度
heater.setHeatingStatus(80.0 + i); // 设置加热状态温度
heater.setTemperature(90.0 + i); // 设置目标加热温度
heater.setCapStatus(true); // 拍子状态
heaters.add(heater);
@Operation(summary = "触发测试报警")
@GetMapping("/alarmTest")
public Result<DeviceStatus> alarmTest(@RequestParam String code, @RequestParam String msg, @RequestParam String module) {
boolean success = deviceService.alarmTest(code, msg, module);
if (success) {
return Result.success();
} else {
return Result.failed("触发测试报警失败");
}
// 创建 DeviceStatus 对象
DeviceStatus deviceStatus = new DeviceStatus();
deviceStatus.setDoorStatus(true); // 门开启
deviceStatus.setRailArm(railArm);
deviceStatus.setLiquidArm(liquidArm);
deviceStatus.setPump(pumps);
deviceStatus.setShakingStatus(true); // 正在摇匀
deviceStatus.setShakingSpeed(50);
deviceStatus.setHeatingStatus(true); // 正在加热
deviceStatus.setHeater(heaters);
deviceStatus.setLiquidTrayStatus(false);
return Result.success(deviceStatus);
}
}

4
src/main/java/com/qyft/gd/device/handler/DeviceMessageHandler.java

@ -3,6 +3,7 @@ package com.qyft.gd.device.handler;
import cn.hutool.json.JSONUtil;
import com.qyft.gd.device.common.constant.TcpMessageType;
import com.qyft.gd.device.common.jsonrpc.JsonRpcResponse;
import com.qyft.gd.device.model.bo.DeviceAlarm;
import com.qyft.gd.device.model.bo.DeviceFeedback;
import com.qyft.gd.device.model.bo.DeviceStatus;
import com.qyft.gd.device.service.DeviceStateService;
@ -33,13 +34,14 @@ public class DeviceMessageHandler extends ChannelInboundHandlerAdapter {
public void channelRead(ChannelHandlerContext ctx, Object msg) {
ByteBuf buf = (ByteBuf) msg;
String serverMsg = buf.toString(CharsetUtil.UTF_8);
log.info("TCP服务消息:{}", serverMsg);
log.debug("TCP服务消息:{}", serverMsg);
try {
JsonRpcResponse jsonRpcResponse = JSONUtil.toBean(serverMsg, JsonRpcResponse.class);
if (TcpMessageType.STATUS.equals(jsonRpcResponse.getType())) {//设备状态
DeviceStatus deviceStatus = JSONUtil.toBean(jsonRpcResponse.getData(), DeviceStatus.class);
deviceStateService.updateDeviceStatus(deviceStatus); // 更新设备状态
} else if (TcpMessageType.ALARM.equals(jsonRpcResponse.getType())) {//设备报警
DeviceAlarm deviceAlarm = JSONUtil.toBean(jsonRpcResponse.getData(), DeviceAlarm.class);
} else if (TcpMessageType.FEEDBACK.equals(jsonRpcResponse.getType())) {//设备指令反馈
DeviceFeedback deviceFeedback = JSONUtil.toBean(jsonRpcResponse.getData(), DeviceFeedback.class);

7
src/main/java/com/qyft/gd/device/model/bo/DeviceAlarm.java

@ -1,11 +1,18 @@
package com.qyft.gd.device.model.bo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 设备报警信息
*/
@Schema(description = "设备报警信息")
@Data
public class DeviceAlarm {
@Schema(description = "报警代码")
private String code;
@Schema(description = "报警信息")
private String msg;
@Schema(description = "报警模块")
private String module;
}

18
src/main/java/com/qyft/gd/device/service/DeviceService.java

@ -271,7 +271,7 @@ public class DeviceService {
/**
* 开始加热
*
* @param heaterId 加热器id
* @param heaterId 加热器id
* @param temperature 温度值
*/
public boolean startHeating(String heaterId, double temperature) {
@ -342,4 +342,20 @@ public class DeviceService {
}
return true;
}
/**
* 触发报警
*/
public boolean alarmTest(String code, String msg, String module) {
Map<String, Object> params = new HashMap<>();
params.put("code", code);
params.put("msg", msg);
params.put("module", module);
DeviceFeedback deviceFeedback = tcpClient.sendCommand("alarmTest", params);
if (deviceFeedback == null || deviceFeedback.getError() != null) {
log.error("TCP alarmTest 指令执行错误 {}", JSONUtil.toJsonStr(deviceFeedback));
return false;
}
return true;
}
}

8
src/main/java/com/qyft/gd/system/model/entity/Role.java

@ -4,16 +4,16 @@ import com.baomidou.mybatisplus.annotation.TableName;
import com.qyft.gd.system.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 角色实体
*/
@EqualsAndHashCode(callSuper = true)
@Schema(description = "角色信息")
@TableName("sys_role")
@Getter
@Setter
@Data
public class Role extends BaseEntity {
@NotBlank()
@Schema(description = "角色名称")

8
src/main/java/com/qyft/gd/system/model/entity/User.java

@ -5,16 +5,16 @@ import com.baomidou.mybatisplus.annotation.TableName;
import com.qyft.gd.system.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 用户实体
*/
@EqualsAndHashCode(callSuper = true)
@Schema(description = "用户基础信息")
@TableName("sys_user")
@Getter
@Setter
@Data
public class User extends BaseEntity {
@NotBlank()

Loading…
Cancel
Save