refactor(iot,ops): 重构客流计数器重置为按区域删除阈值 key

- ResetTrafficCounterReqDTO: 废弃 newBaseValue 字段
- IotDeviceControlApiImpl: 重置逻辑改为通过区域关联查询后删除阈值 key
- CleanOrderEventListener: 简化异步重置调用,移除 triggerData 依赖

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
lzh
2026-02-03 15:37:23 +08:00
parent 46024fd043
commit 13571faa59
3 changed files with 41 additions and 36 deletions

View File

@@ -154,51 +154,45 @@ public class CleanOrderEventListener {
/**
* 异步重置客流计数器
* <p>
* 在工单创建成功后重置阈值计数器,确保:
* 1. 工单创建和计数器重置在同一事务语义下AFTER_COMMIT
* 2. 如果工单创建失败,计数器不会被错误重置
* 3. 由 Ops 模块(业务方)决定重置时机,职责清晰
*/
@Async("ops-task-executor")
public void asyncResetTrafficCounter(OrderCreatedEvent event) {
try {
Long deviceId = (Long) event.getPayload().get("triggerDeviceId");
@SuppressWarnings("unchecked")
Map<String, Object> triggerData = (Map<String, Object>) event.getPayload().get("triggerData");
if (deviceId == null || triggerData == null) {
log.warn("[CleanOrderEventListener] 缺少客流数据,跳过重置: orderId={}, deviceId={}, triggerData={}",
event.getOrderId(), deviceId, triggerData);
if (deviceId == null) {
log.warn("[CleanOrderEventListener] 缺少设备ID,跳过重置: orderId={}",
event.getOrderId());
return;
}
Object actualCountObj = triggerData.get("actualCount");
if (actualCountObj == null) {
log.warn("[CleanOrderEventListener] 缺少客流值,跳过重置: orderId={}", event.getOrderId());
return;
}
// 将当前客流值设为新的基准值
Long newBaseValue = ((Number) actualCountObj).longValue();
// 构建重置请求
ResetTrafficCounterReqDTO reqDTO = ResetTrafficCounterReqDTO.builder()
.deviceId(deviceId)
.newBaseValue(newBaseValue)
.orderId(event.getOrderId())
.remark("工单创建后重置计数器")
.remark("工单创建成功后重置阈值计数器")
.build();
// 调用 IoT 模块 RPC 接口
var result = iotDeviceControlApi.resetTrafficCounter(reqDTO);
if (result.getData() != null && result.getData()) {
log.info("[CleanOrderEventListener] 客流计数器重置成功: orderId={}, deviceId={}, newBaseValue={}",
event.getOrderId(), deviceId, newBaseValue);
} else {
log.warn("[CleanOrderEventListener] 客流计数器重置失败: orderId={}, deviceId={}",
log.info("[CleanOrderEventListener] 阈值计数器重置成功: orderId={}, deviceId={}",
event.getOrderId(), deviceId);
} else {
log.error("[CleanOrderEventListener] 阈值计数器重置失败: orderId={}, deviceId={}",
event.getOrderId(), deviceId);
// TODO: 发送告警,需要人工介入检查
}
} catch (Exception e) {
// 重置失败不应影响主流程
log.error("[CleanOrderEventListener] 客流计数器重置异常: orderId={}", event.getOrderId(), e);
log.error("[CleanOrderEventListener] 阈值计数器重置异常: orderId={}", event.getOrderId(), e);
// TODO: 发送告警
}
}