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

@@ -25,8 +25,8 @@ public class ResetTrafficCounterReqDTO {
@NotNull(message = "设备ID不能为空")
private Long deviceId;
@Schema(description = "新的基准值", requiredMode = Schema.RequiredMode.REQUIRED, example = "1500")
@NotNull(message = "基准值不能为空")
@Schema(description = "新的基准值(已废弃,无需传递)", example = "1500")
@Deprecated
private Long newBaseValue;
@Schema(description = "关联的工单ID用于日志追踪", example = "12345")

View File

@@ -9,7 +9,8 @@ import com.viewsh.module.iot.core.enums.IotDeviceMessageMethodEnum;
import com.viewsh.module.iot.core.enums.IotDeviceStateEnum;
import com.viewsh.module.iot.core.mq.message.IotDeviceMessage;
import com.viewsh.module.iot.dal.dataobject.device.IotDeviceDO;
import com.viewsh.module.iot.dal.redis.clean.TrafficCounterBaseRedisDAO;
import com.viewsh.module.iot.dal.redis.clean.TrafficCounterRedisDAO;
import com.viewsh.module.iot.service.integration.clean.CleanOrderIntegrationConfigService;
import com.viewsh.module.iot.service.device.IotDeviceService;
import com.viewsh.module.iot.service.device.message.IotDeviceMessageService;
import io.swagger.v3.oas.annotations.Operation;
@@ -48,7 +49,10 @@ public class IotDeviceControlApiImpl implements IotDeviceControlApi {
private IotDeviceMessageService deviceMessageService;
@Resource
private TrafficCounterBaseRedisDAO trafficCounterBaseRedisDAO;
private TrafficCounterRedisDAO trafficCounterRedisDAO;
@Resource
private CleanOrderIntegrationConfigService configService;
@Override
@PostMapping(PREFIX + "/invoke-service")
@@ -130,29 +134,36 @@ public class IotDeviceControlApiImpl implements IotDeviceControlApi {
public CommonResult<Boolean> resetTrafficCounter(@RequestBody ResetTrafficCounterReqDTO reqDTO) {
try {
Long deviceId = reqDTO.getDeviceId();
Long newBaseValue = reqDTO.getNewBaseValue();
log.info("[resetTrafficCounter] 重置客流计数器: deviceId={}, newBaseValue={}, orderId={}, remark={}",
deviceId, newBaseValue, reqDTO.getOrderId(), reqDTO.getRemark());
log.info("[resetTrafficCounter] 重置客流计数器deviceId={}, orderId={}, remark={}",
deviceId, reqDTO.getOrderId(), reqDTO.getRemark());
// 1. 验证设备存在
IotDeviceDO device = deviceService.getDeviceFromCache(deviceId);
if (device == null) {
log.warn("[resetTrafficCounter] 设备不存在: deviceId={}", deviceId);
log.warn("[resetTrafficCounter] 设备不存在deviceId={}", deviceId);
return success(false);
}
// 2. 重置基准值
trafficCounterBaseRedisDAO.setBaseValue(deviceId, newBaseValue);
// 2. 获取区域ID
CleanOrderIntegrationConfigService.AreaDeviceConfigWrapper wrapper =
configService.getConfigWrapperByDeviceId(deviceId);
if (wrapper == null) {
log.warn("[resetTrafficCounter] 设备无区域关联deviceId={}", deviceId);
return success(false);
}
log.info("[resetTrafficCounter] 客流计数器重置成功: deviceId={}, newBaseValue={}",
deviceId, newBaseValue);
// 3. 重置阈值计数器(删除 key
trafficCounterRedisDAO.resetThreshold(deviceId, wrapper.getAreaId());
log.info("[resetTrafficCounter] 客流计数器重置成功deviceId={}, areaId={}",
deviceId, wrapper.getAreaId());
return success(true);
} catch (Exception e) {
log.error("[resetTrafficCounter] 重置客流计数器失败: deviceId={}, newBaseValue={}",
reqDTO.getDeviceId(), reqDTO.getNewBaseValue(), e);
log.error("[resetTrafficCounter] 重置客流计数器失败deviceId={}",
reqDTO.getDeviceId(), e);
return success(false);
}
}