feat(ops): 工牌实时状态增加物理位置、电量和工单信息

BadgeRealtimeStatusRespDTO 新增物理位置(IoT 轨迹检测 RPC)、
电量(IoT 设备属性 RPC)、当前工单信息三个维度。
RPC 调用改为串行执行避免占用 ForkJoinPool 公共线程。
设备状态写入 Redis 时同步写入区域名称。

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
lzh
2026-04-05 15:26:43 +08:00
parent 9ffaac5c91
commit 54f78f8066
4 changed files with 151 additions and 18 deletions

View File

@@ -9,7 +9,10 @@ import lombok.NoArgsConstructor;
/**
* 工牌实时状态详情响应 DTO
* <p>
* 用于工牌详情页展示
* 用于工牌详情页展示,包含:
* - 设备基础信息(状态、电量、上线时间)
* - 工牌物理位置(来自 IoT 轨迹检测)
* - 当前工单信息(来自工牌状态 Redis
*
* @author lzh
*/
@@ -20,6 +23,8 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
public class BadgeRealtimeStatusRespDTO {
// ==================== 设备基础信息 ====================
@Schema(description = "设备ID", example = "3001")
private Long deviceId;
@@ -32,18 +37,31 @@ public class BadgeRealtimeStatusRespDTO {
@Schema(description = "电量0-100", example = "72")
private Integer batteryLevel;
@Schema(description = "最后心跳时间", example = "2026-01-23 15:00:30")
private String lastHeartbeatTime;
@Schema(description = "设备上线时间", example = "2026-01-23 15:00:30")
private String onlineTime;
@Schema(description = "信号强度dBm", example = "-42")
private Integer rssi;
// ==================== 工牌物理位置(轨迹检测) ====================
@Schema(description = "是否在区域内", example = "true")
@Schema(description = "是否在区域内(基于 IoT 信标检测)", example = "true")
private Boolean isInArea;
@Schema(description = "当前区域ID", example = "101")
@Schema(description = "当前物理所在区域ID", example = "101")
private Long areaId;
@Schema(description = "当前区域名称", example = "A区洗手间")
@Schema(description = "当前物理所在区域名称", example = "A区洗手间")
private String areaName;
// ==================== 当前工单信息 ====================
@Schema(description = "当前工单ID", example = "1234567890")
private Long currentOrderId;
@Schema(description = "当前工单状态", example = "ARRIVED")
private String currentOrderStatus;
@Schema(description = "工单目标区域ID", example = "101")
private Long orderAreaId;
@Schema(description = "工单目标区域名称", example = "A区洗手间")
private String orderAreaName;
}