feat(iot): 增加设备告警统计功能

- 在 DeviceStatusVo 中添加在线、离线、停用设备数量以及直连设备、网关设备和网关子设备数量字段
- 在 DataWarningVo 中添加一级、二级、三级告警数量字段
- 修改 DeviceServiceImpl 中的查询方法,增加各类设备数量的统计
- 修改 RecordDataRepository 接口,添加按位统计告警数量的方法
- 更新 RecordDataServiceImpl 中的数据统计逻辑,支持多级别告警统计
This commit is contained in:
zhuangtianxiang 2025-03-02 15:48:27 +08:00
parent 4ddf88b799
commit 153bd8cd40
6 changed files with 63 additions and 3 deletions

View File

@ -140,7 +140,7 @@ public class DeviceController {
}
/**
*
* 查询设备告警信息
*/
@GetMapping("/data/status")
@PreAuthorize("hasAuthority('iot:device:query')")

View File

@ -200,6 +200,12 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceRepository, Device> imp
vo.propertyCount = propertyRepo.selectCount(null);
vo.serveCount = serveRepo.selectCount(null);
vo.eventCount = eventRepo.selectCount(null);
vo.onlineCount = baseMapper.selectCount(new LambdaQueryWrapper<Device>().eq(Device::getOnline, true));
vo.offlineCount = baseMapper.selectCount(new LambdaQueryWrapper<Device>().eq(Device::getOnline, false));
vo.disabledCount = baseMapper.selectCount(new LambdaQueryWrapper<Device>().eq(Device::getState, Device.Status.UNACTIVATED));
vo.directCount = productRepo.selectCount(new LambdaQueryWrapper<Product>().eq(Product::getLink, Product.LinkType.HTTP));
vo.gatewayCount = productRepo.selectCount(new LambdaQueryWrapper<Product>().eq(Product::getLink, Product.LinkType.TCP));
vo.gatewaySubCount = productRepo.selectCount(new LambdaQueryWrapper<Product>().eq(Product::getLink, Product.LinkType.MQTT));
return vo;
}
}

View File

@ -27,4 +27,34 @@ public class DeviceStatusVo {
*/
public Long eventCount;
/**
* 在线数量
*/
public Long onlineCount;
/**
* 离线数量
*/
public Long offlineCount;
/**
* 停用数量
*/
public Long disabledCount;
/**
* 直连设备
*/
public Long directCount;
/**
* 网关设备
*/
public Long gatewayCount;
/**
* 网关子设备
*/
public Long gatewaySubCount;
}

View File

@ -16,4 +16,19 @@ public class DataWarningVo {
* 今日新增
*/
private Long todayWarningCount;
/**
* 一级报警数
*/
private Long firstWarningCount;
/**
* 二级报警数
*/
private Long secondWarningCount;
/**
* 三级报警数
*/
private Long thirdWarningCount;
}

View File

@ -12,9 +12,12 @@ import java.util.List;
* @author zhuang
*/
public interface RecordDataRepository extends BaseMapper<RecordData> {
@Select("SELECT COUNT(*) FROM iot_record_data WHERE content->>'warning' IS NOT NULL AND (content->>'warning')::int & 1 = 1")
@Select("SELECT COUNT(*) FROM iot_record_data WHERE content->>'warning' IS NOT NULL AND (content->>'warning')::int & 1 = 0 AND ((content->>'warning')::int & ~1) > 0")
long countWarnings();
@Select("SELECT COUNT(*) FROM iot_record_data WHERE content->>'warning' IS NOT NULL AND (content->>'warning')::int & 1 = 1 AND record_time >= #{todayStart}")
@Select("SELECT COUNT(*) FROM iot_record_data WHERE content->>'warning' IS NOT NULL AND ((content->>'warning')::int & 1 = 0) AND ((content->>'warning')::int & ~1) > 0 AND record_time >= #{todayStart}")
long countTodayWarnings(@Param("todayStart") LocalDateTime todayStart);
@Select("SELECT COUNT(*) FROM iot_record_data WHERE content->>'warning' IS NOT NULL AND (content->>'warning')::int & #{bitPosition} = #{bitPosition}")
long countWarningsByBit(@Param("bitPosition") int bitPosition);
}

View File

@ -45,8 +45,14 @@ public class RecordDataServiceImpl extends ServiceImpl<RecordDataRepository, Rec
LocalDateTime todayStart = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0);
long warningCount = baseMapper.countWarnings();
long todayWarningCount = baseMapper.countTodayWarnings(todayStart);
long firstWarningCount = baseMapper.countWarningsByBit(1);
long secondWarningCount = baseMapper.countWarningsByBit(2);
long thirdWarningCount = baseMapper.countWarningsByBit(4);
dataWarningVo.setWarningCount(warningCount);
dataWarningVo.setTodayWarningCount(todayWarningCount);
dataWarningVo.setFirstWarningCount(firstWarningCount);
dataWarningVo.setSecondWarningCount(secondWarningCount);
dataWarningVo.setThirdWarningCount(thirdWarningCount);
return dataWarningVo;
}
}