From 27e913d6d28a9cfa0785d15453a4de10fd36ce6d Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期一, 10 二月 2025 11:17:59 +0800 Subject: [PATCH] 首页录像统计加上间歇 --- ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java | 572 +++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 377 insertions(+), 195 deletions(-) diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java index b044f0c..c17d4ee 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java @@ -3,6 +3,7 @@ import annotation.DataScope; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mongodb.ExplainVerbosity; import com.mongodb.client.AggregateIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; @@ -32,6 +33,7 @@ import com.ycl.platform.mapper.DynamicColumnMapper; import com.ycl.platform.mapper.TMonitorMapper; import com.ycl.platform.mapper.WorkOrderMapper; +import com.ycl.platform.mapper.YwPointMapper; import com.ycl.platform.service.ITMonitorService; import com.ycl.system.Result; import com.ycl.system.entity.SysDictData; @@ -54,7 +56,9 @@ import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import pojo.ExcelExp; import utils.poi.ExcelUtilManySheet; @@ -72,6 +76,9 @@ import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; import java.util.*; +import java.util.concurrent.*; +import java.util.function.BinaryOperator; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -85,6 +92,8 @@ @Autowired private TMonitorMapper tMonitorMapper; @Autowired + private YwPointMapper pointMapper; + @Autowired private ISysConfigService configService; @Autowired private MongoTemplate mongoTemplate; @@ -94,6 +103,8 @@ private SysDictDataMapper dictDataMapper; @Autowired private DynamicColumnMapper dynamicColumnMapper; + @Autowired + private ThreadPoolTaskExecutor threadPoolTaskExecutor; /** * 鏌ヨ璁惧璧勪骇 @@ -353,8 +364,9 @@ } /** - * 鏌ongo鏌ユ煇涓湀璁惧鎬绘暟 - * 鏌ョ湅宸ュ崟鏁伴噺鏌ョ湅寮傚父鐨勬暟 + * 鏌ongo鏌ユ煇涓湀璁惧鎬绘暟 + * 鏌ョ湅宸ュ崟鏁伴噺鏌ョ湅寮傚父鐨勬暟 + * * @param monitorQuery 鏌ヨ鏉′欢 * @return */ @@ -432,75 +444,110 @@ } exportForm.setDeptIds(deptIds); } - List<ExcelExp> mysheet = new ArrayList<>(); - exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video + "")); + List<ExcelExp> sheet = new ArrayList<>(); + //閫氳繃Collections闈欐�佹柟娉曪紝鎶妉ist杞负绾跨▼瀹夊叏鐨刲ist + List mysheet = Collections.synchronizedList(sheet); VideoExportForm.convertTags(exportForm); - List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(exportForm); - List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList()); - Query query = getQuery(deviceIds, exportForm.getMonth()); + Query query = getQuery(exportForm); //鏈堜唤姣忔棩鍦ㄧ嚎鏁版嵁 List<TMonitorResult> onlineResult = mongoTemplate.find(query, TMonitorResult.class); + // 浣跨敤 Collectors.toMap 鍘婚噸锛屼繚鐣欐瘡涓� No 鐨勭涓�涓亣鍒扮殑鍏冪礌 + Map<String, TMonitorResult> uniqueResultsMap = onlineResult.stream() + .collect(Collectors.toMap( + TMonitorResult::getNo, // keyMapper锛岃繖閲屽亣璁� getNo() 杩斿洖 No 瀛楁 + Function.identity(), // valueMapper锛岀洿鎺ヤ娇鐢ㄥ璞℃湰韬� + (existing, replacement) -> existing // mergeFunction锛屽鏋滄湁閲嶅锛屼繚鐣欑涓�涓� + )); + // 灏� Map 杞崲涓� List + List<TMonitorResult> tMonitorResults = new ArrayList<>(uniqueResultsMap.values()); + List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList()); + // 灏嗗勾鏈堝瓧绗︿覆瑙f瀽涓篩earMonth瀵硅薄 + YearMonth yearMonth = YearMonth.parse(exportForm.getMonth()); + // 鑾峰彇褰撴湀鐨勭涓�澶� + LocalDate start = yearMonth.atDay(1); + // 鑾峰彇涓嬩釜鏈堢殑绗竴澶╋紙閫氳繃鍔犱笂1涓湀骞惰缃棩涓�1锛� + YearMonth nextMonth = yearMonth.plusMonths(1); + LocalDate end = nextMonth.atDay(1); + //鑾峰彇杩欎釜鏈堜唤鐨勯儴闂ㄦ暟鎹紝褰曞儚鐢变簬鏄墠涓�澶╃殑鎵�浠ヤ笉鐢╟reateTime瀛楁 + Query videoQuery = new Query(Criteria.where("statTime").gte(start).lt(end)); + videoQuery.addCriteria(Criteria.where("no").in(deviceIds)); //鏈堜唤姣忔棩褰曞儚鏁版嵁 - List<RecordMetaDSumResult> recordResult = mongoTemplate.find(query, RecordMetaDSumResult.class); + List<RecordMetaDSumResult> recordResult = mongoTemplate.find(videoQuery, RecordMetaDSumResult.class); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); String[] weeks = {"鏄熸湡涓�", "鏄熸湡浜�", "鏄熸湡涓�", "鏄熸湡鍥�", "鏄熸湡浜�", "鏄熸湡鍏�", "鏄熸湡鏃�"}; // 鍒涘缓涓�涓狹ap鏉ュ瓨鍌ㄦ瘡澶╃殑绱姞鏁版嵁 - Map<String, VideoTotalExp> totalMap = new HashMap<>(); + Map<String, VideoTotalExp> totalMap = new ConcurrentHashMap<>(); + List<CompletableFuture<Void>> futures = new ArrayList<>(); //涓�涓儴闂ㄤ竴涓猻heet for (Integer deptId : exportForm.getDeptIds()) { - //浠庢暟鎹簱闆嗗悎绛涢�夐儴闂ㄦ暟鎹� - List<String> ids = tMonitorResults.stream().filter(tMonitorResult -> deptId.equals(tMonitorResult.getDeptId())).map(BaseResult::getNo).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(ids)) continue; - //绛涢�夐儴闂ㄦ暟鎹� - List<TMonitorResult> onlineList = onlineResult.stream().filter(tMonitorResult -> ids.contains(tMonitorResult.getNo())).collect(Collectors.toList()); - List<RecordMetaDSumResult> recordList = recordResult.stream().filter(result -> ids.contains(result.getNo())).collect(Collectors.toList()); - List<VideoTotalExp> videoTotalExps = new ArrayList<>(); - for (int i = 0; i < 31; i++) { - String date = exportForm.getMonth(); - date += "-" + (i < 9 ? "0" + (i + 1) : (i + 1)); - //鎬婚噺 - 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()); + 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(); + date += "-" + (i < 9 ? "0" + (i + 1) : (i + 1)); + //鎬婚噺 + VideoTotalExp totalExp = totalMap.computeIfAbsent(date, k -> new VideoTotalExp()); + LocalDate parseTime = LocalDate.parse(date, formatter); + 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); - mysheet.add(excelExp); + AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId); + ExcelExp excelExp = new ExcelExp(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName(), videoTotalExps, VideoTotalExp.class); + mysheet.add(excelExp); + }, threadPoolTaskExecutor); + futures.add(future); } + // 绛夊緟鎵�鏈変换鍔″畬鎴� + 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()); @@ -525,10 +572,22 @@ } exportForm.setDeptIds(deptIds); } - List<ExcelExp> mysheet = new ArrayList<>(); - exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video + "")); + List<ExcelExp> sheet = new ArrayList<>(); + //閫氳繃Collections闈欐�佹柟娉曪紝鎶妉ist杞负绾跨▼瀹夊叏鐨刲ist + List mysheet = Collections.synchronizedList(sheet); VideoExportForm.convertTags(exportForm); - List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(exportForm); + Query query = getQuery(exportForm); + //鏈堜唤姣忔棩鍦ㄧ嚎鏁版嵁 + List<TMonitorResult> onlineResult = mongoTemplate.find(query, TMonitorResult.class); + // 浣跨敤 Collectors.toMap 鍘婚噸锛屼繚鐣欐瘡涓� No 鐨勭涓�涓亣鍒扮殑鍏冪礌 + Map<String, TMonitorResult> uniqueResultsMap = onlineResult.stream() + .collect(Collectors.toMap( + TMonitorResult::getNo, // keyMapper锛岃繖閲屽亣璁� getNo() 杩斿洖 No 瀛楁 + Function.identity(), // valueMapper锛岀洿鎺ヤ娇鐢ㄥ璞℃湰韬� + (existing, replacement) -> existing // mergeFunction锛屽鏋滄湁閲嶅锛屼繚鐣欑涓�涓� + )); + // 灏� Map 杞崲涓� List + List<TMonitorResult> tMonitorResults = new ArrayList<>(uniqueResultsMap.values()); //鑾峰彇鍔ㄦ�佸垪鏁版嵁 List<Integer> pointIds = tMonitorResults.stream().map(TMonitorResult::getPointId).collect(Collectors.toList()); List<DynamicColumnVO> dynamics = dynamicColumnMapper.getDynamicsByIds("t_yw_point", pointIds); @@ -540,47 +599,73 @@ tMonitorResult.setDynamicColumnList(map.get(pointId)); } } - List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList()); - Query query = getQuery(deviceIds, exportForm.getMonth()); - //鏈堜唤姣忔棩鍦ㄧ嚎鏁版嵁 - List<TMonitorResult> onlineResult = mongoTemplate.find(query, TMonitorResult.class); - //鍏ㄩ噺琛� - List<VideoDailyExp> totalExps = new ArrayList<>(); + List<CompletableFuture<List<VideoDailyExp>>> futures = new ArrayList<>(); for (Integer deptId : exportForm.getDeptIds()) { - List<VideoDailyExp> videoDailyExps = new ArrayList<>(); - //浠庢暟鎹簱闆嗗悎绛涢�夐儴闂ㄦ暟鎹� - List<TMonitorResult> monitors = tMonitorResults.stream().filter(tMonitorResult -> deptId.equals(tMonitorResult.getDeptId())).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(monitors)) continue; - List<String> ids = monitors.stream().map(BaseResult::getNo).collect(Collectors.toList()); - //绛涢�塵ongo鍖哄幙鏁版嵁 - List<TMonitorResult> onlines = onlineResult.stream().filter(result -> ids.contains(result.getNo())).collect(Collectors.toList()); - AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId); - for (TMonitorResult result : monitors) { - VideoDailyExp videoDailyExp = new VideoDailyExp(); - videoDailyExp.setSerialNumber(result.getNo()); - videoDailyExp.setDeviceName(result.getName()); - videoDailyExp.setArea(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName()); - StringBuilder tag = new StringBuilder("" + (result.getProvinceTag() ? "鐪佸巺銆�" : "") + (result.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (result.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (result.getDeptTag() ? "閮ㄧ骇銆�" : "")); - //鍔ㄦ�佸垪澶勭悊鍔犲湪鏍囩閲� - if (!CollectionUtils.isEmpty(result.getDynamicColumnList())) { - List<DynamicColumnVO> dynamicColumnList = result.getDynamicColumnList(); - for (DynamicColumnVO dynamicColumnVO : dynamicColumnList) { - tag.append(dynamicColumnVO.getColumnValue()).append("銆�"); + CompletableFuture<List<VideoDailyExp>> future = CompletableFuture.supplyAsync(() -> { + List<VideoDailyExp> videoDailyExps = new ArrayList<>(); + //绛涢�夐儴闂ㄦ暟鎹� + List<TMonitorResult> monitors = tMonitorResults.stream() + .filter(tMonitorResult -> deptId.equals(tMonitorResult.getDeptId())) + .collect(Collectors.toList()); + if (CollectionUtils.isEmpty(monitors)) return videoDailyExps; + + List<String> ids = monitors.stream() + .map(BaseResult::getNo) + .collect(Collectors.toList()); + //绛涢�塵ongo鍖哄幙鏁版嵁 + List<TMonitorResult> onlines = onlineResult.stream() + .filter(result -> ids.contains(result.getNo())) + .collect(Collectors.toList()); + + AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId); + for (TMonitorResult result : monitors) { + VideoDailyExp videoDailyExp = new VideoDailyExp(); + videoDailyExp.setSerialNumber(result.getNo()); + videoDailyExp.setDeviceName(result.getName()); + videoDailyExp.setArea(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName()); + + StringBuilder tag = new StringBuilder("" + + (result.getProvinceTag() ? "鐪佸巺銆�" : "") + + (result.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + + (result.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + + (result.getDeptTag() ? "閮ㄧ骇銆�" : "")); + + //鍔ㄦ�佸垪澶勭悊鍔犲湪鏍囩閲� + if (!CollectionUtils.isEmpty(result.getDynamicColumnList())) { + for (DynamicColumnVO dynamicColumnVO : result.getDynamicColumnList()) { + tag.append(dynamicColumnVO.getColumnValue()).append("銆�"); + } } + // 鍒犻櫎瀛楃涓叉湯灏剧殑"銆�" + if (tag.toString().endsWith("銆�")) { + tag = new StringBuilder(tag.substring(0, tag.length() - 1)); + } + videoDailyExp.setTag(tag.toString()); + + try { + setOnlineDaily(videoDailyExp, result, onlines); + } catch (Exception e) { + log.error(e.getMessage()); + } + videoDailyExps.add(videoDailyExp); } - // 鍒犻櫎瀛楃涓叉湯灏剧殑鈥溿�佲�� - if (tag.toString().endsWith("銆�")) { - tag = new StringBuilder(tag.substring(0, tag.length() - 1)); - } - videoDailyExp.setTag(tag.toString()); - setOnlineDaily(videoDailyExp, result, onlines); - videoDailyExps.add(videoDailyExp); - //鍏ㄩ噺琛� - totalExps.add(videoDailyExp); - } - ExcelExp excelExp = new ExcelExp(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName(), videoDailyExps, VideoDailyExp.class); - mysheet.add(excelExp); + + ExcelExp excelExp = new ExcelExp( + areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName(), + videoDailyExps, + VideoDailyExp.class + ); + mysheet.add(excelExp); + + return videoDailyExps; + }, threadPoolTaskExecutor); + futures.add(future); } + // 鑾峰彇鍏ㄩ噺鏁版嵁 + List<VideoDailyExp> totalExps = futures.stream() + .map(CompletableFuture::join) + .flatMap(List::stream) + .collect(Collectors.toList()); ExcelExp excelExp = new ExcelExp("鍏ㄩ噺", totalExps, VideoDailyExp.class); mysheet.add(excelExp); ExcelUtilManySheet<List<ExcelExp>> util = new ExcelUtilManySheet<>(mysheet); @@ -601,10 +686,22 @@ } exportForm.setDeptIds(deptIds); } - List<ExcelExp> mysheet = new ArrayList<>(); - exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video + "")); + VideoExportForm.convertTags(exportForm); - List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(exportForm); + Query query = getQuery(exportForm); + //鏈堜唤姣忔棩鍦ㄧ嚎鏁版嵁 + List<TMonitorResult> onlineResult = mongoTemplate.find(query, TMonitorResult.class); + + // 浣跨敤 Collectors.toMap 鍘婚噸锛屼繚鐣欐瘡涓� No 鐨勭涓�涓亣鍒扮殑鍏冪礌 + Map<String, TMonitorResult> uniqueResultsMap = onlineResult.stream() + .collect(Collectors.toMap( + TMonitorResult::getNo, // keyMapper锛岃繖閲屽亣璁� getNo() 杩斿洖 No 瀛楁 + Function.identity(), // valueMapper锛岀洿鎺ヤ娇鐢ㄥ璞℃湰韬� + (existing, replacement) -> existing // mergeFunction锛屽鏋滄湁閲嶅锛屼繚鐣欑涓�涓� + )); + // 灏� Map 杞崲涓� List + List<TMonitorResult> tMonitorResults = new ArrayList<>(uniqueResultsMap.values()); + List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList()); //鑾峰彇鍔ㄦ�佸垪鏁版嵁 List<Integer> pointIds = tMonitorResults.stream().map(TMonitorResult::getPointId).collect(Collectors.toList()); List<DynamicColumnVO> dynamics = dynamicColumnMapper.getDynamicsByIds("t_yw_point", pointIds); @@ -616,7 +713,7 @@ tMonitorResult.setDynamicColumnList(map.get(pointId)); } } - List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList()); + // 灏嗗勾鏈堝瓧绗︿覆瑙f瀽涓篩earMonth瀵硅薄 YearMonth yearMonth = YearMonth.parse(exportForm.getMonth()); // 鑾峰彇褰撴湀鐨勭涓�澶� @@ -625,48 +722,75 @@ YearMonth nextMonth = yearMonth.plusMonths(1); LocalDate end = nextMonth.atDay(1); //鑾峰彇杩欎釜鏈堜唤鐨勯儴闂ㄦ暟鎹紝褰曞儚鐢变簬鏄墠涓�澶╃殑鎵�浠ヤ笉鐢╟reateTime瀛楁 - Query query = new Query(Criteria.where("statTime").gte(start).lt(end)); - query.addCriteria(Criteria.where("no").in(deviceIds)); + Query videoQuery = new Query(Criteria.where("statTime").gte(start).lt(end)); + videoQuery.addCriteria(Criteria.where("no").in(deviceIds)); //鏈堜唤姣忔棩褰曞儚绾挎暟鎹� - List<RecordMetaDSumResult> recordResult = mongoTemplate.find(query, RecordMetaDSumResult.class); - //鍏ㄩ噺琛� - List<VideoDailyExp> totalExps = new ArrayList<>(); + List<RecordMetaDSumResult> recordResult = mongoTemplate.find(videoQuery, RecordMetaDSumResult.class); + + // 棰勫厛鎸夐儴闂↖D鍒嗙粍 + Map<Integer, List<TMonitorResult>> monitorsByDept = tMonitorResults.stream() + .collect(Collectors.groupingBy(TMonitorResult::getDeptId)); + // 棰勫厛鏋勫缓鏄犲皠 + Map<String, List<RecordMetaDSumResult>> recordMap = recordResult.stream() + .collect(Collectors.groupingBy(RecordMetaDSumResult::getNo)); + List<CompletableFuture<List<VideoDailyExp>>> futures = new ArrayList<>(); for (Integer deptId : exportForm.getDeptIds()) { - List<VideoDailyExp> videoDailyExps = new ArrayList<>(); - //浠庢暟鎹簱闆嗗悎绛涢�夐儴闂ㄦ暟鎹� - List<TMonitorResult> monitors = tMonitorResults.stream().filter(tMonitorResult -> deptId.equals(tMonitorResult.getDeptId())).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(monitors)) continue; - List<String> ids = monitors.stream().map(BaseResult::getNo).collect(Collectors.toList()); - //绛涢�塵ongo鍖哄幙鏁版嵁 - List<RecordMetaDSumResult> records = recordResult.stream().filter(result -> ids.contains(result.getNo())).collect(Collectors.toList()); - AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId); - for (TMonitorResult result : monitors) { - VideoDailyExp videoDailyExp = new VideoDailyExp(); - videoDailyExp.setSerialNumber(result.getNo()); - videoDailyExp.setDeviceName(result.getName()); - videoDailyExp.setArea(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName()); - StringBuilder tag = new StringBuilder("" + (result.getProvinceTag() ? "鐪佸巺銆�" : "") + (result.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (result.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (result.getDeptTag() ? "閮ㄧ骇銆�" : "")); - //鍔ㄦ�佸垪澶勭悊鍔犲湪鏍囩閲� - if (!CollectionUtils.isEmpty(result.getDynamicColumnList())) { - List<DynamicColumnVO> dynamicColumnList = result.getDynamicColumnList(); - for (DynamicColumnVO dynamicColumnVO : dynamicColumnList) { - tag.append(dynamicColumnVO.getColumnValue()).append("銆�"); + CompletableFuture<List<VideoDailyExp>> future = CompletableFuture.supplyAsync(() -> { + List<VideoDailyExp> videoDailyExps = new ArrayList<>(); + // 鑾峰彇褰撳墠閮ㄩ棬鐨勬暟鎹� + List<TMonitorResult> monitors = monitorsByDept.getOrDefault(deptId, Collections.emptyList()); + if (CollectionUtils.isEmpty(monitors)) return videoDailyExps; + AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId); + for (TMonitorResult result : monitors) { + VideoDailyExp videoDailyExp = new VideoDailyExp(); + videoDailyExp.setSerialNumber(result.getNo()); + videoDailyExp.setDeviceName(result.getName()); + videoDailyExp.setArea(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName()); + StringBuilder tag = new StringBuilder("" + (result.getProvinceTag() ? "鐪佸巺銆�" : "") + (result.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (result.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (result.getDeptTag() ? "閮ㄧ骇銆�" : "")); + //鍔ㄦ�佸垪澶勭悊鍔犲湪鏍囩閲� + if (!CollectionUtils.isEmpty(result.getDynamicColumnList())) { + List<DynamicColumnVO> dynamicColumnList = result.getDynamicColumnList(); + for (DynamicColumnVO dynamicColumnVO : dynamicColumnList) { + tag.append(dynamicColumnVO.getColumnValue()).append("銆�"); + } } + // 鍒犻櫎瀛楃涓叉湯灏剧殑鈥溿�佲�� + if (tag.toString().endsWith("銆�")) { + tag = new StringBuilder(tag.substring(0, tag.length() - 1)); + } + videoDailyExp.setTag(tag.toString()); + // 浣跨敤Map鐩存帴鑾峰彇璁板綍锛岄伩鍏峟ilter鎿嶄綔 + List<RecordMetaDSumResult> recordsResult = recordMap.get(result.getNo()); + try { + if (!CollectionUtils.isEmpty(recordsResult)) + setRecordDaily(videoDailyExp, result, recordsResult); + } catch (Exception e) { + log.error(e.getMessage()); + } + //鍖哄幙琛� + videoDailyExps.add(videoDailyExp); } - // 鍒犻櫎瀛楃涓叉湯灏剧殑鈥溿�佲�� - if (tag.toString().endsWith("銆�")) { - tag = new StringBuilder(tag.substring(0, tag.length() - 1)); - } - videoDailyExp.setTag(tag.toString()); - setRecordDaily(videoDailyExp, result, records); - //鍖哄幙琛� - videoDailyExps.add(videoDailyExp); - //鍏ㄩ噺琛� - totalExps.add(videoDailyExp); - } - ExcelExp excelExp = new ExcelExp(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName(), videoDailyExps, VideoDailyExp.class); - mysheet.add(excelExp); + return videoDailyExps; + }, threadPoolTaskExecutor); + futures.add(future); } + // 绛夊緟鎵�鏈変换鍔″畬鎴� + CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join(); + // 姣忎釜閮ㄩ棬鐨勬暟鎹崟鐙繚瀛� + List<List<VideoDailyExp>> results = futures.stream() + .map(CompletableFuture::join) // 鑾峰彇姣忎釜Future鐨勭粨鏋� + .collect(Collectors.toList()); + List<VideoDailyExp> totalExps = new ArrayList<>(); + List<ExcelExp> mysheet = new ArrayList<>(); + for (List<VideoDailyExp> result : results) { + ExcelExp excelExp = new ExcelExp( + result.get(0).getArea() == null ? "鏈煡" : result.get(0).getArea(), + result, + VideoDailyExp.class); + mysheet.add(excelExp); + totalExps.addAll(result); + } + ExcelExp excelExp = new ExcelExp("鍏ㄩ噺", totalExps, VideoDailyExp.class); mysheet.add(excelExp); ExcelUtilManySheet<List<ExcelExp>> util = new ExcelUtilManySheet<>(mysheet); @@ -686,10 +810,18 @@ } exportForm.setDeptIds(deptIds); } - List<ExcelExp> mysheet = new ArrayList<>(); - exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video + "")); - VideoExportForm.convertTags(exportForm); - List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(exportForm); + Query query = getQuery(exportForm); + //鏈堜唤姣忔棩鍦ㄧ嚎鏁版嵁 + List<TMonitorResult> onlineResult = mongoTemplate.find(query, TMonitorResult.class); + // 浣跨敤 Collectors.toMap 鍘婚噸锛屼繚鐣欐瘡涓� No 鐨勭涓�涓亣鍒扮殑鍏冪礌 + Map<String, TMonitorResult> uniqueResultsMap = onlineResult.stream() + .collect(Collectors.toMap( + TMonitorResult::getNo, // keyMapper锛岃繖閲屽亣璁� getNo() 杩斿洖 No 瀛楁 + Function.identity(), // valueMapper锛岀洿鎺ヤ娇鐢ㄥ璞℃湰韬� + (existing, replacement) -> existing // mergeFunction锛屽鏋滄湁閲嶅锛屼繚鐣欑涓�涓� + )); + // 灏� Map 杞崲涓� List + List<TMonitorResult> tMonitorResults = new ArrayList<>(uniqueResultsMap.values()); //鑾峰彇鍔ㄦ�佸垪鏁版嵁 List<Integer> pointIds = tMonitorResults.stream().map(TMonitorResult::getPointId).collect(Collectors.toList()); List<DynamicColumnVO> dynamics = dynamicColumnMapper.getDynamicsByIds("t_yw_point", pointIds); @@ -710,46 +842,72 @@ YearMonth nextMonth = yearMonth.plusMonths(1); LocalDate end = nextMonth.atDay(1); //鑾峰彇杩欎釜鏈堜唤鐨勯儴闂ㄦ暟鎹紝褰曞儚鐢变簬鏄墠涓�澶╃殑鎵�浠ヤ笉鐢╟reateTime瀛楁 - Query query = new Query(Criteria.where("statTime").gte(start).lt(end)); - query.addCriteria(Criteria.where("no").in(deviceIds)); + Query videoQuery = new Query(Criteria.where("statTime").gte(start).lt(end)); + videoQuery.addCriteria(Criteria.where("no").in(deviceIds)); //鏈堜唤姣忔棩褰曞儚绾挎暟鎹� - List<RecordMetaDSumResult> recordResult = mongoTemplate.find(query, RecordMetaDSumResult.class); - //鍏ㄩ噺琛� - List<VideoDailyExp> totalExps = new ArrayList<>(); + List<RecordMetaDSumResult> recordResult = mongoTemplate.find(videoQuery, RecordMetaDSumResult.class); + // 棰勫厛鎸夐儴闂↖D鍒嗙粍 + Map<Integer, List<TMonitorResult>> monitorsByDept = tMonitorResults.stream() + .collect(Collectors.groupingBy(TMonitorResult::getDeptId)); + // 棰勫厛鏋勫缓鏄犲皠 + Map<String, List<RecordMetaDSumResult>> recordMap = recordResult.stream() + .collect(Collectors.groupingBy(RecordMetaDSumResult::getNo)); + + List<CompletableFuture<List<VideoDailyExp>>> futures = new ArrayList<>(); for (Integer deptId : exportForm.getDeptIds()) { - List<VideoDailyExp> videoDailyExps = new ArrayList<>(); - //浠庢暟鎹簱闆嗗悎绛涢�夐儴闂ㄦ暟鎹� - List<TMonitorResult> monitors = tMonitorResults.stream().filter(tMonitorResult -> deptId.equals(tMonitorResult.getDeptId())).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(monitors)) continue; - List<String> ids = monitors.stream().map(BaseResult::getNo).collect(Collectors.toList()); - //绛涢�塵ongo鍖哄幙鏁版嵁 - List<RecordMetaDSumResult> records = recordResult.stream().filter(result -> ids.contains(result.getNo())).collect(Collectors.toList()); - AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId); - for (TMonitorResult result : monitors) { - VideoDailyExp videoDailyExp = new VideoDailyExp(); - videoDailyExp.setSerialNumber(result.getNo()); - videoDailyExp.setDeviceName(result.getName()); - videoDailyExp.setArea(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName()); - StringBuilder tag = new StringBuilder("" + (result.getProvinceTag() ? "鐪佸巺銆�" : "") + (result.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (result.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (result.getDeptTag() ? "閮ㄧ骇銆�" : "")); - //鍔ㄦ�佸垪澶勭悊鍔犲湪鏍囩閲� - if (!CollectionUtils.isEmpty(result.getDynamicColumnList())) { - List<DynamicColumnVO> dynamicColumnList = result.getDynamicColumnList(); - for (DynamicColumnVO dynamicColumnVO : dynamicColumnList) { - tag.append(dynamicColumnVO.getColumnValue()).append("銆�"); + CompletableFuture<List<VideoDailyExp>> future = CompletableFuture.supplyAsync(() -> { + List<VideoDailyExp> videoDailyExps = new ArrayList<>(); + // 鑾峰彇褰撳墠閮ㄩ棬鐨勬暟鎹� + List<TMonitorResult> monitors = monitorsByDept.getOrDefault(deptId, Collections.emptyList()); + if (CollectionUtils.isEmpty(monitors)) return videoDailyExps; + AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId); + for (TMonitorResult result : monitors) { + VideoDailyExp videoDailyExp = new VideoDailyExp(); + videoDailyExp.setSerialNumber(result.getNo()); + videoDailyExp.setDeviceName(result.getName()); + videoDailyExp.setArea(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName()); + StringBuilder tag = new StringBuilder("" + (result.getProvinceTag() ? "鐪佸巺銆�" : "") + (result.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (result.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (result.getDeptTag() ? "閮ㄧ骇銆�" : "")); + //鍔ㄦ�佸垪澶勭悊鍔犲湪鏍囩閲� + if (!CollectionUtils.isEmpty(result.getDynamicColumnList())) { + List<DynamicColumnVO> dynamicColumnList = result.getDynamicColumnList(); + for (DynamicColumnVO dynamicColumnVO : dynamicColumnList) { + tag.append(dynamicColumnVO.getColumnValue()).append("銆�"); + } } + // 鍒犻櫎瀛楃涓叉湯灏剧殑鈥溿�佲�� + if (tag.toString().endsWith("銆�")) { + tag = new StringBuilder(tag.substring(0, tag.length() - 1)); + } + videoDailyExp.setTag(tag.toString()); + // 浣跨敤Map鐩存帴鑾峰彇璁板綍锛岄伩鍏峟ilter鎿嶄綔 + List<RecordMetaDSumResult> recordsResult = recordMap.get(result.getNo()); + try { + if (!CollectionUtils.isEmpty(recordsResult)) setLoseDaily(videoDailyExp, recordsResult); + } catch (Exception e) { + log.error(e.getMessage()); + } + videoDailyExps.add(videoDailyExp); } - // 鍒犻櫎瀛楃涓叉湯灏剧殑鈥溿�佲�� - if (tag.toString().endsWith("銆�")) { - tag = new StringBuilder(tag.substring(0, tag.length() - 1)); - } - videoDailyExp.setTag(tag.toString()); - setLoseDaily(videoDailyExp, result, records); - videoDailyExps.add(videoDailyExp); - //鍏ㄩ噺琛� - totalExps.add(videoDailyExp); - } - ExcelExp excelExp = new ExcelExp(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName(), videoDailyExps, VideoDailyExp.class); + return videoDailyExps; + }, threadPoolTaskExecutor); + futures.add(future); + } + // 绛夊緟鎵�鏈変换鍔″畬鎴� + CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join(); + + // 姣忎釜閮ㄩ棬鐨勬暟鎹崟鐙繚瀛� + List<List<VideoDailyExp>> results = futures.stream() + .map(CompletableFuture::join) // 鑾峰彇姣忎釜Future鐨勭粨鏋� + .collect(Collectors.toList()); + List<VideoDailyExp> totalExps = new ArrayList<>(); + List<ExcelExp> mysheet = new ArrayList<>(); + for (List<VideoDailyExp> result : results) { + ExcelExp excelExp = new ExcelExp( + result.get(0).getArea() == null ? "鏈煡" : result.get(0).getArea(), + result, + VideoDailyExp.class); mysheet.add(excelExp); + totalExps.addAll(result); } ExcelExp excelExp = new ExcelExp("鍏ㄩ噺", totalExps, VideoDailyExp.class); mysheet.add(excelExp); @@ -807,7 +965,7 @@ )) .append("loseCount", new Document("$sum", new Document("$cond", Arrays.asList( - new Document("$eq", Arrays.asList("$recordStatus", -1)), + new Document("$in", Arrays.asList("$recordStatus", Arrays.asList(-1, 0))), 1, 0 )) @@ -904,7 +1062,7 @@ String type = car.replaceAll("3", "浜鸿劯"); monitor.setCameraFunType(type); } - StringBuilder tag = new StringBuilder("" + (monitor.getProvinceTagVideo() ? "鐪佸巺瑙嗛銆�" : "") + (monitor.getProvinceTagCar() ? "鐪佸巺杞﹁締銆�" : "")+ (monitor.getProvinceTagFace() ? "鐪佸巺浜鸿劯銆�" : "")+ (monitor.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (monitor.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (monitor.getDeptTag() ? "閮ㄧ骇銆�" : "")); + StringBuilder tag = new StringBuilder("" + (monitor.getProvinceTagVideo() ? "鐪佸巺瑙嗛銆�" : "") + (monitor.getProvinceTagCar() ? "鐪佸巺杞﹁締銆�" : "") + (monitor.getProvinceTagFace() ? "鐪佸巺浜鸿劯銆�" : "") + (monitor.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (monitor.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (monitor.getDeptTag() ? "閮ㄧ骇銆�" : "")); //鍔ㄦ�佸垪澶勭悊鍔犲湪鏍囩閲� if (!CollectionUtils.isEmpty(monitor.getDynamicColumnList())) { List<DynamicColumnVO> dynamicColumnList = monitor.getDynamicColumnList(); @@ -920,14 +1078,32 @@ }); ExcelUtil<TMonitorExp> util = new ExcelUtil<>(TMonitorExp.class); String sheetName = ""; - if("1".equals(tMonitor.getCameraFunType())){ + if ("1".equals(tMonitor.getCameraFunType())) { sheetName = "瑙嗛"; - }else if("2".equals(tMonitor.getCameraFunType())){ + } else if ("2".equals(tMonitor.getCameraFunType())) { sheetName = "杞﹁締"; - }else if("3".equals(tMonitor.getCameraFunType())){ + } else if ("3".equals(tMonitor.getCameraFunType())) { sheetName = "浜鸿劯"; } - util.exportExcel(response, monitors,sheetName); + util.exportExcel(response, monitors, sheetName); + } + + /** + * 娓呯悊涓�鏈轰竴妗� + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Result clearMonitor() { + tMonitorMapper.clearMonitor(); + pointMapper.clearMonitor(); + return Result.ok(); + } + + @Override + public Result assetManagementCount(DataCenterQuery query) { + Map<String, String> map =tMonitorMapper.assetManagementCount(); + return Result.ok().data(map); } @@ -1014,7 +1190,7 @@ //鎸夋椂闂存帓搴� results = results.stream().sorted(Comparator.comparing(BaseHomeVO::getCreateDate)).collect(Collectors.toList()); //濡傛灉鏄粯璁ゆ垨绱拰鍒欒繘琛岀疮鍜屼互鍙婅幏鍙栧熀鍑嗙嚎 - if(monitorQuery.getCategory() == null || monitorQuery.getCategory().equals(1)) { + if (monitorQuery.getCategory() == null || monitorQuery.getCategory().equals(1)) { int snapCount = 0; for (HomeCarVO vo : results) { if (vo.getSnapCount() != null) { @@ -1128,7 +1304,7 @@ //鎸夋椂闂存帓搴� results = results.stream().sorted(Comparator.comparing(BaseHomeVO::getCreateDate)).collect(Collectors.toList()); //濡傛灉鏄粯璁ゆ垨绱拰鍒欒繘琛岀疮鍜屼互鍙婅幏鍙栧熀鍑嗙嚎 - if(monitorQuery.getCategory() == null || monitorQuery.getCategory().equals(1)) { + if (monitorQuery.getCategory() == null || monitorQuery.getCategory().equals(1)) { int snapCount = 0; for (HomeFaceVO vo : results) { if (vo.getSnapCount() != null) { @@ -1170,7 +1346,8 @@ return vo; } - private Query getQuery(List<String> deviceIds, String month) { + private Query getQuery(VideoExportForm exportForm) { + String month = exportForm.getMonth(); // 灏嗗勾鏈堝瓧绗︿覆瑙f瀽涓篩earMonth瀵硅薄 YearMonth yearMonth = YearMonth.parse(month); // 鑾峰彇褰撴湀鐨勭涓�澶� @@ -1180,7 +1357,15 @@ LocalDate end = nextMonth.atDay(1); //鑾峰彇杩欎釜鏈堜唤鐨勯儴闂ㄦ暟鎹� Query query = new Query(Criteria.where("mongoCreateTime").gte(start).lt(end)); - query.addCriteria(Criteria.where("no").in(deviceIds)); + if (!CollectionUtils.isEmpty(exportForm.getDeptIds())) + query.addCriteria(Criteria.where("deptId").in(exportForm.getDeptIds())); + if (exportForm.getDeptTag() != null) query.addCriteria(Criteria.where("deptTag").is(exportForm.getDeptTag())); + if (exportForm.getProvinceTag() != null) + query.addCriteria(Criteria.where("provinceTag").is(exportForm.getProvinceTag())); + if (exportForm.getImportantTag() != null) + query.addCriteria(Criteria.where("importantTag").is(exportForm.getImportantTag())); + if (exportForm.getImportantCommandImageTag() != null) + query.addCriteria(Criteria.where("importantCommandImageTag").is(exportForm.getImportantCommandImageTag())); return query; } @@ -1206,9 +1391,7 @@ } //璁剧疆姣忔棩褰曞儚鏁版嵁 - private void setRecordDaily(VideoDailyExp videoDailyExp, TMonitorResult result, List<RecordMetaDSumResult> records) throws NoSuchFieldException, IllegalAccessException { - //涓�涓澶囧綋鏈堝湪绾挎儏鍐� - List<RecordMetaDSumResult> recordResults = records.stream().filter(online -> online.getNo().equals(result.getNo())).collect(Collectors.toList()); + private void setRecordDaily(VideoDailyExp videoDailyExp, TMonitorResult result, List<RecordMetaDSumResult> recordResults) throws NoSuchFieldException, IllegalAccessException { for (RecordMetaDSumResult recordResult : recordResults) { int dayOfMonth = DateUtils.getDayOfMonth(recordResult.getStatTime()); Integer status = recordResult.getRecordStatus(); @@ -1228,9 +1411,8 @@ } //璁剧疆姣忔棩褰曞儚缂哄け鏃堕暱鏁版嵁 - private void setLoseDaily(VideoDailyExp videoDailyExp, TMonitorResult result, List<RecordMetaDSumResult> records) throws NoSuchFieldException, IllegalAccessException { + private void setLoseDaily(VideoDailyExp videoDailyExp, List<RecordMetaDSumResult> recordResults) throws NoSuchFieldException, IllegalAccessException { //涓�涓澶囧綋鏈堝湪绾挎儏鍐� - List<RecordMetaDSumResult> recordResults = records.stream().filter(online -> online.getNo().equals(result.getNo())).collect(Collectors.toList()); for (RecordMetaDSumResult recordResult : recordResults) { int dayOfMonth = DateUtils.getDayOfMonth(recordResult.getStatTime()); //鍙嶅皠璧嬪�硷紝瀛楁缁熶竴瀹氫箟涓篸ay+1锛�2锛�3... -- Gitblit v1.8.0