package com.moral.api.service.impl; 
 | 
  
 | 
import com.alibaba.fastjson.JSONObject; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; 
 | 
import com.moral.api.entity.Device; 
 | 
import com.moral.api.entity.GovMonitorPoint; 
 | 
import com.moral.api.entity.HistoryHourly; 
 | 
import com.moral.api.entity.MonitorPoint; 
 | 
import com.moral.api.entity.Organization; 
 | 
import com.moral.api.mapper.DeviceMapper; 
 | 
import com.moral.api.mapper.GovMonitorPointMapper; 
 | 
import com.moral.api.service.GovMonitorPointService; 
 | 
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 
 | 
import com.moral.api.service.MonitorPointService; 
 | 
import com.moral.api.service.OrganizationService; 
 | 
import com.moral.constant.Constants; 
 | 
import com.moral.constant.RedisConstants; 
 | 
import com.moral.pojo.AQI; 
 | 
import com.moral.util.AQIUtils; 
 | 
import com.moral.util.RegionCodeUtils; 
 | 
  
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.data.redis.core.RedisTemplate; 
 | 
import org.springframework.stereotype.Service; 
 | 
  
 | 
import javax.annotation.Resource; 
 | 
  
 | 
import java.math.BigDecimal; 
 | 
import java.text.SimpleDateFormat; 
 | 
import java.util.*; 
 | 
import java.util.stream.Collectors; 
 | 
  
 | 
/** 
 | 
 * <p> 
 | 
 * 服务实现类 
 | 
 * </p> 
 | 
 * 
 | 
 * @author moral 
 | 
 * @since 2021-09-16 
 | 
 */ 
 | 
@Service 
 | 
public class GovMonitorPointServiceImpl extends ServiceImpl<GovMonitorPointMapper, GovMonitorPoint> implements GovMonitorPointService { 
 | 
  
 | 
    @Autowired 
 | 
    GovMonitorPointMapper govMonitorPointMapper; 
 | 
    @Autowired 
 | 
    RedisTemplate redisTemplate; 
 | 
  
 | 
    @Resource 
 | 
    private OrganizationService organizationService; 
 | 
  
 | 
    @Autowired(required = false) 
 | 
    private DeviceMapper deviceMapper; 
 | 
  
 | 
    @Resource 
 | 
    private HistoryHourlyServiceImpl historyHourlyService; 
 | 
  
 | 
    @Autowired 
 | 
    private MonitorPointService monitorPointService; 
 | 
  
 | 
    @Override 
 | 
    public List<GovMonitorPoint> queryGovMonitorPointAndDataByRegionCode(Integer regionCode, String sensorCode) { 
 | 
        String regionCodeStr = RegionCodeUtils.regionCodeConvertToName(regionCode); 
 | 
        QueryWrapper<GovMonitorPoint> wrapper = new QueryWrapper<>(); 
 | 
        wrapper.eq(regionCodeStr, regionCode); 
 | 
        wrapper.eq("is_delete", Constants.NOT_DELETE); 
 | 
        wrapper.select("guid", "name", "longitude", "latitude", "station_level"); 
 | 
        List<GovMonitorPoint> govMonitorPoints = govMonitorPointMapper.selectList(wrapper); 
 | 
        for (GovMonitorPoint govMonitorPoint : govMonitorPoints) { 
 | 
            Object data = redisTemplate.opsForHash().get(RedisConstants.AQI_DATA, govMonitorPoint.getGuid()); 
 | 
            Map<String, Object> dataMap = (Map<String, Object>) data; 
 | 
            if (data != null && dataMap.get(sensorCode) != null) 
 | 
                govMonitorPoint.setData(String.valueOf(dataMap.get(sensorCode))); 
 | 
        } 
 | 
        return govMonitorPoints; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<GovMonitorPoint> selectGovMonitorPointsByOrgid(Map map) { 
 | 
        //根据组织id获取子组织 
 | 
        List<Organization> organizations = organizationService.getChildrenOrganizationsById(Integer.parseInt(map.get("organization_id").toString())); 
 | 
        Set<Integer> organization_ids = organizations.stream().map(organization -> organization.getId()).collect(Collectors.toSet()); 
 | 
        organization_ids.add(Integer.parseInt(map.get("organization_id").toString())); 
 | 
        //先获取组织下所有设备 
 | 
        QueryWrapper<Device> wrapper_device = new QueryWrapper<>(); 
 | 
        wrapper_device.in("organization_id", organization_ids).eq("is_delete", Constants.NOT_DELETE); 
 | 
        List<Device> devices = deviceMapper.selectList(wrapper_device); 
 | 
        //用集合存放所有设备的id 
 | 
        Set<String> guids = devices.stream().map(device -> device.getGuid()).collect(Collectors.toSet()); 
 | 
        //获取所有政府站点信息 
 | 
        QueryWrapper<GovMonitorPoint> wrapper_govMonitorPoint = new QueryWrapper<>(); 
 | 
        wrapper_govMonitorPoint.eq("is_delete", Constants.NOT_DELETE).in("guid", guids); 
 | 
        List<GovMonitorPoint> govMonitorPointList = govMonitorPointMapper.selectList(wrapper_govMonitorPoint); 
 | 
        return govMonitorPointList; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Map<String, Object> queryGovMonitorPointHoutlyDatyByGuidsAndOrgid(Map map) { 
 | 
        String[] guids = map.get("guids").toString().split(","); 
 | 
        Integer orgId = Integer.parseInt(map.get("organization_id").toString()); 
 | 
        String date = map.get("date").toString(); 
 | 
        String startTime = date + " 00:00:00"; 
 | 
        String endTime = date + " 23:00:01"; 
 | 
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//注意月份是MM 
 | 
        try { 
 | 
            Date startDate = simpleDateFormat.parse(startTime); 
 | 
            Date endDate = simpleDateFormat.parse(endTime); 
 | 
            Map<String, Object> resultMap = new HashMap<>(); 
 | 
            List govMonitorPointList = new ArrayList(); 
 | 
            //声明一个国控站点,存放最后的平均值信息 
 | 
            GovMonitorPoint govMonitorPoint_avg = new GovMonitorPoint(); 
 | 
            govMonitorPoint_avg.setId(0); 
 | 
            govMonitorPoint_avg.setName(""); 
 | 
            govMonitorPoint_avg.setGuid(""); 
 | 
            List<Map<String, Object>> data = new ArrayList<>(); 
 | 
            Map<String, Object> hour_1 = new HashMap<>(); 
 | 
            Map<String, Object> hour_2 = new HashMap<>(); 
 | 
            Map<String, Object> hour_3 = new HashMap<>(); 
 | 
            Map<String, Object> hour_4 = new HashMap<>(); 
 | 
            Map<String, Object> hour_5 = new HashMap<>(); 
 | 
            Map<String, Object> hour_6 = new HashMap<>(); 
 | 
            Map<String, Object> hour_7 = new HashMap<>(); 
 | 
            Map<String, Object> hour_8 = new HashMap<>(); 
 | 
            Map<String, Object> hour_9 = new HashMap<>(); 
 | 
            Map<String, Object> hour_10 = new HashMap<>(); 
 | 
            Map<String, Object> hour_11 = new HashMap<>(); 
 | 
            Map<String, Object> hour_12 = new HashMap<>(); 
 | 
            Map<String, Object> hour_13 = new HashMap<>(); 
 | 
            Map<String, Object> hour_14 = new HashMap<>(); 
 | 
            Map<String, Object> hour_15 = new HashMap<>(); 
 | 
            Map<String, Object> hour_16 = new HashMap<>(); 
 | 
            Map<String, Object> hour_17 = new HashMap<>(); 
 | 
            Map<String, Object> hour_18 = new HashMap<>(); 
 | 
            Map<String, Object> hour_19 = new HashMap<>(); 
 | 
            Map<String, Object> hour_20 = new HashMap<>(); 
 | 
            Map<String, Object> hour_21 = new HashMap<>(); 
 | 
            Map<String, Object> hour_22 = new HashMap<>(); 
 | 
            Map<String, Object> hour_23 = new HashMap<>(); 
 | 
            Map<String, Object> hour_24 = new HashMap<>(); 
 | 
            Map<String, Object> hour_AVG = new HashMap<>(); 
 | 
            for (String guid : guids) { 
 | 
                //获取政府站点信息 
 | 
                QueryWrapper<GovMonitorPoint> wrapper_govMonitorPoint = new QueryWrapper<>(); 
 | 
                wrapper_govMonitorPoint.eq("is_delete", Constants.NOT_DELETE).eq("guid", guid); 
 | 
                GovMonitorPoint govMonitorPoint = govMonitorPointMapper.selectOne(wrapper_govMonitorPoint); 
 | 
                if (!ObjectUtils.isEmpty(govMonitorPoint)) { 
 | 
                    govMonitorPointList.add(govMonitorPoint); 
 | 
                } else { 
 | 
                    continue; 
 | 
                } 
 | 
                int govMonitorPointId = govMonitorPoint.getId(); 
 | 
                QueryWrapper<Device> wrapper_device = new QueryWrapper<>(); 
 | 
                wrapper_device.eq("is_delete", Constants.NOT_DELETE).eq("organization_id", orgId).eq("guid", guid); 
 | 
                List<Device> devices = deviceMapper.selectList(wrapper_device); 
 | 
                List<String> macs = devices.stream().map(device -> device.getMac()).collect(Collectors.toList()); 
 | 
                List<List<HistoryHourly>> oneGovMonitorPointDevicesValue = new ArrayList(); 
 | 
                for (String mac : macs) { 
 | 
                    List<HistoryHourly> valueByMacAndTime = historyHourlyService.getValueByMacAndTime(mac, startDate, endDate); 
 | 
                    oneGovMonitorPointDevicesValue.add(valueByMacAndTime); 
 | 
                } 
 | 
                List<Double> PM2_5List_daliy = new ArrayList<>(); 
 | 
                List<Double> PM10List_daliy = new ArrayList<>(); 
 | 
                List<Double> SO2List_daliy = new ArrayList<>(); 
 | 
                List<Double> NO2List_daliy = new ArrayList<>(); 
 | 
                List<Double> COList_daliy = new ArrayList<>(); 
 | 
                List<Double> O3_1hList_daliy = new ArrayList<>(); 
 | 
                List<Double> O3_8hList_daliy = new ArrayList<>(); 
 | 
                Map<Integer, Double> O3_1hMap = new HashMap<>(); 
 | 
                for (int i = 0; i < 24; i++) { 
 | 
                    //声明一个Map,存放当前政府站点的六参和臭氧八小时滑动平均值数据 
 | 
                    Map<String, Object> oneGovMonitorPointOneHourData = new HashMap<>(); 
 | 
                    String time_hourly = ""; 
 | 
                    if (i < 10) { 
 | 
                        time_hourly = date + " 0" + i + ":00:00"; 
 | 
                    } else { 
 | 
                        time_hourly = date + " " + i + ":00:00"; 
 | 
                    } 
 | 
                    List<Double> PM2_5List = new ArrayList<>(); 
 | 
                    List<Double> PM10List = new ArrayList<>(); 
 | 
                    List<Double> SO2List = new ArrayList<>(); 
 | 
                    List<Double> NO2List = new ArrayList<>(); 
 | 
                    List<Double> COList = new ArrayList<>(); 
 | 
                    List<Double> O3_1hList = new ArrayList<>(); 
 | 
                    for (List<HistoryHourly> valueByMacAndTime : oneGovMonitorPointDevicesValue) { 
 | 
                        for (HistoryHourly historyHourly : valueByMacAndTime) { 
 | 
                            if (simpleDateFormat.format(historyHourly.getTime()).equals(time_hourly)) { 
 | 
                                JSONObject value = JSONObject.parseObject(historyHourly.getValue()); 
 | 
                                if (!ObjectUtils.isEmpty(value.get("a34004"))) { 
 | 
                                    PM2_5List.add(Double.parseDouble(value.get("a34004").toString())); 
 | 
                                } 
 | 
                                if (!ObjectUtils.isEmpty(value.get("a34002"))) { 
 | 
                                    PM10List.add(Double.parseDouble(value.get("a34002").toString())); 
 | 
                                } 
 | 
                                if (!ObjectUtils.isEmpty(value.get("a21026"))) { 
 | 
                                    SO2List.add(Double.parseDouble(value.get("a21026").toString())); 
 | 
                                } 
 | 
                                if (!ObjectUtils.isEmpty(value.get("a21004"))) { 
 | 
                                    NO2List.add(Double.parseDouble(value.get("a21004").toString())); 
 | 
                                } 
 | 
                                if (!ObjectUtils.isEmpty(value.get("a21005"))) { 
 | 
                                    COList.add(Double.parseDouble(value.get("a21005").toString())); 
 | 
                                } 
 | 
                                if (!ObjectUtils.isEmpty(value.get("a05024"))) { 
 | 
                                    O3_1hList.add(Double.parseDouble(value.get("a05024").toString())); 
 | 
                                } 
 | 
                            } 
 | 
                        } 
 | 
                    } 
 | 
                    Double PM2_5Avg = null; 
 | 
                    Double PM10Avg = null; 
 | 
                    Double SO2Avg = null; 
 | 
                    Double NO2Avg = null; 
 | 
                    Double COAvg = null; 
 | 
                    Double O3_1hAvg = null; 
 | 
                    if (PM2_5List.size() > 0) { 
 | 
                        PM2_5Avg = (double) Math.round(PM2_5List.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); 
 | 
                    } 
 | 
                    if (PM10List.size() > 0) { 
 | 
                        PM10Avg = (double) Math.round(PM10List.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); 
 | 
                    } 
 | 
                    if (SO2List.size() > 0) { 
 | 
                        SO2Avg = (double) Math.round(SO2List.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); 
 | 
                    } 
 | 
                    if (NO2List.size() > 0) { 
 | 
                        NO2Avg = (double) Math.round(NO2List.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); 
 | 
                    } 
 | 
                    if (COList.size() > 0) { 
 | 
                        COAvg = new BigDecimal(COList.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); 
 | 
                    } 
 | 
                    if (O3_1hList.size() > 0) { 
 | 
                        O3_1hAvg = (double) Math.round(O3_1hList.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); 
 | 
                    } 
 | 
                    if (!ObjectUtils.isEmpty(PM2_5Avg)) { 
 | 
                        PM2_5List_daliy.add(PM2_5Avg); 
 | 
                        oneGovMonitorPointOneHourData.put("a34004_" + govMonitorPointId, PM2_5Avg); 
 | 
                    } else { 
 | 
                        oneGovMonitorPointOneHourData.put("a34004_" + govMonitorPointId, null); 
 | 
                    } 
 | 
                    if (!ObjectUtils.isEmpty(PM10Avg)) { 
 | 
                        PM10List_daliy.add(PM10Avg); 
 | 
                        oneGovMonitorPointOneHourData.put("a34002_" + govMonitorPointId, PM10Avg); 
 | 
                    } else { 
 | 
                        oneGovMonitorPointOneHourData.put("a34002_" + govMonitorPointId, null); 
 | 
                    } 
 | 
                    if (!ObjectUtils.isEmpty(SO2Avg)) { 
 | 
                        SO2List_daliy.add(SO2Avg); 
 | 
                        oneGovMonitorPointOneHourData.put("a21026_" + govMonitorPointId, SO2Avg); 
 | 
                    } else { 
 | 
                        oneGovMonitorPointOneHourData.put("a21026_" + govMonitorPointId, null); 
 | 
                    } 
 | 
                    if (!ObjectUtils.isEmpty(NO2Avg)) { 
 | 
                        NO2List_daliy.add(NO2Avg); 
 | 
                        oneGovMonitorPointOneHourData.put("a21004_" + govMonitorPointId, NO2Avg); 
 | 
                    } else { 
 | 
                        oneGovMonitorPointOneHourData.put("a21004_" + govMonitorPointId, null); 
 | 
                    } 
 | 
                    if (!ObjectUtils.isEmpty(COAvg)) { 
 | 
                        COList_daliy.add(COAvg); 
 | 
                        oneGovMonitorPointOneHourData.put("a21005_" + govMonitorPointId, COAvg); 
 | 
                    } else { 
 | 
                        oneGovMonitorPointOneHourData.put("a21005_" + govMonitorPointId, null); 
 | 
                    } 
 | 
                    if (!ObjectUtils.isEmpty(O3_1hAvg)) { 
 | 
                        O3_1hList_daliy.add(O3_1hAvg); 
 | 
                        oneGovMonitorPointOneHourData.put("a05024_" + govMonitorPointId, O3_1hAvg); 
 | 
                        O3_1hMap.put(i, O3_1hAvg); 
 | 
                    } else { 
 | 
                        oneGovMonitorPointOneHourData.put("a05024_" + govMonitorPointId, null); 
 | 
                    } 
 | 
                    Double O3_8h = null; 
 | 
                    //当前时间 
 | 
                    Date now = new Date(); 
 | 
                    SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); 
 | 
                    //获取今天的日期 
 | 
                    String nowDay = sf.format(now); 
 | 
                    //对比的时间 
 | 
                    //String day = sf.format(date); 
 | 
                    int curHour24 = 25; 
 | 
                    if (date.equals(nowDay)) { 
 | 
                        Calendar calendar = Calendar.getInstance(); 
 | 
                        curHour24 = calendar.get(calendar.HOUR_OF_DAY); 
 | 
                    } 
 | 
                    if (i >= 7) { 
 | 
                        List<Double> O3_8hList = new ArrayList<>(); 
 | 
                        for (Integer key : O3_1hMap.keySet()) { 
 | 
                            if (i - 8 < key && key < i + 1) { 
 | 
                                O3_8hList.add(O3_1hMap.get(key)); 
 | 
                                O3_8hList_daliy.add(O3_1hMap.get(key)); 
 | 
                            } 
 | 
                        } 
 | 
                        if (i < curHour24) { 
 | 
                            if (O3_8hList.size() > 0) { 
 | 
                                O3_8h = (double) Math.round(O3_8hList.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); 
 | 
                            } 
 | 
                        } 
 | 
                    } 
 | 
                    oneGovMonitorPointOneHourData.put("O3_8h_" + govMonitorPointId, O3_8h); 
 | 
                    switch (i) { 
 | 
                        case 0: 
 | 
                            hour_1.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 1: 
 | 
                            hour_2.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 2: 
 | 
                            hour_3.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 3: 
 | 
                            hour_4.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 4: 
 | 
                            hour_5.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 5: 
 | 
                            hour_6.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 6: 
 | 
                            hour_7.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 7: 
 | 
                            hour_8.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 8: 
 | 
                            hour_9.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 9: 
 | 
                            hour_10.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 10: 
 | 
                            hour_11.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 11: 
 | 
                            hour_12.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 12: 
 | 
                            hour_13.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 13: 
 | 
                            hour_14.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 14: 
 | 
                            hour_15.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 15: 
 | 
                            hour_16.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 16: 
 | 
                            hour_17.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 17: 
 | 
                            hour_18.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 18: 
 | 
                            hour_19.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 19: 
 | 
                            hour_20.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 20: 
 | 
                            hour_21.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 21: 
 | 
                            hour_22.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 22: 
 | 
                            hour_23.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        case 23: 
 | 
                            hour_24.putAll(oneGovMonitorPointOneHourData); 
 | 
                            break; 
 | 
                        default: 
 | 
                            break; 
 | 
                    } 
 | 
                } 
 | 
                Double PM2_5Avg_daliy = null; 
 | 
                Double PM10Avg_daliy = null; 
 | 
                Double SO2Avg_daliy = null; 
 | 
                Double NO2Avg_daliy = null; 
 | 
                Double COAvg_daliy = null; 
 | 
                Double O3_1hAvg_daliy = null; 
 | 
                Double O3_8hAvg_daliy = null; 
 | 
                if (PM2_5List_daliy.size() > 0) { 
 | 
                    PM2_5Avg_daliy = (double) Math.round(PM2_5List_daliy.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); 
 | 
                } 
 | 
                if (PM10List_daliy.size() > 0) { 
 | 
                    PM10Avg_daliy = (double) Math.round(PM10List_daliy.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); 
 | 
                } 
 | 
                if (SO2List_daliy.size() > 0) { 
 | 
                    SO2Avg_daliy = (double) Math.round(SO2List_daliy.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); 
 | 
                } 
 | 
                if (NO2List_daliy.size() > 0) { 
 | 
                    NO2Avg_daliy = (double) Math.round(NO2List_daliy.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); 
 | 
                } 
 | 
                if (COList_daliy.size() > 0) { 
 | 
                    COAvg_daliy = new BigDecimal(COList_daliy.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); 
 | 
                } 
 | 
                if (O3_1hList_daliy.size() > 0) { 
 | 
                    O3_1hAvg_daliy = (double) Math.round(O3_1hList_daliy.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); 
 | 
                } 
 | 
                if (O3_8hList_daliy.size() > 0) { 
 | 
                    O3_8hAvg_daliy = (double) Math.round(O3_8hList_daliy.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); 
 | 
                } 
 | 
                hour_AVG.put("a34004_" + govMonitorPointId, PM2_5Avg_daliy); 
 | 
                hour_AVG.put("a34002_" + govMonitorPointId, PM10Avg_daliy); 
 | 
                hour_AVG.put("a21026_" + govMonitorPointId, SO2Avg_daliy); 
 | 
                hour_AVG.put("a21004_" + govMonitorPointId, NO2Avg_daliy); 
 | 
                hour_AVG.put("a21005_" + govMonitorPointId, COAvg_daliy); 
 | 
                hour_AVG.put("a05024_" + govMonitorPointId, O3_1hAvg_daliy); 
 | 
                hour_AVG.put("O3_8h_" + govMonitorPointId, O3_8hAvg_daliy); 
 | 
            } 
 | 
            Map<Integer, Map<String, Object>> replaceDataMap = new HashMap<>(); 
 | 
            replaceDataMap.put(0, hour_1); 
 | 
            replaceDataMap.put(1, hour_2); 
 | 
            replaceDataMap.put(2, hour_3); 
 | 
            replaceDataMap.put(3, hour_4); 
 | 
            replaceDataMap.put(4, hour_5); 
 | 
            replaceDataMap.put(5, hour_6); 
 | 
            replaceDataMap.put(6, hour_7); 
 | 
            replaceDataMap.put(7, hour_8); 
 | 
            replaceDataMap.put(8, hour_9); 
 | 
            replaceDataMap.put(9, hour_10); 
 | 
            replaceDataMap.put(10, hour_11); 
 | 
            replaceDataMap.put(11, hour_12); 
 | 
            replaceDataMap.put(12, hour_13); 
 | 
            replaceDataMap.put(13, hour_14); 
 | 
            replaceDataMap.put(14, hour_15); 
 | 
            replaceDataMap.put(15, hour_16); 
 | 
            replaceDataMap.put(16, hour_17); 
 | 
            replaceDataMap.put(17, hour_18); 
 | 
            replaceDataMap.put(18, hour_19); 
 | 
            replaceDataMap.put(19, hour_20); 
 | 
            replaceDataMap.put(20, hour_21); 
 | 
            replaceDataMap.put(21, hour_22); 
 | 
            replaceDataMap.put(22, hour_23); 
 | 
            replaceDataMap.put(23, hour_24); 
 | 
            replaceDataMap.put(24, hour_AVG); 
 | 
            for (int i = 0; i < 25; i++) { 
 | 
                List<Double> PM2_5AllList = new ArrayList<>(); 
 | 
                List<Double> PM10AllList = new ArrayList<>(); 
 | 
                List<Double> SO2AllList = new ArrayList<>(); 
 | 
                List<Double> NO2AllList = new ArrayList<>(); 
 | 
                List<Double> COAllList = new ArrayList<>(); 
 | 
                List<Double> O3_1hAllList = new ArrayList<>(); 
 | 
                List<Double> O3_8hAllList = new ArrayList<>(); 
 | 
                for (String guid : guids) { 
 | 
                    //获取政府站点信息 
 | 
                    QueryWrapper<GovMonitorPoint> wrapper_govMonitorPoint = new QueryWrapper<>(); 
 | 
                    wrapper_govMonitorPoint.eq("is_delete", Constants.NOT_DELETE).eq("guid", guid); 
 | 
                    GovMonitorPoint govMonitorPoint = govMonitorPointMapper.selectOne(wrapper_govMonitorPoint); 
 | 
                    if (ObjectUtils.isEmpty(govMonitorPoint)) { 
 | 
                        continue; 
 | 
                    } 
 | 
                    int govMonitorPointId = govMonitorPoint.getId(); 
 | 
  
 | 
                    Map<String, Object> replaceMap = new HashMap<>(); 
 | 
                    replaceMap = replaceDataMap.get(i); 
 | 
                    if (!ObjectUtils.isEmpty(replaceMap.get("a34004_" + govMonitorPointId))) { 
 | 
                        PM2_5AllList.add((double) replaceMap.get("a34004_" + govMonitorPointId)); 
 | 
                    } 
 | 
                    if (!ObjectUtils.isEmpty(replaceMap.get("a34002_" + govMonitorPointId))) { 
 | 
                        PM10AllList.add((double) replaceMap.get("a34002_" + govMonitorPointId)); 
 | 
                    } 
 | 
                    if (!ObjectUtils.isEmpty(replaceMap.get("a21026_" + govMonitorPointId))) { 
 | 
                        SO2AllList.add((double) replaceMap.get("a21026_" + govMonitorPointId)); 
 | 
                    } 
 | 
                    if (!ObjectUtils.isEmpty(replaceMap.get("a21004_" + govMonitorPointId))) { 
 | 
                        NO2AllList.add((double) replaceMap.get("a21004_" + govMonitorPointId)); 
 | 
                    } 
 | 
                    if (!ObjectUtils.isEmpty(replaceMap.get("a21005_" + govMonitorPointId))) { 
 | 
                        COAllList.add((double) replaceMap.get("a21005_" + govMonitorPointId)); 
 | 
                    } 
 | 
                    if (!ObjectUtils.isEmpty(replaceMap.get("a05024_" + govMonitorPointId))) { 
 | 
                        O3_1hAllList.add((double) replaceMap.get("a05024_" + govMonitorPointId)); 
 | 
                    } 
 | 
                    if (!ObjectUtils.isEmpty(replaceMap.get("O3_8h_" + govMonitorPointId))) { 
 | 
                        O3_8hAllList.add((double) replaceMap.get("O3_8h_" + govMonitorPointId)); 
 | 
                    } 
 | 
                } 
 | 
                Double PM2_5 = null; 
 | 
                Double PM10 = null; 
 | 
                Double SO2 = null; 
 | 
                Double NO2 = null; 
 | 
                Double CO = null; 
 | 
                Double O3_1h = null; 
 | 
                Double O3_8h = null; 
 | 
                if (PM2_5AllList.size() > 0) { 
 | 
                    PM2_5 = (double) Math.round(PM2_5AllList.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); 
 | 
                } 
 | 
                if (PM10AllList.size() > 0) { 
 | 
                    PM10 = (double) Math.round(PM10AllList.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); 
 | 
                } 
 | 
                if (SO2AllList.size() > 0) { 
 | 
                    SO2 = (double) Math.round(SO2AllList.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); 
 | 
                } 
 | 
                if (NO2AllList.size() > 0) { 
 | 
                    NO2 = (double) Math.round(NO2AllList.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); 
 | 
                } 
 | 
                if (COAllList.size() > 0) { 
 | 
                    CO = new BigDecimal(COAllList.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); 
 | 
                } 
 | 
                if (O3_1hAllList.size() > 0) { 
 | 
                    O3_1h = (double) Math.round(O3_1hAllList.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); 
 | 
                } 
 | 
                if (O3_8hAllList.size() > 0) { 
 | 
                    O3_8h = (double) Math.round(O3_8hAllList.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); 
 | 
                } 
 | 
                Map<String, Object> AQIMap = new HashMap<>(); 
 | 
                if (!ObjectUtils.isEmpty(PM2_5)) { 
 | 
                    AQIMap.put("a34004", PM2_5); 
 | 
                } 
 | 
                if (!ObjectUtils.isEmpty(PM2_5)) { 
 | 
                    AQIMap.put("a34002", PM10); 
 | 
                } 
 | 
                if (!ObjectUtils.isEmpty(PM2_5)) { 
 | 
                    AQIMap.put("a21026", SO2); 
 | 
                } 
 | 
                if (!ObjectUtils.isEmpty(PM2_5)) { 
 | 
                    AQIMap.put("a21004", NO2); 
 | 
                } 
 | 
                if (!ObjectUtils.isEmpty(PM2_5)) { 
 | 
                    AQIMap.put("a21005", CO); 
 | 
                } 
 | 
                if (!ObjectUtils.isEmpty(PM2_5)) { 
 | 
                    AQIMap.put("a05024", O3_1h); 
 | 
                } 
 | 
                AQI aqi = new AQI(); 
 | 
                if (AQIMap.size() != 0) { 
 | 
                    aqi = AQIUtils.hourlyAQI(AQIMap); 
 | 
                } 
 | 
                Map<String, Object> avgMap = new HashMap<>(); 
 | 
                avgMap.put("a34004_" + "0", PM2_5); 
 | 
                avgMap.put("a34002_" + "0", PM10); 
 | 
                avgMap.put("a21026_" + "0", SO2); 
 | 
                avgMap.put("a21004_" + "0", NO2); 
 | 
                avgMap.put("a21005_" + "0", CO); 
 | 
                avgMap.put("a05024_" + "0", O3_1h); 
 | 
                avgMap.put("O3_8h_" + "0", O3_8h); 
 | 
                if (!ObjectUtils.isEmpty(aqi.getAQIValue())) { 
 | 
                    avgMap.put("aqi", aqi.getAQIValue()); 
 | 
                } else { 
 | 
                    avgMap.put("aqi", ""); 
 | 
                } 
 | 
                if (!ObjectUtils.isEmpty(aqi.getPrimaryPollutantNames())) { 
 | 
                    if (Integer.parseInt(aqi.getAQIValue().toString()) > 50) { 
 | 
                        String pollutant = aqi.getPrimaryPollutantNames().toString(); 
 | 
                        pollutant = pollutant.replace("[", ""); 
 | 
                        pollutant = pollutant.replace("]", ""); 
 | 
                        avgMap.put("pollutant", pollutant); 
 | 
                    } else { 
 | 
                        avgMap.put("pollutant", "-"); 
 | 
                    } 
 | 
                } else { 
 | 
                    avgMap.put("aqi", ""); 
 | 
                } 
 | 
                switch (i) { 
 | 
                    case 0: 
 | 
                        hour_1.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 1: 
 | 
                        hour_2.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 2: 
 | 
                        hour_3.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 3: 
 | 
                        hour_4.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 4: 
 | 
                        hour_5.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 5: 
 | 
                        hour_6.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 6: 
 | 
                        hour_7.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 7: 
 | 
                        hour_8.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 8: 
 | 
                        hour_9.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 9: 
 | 
                        hour_10.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 10: 
 | 
                        hour_11.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 11: 
 | 
                        hour_12.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 12: 
 | 
                        hour_13.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 13: 
 | 
                        hour_14.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 14: 
 | 
                        hour_15.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 15: 
 | 
                        hour_16.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 16: 
 | 
                        hour_17.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 17: 
 | 
                        hour_18.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 18: 
 | 
                        hour_19.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 19: 
 | 
                        hour_20.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 20: 
 | 
                        hour_21.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 21: 
 | 
                        hour_22.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 22: 
 | 
                        hour_23.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 23: 
 | 
                        hour_24.putAll(avgMap); 
 | 
                        break; 
 | 
                    case 24: 
 | 
                        hour_AVG.putAll(avgMap); 
 | 
                        break; 
 | 
                    default: 
 | 
                        break; 
 | 
                } 
 | 
            } 
 | 
            hour_1.put("time", "1时"); 
 | 
            hour_2.put("time", "2时"); 
 | 
            hour_3.put("time", "3时"); 
 | 
            hour_4.put("time", "4时"); 
 | 
            hour_5.put("time", "5时"); 
 | 
            hour_6.put("time", "6时"); 
 | 
            hour_7.put("time", "7时"); 
 | 
            hour_8.put("time", "8时"); 
 | 
            hour_9.put("time", "9时"); 
 | 
            hour_10.put("time", "10时"); 
 | 
            hour_11.put("time", "11时"); 
 | 
            hour_12.put("time", "12时"); 
 | 
            hour_13.put("time", "13时"); 
 | 
            hour_14.put("time", "14时"); 
 | 
            hour_15.put("time", "15时"); 
 | 
            hour_16.put("time", "16时"); 
 | 
            hour_17.put("time", "17时"); 
 | 
            hour_18.put("time", "18时"); 
 | 
            hour_19.put("time", "19时"); 
 | 
            hour_20.put("time", "20时"); 
 | 
            hour_21.put("time", "21时"); 
 | 
            hour_22.put("time", "22时"); 
 | 
            hour_23.put("time", "23时"); 
 | 
            hour_24.put("time", "0时"); 
 | 
            hour_AVG.put("time", "均值"); 
 | 
            data.add(hour_1); 
 | 
            data.add(hour_2); 
 | 
            data.add(hour_3); 
 | 
            data.add(hour_4); 
 | 
            data.add(hour_5); 
 | 
            data.add(hour_6); 
 | 
            data.add(hour_7); 
 | 
            data.add(hour_8); 
 | 
            data.add(hour_9); 
 | 
            data.add(hour_10); 
 | 
            data.add(hour_11); 
 | 
            data.add(hour_12); 
 | 
            data.add(hour_13); 
 | 
            data.add(hour_14); 
 | 
            data.add(hour_15); 
 | 
            data.add(hour_16); 
 | 
            data.add(hour_17); 
 | 
            data.add(hour_18); 
 | 
            data.add(hour_19); 
 | 
            data.add(hour_20); 
 | 
            data.add(hour_21); 
 | 
            data.add(hour_22); 
 | 
            data.add(hour_23); 
 | 
            data.add(hour_24); 
 | 
            data.add(hour_AVG); 
 | 
            resultMap.put("title", date + "月报"); 
 | 
            resultMap.put("data", data); 
 | 
            govMonitorPointList.add(govMonitorPoint_avg); 
 | 
            resultMap.put("govMonitorPoint", govMonitorPointList); 
 | 
            return resultMap; 
 | 
        } catch (Exception e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<Map<String, Object>> getGovMonitorPointsByOrganizationId(Integer organizationId) { 
 | 
        //根据组织id获取所有监控站点 
 | 
        QueryWrapper<MonitorPoint> monitorPointQueryWrapper = new QueryWrapper<>(); 
 | 
        monitorPointQueryWrapper.select("DISTINCT city_code") 
 | 
                .eq("organization_id", organizationId) 
 | 
                .eq("is_delete", Constants.NOT_DELETE); 
 | 
        List<Object> cityCodes = monitorPointService.listObjs(monitorPointQueryWrapper); 
 | 
  
 | 
        //根据cityCodes获取国控重点信息 
 | 
        QueryWrapper<GovMonitorPoint> govMonitorPointQueryWrapper = new QueryWrapper<>(); 
 | 
        govMonitorPointQueryWrapper.select("name", "longitude", "latitude") 
 | 
                .eq("is_delete", Constants.NOT_DELETE) 
 | 
                .in("city_code", cityCodes); 
 | 
        return govMonitorPointMapper.selectMaps(govMonitorPointQueryWrapper); 
 | 
    } 
 | 
} 
 |