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.model.bo.DeviceStatus;
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.system.common.result.Result; import com.qyft.gd.system.common.result.Result;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; 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.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@Tag(name = "测试") @Tag(name = "测试")
@RestController @RestController
@RequestMapping("/api/test") @RequestMapping("/api/test")
@ -22,6 +20,7 @@ import java.util.List;
@Slf4j @Slf4j
public class TestController { public class TestController {
private final DeviceService deviceService; private final DeviceService deviceService;
private final DeviceStateService deviceStateService;
@Operation(summary = "开门") @Operation(summary = "开门")
@GetMapping("/openDoor") @GetMapping("/openDoor")
@ -253,65 +252,23 @@ public class TestController {
return Result.failed("拍照失败"); return Result.failed("拍照失败");
} }
} }
@Operation(summary = "生成设备状态实体") @Operation(summary = "生成设备状态实体")
@GetMapping("/getDeviceStatus") @GetMapping("/getDeviceStatus")
public Result<DeviceStatus> 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 cn.hutool.json.JSONUtil;
import com.qyft.gd.device.common.constant.TcpMessageType; import com.qyft.gd.device.common.constant.TcpMessageType;
import com.qyft.gd.device.common.jsonrpc.JsonRpcResponse; 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.DeviceFeedback;
import com.qyft.gd.device.model.bo.DeviceStatus; import com.qyft.gd.device.model.bo.DeviceStatus;
import com.qyft.gd.device.service.DeviceStateService; import com.qyft.gd.device.service.DeviceStateService;
@ -33,13 +34,14 @@ public class DeviceMessageHandler extends ChannelInboundHandlerAdapter {
public void channelRead(ChannelHandlerContext ctx, Object msg) { public void channelRead(ChannelHandlerContext ctx, Object msg) {
ByteBuf buf = (ByteBuf) msg; ByteBuf buf = (ByteBuf) msg;
String serverMsg = buf.toString(CharsetUtil.UTF_8); String serverMsg = buf.toString(CharsetUtil.UTF_8);
log.info("TCP服务消息:{}", serverMsg);
log.debug("TCP服务消息:{}", serverMsg);
try { try {
JsonRpcResponse jsonRpcResponse = JSONUtil.toBean(serverMsg, JsonRpcResponse.class); JsonRpcResponse jsonRpcResponse = JSONUtil.toBean(serverMsg, JsonRpcResponse.class);
if (TcpMessageType.STATUS.equals(jsonRpcResponse.getType())) {//设备状态 if (TcpMessageType.STATUS.equals(jsonRpcResponse.getType())) {//设备状态
DeviceStatus deviceStatus = JSONUtil.toBean(jsonRpcResponse.getData(), DeviceStatus.class); DeviceStatus deviceStatus = JSONUtil.toBean(jsonRpcResponse.getData(), DeviceStatus.class);
deviceStateService.updateDeviceStatus(deviceStatus); // 更新设备状态 deviceStateService.updateDeviceStatus(deviceStatus); // 更新设备状态
} else if (TcpMessageType.ALARM.equals(jsonRpcResponse.getType())) {//设备报警 } else if (TcpMessageType.ALARM.equals(jsonRpcResponse.getType())) {//设备报警
DeviceAlarm deviceAlarm = JSONUtil.toBean(jsonRpcResponse.getData(), DeviceAlarm.class);
} else if (TcpMessageType.FEEDBACK.equals(jsonRpcResponse.getType())) {//设备指令反馈 } else if (TcpMessageType.FEEDBACK.equals(jsonRpcResponse.getType())) {//设备指令反馈
DeviceFeedback deviceFeedback = JSONUtil.toBean(jsonRpcResponse.getData(), DeviceFeedback.class); 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; package com.qyft.gd.device.model.bo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
/** /**
* 设备报警信息 * 设备报警信息
*/ */
@Schema(description = "设备报警信息")
@Data @Data
public class DeviceAlarm { public class DeviceAlarm {
@Schema(description = "报警代码")
private String code;
@Schema(description = "报警信息")
private String msg; 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 温度值 * @param temperature 温度值
*/ */
public boolean startHeating(String heaterId, double temperature) { public boolean startHeating(String heaterId, double temperature) {
@ -342,4 +342,20 @@ public class DeviceService {
} }
return true; 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 com.qyft.gd.system.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;
import lombok.Data;
import lombok.EqualsAndHashCode;
/** /**
* 角色实体 * 角色实体
*/ */
@EqualsAndHashCode(callSuper = true)
@Schema(description = "角色信息") @Schema(description = "角色信息")
@TableName("sys_role") @TableName("sys_role")
@Getter
@Setter
@Data
public class Role extends BaseEntity { public class Role extends BaseEntity {
@NotBlank() @NotBlank()
@Schema(description = "角色名称") @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 com.qyft.gd.system.common.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;
import lombok.Data;
import lombok.EqualsAndHashCode;
/** /**
* 用户实体 * 用户实体
*/ */
@EqualsAndHashCode(callSuper = true)
@Schema(description = "用户基础信息") @Schema(description = "用户基础信息")
@TableName("sys_user") @TableName("sys_user")
@Getter
@Setter
@Data
public class User extends BaseEntity { public class User extends BaseEntity {
@NotBlank() @NotBlank()

Loading…
Cancel
Save