package com.moral.api.service.impl; import com.moral.api.entity.Device; import com.moral.api.entity.HistoryFiveMinutely; import com.moral.api.entity.MonitorPoint; import com.moral.api.mapper.HistoryFiveMinutelyMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.api.pojo.dto.historyFiveMinutely.DeviceAndFiveMinuteDataDTO; import com.moral.api.pojo.form.device.MonitorPointQueryForm; import com.moral.api.pojo.form.historyFiveMinutely.QueryDeviceAndFiveMinuteDataForm; import com.moral.api.service.HistoryFiveMinutelyService; import com.moral.api.service.MonitorPointService; import com.moral.constant.RedisConstants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** *

* 5分钟数据表 服务实现类 *

* * @author moral * @since 2021-07-15 */ @Service public class HistoryFiveMinutelyServiceImpl extends ServiceImpl implements HistoryFiveMinutelyService { @Autowired MonitorPointService monitorPointService; @Autowired RedisTemplate redisTemplate; @Override public List queryDeviceAndFiveMinuteData(QueryDeviceAndFiveMinuteDataForm form) { //取参 Integer organizationId = form.getOrganizationId(); Integer regionCode = form.getRegionCode(); String sensorCode = form.getSensorCode(); //查询组织在对应地区下的站点以及设备 List monitorPoints = monitorPointService.queryByOrgIdAndRegionCode(new MonitorPointQueryForm(organizationId, regionCode)); List devices = new ArrayList<>(); for (MonitorPoint monitorPoint : monitorPoints) { List monitorPointDevices = monitorPoint.getDevices(); if (!ObjectUtils.isEmpty(monitorPointDevices)) devices.addAll(monitorPointDevices); } //查询所有设备对应的数据 List dtos = new ArrayList<>(); for (Device device : devices) { DeviceAndFiveMinuteDataDTO dto = new DeviceAndFiveMinuteDataDTO(); String mac = device.getMac(); Map sensorValues = (Map) redisTemplate.opsForHash().get(RedisConstants.DATA_FIVE_MINUTES, mac); Map value = new HashMap<>(); if (sensorValues!=null&&sensorValues.get(sensorCode) != null) value.put(sensorCode,sensorValues.get(sensorCode)); else value.put(sensorCode,null); dto.setDevice(device); dto.setSensorValue(value); dtos.add(dto); } return dtos; } }