package com.sandu.ximon.admin.service;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.github.pagehelper.PageHelper;
|
import com.sandu.common.domain.CommonPage;
|
import com.sandu.common.execption.BusinessException;
|
import com.sandu.common.object.BaseConditionVO;
|
import com.sandu.common.service.impl.BaseServiceImpl;
|
import com.sandu.common.util.ResUtils;
|
import com.sandu.common.util.SpringContextHolder;
|
import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereHeartbeatReportInnerFrame;
|
import com.sandu.ximon.admin.manager.iot.rrpc.enums.AtmoFunctionCode;
|
import com.sandu.ximon.admin.security.SecurityUtils;
|
import com.sandu.ximon.admin.utils.RedisUtils;
|
import com.sandu.ximon.admin.utils.StringUtil;
|
import com.sandu.ximon.dao.bo.AirDataBo;
|
import com.sandu.ximon.dao.domain.AirData;
|
import com.sandu.ximon.dao.domain.AirEquipment;
|
import com.sandu.ximon.dao.domain.PoleBinding;
|
import com.sandu.ximon.dao.mapper.AirDataMapper;
|
import lombok.AllArgsConstructor;
|
import org.apache.commons.lang.StringUtils;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.stereotype.Service;
|
|
import java.util.List;
|
|
@Service
|
@AllArgsConstructor
|
public class AirDataService extends BaseServiceImpl<AirDataMapper, AirData> {
|
private final AirDataMapper airDataMapper;
|
private final AirEquipmentService airEquipmentService;
|
|
/**
|
* 保存上报大气心跳数据
|
*
|
* @return 是否成功
|
*/
|
public boolean saveReportData(String deviceName, A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage heartBeatDataPackage) {
|
if (heartBeatDataPackage == null) {
|
System.out.println("保存大气设备心跳包数据异常,心跳包为空!");
|
return false;
|
}
|
|
AirData airData = new AirData();
|
BeanUtils.copyProperties(heartBeatDataPackage, airData);
|
airData.setDeviceMac(deviceName);
|
|
//将设备信息添加到大气设备表
|
AirEquipment airEquipment = new AirEquipment();
|
airEquipment.setId(airData.getId());
|
airEquipment.setMac(airData.getDeviceMac());
|
airEquipment.setDeviceType(heartBeatDataPackage.getDeviceType());
|
airEquipment.setModuleWarmUpStatusFlag(heartBeatDataPackage.getModuleWarmUpStatusFlag());
|
//温度传感器
|
airEquipment.setTemperature(heartBeatDataPackage.getTemperature() != null ? 1 : 0);
|
//湿度传感器
|
airEquipment.setHumidity(heartBeatDataPackage.getHumidity() != null ? 1 : 0);
|
//风速传感器
|
airEquipment.setWindSpeed(heartBeatDataPackage.getWindSpeed() != null ? 1 : 0);
|
//风向传感器
|
if (heartBeatDataPackage.getWindDirection() == null) {
|
airEquipment.setWindDirection(0);
|
} else if (heartBeatDataPackage.getWindDirection().contains("度")) {
|
//360度传感器
|
airEquipment.setWindDirection(2);
|
} else {
|
//八向仪传感器
|
airEquipment.setWindDirection(1);
|
}
|
//风力传感器
|
airEquipment.setWindPower(heartBeatDataPackage.getWindPower() != null ? 1 : 0);
|
//气压传感器
|
airEquipment.setPressure(heartBeatDataPackage.getPressure() != null ? 1 : 0);
|
//光强传感器
|
airEquipment.setLightIntensity(heartBeatDataPackage.getLightIntensity() != null ? 1 : 0);
|
//噪音传感器
|
airEquipment.setNoise(heartBeatDataPackage.getNoise() != null ? 1 : 0);
|
//PM25传感器
|
airEquipment.setPm25(heartBeatDataPackage.getPm25() != null ? 1 : 0);
|
//PM10传感器
|
airEquipment.setPm10(heartBeatDataPackage.getPm10() != null ? 1 : 0);
|
//TSP传感器
|
airEquipment.setTsp(heartBeatDataPackage.getTsp() != null ? 1 : 0);
|
//雨量传感器
|
airEquipment.setRain(heartBeatDataPackage.getRain() != null ? 1 : 0);
|
//SO2传感器
|
airEquipment.setSo2(heartBeatDataPackage.getSo2() != null ? 1 : 0);
|
//甲醛传感器
|
airEquipment.setEch2o(heartBeatDataPackage.getEch2o() != null ? 1 : 0);
|
//NO2传感器
|
airEquipment.setNo2(heartBeatDataPackage.getNo2() != null ? 1 : 0);
|
//TVOC传感器
|
airEquipment.setTvoc(heartBeatDataPackage.getTvoc() != null ? 1 : 0);
|
//CO传感器
|
airEquipment.setCo(heartBeatDataPackage.getCo() != null ? 1 : 0);
|
//CO2传感器
|
airEquipment.setCo2(heartBeatDataPackage.getCo2() != null ? 1 : 0);
|
//03传感器
|
airEquipment.setO3(heartBeatDataPackage.getO3() != null ? 1 : 0);
|
//氟化物传感器
|
airEquipment.setFluoride(heartBeatDataPackage.getFluoride() != null ? 1 : 0);
|
|
airEquipmentService.addAirEquipment(airEquipment);
|
|
//存缓存心跳包
|
RedisUtils.getBean().set(AtmoFunctionCode.AIR_HEARTBEAT.getCode() + deviceName, heartBeatDataPackage);
|
//存缓存状态
|
RedisUtils.getBean().set(AtmoFunctionCode.AIR_HEARTBEAT_STATE.getCode() + deviceName, heartBeatDataPackage, 300L);
|
|
return save(airData);
|
}
|
|
/**
|
* 查询大气数据(模糊查询)
|
*/
|
public CommonPage listAirDataByKeyword(BaseConditionVO baseConditionVO, String keyword) {
|
PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
|
List<Long> listAirId;
|
if (SecurityUtils.getClientId() == null) {
|
listAirId = baseMapper.listAirId(keyword, null);
|
} else {
|
listAirId = baseMapper.listAirId(keyword, SecurityUtils.getUserId());
|
}
|
CommonPage commonPage = CommonPage.restPage(listAirId);
|
if (CollUtil.isEmpty(listAirId)) {
|
return commonPage;
|
}
|
List<AirDataBo> airDataBos = baseMapper.listAirDataByIds(listAirId);
|
commonPage.setList(airDataBos);
|
return commonPage;
|
|
}
|
|
/**
|
* 查询大气设备历史数据
|
*/
|
public List<AirDataBo> listAirDataOfDeviceCode(BaseConditionVO baseConditionVO, String deviceMac) {
|
if (StringUtils.isEmpty(deviceMac)) {
|
throw new BusinessException("设备号不能为空!");
|
}
|
PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize());
|
List<AirDataBo> list = baseMapper.listAirDataHistory(deviceMac);
|
|
return list;
|
|
}
|
|
|
/**
|
* +
|
* 根据灯杆id查询大气数据
|
*/
|
public A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage getDataByPoleid(Long poleId) {
|
String code;
|
if (SecurityUtils.getClientId() != null) {
|
code = baseMapper.getCodeByPoleId(poleId, SecurityUtils.getUserId());
|
} else {
|
code = baseMapper.getCodeByPoleId(poleId, null);
|
}
|
A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage heartBeatDataPackage
|
= RedisUtils.getBean().get(AtmoFunctionCode.AIR_HEARTBEAT_NONG_GENG.getCode() + code, A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage.class);
|
if (heartBeatDataPackage == null) {
|
return null;
|
}
|
|
return heartBeatDataPackage;
|
}
|
|
}
|