feat(smartcam): 增加心跳检测功能

- 在处理 operator 为 "heartbeat" 的情况下,返回心跳应答数据
- 实现 getHeartbeatAck 方法生成心跳应答的 JSON 数据
- 设置心跳间隔为 300 秒
- 更新时间戳和事件 ID 以匹配请求数据
This commit is contained in:
2025-02-17 22:50:19 +08:00
parent 696a388ace
commit a1834ae92b

View File

@@ -112,6 +112,15 @@ public class SmartCamCarLicenseSnapshotDataService
// Operator
entity.setOperator(rootNode.path("operator").asText());
if (StringUtils.equalsIgnoreCase(entity.getOperator(), "heartbeat")){
return getHeartbeatAck(rootNode);
}
// Device Info
JsonNode deviceInfoNode = rootNode.path("deviceInfo");
entity.setSerialNumber(deviceInfoNode.path("serialNumber").asText());
@@ -262,6 +271,72 @@ public class SmartCamCarLicenseSnapshotDataService
return objectNode;
}
@SneakyThrows
private ObjectNode getHeartbeatAck(JsonNode rootNode) {
/**
* { "operator": "heartbeat-Ack", "info": { "eventId":1, "time":"20200331T101002+08",
* "heartbeatInterval":1, "eventSendMode":"realTime", "strategy": {
* "passengerStaticsInterval": 2, "heartBeatInterval": 30, "isEnableElectronicDefence":
* true, "isCrossBorderDetectEnable": true, "isOffDutyDetectEnable": true,
* "isPassengerFlowStaticsEnable": true, "isCryScreamDetectEnable": true,
* "isPetDetectEnable": true, "isFallDetectEnable": true, "isSnapshotEnable": true,
* "isPersonInfoEnable": true, "isPersonDetectEnable": true, "isCarLicenseSnapshotEnable":
* true, "isCarDetectEnable": true, "isMotionDetectEnable": true } }, "result": { "errorNo":
* 0, "description": "ok" } }
*/
ObjectNode jsonNode = (ObjectNode) objectMapper.readTree(
"""
{
"operator": "heartbeat-Ack",
"info": {
"eventId":1,
"time":"20200331T101002+08",
"heartbeatInterval":1,
"eventSendMode":"realTime",
"strategy":
{
"passengerStaticsInterval": 2,
"heartBeatInterval": 300,
"isEnableElectronicDefence": false,
"isCrossBorderDetectEnable": false,
"isOffDutyDetectEnable": false,
"isPassengerFlowStaticsEnable": false,
"isCryScreamDetectEnable": false,
"isPetDetectEnable": false,
"isFallDetectEnable": false,
"isSnapshotEnable": false,
"isPersonInfoEnable": false,
"isPersonDetectEnable": false,
"isCarLicenseSnapshotEnable": true,
"isCarDetectEnable": true,
"isMotionDetectEnable": false
}
},
"result": {
"errorNo": 0,
"description": "ok"
}
}
""");
((ObjectNode) jsonNode.get("info"))
.put("eventId", rootNode.get("info").get("eventId").asInt());
((ObjectNode) jsonNode.get("info"))
.put("time", rootNode.get("info").get("time").asInt());
((ObjectNode) jsonNode.get("info"))
.put("heartbeatInterval", 300);
jsonNode.put("operator", "heartbeat-Ack");
return jsonNode;
}
private @NotNull ObjectNode getAck(int infoEventId) {
ObjectNode objectNode = objectMapper.createObjectNode();