feat(iot): add-iot-clean-order-integration阶段二-规则处理器

This commit is contained in:
lzh
2026-01-17 15:54:12 +08:00
parent 471cd45162
commit de427b15ab
12 changed files with 1369 additions and 1 deletions

View File

@@ -0,0 +1,37 @@
package com.viewsh.module.iot.core.integration.constants;
/**
* Ops 业务事件 Topic 常量
* <p>
* 定义 IoT → Ops 的业务事件 Topic
*
* @author AI
*/
public interface CleanOrderTopics {
/**
* 保洁工单创建事件
*/
String ORDER_CREATE = "ops.order.create";
/**
* 保洁工单到岗事件
*/
String ORDER_ARRIVE = "ops.order.arrive";
/**
* 保洁工单完成事件
*/
String ORDER_COMPLETE = "ops.order.complete";
/**
* 保洁工单审计事件
*/
String ORDER_AUDIT = "ops.order.audit";
/**
* 保洁工单确认事件(按键确认)
*/
String ORDER_CONFIRM = "ops.order.confirm";
}

View File

@@ -0,0 +1,79 @@
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;
}

View File

@@ -0,0 +1,98 @@
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;
}

View File

@@ -0,0 +1,79 @@
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;
}

View File

@@ -0,0 +1,86 @@
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>
* P0 - 紧急
* P1 - 重要
* P2 - 普通
*/
private String priority;
/**
* 事件时间
*/
@Builder.Default
private LocalDateTime eventTime = LocalDateTime.now();
/**
* 租户ID
*/
private Long tenantId;
}