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 { 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 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 airDataBos = baseMapper.listAirDataByIds(listAirId); commonPage.setList(airDataBos); return commonPage; } /** * 查询大气设备历史数据 */ public List listAirDataOfDeviceCode(BaseConditionVO baseConditionVO, String deviceMac) { if (StringUtils.isEmpty(deviceMac)) { throw new BusinessException("设备号不能为空!"); } PageHelper.startPage(baseConditionVO.getPageNo(), baseConditionVO.getPageSize()); List 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.getCode() + code, A5AtmosphereHeartbeatReportInnerFrame.HeartBeatDataPackage.class); if (heartBeatDataPackage == null) { return null; } return heartBeatDataPackage; } }