添加监控实时状态获取定时任务

This commit is contained in:
2025-01-15 09:40:42 +08:00
parent 2b9a21c063
commit 3a642833c4
6 changed files with 214 additions and 11 deletions

View File

@ -1,5 +1,8 @@
package com.fastbee.iot.timer;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.fastbee.deviceData.api.devlink.service.ZhanLianMetDataService;
@ -8,6 +11,7 @@ import com.fastbee.deviceData.api.devlink.service.ZhanLianMoistureDataService;
import com.fastbee.deviceData.api.devlink.service.ZhanLianPhotovoltaicDataService;
import com.fastbee.deviceData.api.renke.service.RenkeTargetpestsDeviceDataService;
import com.fastbee.deviceData.api.renke.service.RenkeWormDeviceDataService;
import com.fastbee.deviceData.api.yingshiyun.service.YingshiyunService;
import com.fastbee.deviceData.domain.*;
import com.fastbee.deviceData.mapper.*;
@ -15,14 +19,13 @@ import com.fastbee.deviceData.service.IDeviceRealtimedataWormsService;
import com.fastbee.deviceData.service.impl.DeviceRealtimedataMeteorologyServiceImpl;
import com.fastbee.deviceData.service.impl.DeviceRealtimedataMoistureServiceImpl;
import com.fastbee.deviceData.service.impl.DeviceRealtimedataWormsServiceImpl;
import com.fastbee.deviceInfo.domain.DeviceInformationMeteorology;
import com.fastbee.deviceInfo.domain.DeviceInformationMoisture;
import com.fastbee.deviceInfo.domain.DeviceInformationTargetpests;
import com.fastbee.deviceInfo.domain.DeviceInformationWorms;
import com.fastbee.deviceInfo.domain.*;
import com.fastbee.deviceInfo.mapper.*;
import com.fastbee.deviceInfo.service.IDeviceInformationMonitorService;
import com.fastbee.iot.mapper.DeviceMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.stream.Consumer;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
@ -98,6 +101,15 @@ public class DeviceDateTask {
@Autowired
private DeviceInformationTargetpestsMapper targetpestsMapper;
@Autowired
private YingshiyunService yingshiyunService;
@Autowired
private NgYingshiCloudIntegrationInfoMapper yingshiCloudIntegrationInfoMapper;
@Autowired
private IDeviceInformationMonitorService deviceInformationMonitorService;
@ -252,5 +264,80 @@ public class DeviceDateTask {
System.out.println("插入数据失败!");
}
/**
* 获取监控设备实时状态并更新
*/
public void getMonitorDeviceRealtimeStatusData() throws Exception{
try{
//获取所有监控设备编码列表
List<DeviceInformationMonitor> monitorList=new LambdaQueryChainWrapper<>(monitorMapper)
.select(DeviceInformationMonitor::getDeviceEncoding,DeviceInformationMonitor::getStatus,DeviceInformationMonitor::getId,DeviceInformationMonitor::getProjectId)
.list();
// log.info("monitorLIST:"+monitorList);
//根据projectId对监控设备列表进行分组
Map<Long, List<DeviceInformationMonitor>> collect = monitorList.stream().collect(Collectors.groupingBy(DeviceInformationMonitor::getProjectId));
// System.err.println("collect:"+collect);
//获取所有萤石云对接信息列表
List<NgYingshiCloudIntegrationInfo> integrationInfoList=new LambdaQueryChainWrapper<>(yingshiCloudIntegrationInfoMapper)
.select(NgYingshiCloudIntegrationInfo::getAppkey,NgYingshiCloudIntegrationInfo::getAppsecret,NgYingshiCloudIntegrationInfo::getProjectid)
.list();
// System.err.println("integrationInfoList:"+integrationInfoList);
if(integrationInfoList.size()==0)
{
// System.err.println("设备信息不存在");
log.warn("设备信息不存在");
}
//k为projectIdv为projectId下的设备列表
collect.forEach((k,v)->{
/*log.info("k:"+k);
log.info("v:"+v);*/
//获取萤石云对接信息
List<NgYingshiCloudIntegrationInfo> list = new LambdaQueryChainWrapper<>(yingshiCloudIntegrationInfoMapper)
.select(NgYingshiCloudIntegrationInfo::getAppkey, NgYingshiCloudIntegrationInfo::getAppsecret)
.eq(NgYingshiCloudIntegrationInfo::getProjectid, k)
.list();
NgYingshiCloudIntegrationInfo yingshiCloudIntegrationInfo;
if(!list.isEmpty())
{
yingshiCloudIntegrationInfo=list.get(0);
//获取accessToken
String accessToken=yingshiyunService.getAuth(yingshiCloudIntegrationInfo.getAppkey(),yingshiCloudIntegrationInfo.getAppsecret());
//获取设备信息列表
JSONObject deviceInfoList = yingshiyunService.getInfoList(accessToken);
log.info(k+"的监控设备json"+deviceInfoList);
if(deviceInfoList.isEmpty())
{
log.warn(k+"的监控设备json为空");
}
JSONArray data= deviceInfoList.getJSONArray("data");
log.info(k+"的监控设备信息:"+data);
data.forEach(d->{
JSONObject object = JSONUtil.parseObj(d.toString());
String deviceSerial=object.getStr("deviceSerial");//设备编码
Long status=object.getLong("status");//设备状态
for(DeviceInformationMonitor device:v)
{
if(device.getDeviceEncoding().equals(deviceSerial))
{
device.setStatus(status);//设置status0=离线1=在线
break;
}
}
});
}
//批量更新设备状态数据
boolean flag=deviceInformationMonitorService.updateBatchById(v);
if(!flag)
{
log.warn("监控设备状态更新失败");
}
});
}catch (Exception e){
log.warn("获取监控设备实时状态失败",e);
}
}
}