feat(ops): add-iot-clean-order-integration阶段3-客流计数器重置
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package com.viewsh.module.ops.environment.integration.consumer;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.viewsh.module.iot.api.device.IotDeviceControlApi;
|
||||
import com.viewsh.module.iot.api.device.dto.ResetTrafficCounterReqDTO;
|
||||
import com.viewsh.module.ops.dal.dataobject.dto.OpsOrderCreateReqDTO;
|
||||
import com.viewsh.module.ops.enums.PriorityEnum;
|
||||
import com.viewsh.module.ops.enums.SourceTypeEnum;
|
||||
@@ -56,6 +58,9 @@ public class CleanOrderCreateEventHandler implements RocketMQListener<String> {
|
||||
@Resource
|
||||
private OpsOrderService opsOrderService;
|
||||
|
||||
@Resource
|
||||
private IotDeviceControlApi iotDeviceControlApi;
|
||||
|
||||
@Override
|
||||
public void onMessage(String message) {
|
||||
try {
|
||||
@@ -109,10 +114,65 @@ public class CleanOrderCreateEventHandler implements RocketMQListener<String> {
|
||||
event.getTriggerDeviceKey()
|
||||
);
|
||||
|
||||
// 4. 如果是客流触发的工单,重置客流计数器基准值
|
||||
if ("IOT_TRAFFIC".equals(event.getTriggerSource()) && event.getTriggerData() != null) {
|
||||
resetTrafficCounter(event, orderId);
|
||||
}
|
||||
|
||||
log.info("[CleanOrderCreateEventHandler] 工单创建成功: eventId={}, orderId={}, areaId={}",
|
||||
event.getEventId(), orderId, event.getAreaId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置客流计数器基准值
|
||||
* <p>
|
||||
* 工单创建成功后,通知 IoT 模块重置客流计数器,以便统计下一波客流
|
||||
*
|
||||
* @param event 工单创建事件
|
||||
* @param orderId 工单ID
|
||||
*/
|
||||
private void resetTrafficCounter(CleanOrderCreateEventDTO event, Long orderId) {
|
||||
try {
|
||||
// 获取当前客流值作为新的基准值
|
||||
Object currentCountObj = event.getTriggerData().get("actualCount");
|
||||
Object baseValueObj = event.getTriggerData().get("baseValue");
|
||||
|
||||
if (currentCountObj == null || baseValueObj == null) {
|
||||
log.warn("[CleanOrderCreateEventHandler] 缺少客流数据,跳过重置: eventId={}, actualCount={}, baseValue={}",
|
||||
event.getEventId(), currentCountObj, baseValueObj);
|
||||
return;
|
||||
}
|
||||
|
||||
// 计算新的基准值 = 当前值
|
||||
Long currentCount = ((Number) currentCountObj).longValue();
|
||||
Long newBaseValue = currentCount; // 将当前客流设为新的基准值
|
||||
|
||||
// 构建重置请求
|
||||
ResetTrafficCounterReqDTO reqDTO = ResetTrafficCounterReqDTO.builder()
|
||||
.deviceId(event.getTriggerDeviceId())
|
||||
.newBaseValue(newBaseValue)
|
||||
.orderId(orderId)
|
||||
.remark("工单创建后重置计数器")
|
||||
.build();
|
||||
|
||||
// 调用 IoT 模块 RPC 接口
|
||||
var result = iotDeviceControlApi.resetTrafficCounter(reqDTO);
|
||||
|
||||
if (result.getData() != null && result.getData()) {
|
||||
log.info("[CleanOrderCreateEventHandler] 客流计数器重置成功: eventId={}, deviceId={}, newBaseValue={}",
|
||||
event.getEventId(), event.getTriggerDeviceId(), newBaseValue);
|
||||
} else {
|
||||
log.warn("[CleanOrderCreateEventHandler] 客流计数器重置失败: eventId={}, deviceId={}",
|
||||
event.getEventId(), event.getTriggerDeviceId());
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
// 重置失败不应影响主流程
|
||||
log.error("[CleanOrderCreateEventHandler] 客流计数器重置异常: eventId={}, deviceId={}",
|
||||
event.getEventId(), event.getTriggerDeviceId(), e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成工单标题
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user