添加水电双计设备历史数据保存逻辑,同步在线状态定时任务

This commit is contained in:
蒾酒 2025-01-02 13:34:34 +08:00
parent f8dc8d154f
commit 24344e870a
4 changed files with 80 additions and 8 deletions

View File

@ -123,6 +123,11 @@ public class DeviceOtherMsgConsumer {
//获取流量计累计用水量/瞬时流量
Float meterSum = data1.getFloat("meterSum");
Float meterIns = data1.getFloat("meterIns");
//获取瞬时功率/累计电量
Float insPower = data1.getFloat("insPower");
Float sumEle = data1.getFloat("sumEle");
//获取设备当前运行状态
Integer valveState = data1.getInt("valveState");
@ -158,6 +163,22 @@ public class DeviceOtherMsgConsumer {
}
//同步数据
up.update();
//保存历史数据
NgWaterPumpUsageRecords historyData = new NgWaterPumpUsageRecords();
//瞬时流量
historyData.setInsFlow(String.valueOf(meterIns));
//累计流量
historyData.setSumFlow(String.valueOf(meterSum));
//瞬时功率
historyData.setInsPower(String.valueOf(insPower));
//累计用电量
historyData.setSumEle(String.valueOf(sumEle));
//实时时间
historyData.setRealTime(DateUtils.getNowDate());
int i = ngWaterPumpUsageRecordsMapper.insertNgWaterPumpUsageRecords(historyData);
if(i<1){
log.error("保存灌溉控制器历史数据失败");
}
}
//收到关阀时定时报文
else if(JSONUtil.parseObj(data1).get("action").equals("safeMsg")){
@ -174,6 +195,9 @@ public class DeviceOtherMsgConsumer {
//获取流量计累计用水量/瞬时流量
Float meterSum = data1.getFloat("meterSum");
Float meterIns = data1.getFloat("meterIns");
//获取瞬时功率/累计电量
Float insPower = data1.getFloat("insPower");
Float sumEle = data1.getFloat("sumEle");
//获取设备当前运行状态
Integer valveState = data1.getInt("valveState");
@ -209,6 +233,22 @@ public class DeviceOtherMsgConsumer {
}
//同步数据
up.update();
//保存历史数据
NgWaterPumpUsageRecords historyData = new NgWaterPumpUsageRecords();
//瞬时流量
historyData.setInsFlow(String.valueOf(meterIns));
//累计流量
historyData.setSumFlow(String.valueOf(meterSum));
//瞬时功率
historyData.setInsPower(String.valueOf(insPower));
//累计用电量
historyData.setSumEle(String.valueOf(sumEle));
//实时时间
historyData.setRealTime(DateUtils.getNowDate());
int i = ngWaterPumpUsageRecordsMapper.insertNgWaterPumpUsageRecords(historyData);
if(i<1){
log.error("保存灌溉控制器历史数据失败");
}
}
//开阀门关阀门
@ -377,13 +417,7 @@ public class DeviceOtherMsgConsumer {
}catch (Exception e){
}
}
deviceCmdAckHandler(new String(data));
updateDeviceOnlineStatus( productId,serialNumber);
// updateDeviceOnlineStatusDb(serialNumber);

View File

@ -1,7 +1,10 @@
package com.fastbee.iot.service;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fastbee.iot.domain.DeviceReportInfo;
import com.fastbee.iot.domain.NgFlowDeviceData;
/**
* 设备上电审核前上报的基础信息Service接口
@ -9,7 +12,7 @@ import com.fastbee.iot.domain.DeviceReportInfo;
* @author kerwincui
* @date 2024-12-05
*/
public interface IDeviceReportInfoService
public interface IDeviceReportInfoService extends IService<DeviceReportInfo>
{
/**
* 查询设备上电审核前上报的基础信息

View File

@ -5,9 +5,12 @@ import java.util.List;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fastbee.common.exception.ServiceException;
import com.fastbee.iot.domain.Device;
import com.fastbee.iot.domain.NgFlowDeviceData;
import com.fastbee.iot.mapper.DeviceMapper;
import com.fastbee.iot.mapper.NgFlowDeviceDataMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.fastbee.iot.mapper.DeviceReportInfoMapper;
@ -21,7 +24,7 @@ import com.fastbee.iot.service.IDeviceReportInfoService;
* @date 2024-12-05
*/
@Service
public class DeviceReportInfoServiceImpl implements IDeviceReportInfoService
public class DeviceReportInfoServiceImpl extends ServiceImpl<DeviceReportInfoMapper, DeviceReportInfo> implements IDeviceReportInfoService
{
@Autowired
private DeviceReportInfoMapper deviceReportInfoMapper;

View File

@ -15,6 +15,7 @@ import com.fastbee.iot.domain.DeviceReportInfo;;
import com.fastbee.iot.domain.NgFlowDeviceData;
import com.fastbee.iot.mapper.DeviceReportInfoMapper;
import com.fastbee.iot.mapper.NgFlowDeviceDataMapper;
import com.fastbee.iot.service.IDeviceReportInfoService;
import com.fastbee.iot.service.INgFlowDeviceDataService;
import com.fastbee.iot.zhanlian.ZhanLianConfig;
import lombok.extern.slf4j.Slf4j;
@ -48,6 +49,9 @@ public class NGFlowDeviceDateTask {
@Autowired
private DeviceReportInfoMapper deviceReportInfoMapper;
@Autowired
private IDeviceReportInfoService deviceReportInfoService;
@Autowired
private NgFlowDeviceDataMapper ngFlowDeviceDataMapper;
@ -275,6 +279,34 @@ public class NGFlowDeviceDateTask {
boolean saveBatch = ngFlowDeviceDataService.saveBatch(ngFlowDeviceDataList);
}
/**
* 同步水电双计设备在线状态
*/
public void syncDeviceOnLineStatus(){
List<DeviceReportInfo> list = new LambdaQueryChainWrapper<>(deviceReportInfoMapper).select(DeviceReportInfo::getSerialNumber).list();
//查询设备在线状态
//批量更新在线状态设备列表
List<DeviceReportInfo> batchUpList = new ArrayList<>();
list.forEach(d->{
if(d.getType()==1){
Boolean hassed = stringRedisTemplate.hasKey("neixiang_device_online_status:" + 147 + ":" + d.getSerialNumber());
DeviceReportInfo dev = new DeviceReportInfo();
dev.setSerialNumber(d.getSerialNumber());
if(hassed){
dev.setOnLine(1);
}else{
dev.setOnLine(0);
}
batchUpList.add(dev);
}
});
boolean batch = deviceReportInfoService.updateBatchById(batchUpList);
if(!batch){
log.error("批量同步水电双计设备在线状态失败!");
}
}
public static void main(String[] args) {
NGFlowDeviceDateTask ngFlowDeviceDateTask = new NGFlowDeviceDateTask();
Map<String, String> deviceRealTimeData =ngFlowDeviceDateTask.getDeviceRealTimeData("3834");