fix(iot): 传递集成事件项目ID

This commit is contained in:
lzh
2026-04-29 22:20:35 +08:00
parent bc040d70f8
commit 026a126824
13 changed files with 2596 additions and 2545 deletions

View File

@@ -1,66 +1,71 @@
package com.viewsh.module.iot.core.integration.event;
import lombok.AllArgsConstructor;
import lombok.experimental.SuperBuilder;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.UUID;
/**
* 跨模块设备事件基类
* <p>
* 用于 IntegrationEventBus发布到 RocketMQ 供其他模块消费
*
* @author lzh
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
public abstract class BaseDeviceEvent {
/**
* 事件ID唯一标识用于幂等性处理
*/
@Builder.Default
private String eventId = UUID.randomUUID().toString();
/**
* 设备ID
*/
private Long deviceId;
/**
* 设备名称deviceName
*/
private String deviceName;
/**
* 设备昵称nickname用户可读的显示名称
*/
private String nickname;
/**
* 产品ID
*/
private Long productId;
/**
* 产品标识符productKey用作 RocketMQ Tag
*/
private String productKey;
/**
* 租户ID
*/
private Long tenantId;
/**
* 事件时间
*/
private LocalDateTime eventTime;
}
package com.viewsh.module.iot.core.integration.event;
import lombok.AllArgsConstructor;
import lombok.experimental.SuperBuilder;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.UUID;
/**
* 跨模块设备事件基类
* <p>
* 用于 IntegrationEventBus发布到 RocketMQ 供其他模块消费
*
* @author lzh
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
public abstract class BaseDeviceEvent {
/**
* 事件ID唯一标识用于幂等性处理
*/
@Builder.Default
private String eventId = UUID.randomUUID().toString();
/**
* 设备ID
*/
private Long deviceId;
/**
* 设备名称deviceName
*/
private String deviceName;
/**
* 设备昵称nickname用户可读的显示名称
*/
private String nickname;
/**
* 产品ID
*/
private Long productId;
/**
* 产品标识符productKey用作 RocketMQ Tag
*/
private String productKey;
/**
* 租户ID
*/
private Long tenantId;
/**
* Project id.
*/
private Long projectId;
/**
* 事件时间
*/
private LocalDateTime eventTime;
}

View File

@@ -1,79 +1,84 @@
package com.viewsh.module.iot.core.integration.event.clean;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.UUID;
/**
* 保洁工单到岗事件
* <p>
* 当工牌检测到蓝牙信标时IoT 模块发布此事件到 Ops 模块
* Topic: ops.order.arrive
*
* @author AI
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CleanOrderArriveEvent {
/**
* 事件ID唯一标识用于幂等性处理
*/
@Builder.Default
private String eventId = UUID.randomUUID().toString();
/**
* 工单类型
*/
private String orderType;
/**
* 工单ID可选如果已知
*/
private Long orderId;
/**
* 设备ID工牌
*/
private Long deviceId;
/**
* 设备Key
*/
private String deviceKey;
/**
* 区域ID
*/
private Long areaId;
/**
* 触发来源
*/
private String triggerSource;
/**
* 触发数据(上下文信息)
* <p>
* 例如:{beaconMac: "F0:C8:60:1D:10:BB", rssi: -66, windowSnapshot: [-68, -66, -69]}
*/
private Map<String, Object> triggerData;
/**
* 事件时间
*/
@Builder.Default
private LocalDateTime eventTime = LocalDateTime.now();
/**
* 租户ID
*/
private Long tenantId;
}
package com.viewsh.module.iot.core.integration.event.clean;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.UUID;
/**
* 保洁工单到岗事件
* <p>
* 当工牌检测到蓝牙信标时IoT 模块发布此事件到 Ops 模块
* Topic: ops.order.arrive
*
* @author AI
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CleanOrderArriveEvent {
/**
* 事件ID唯一标识用于幂等性处理
*/
@Builder.Default
private String eventId = UUID.randomUUID().toString();
/**
* 工单类型
*/
private String orderType;
/**
* 工单ID可选如果已知
*/
private Long orderId;
/**
* 设备ID工牌
*/
private Long deviceId;
/**
* 设备Key
*/
private String deviceKey;
/**
* 区域ID
*/
private Long areaId;
/**
* 触发来源
*/
private String triggerSource;
/**
* 触发数据(上下文信息)
* <p>
* 例如:{beaconMac: "F0:C8:60:1D:10:BB", rssi: -66, windowSnapshot: [-68, -66, -69]}
*/
private Map<String, Object> triggerData;
/**
* 事件时间
*/
@Builder.Default
private LocalDateTime eventTime = LocalDateTime.now();
/**
* 租户ID
*/
private Long tenantId;
/**
* Project id.
*/
private Long projectId;
}

View File

@@ -1,98 +1,103 @@
package com.viewsh.module.iot.core.integration.event.clean;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.UUID;
/**
* 保洁工单审计事件
* <p>
* 用于记录不改变工单状态但需要记录的关键节点
* 例如:离岗警告、无效作业拦截
* Topic: ops.order.audit
*
* @author AI
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CleanOrderAuditEvent {
/**
* 事件ID唯一标识用于幂等性处理
*/
@Builder.Default
private String eventId = UUID.randomUUID().toString();
/**
* 审计类型
* <p>
* BEACON_ARRIVE_CONFIRMED - 信标到岗确认
* LEAVE_WARNING_SENT - 离岗警告已发送
* COMPLETE_SUPPRESSED_INVALID - 完成被抑制(作业时长不足)
* BEACON_COMPLETE_REQUESTED - 信标触发完成请求
*/
private String auditType;
/**
* 工单ID可选
*/
private Long orderId;
/**
* 设备ID工牌
*/
private Long deviceId;
/**
* 设备Key
*/
private String deviceKey;
/**
* 区域ID
*/
private Long areaId;
/**
* 保洁员ID可选
*/
private Long cleanerId;
/**
* 事件级别
* <p>
* INFO - 信息
* WARN - 警告
* ERROR - 错误
*/
@Builder.Default
private String level = "INFO";
/**
* 审计数据(结构化上下文)
*/
private Map<String, Object> data;
/**
* 事件消息(可读描述)
*/
private String message;
/**
* 事件时间
*/
@Builder.Default
private LocalDateTime eventTime = LocalDateTime.now();
/**
* 租户ID
*/
private Long tenantId;
}
package com.viewsh.module.iot.core.integration.event.clean;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.UUID;
/**
* 保洁工单审计事件
* <p>
* 用于记录不改变工单状态但需要记录的关键节点
* 例如:离岗警告、无效作业拦截
* Topic: ops.order.audit
*
* @author AI
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CleanOrderAuditEvent {
/**
* 事件ID唯一标识用于幂等性处理
*/
@Builder.Default
private String eventId = UUID.randomUUID().toString();
/**
* 审计类型
* <p>
* BEACON_ARRIVE_CONFIRMED - 信标到岗确认
* LEAVE_WARNING_SENT - 离岗警告已发送
* COMPLETE_SUPPRESSED_INVALID - 完成被抑制(作业时长不足)
* BEACON_COMPLETE_REQUESTED - 信标触发完成请求
*/
private String auditType;
/**
* 工单ID可选
*/
private Long orderId;
/**
* 设备ID工牌
*/
private Long deviceId;
/**
* 设备Key
*/
private String deviceKey;
/**
* 区域ID
*/
private Long areaId;
/**
* 保洁员ID可选
*/
private Long cleanerId;
/**
* 事件级别
* <p>
* INFO - 信息
* WARN - 警告
* ERROR - 错误
*/
@Builder.Default
private String level = "INFO";
/**
* 审计数据(结构化上下文)
*/
private Map<String, Object> data;
/**
* 事件消息(可读描述)
*/
private String message;
/**
* 事件时间
*/
@Builder.Default
private LocalDateTime eventTime = LocalDateTime.now();
/**
* 租户ID
*/
private Long tenantId;
/**
* Project id.
*/
private Long projectId;
}

View File

@@ -1,79 +1,84 @@
package com.viewsh.module.iot.core.integration.event.clean;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.UUID;
/**
* 保洁工单完成事件
* <p>
* 当工牌信号丢失超时时IoT 模块发布此事件到 Ops 模块
* Topic: ops.order.complete
*
* @author AI
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CleanOrderCompleteEvent {
/**
* 事件ID唯一标识用于幂等性处理
*/
@Builder.Default
private String eventId = UUID.randomUUID().toString();
/**
* 工单类型
*/
private String orderType;
/**
* 工单ID
*/
private Long orderId;
/**
* 设备ID工牌
*/
private Long deviceId;
/**
* 设备Key
*/
private String deviceKey;
/**
* 区域ID
*/
private Long areaId;
/**
* 触发来源
*/
private String triggerSource;
/**
* 触发数据(上下文信息)
* <p>
* 例如:{durationMs: 780000, lastLossTime: 1736913000000, minValidWorkMinutes: 3}
*/
private Map<String, Object> triggerData;
/**
* 事件时间
*/
@Builder.Default
private LocalDateTime eventTime = LocalDateTime.now();
/**
* 租户ID
*/
private Long tenantId;
}
package com.viewsh.module.iot.core.integration.event.clean;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.UUID;
/**
* 保洁工单完成事件
* <p>
* 当工牌信号丢失超时时IoT 模块发布此事件到 Ops 模块
* Topic: ops.order.complete
*
* @author AI
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CleanOrderCompleteEvent {
/**
* 事件ID唯一标识用于幂等性处理
*/
@Builder.Default
private String eventId = UUID.randomUUID().toString();
/**
* 工单类型
*/
private String orderType;
/**
* 工单ID
*/
private Long orderId;
/**
* 设备ID工牌
*/
private Long deviceId;
/**
* 设备Key
*/
private String deviceKey;
/**
* 区域ID
*/
private Long areaId;
/**
* 触发来源
*/
private String triggerSource;
/**
* 触发数据(上下文信息)
* <p>
* 例如:{durationMs: 780000, lastLossTime: 1736913000000, minValidWorkMinutes: 3}
*/
private Map<String, Object> triggerData;
/**
* 事件时间
*/
@Builder.Default
private LocalDateTime eventTime = LocalDateTime.now();
/**
* 租户ID
*/
private Long tenantId;
/**
* Project id.
*/
private Long projectId;
}

View File

@@ -1,86 +1,91 @@
package com.viewsh.module.iot.core.integration.event.clean;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.UUID;
/**
* 保洁工单创建事件
* <p>
* 当客流阈值触发时IoT 模块发布此事件到 Ops 模块
* Topic: ops.order.create
*
* @author AI
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CleanOrderCreateEvent {
/**
* 事件ID唯一标识用于幂等性处理
*/
@Builder.Default
private String eventId = UUID.randomUUID().toString();
/**
* 工单类型
*/
private String orderType;
/**
* 区域ID
*/
private Long areaId;
/**
* 触发来源
* <p>
* IOT_TRAFFIC - 客流触发
* IOT_ALERT - 告警触发
*/
private String triggerSource;
/**
* 触发设备ID
*/
private Long triggerDeviceId;
/**
* 触发设备Key
*/
private String triggerDeviceKey;
/**
* 触发数据(上下文信息)
* <p>
* 例如:{actualCount: 150, threshold: 100, baseValue: 50}
*/
private Map<String, Object> triggerData;
/**
* 工单优先级
* <p>
* 0 - P0紧急
* 1 - P1重要
* 2 - P2普通
*/
private Integer priority;
/**
* 事件时间
*/
@Builder.Default
private LocalDateTime eventTime = LocalDateTime.now();
/**
* 租户ID
*/
private Long tenantId;
}
package com.viewsh.module.iot.core.integration.event.clean;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.UUID;
/**
* 保洁工单创建事件
* <p>
* 当客流阈值触发时IoT 模块发布此事件到 Ops 模块
* Topic: ops.order.create
*
* @author AI
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CleanOrderCreateEvent {
/**
* 事件ID唯一标识用于幂等性处理
*/
@Builder.Default
private String eventId = UUID.randomUUID().toString();
/**
* 工单类型
*/
private String orderType;
/**
* 区域ID
*/
private Long areaId;
/**
* 触发来源
* <p>
* IOT_TRAFFIC - 客流触发
* IOT_ALERT - 告警触发
*/
private String triggerSource;
/**
* 触发设备ID
*/
private Long triggerDeviceId;
/**
* 触发设备Key
*/
private String triggerDeviceKey;
/**
* 触发数据(上下文信息)
* <p>
* 例如:{actualCount: 150, threshold: 100, baseValue: 50}
*/
private Map<String, Object> triggerData;
/**
* 工单优先级
* <p>
* 0 - P0紧急
* 1 - P1重要
* 2 - P2普通
*/
private Integer priority;
/**
* 事件时间
*/
@Builder.Default
private LocalDateTime eventTime = LocalDateTime.now();
/**
* 租户ID
*/
private Long tenantId;
/**
* Project id.
*/
private Long projectId;
}

View File

@@ -69,4 +69,9 @@ public class TrajectoryEnterEvent {
*/
private Long tenantId;
/**
* Project id.
*/
private Long projectId;
}

View File

@@ -78,4 +78,9 @@ public class TrajectoryLeaveEvent {
*/
private Long tenantId;
/**
* Project id.
*/
private Long projectId;
}