|  |  | 
 |  |  | 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 | 
 |  |  | 
 |  |  | @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); | 
 |  |  |     } | 
 |  |  | } |