feat(iot): add-iot-clean-order-integration阶段二-规则处理器
This commit is contained in:
@@ -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";
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user