|  |  | 
 |  |  |         return rsMap; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public Map<String, Object> detailV1(String mac, String startTime, String endTime, String type) { | 
 |  |  |         HashMap<String, Object> rsMap = new HashMap<>(); | 
 |  |  |         Map<String, Object> map = new TreeMap<>( | 
 |  |  |                 new Comparator<String>() { | 
 |  |  |                     @Override | 
 |  |  |                     public int compare(String o1, String o2) { | 
 |  |  |                         return o1.compareTo(o2); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |         ); | 
 |  |  |         //离线数据 | 
 |  |  |         ArrayList<Date> EndDates = new ArrayList<>(); | 
 |  |  |         //在线数据 | 
 |  |  |         ArrayList<Date> StartDates = new ArrayList<>(); | 
 |  |  |         ArrayList<Date> dates = new ArrayList<>(); | 
 |  |  |         if (type.equals("hour")){ | 
 |  |  |             Date start = DateUtils.getDate(startTime, DateUtils.yyyy_MM_dd_HH_EN); | 
 |  |  |             Date end = DateUtils.getDate(endTime, DateUtils.yyyy_MM_dd_HH_EN); | 
 |  |  |             List<HistoryHourly> valueByMacAndTime = historyHourlyService.getValueByMacAndTime(mac, start, end); | 
 |  |  |             if (!ObjectUtils.isEmpty(valueByMacAndTime)){ | 
 |  |  |                 //数据去重 | 
 |  |  |                 ArrayList<HistoryHourly> collect = valueByMacAndTime.stream().collect( | 
 |  |  |                         Collectors.collectingAndThen(Collectors.toCollection( | 
 |  |  |                                 () -> new TreeSet<>(Comparator.comparing(p -> p.getTime()))), ArrayList::new) | 
 |  |  |                 ); | 
 |  |  |                 for (HistoryHourly historyHourly : collect) { | 
 |  |  |                     map.put(DateUtils.dateToDateString(historyHourly.getTime()),1); | 
 |  |  |                     dates.add(historyHourly.getTime()); | 
 |  |  |                 } | 
 |  |  |              setCode(end,start,dates,StartDates,EndDates,map,type); | 
 |  |  |             } | 
 |  |  |             //表格 | 
 |  |  |             List<OnlineRateLogsForm> OrfList = getList(EndDates, StartDates, type); | 
 |  |  |             //折线图 | 
 |  |  |             ArrayList<String> list1 = new ArrayList<>(); | 
 |  |  |             ArrayList<Integer> list2 = new ArrayList<>(); | 
 |  |  |             Set<String> strings = map.keySet(); | 
 |  |  |             for (String string : strings) { | 
 |  |  |                 list1.add(string); | 
 |  |  |                 list2.add(Integer.parseInt(map.get(string).toString())); | 
 |  |  |             } | 
 |  |  |             rsMap.put("lineChart1",list1); | 
 |  |  |             rsMap.put("lineChart2",list2); | 
 |  |  |             rsMap.put("tabulation",OrfList); | 
 |  |  |             //离线多少个小时 | 
 |  |  |             int endNumber = map.size() - dates.size(); | 
 |  |  |             double number = (double) dates.size() / map.size() * 100; | 
 |  |  |             String result = String.format("%.2f", number); | 
 |  |  |             rsMap.put("pieChart1",endNumber); | 
 |  |  |             rsMap.put("pieChart2",dates.size()); | 
 |  |  |             rsMap.put("code","共"+map.size()+"小时,"+"在线"+dates.size()+"小时,"+"在线率"+(result.equals("NaN")?"0":result)); | 
 |  |  |  | 
 |  |  |         }else if (type.equals("day")){ | 
 |  |  |  | 
 |  |  |         }else { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |         return null; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private Device getDeviceUnitAlramInforByMacFromDb(String mac){ | 
 |  |  |         QueryWrapper<Device> wrapper = new QueryWrapper<>(); | 
 |  |  |         wrapper.eq("mac",mac); | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     private void setCode(Date end,Date start,ArrayList<Date> dates,ArrayList<Date> StartDates,ArrayList<Date> EndDates,Map<String,Object> map,String type){ | 
 |  |  |         boolean flag= true; | 
 |  |  |         while (DateUtils.isTimeBeforE(end,start)){ | 
 |  |  |             if (dates.contains(start)){ | 
 |  |  |                 if (!flag){ | 
 |  |  |                     StartDates.add(start); | 
 |  |  |                     flag= true; | 
 |  |  |                 } | 
 |  |  |             }else { | 
 |  |  |                 if (flag){ | 
 |  |  |                     EndDates.add(start); | 
 |  |  |                     flag=false; | 
 |  |  |                 } | 
 |  |  |                 map.put(DateUtils.dateToDateString(start),0); | 
 |  |  |             } | 
 |  |  |             if (type.equals("hour")){ | 
 |  |  |                 start = DateUtils.getDateAddHour(start,1); | 
 |  |  |             }else if (type.equals("day")){ | 
 |  |  |                 start = DateUtils.getDateOfDay(start,1); | 
 |  |  |             }else { | 
 |  |  |                 start = DateUtils.getDateOfMin(start,1); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private List<OnlineRateLogsForm>  getList(ArrayList<Date> EndDates,ArrayList<Date> StartDates,String type){ | 
 |  |  |         int nh = 1000 * 60 * 60; | 
 |  |  |         long nd = 1000 * 24 * 60 * 60; | 
 |  |  |         long nm = 1000 * 60; | 
 |  |  |         ArrayList<OnlineRateLogsForm> OrfList = new ArrayList<>(); | 
 |  |  |         if (!ObjectUtils.isEmpty(EndDates)){ | 
 |  |  |             for (int i = 0; i < EndDates.size(); i++) { | 
 |  |  |                 OnlineRateLogsForm onlineRateLogsForm = new OnlineRateLogsForm(); | 
 |  |  |                 onlineRateLogsForm.setEndTime(DateUtils.dateToDateString(EndDates.get(i))); | 
 |  |  |                 if (ObjectUtils.isEmpty(StartDates)){ | 
 |  |  |                     onlineRateLogsForm.setStartTime("-"); | 
 |  |  |                     onlineRateLogsForm.setMun("-"); | 
 |  |  |                 }else { | 
 |  |  |                     if (EndDates.size()>StartDates.size()&& i==EndDates.size()-1){ | 
 |  |  |                         onlineRateLogsForm.setStartTime("-"); | 
 |  |  |                         onlineRateLogsForm.setMun("-"); | 
 |  |  |                     }else { | 
 |  |  |                         onlineRateLogsForm.setStartTime(DateUtils.dateToDateString(StartDates.get(i))); | 
 |  |  |                         long l = EndDates.get(i).getTime() - StartDates.get(i).getTime(); | 
 |  |  |                         if (type.equals("hour")){ | 
 |  |  |                             onlineRateLogsForm.setMun(Long.toString(Math.abs(l/nh))); | 
 |  |  |                         }else if (type.equals("day")){ | 
 |  |  |                             onlineRateLogsForm.setMun(Long.toString(Math.abs(l/nd))); | 
 |  |  |                         }else { | 
 |  |  |                             onlineRateLogsForm.setMun(Long.toString(Math.abs(l/nm))); | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 OrfList.add(onlineRateLogsForm); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         return OrfList; | 
 |  |  |     } | 
 |  |  | } |