| | |
| | | if(map.containsKey(k)){ |
| | | Object o = map.get(k).get(sensor); |
| | | timeValueMap.put(c,Objects.nonNull(o)?Double.valueOf(o.toString()):0); |
| | | if(Objects.nonNull(o)){ |
| | | if(Objects.nonNull(o)&& (!Double.valueOf(o.toString()).equals(0d))){ |
| | | doubleArrayList.add(Double.valueOf(o.toString())); |
| | | } |
| | | }else { |
| | |
| | | for (Device device:devices) { |
| | | Date ks = DateUtils.getDate(startTime,"yyyy-MM-dd"); |
| | | Date js = DateUtils.getDateOfDay(DateUtils.getDate(endTime,"yyyy-MM-dd"),1); |
| | | String nameSite = pointMap.get(device.getMonitorPointId()); |
| | | String name = device.getName(); |
| | | Map<String, Object> timeValueMap = new LinkedHashMap<>(); |
| | | Map<String,ArrayList<Double>> listMap = new HashMap<>(); |
| | | int numCount = 0; |
| | | while (DateUtils.isTimeBefor(js,ks)){ |
| | | Map<String, Object> timeValueMap = new LinkedHashMap<>();//key为time,value为数据的json |
| | | timeValueMap.put("监测站点",pointMap.get(device.getMonitorPointId())); |
| | | timeValueMap.put("name",device.getName()); |
| | | timeValueMap = new LinkedHashMap<>();//key为time,value为数据的json |
| | | timeValueMap.put("监测站点",nameSite); |
| | | timeValueMap.put("name",name); |
| | | String c = DateUtils.dateToDateString(ks,"yyyy-MM-dd"); |
| | | timeValueMap.put("日期",c); |
| | | for (String sensor:sensorsList) { |
| | |
| | | if(map.containsKey(k)){ |
| | | Object o = map.get(k).get(sensor); |
| | | num = Objects.nonNull(o)?Double.valueOf(o.toString()):0d; |
| | | if(Objects.nonNull(num)&& !num.equals(0d)){ |
| | | ArrayList<Double> doubleArrayList = Objects.isNull(listMap.get(numCount+"_"+sensorMap.get(sensor)))?new ArrayList<>():listMap.get(numCount+"_"+sensorMap.get(sensor)); |
| | | doubleArrayList.add(num); |
| | | listMap.put(numCount+"_"+sensorMap.get(sensor),doubleArrayList); |
| | | } |
| | | } |
| | | timeValueMap.put(sensorMap.get(sensor),num); |
| | | } |
| | | resultList.add(timeValueMap); |
| | | ks = DateUtils.getDateOfDay(ks,1); |
| | | } |
| | | timeValueMap = new LinkedHashMap<>(); |
| | | timeValueMap.put("监测站点",nameSite); |
| | | timeValueMap.put("name",name); |
| | | timeValueMap.put("日期","累计值"); |
| | | for(int z = 0 ;z< sensorsList.size();z++){ |
| | | double rsAvg = 0L; |
| | | String son = numCount+"_"+sensorMap.get(sensorsList.get(z)); |
| | | if(listMap.containsKey(numCount+"_"+sensorMap.get(sensorsList.get(z)))){ |
| | | if(son.contains("臭氧")){ |
| | | rsAvg = percentile(listMap.get(numCount+"_"+sensorMap.get(sensorsList.get(z))),90d); |
| | | }else if(son.contains("一氧化碳")){ |
| | | rsAvg = percentile(listMap.get(numCount+"_"+sensorMap.get(sensorsList.get(z))),95d); |
| | | }else { |
| | | Double ListAvg = listMap.get(numCount+"_"+sensorMap.get(sensorsList.get(z))).stream().collect(Collectors.averagingDouble(Double::doubleValue)); |
| | | rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | } |
| | | } |
| | | timeValueMap.put(sensorMap.get(sensorsList.get(z)),rsAvg); |
| | | } |
| | | resultList.add(timeValueMap); |
| | | numCount++; |
| | | } |
| | | |
| | | }else { |
| | |
| | | monitorPointMapper.selectList(monitorPointQueryWrapper).forEach(it->map.put(it.getId(),it.getName())); |
| | | return map; |
| | | } |
| | | private Double percentile(List<Double> date,double num){ |
| | | Collections.sort(date); |
| | | double position = (num / 100) * (date.size() - 1); |
| | | int index = (int) position; |
| | | // 获取小数部分的位置索引 |
| | | double fraction = position - index; |
| | | |
| | | // 获取百分位值 |
| | | double percentileValue = date.get(index) + fraction * (date.get(index + 1) - date.get(index)); |
| | | return new BigDecimal(percentileValue).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); |
| | | } |
| | | |
| | | } |
| | | |
| | | |