feat(trajectory): 新增轨迹检测与 Beacon 注册表

This commit is contained in:
lzh
2026-03-31 22:53:06 +08:00
parent a9941a29a9
commit 11dcb57ff3
17 changed files with 1216 additions and 25 deletions

View File

@@ -0,0 +1,22 @@
package com.viewsh.module.iot.core.integration.constants;
/**
* 轨迹事件 Topic 常量
* <p>
* 定义 IoT → Ops 的轨迹事件 Topic
*
* @author lzh
*/
public interface TrajectoryTopics {
/**
* 进入区域事件
*/
String TRAJECTORY_ENTER = "trajectory-enter";
/**
* 离开区域事件
*/
String TRAJECTORY_LEAVE = "trajectory-leave";
}

View File

@@ -0,0 +1,72 @@
package com.viewsh.module.iot.core.integration.event.trajectory;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.UUID;
/**
* 轨迹进入区域事件
* <p>
* 当工牌蓝牙信号满足强进条件确认进入某区域时发布
* Topic: trajectory-enter
*
* @author lzh
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TrajectoryEnterEvent {
/**
* 事件ID唯一标识用于幂等性处理
*/
@Builder.Default
private String eventId = UUID.randomUUID().toString();
/**
* 设备ID工牌
*/
private Long deviceId;
/**
* 设备名称
*/
private String deviceName;
/**
* 设备备注名称
*/
private String nickname;
/**
* 区域ID
*/
private Long areaId;
/**
* 匹配的 Beacon MAC 地址
*/
private String beaconMac;
/**
* 进入时的 RSSI 值
*/
private Integer enterRssi;
/**
* 事件时间ISO-8601 字符串,跨模块序列化安全)
*/
@Builder.Default
private String eventTime = LocalDateTime.now().toString();
/**
* 租户ID
*/
private Long tenantId;
}

View File

@@ -0,0 +1,81 @@
package com.viewsh.module.iot.core.integration.event.trajectory;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.UUID;
/**
* 轨迹离开区域事件
* <p>
* 当工牌蓝牙信号满足弱出条件确认离开某区域时发布
* Topic: trajectory-leave
*
* @author lzh
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TrajectoryLeaveEvent {
/**
* 事件ID唯一标识用于幂等性处理
*/
@Builder.Default
private String eventId = UUID.randomUUID().toString();
/**
* 设备ID工牌
*/
private Long deviceId;
/**
* 设备名称
*/
private String deviceName;
/**
* 设备备注名称
*/
private String nickname;
/**
* 区域ID
*/
private Long areaId;
/**
* 匹配的 Beacon MAC 地址
*/
private String beaconMac;
/**
* 离开原因
* <p>
* SIGNAL_LOSS - 信号丢失(弱出条件满足)
* AREA_SWITCH - 切换到其他区域
* DEVICE_OFFLINE - 设备离线
*/
private String leaveReason;
/**
* 进入时间戳(毫秒),用于 Ops 端匹配记录
*/
private Long enterTimestamp;
/**
* 事件时间ISO-8601 字符串,跨模块序列化安全)
*/
@Builder.Default
private String eventTime = LocalDateTime.now().toString();
/**
* 租户ID
*/
private Long tenantId;
}