| | |
| | | //一个部门一个sheet |
| | | for (Integer deptId : exportForm.getDeptIds()) { |
| | | CompletableFuture<Void> future = CompletableFuture.runAsync(() -> { |
| | | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
| | | //筛选部门数据 |
| | | Set<String> ids = onlineResult.stream().filter(tMonitorResult -> deptId.equals(tMonitorResult.getDeptId())).map(BaseResult::getNo).collect(Collectors.toSet()); |
| | | if (CollectionUtils.isEmpty(ids)) return; |
| | | //筛选部门数据 |
| | | List<TMonitorResult> onlineList = onlineResult.stream().filter(tMonitorResult -> deptId.equals(tMonitorResult.getDeptId())).collect(Collectors.toList()); |
| | | Map<LocalDate, List<TMonitorResult>> onlineMap = onlineList.stream() |
| | | .collect(Collectors.groupingBy(TMonitorResult::getMongoCreateTime)); |
| | | List<RecordMetaDSumResult> recordList = recordResult.stream().filter(result -> ids.contains(result.getNo())).collect(Collectors.toList()); |
| | | Map<Date, List<RecordMetaDSumResult>> recordMap = recordList.stream().collect(Collectors.groupingBy(RecordMetaDSumResult::getStatTime)); |
| | | List<VideoTotalExp> videoTotalExps = new ArrayList<>(); |
| | | for (int i = 0; i < 31; i++) { |
| | | String date = exportForm.getMonth(); |
| | |
| | | //总量 |
| | | VideoTotalExp totalExp = totalMap.computeIfAbsent(date, k -> new VideoTotalExp()); |
| | | LocalDate parseTime = LocalDate.parse(date, formatter); |
| | | //获取星期几 |
| | | String week = weeks[parseTime.getDayOfWeek().getValue() - 1]; |
| | | VideoTotalExp videoExp = new VideoTotalExp(); |
| | | videoExp.setDate(date); |
| | | videoExp.setWeek(week); |
| | | //设置点位在线总量 |
| | | List<TMonitorResult> onlines = onlineList.stream().filter(tMonitorResult -> tMonitorResult.getMongoCreateTime().minusDays(1).equals(parseTime)).collect(Collectors.toList()); |
| | | if (!CollectionUtils.isEmpty(onlines)) { |
| | | videoExp.setTotal(onlines.size()); |
| | | long count = onlines.stream() |
| | | .filter(item -> ApiConstants.UY_OnlineSite_Online.equals(item.getOnline())) |
| | | .count(); |
| | | videoExp.setOnline(Integer.valueOf(count + "")); |
| | | videoExp.setOffline(videoExp.getTotal() - videoExp.getOnline()); |
| | | try { |
| | | Date parseDate = simpleDateFormat.parse(date); |
| | | //获取星期几 |
| | | String week = weeks[parseTime.getDayOfWeek().getValue() - 1]; |
| | | VideoTotalExp videoExp = new VideoTotalExp(); |
| | | videoExp.setDate(date); |
| | | videoExp.setWeek(week); |
| | | //设置点位在线总量 |
| | | List<TMonitorResult> onlines = onlineMap.get(parseTime); |
| | | if (!CollectionUtils.isEmpty(onlines)) { |
| | | videoExp.setTotal(onlines.size()); |
| | | long count = onlines.stream() |
| | | .filter(item -> ApiConstants.UY_OnlineSite_Online.equals(item.getOnline())) |
| | | .count(); |
| | | videoExp.setOnline(Integer.valueOf(count + "")); |
| | | videoExp.setOffline(videoExp.getTotal() - videoExp.getOnline()); |
| | | } |
| | | //设置存储情况 |
| | | List<RecordMetaDSumResult> records = recordMap.get(parseDate); |
| | | if (!CollectionUtils.isEmpty(records)) { |
| | | videoExp.setNoStore(Integer.valueOf(records.stream() |
| | | .filter(record -> ApiConstants.UY_RecordStatus_Abnormal.equals(record.getRecordStatus())) |
| | | .count() + "")); |
| | | videoExp.setPartStore(Integer.valueOf(records.stream() |
| | | .filter(record -> ApiConstants.UY_RecordStatus_Interval.equals(record.getRecordStatus())) |
| | | .count() + "")); |
| | | } |
| | | videoTotalExps.add(videoExp); |
| | | //累加作为全量表 |
| | | totalExp.setDate(date); |
| | | totalExp.setWeek(week); |
| | | totalExp.setTotal((totalExp.getTotal() == null ? 0 : totalExp.getTotal()) + (videoExp.getTotal() == null ? 0 : videoExp.getTotal())); |
| | | totalExp.setOnline((totalExp.getOnline() == null ? 0 : totalExp.getOnline()) + (videoExp.getOnline() == null ? 0 : videoExp.getOnline())); |
| | | totalExp.setOffline((totalExp.getOffline() == null ? 0 : totalExp.getOffline()) + (videoExp.getOffline() == null ? 0 : videoExp.getOffline())); |
| | | totalExp.setNoStore((totalExp.getNoStore() == null ? 0 : totalExp.getNoStore()) + (videoExp.getNoStore() == null ? 0 : videoExp.getNoStore())); |
| | | totalExp.setPartStore((totalExp.getPartStore() == null ? 0 : totalExp.getPartStore()) + (videoExp.getPartStore() == null ? 0 : videoExp.getPartStore())); |
| | | totalMap.put(date, totalExp); |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | //设置存储情况 |
| | | List<RecordMetaDSumResult> records = recordList.stream().filter(record -> record.getMongoCreateTime().minusDays(1).equals(parseTime)).collect(Collectors.toList()); |
| | | if (!CollectionUtils.isEmpty(records)) { |
| | | videoExp.setNoStore(Integer.valueOf(records.stream() |
| | | .filter(record -> ApiConstants.UY_RecordStatus_Abnormal.equals(record.getRecordStatus())) |
| | | .count() + "")); |
| | | videoExp.setPartStore(Integer.valueOf(records.stream() |
| | | .filter(record -> ApiConstants.UY_RecordStatus_Interval.equals(record.getRecordStatus())) |
| | | .count() + "")); |
| | | } |
| | | videoTotalExps.add(videoExp); |
| | | //累加作为全量表 |
| | | totalExp.setDate(date); |
| | | totalExp.setWeek(week); |
| | | totalExp.setTotal((totalExp.getTotal() == null ? 0 : totalExp.getTotal()) + (videoExp.getTotal() == null ? 0 : videoExp.getTotal())); |
| | | totalExp.setOnline((totalExp.getOnline() == null ? 0 : totalExp.getOnline()) + (videoExp.getOnline() == null ? 0 : videoExp.getOnline())); |
| | | totalExp.setOffline((totalExp.getOffline() == null ? 0 : totalExp.getOffline()) + (videoExp.getOffline() == null ? 0 : videoExp.getOffline())); |
| | | totalExp.setNoStore((totalExp.getNoStore() == null ? 0 : totalExp.getNoStore()) + (videoExp.getNoStore() == null ? 0 : videoExp.getNoStore())); |
| | | totalExp.setPartStore((totalExp.getPartStore() == null ? 0 : totalExp.getPartStore()) + (videoExp.getPartStore() == null ? 0 : videoExp.getPartStore())); |
| | | totalMap.put(date, totalExp); |
| | | } |
| | | AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId); |
| | | ExcelExp excelExp = new ExcelExp(areaDeptEnum == null ? "未知" : areaDeptEnum.getName(), videoTotalExps, VideoTotalExp.class); |
| | |
| | | // 等待所有任务完成 |
| | | CompletableFuture<Void> allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])); |
| | | allFutures.join(); // 这将阻塞直到所有任务完成 |
| | | |
| | | //添加全量表 |
| | | List<VideoTotalExp> totalExps = new ArrayList<>(totalMap.values()); |
| | | totalExps = totalExps.stream().sorted(Comparator.comparing(VideoTotalExp::getDate)).collect(Collectors.toList()); |
| | |
| | | // 使用Map直接获取记录,避免filter操作 |
| | | List<RecordMetaDSumResult> recordsResult = recordMap.get(result.getNo()); |
| | | try { |
| | | if(!CollectionUtils.isEmpty(recordsResult)) setRecordDaily(videoDailyExp, result, recordsResult); |
| | | if (!CollectionUtils.isEmpty(recordsResult)) |
| | | setRecordDaily(videoDailyExp, result, recordsResult); |
| | | } catch (Exception e) { |
| | | log.error(e.getMessage()); |
| | | } |
| | |
| | | // 使用Map直接获取记录,避免filter操作 |
| | | List<RecordMetaDSumResult> recordsResult = recordMap.get(result.getNo()); |
| | | try { |
| | | if(!CollectionUtils.isEmpty(recordsResult)) setLoseDaily(videoDailyExp, recordsResult); |
| | | if (!CollectionUtils.isEmpty(recordsResult)) setLoseDaily(videoDailyExp, recordsResult); |
| | | } catch (Exception e) { |
| | | log.error(e.getMessage()); |
| | | } |