From 3e518af3c57b80176823fa712c2ed10eb12f39f4 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期五, 27 九月 2024 17:01:07 +0800 Subject: [PATCH] 首页图表 --- ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java | 398 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 390 insertions(+), 8 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 710cd87..78ff3c8 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,9 @@ import annotation.DataScope; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mongodb.client.AggregateIterable; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoDatabase; import com.ycl.platform.domain.entity.TMonitor; import com.ycl.platform.domain.excel.VideoDailyExp; import com.ycl.platform.domain.excel.VideoTotalExp; @@ -21,12 +24,19 @@ import com.ycl.platform.domain.result.UY.RecordMetaDSumResult; import com.ycl.platform.domain.vo.TMonitorVO; import com.ycl.platform.domain.vo.WorkOrderVO; +import com.ycl.platform.domain.vo.home.BaseHomeVO; +import com.ycl.platform.domain.vo.home.HomeCarVO; +import com.ycl.platform.domain.vo.home.HomeFaceVO; +import com.ycl.platform.domain.vo.home.HomeVideoVO; import com.ycl.platform.domain.vo.screen.MonitorRateVO; import com.ycl.platform.domain.vo.screen.MonitorTotalVO; import com.ycl.platform.mapper.TMonitorMapper; import com.ycl.platform.mapper.WorkOrderMapper; import com.ycl.platform.service.ITMonitorService; import com.ycl.system.Result; +import com.ycl.system.entity.SysDictData; +import com.ycl.system.mapper.SysConfigMapper; +import com.ycl.system.mapper.SysDictDataMapper; import com.ycl.system.page.PageUtil; import com.ycl.system.service.ISysConfigService; import com.ycl.utils.DateUtils; @@ -35,7 +45,10 @@ import constant.CheckConstants; import enumeration.general.AreaDeptEnum; import jakarta.servlet.http.HttpServletResponse; +import lombok.SneakyThrows; import org.apache.commons.lang3.ObjectUtils; +import org.bson.Document; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; @@ -47,11 +60,16 @@ import java.io.IOException; import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.YearMonth; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; +import java.time.temporal.TemporalAdjusters; import java.util.*; import java.util.stream.Collectors; @@ -71,6 +89,8 @@ private MongoTemplate mongoTemplate; @Autowired private WorkOrderMapper workOrderMapper; + @Autowired + private SysDictDataMapper dictDataMapper; /** * 鏌ヨ璁惧璧勪骇 @@ -387,7 +407,7 @@ @Override public void exportVideoTotal(HttpServletResponse response, VideoExportForm exportForm) throws IOException { List<ExcelExp> mysheet = new ArrayList<>(); - exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video+"")); + exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video + "")); VideoExportForm.convertTags(exportForm); List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(exportForm); List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList()); @@ -471,7 +491,7 @@ @Override public void exportVideoOnline(HttpServletResponse response, VideoExportForm exportForm) throws IOException, NoSuchFieldException, IllegalAccessException { List<ExcelExp> mysheet = new ArrayList<>(); - exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video+"")); + exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video + "")); VideoExportForm.convertTags(exportForm); List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(exportForm); List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList()); @@ -494,7 +514,7 @@ videoDailyExp.setSerialNumber(result.getNo()); videoDailyExp.setDeviceName(result.getName()); videoDailyExp.setArea(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName()); - String tag ="" + (result.getProvinceTag() ? "鐪佸巺銆�" : "") + (result.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (result.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (result.getDeptTag() ? "閮ㄧ骇銆�" : ""); + String tag = "" + (result.getProvinceTag() ? "鐪佸巺銆�" : "") + (result.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (result.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (result.getDeptTag() ? "閮ㄧ骇銆�" : ""); // 鍒犻櫎瀛楃涓叉湯灏剧殑鈥溿�佲�� if (tag.endsWith("銆�")) { tag = tag.substring(0, tag.length() - 1); @@ -521,7 +541,7 @@ @Override public void exportVideoRecord(HttpServletResponse response, VideoExportForm exportForm) throws IOException, NoSuchFieldException, IllegalAccessException { List<ExcelExp> mysheet = new ArrayList<>(); - exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video+"")); + exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video + "")); VideoExportForm.convertTags(exportForm); List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(exportForm); List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList()); @@ -544,7 +564,7 @@ videoDailyExp.setSerialNumber(result.getNo()); videoDailyExp.setDeviceName(result.getName()); videoDailyExp.setArea(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName()); - String tag ="" + (result.getProvinceTag() ? "鐪佸巺銆�" : "") + (result.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (result.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (result.getDeptTag() ? "閮ㄧ骇銆�" : ""); + String tag = "" + (result.getProvinceTag() ? "鐪佸巺銆�" : "") + (result.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (result.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (result.getDeptTag() ? "閮ㄧ骇銆�" : ""); // 鍒犻櫎瀛楃涓叉湯灏剧殑鈥溿�佲�� if (tag.endsWith("銆�")) { tag = tag.substring(0, tag.length() - 1); @@ -571,7 +591,7 @@ @Override public void exportVideoLoseTime(HttpServletResponse response, VideoExportForm exportForm) throws NoSuchFieldException, IllegalAccessException, IOException { List<ExcelExp> mysheet = new ArrayList<>(); - exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video+"")); + exportForm.setCameraFunType(Integer.valueOf(CheckConstants.Rule_Category_Video + "")); VideoExportForm.convertTags(exportForm); List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(exportForm); List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList()); @@ -594,7 +614,7 @@ videoDailyExp.setSerialNumber(result.getNo()); videoDailyExp.setDeviceName(result.getName()); videoDailyExp.setArea(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName()); - String tag ="" + (result.getProvinceTag() ? "鐪佸巺銆�" : "") + (result.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (result.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (result.getDeptTag() ? "閮ㄧ骇銆�" : ""); + String tag = "" + (result.getProvinceTag() ? "鐪佸巺銆�" : "") + (result.getImportantTag() ? "閲嶇偣鐐逛綅銆�" : "") + (result.getImportantCommandImageTag() ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (result.getDeptTag() ? "閮ㄧ骇銆�" : ""); // 鍒犻櫎瀛楃涓叉湯灏剧殑鈥溿�佲�� if (tag.endsWith("銆�")) { tag = tag.substring(0, tag.length() - 1); @@ -614,6 +634,368 @@ util.exportExcelManySheet(response, mysheet); } + //棣栭〉瑙嗛鎶ヨ〃 + @Override + public Map<String, Object> videoHome(HomeQuery monitorQuery) throws ParseException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { + List<HomeVideoVO> results = new ArrayList<>(); + String month = monitorQuery.getDate(); + if (StringUtils.isEmpty(month)) { + //濡傛灉涓虹┖鏌ユ湰鏈堢殑鏁版嵁 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM"); + month = simpleDateFormat.format(new Date()); + } + // 鍒涘缓涓�涓猄impleDateFormat瀵硅薄鏉ヨВ鏋愭棩鏈熷瓧绗︿覆 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); + Date date = sdf.parse(month); + // 鍒涘缓涓�涓狢alendar瀵硅薄骞惰缃椂闂翠负瑙f瀽鍑虹殑Date + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + // 璁剧疆Calendar涓烘湀浠界殑绗竴澶� + calendar.set(Calendar.DAY_OF_MONTH, 1); + // 鑾峰彇鏈堜唤绗竴澶╃殑Date + Date startDate = calendar.getTime(); + // 璁剧疆Calendar涓烘湀浠界殑鏈�鍚庝竴澶╋紙閫氳繃澧炲姞涓�涓湀浠界劧鍚庡噺鍘讳竴澶╋級 + calendar.add(Calendar.MONTH, 1); + calendar.add(Calendar.DAY_OF_MONTH, -1); + // 鑾峰彇鏈堜唤鏈�鍚庝竴澶╃殑Date + Date endDate = calendar.getTime(); + + //mongo鏌ュ綍鍍忕姸鎬� + MongoDatabase database = mongoTemplate.getDb(); + MongoCollection<Document> collection = database.getCollection("uy_record_meta_d_sum"); + Integer examineTag = monitorQuery.getExamineTag(); + Document matchConditions = new Document("mongoCreateTime", new Document("$gte", startDate).append("$lte", endDate)); + // 鏍规嵁examineTag鐨勫�煎姩鎬佹坊鍔犻澶栫殑鏉′欢 + if (examineTag != null && examineTag.equals(1)) { + matchConditions.append("provinceTag", true); + } else if (examineTag != null && examineTag.equals(2)) { + matchConditions.append("deptTag", true); + } + // 鏋勫缓鑱氬悎绠¢亾 + List<Document> pipeline = Arrays.asList( + new Document("$match", matchConditions), + new Document("$group", new Document("_id", "$mongoCreateTime") + .append("normalCount", new Document("$sum", + new Document("$cond", Arrays.asList( + new Document("$eq", Arrays.asList("$recordStatus", 1)), + 1, + 0 + )) + )) + .append("loseCount", new Document("$sum", + new Document("$cond", Arrays.asList( + new Document("$eq", Arrays.asList("$recordStatus", -1)), + 1, + 0 + )) + )) + ) + ); + // 鎵ц鑱氬悎鏌ヨ骞惰幏鍙栫粨鏋� + AggregateIterable<Document> result = collection.aggregate(pipeline); + for (Document doc : result) { + HomeVideoVO homeVideoVO = new HomeVideoVO(); + homeVideoVO.setCreateDate(doc.getDate("_id")); + homeVideoVO.setIntegrityNum(doc.getInteger("normalCount")); + homeVideoVO.setLoseNum(doc.getInteger("loseCount")); + results.add(homeVideoVO); + } + + //mongo鏌ョ偣浣嶅湪绾� + MongoCollection<Document> onlineCollection = database.getCollection("t_monitor_online"); + // 鏋勫缓鍩烘湰鐨�$match鏉′欢 + List<Document> onlineMatch = new ArrayList<>(); + onlineMatch.add(new Document("mongoCreateTime", new Document("$gte", startDate).append("$lte", endDate))); + onlineMatch.add(new Document("monitorType", new Document("$regex", "1"))); + if (examineTag != null && examineTag.equals(1)) { + onlineMatch.add(new Document("provinceTag", true)); + } else if (examineTag != null && examineTag.equals(2)) { + onlineMatch.add(new Document("deptTag", true)); + } + + // 鏋勫缓鑱氬悎绠¢亾 + List<Document> onlinePipeline = Arrays.asList( + new Document("$match", new Document("$and", onlineMatch)), + new Document("$group", new Document("_id", "$mongoCreateTime") + .append("onlineCount", new Document("$sum", + new Document("$cond", Arrays.asList( + new Document("$eq", Arrays.asList("$online", Boolean.TRUE)), + 1, + 0 + )) + )) + ) + ); + // 鎵ц鑱氬悎鏌ヨ骞惰幏鍙栫粨鏋� + AggregateIterable<Document> onlineResult = onlineCollection.aggregate(onlinePipeline); + for (Document doc : onlineResult) { + HomeVideoVO vo = findOrCreateVO(doc, results, HomeVideoVO.class); + vo.setOnline(doc.getInteger("onlineCount")); + } + results = results.stream().sorted(Comparator.comparing(BaseHomeVO::getCreateDate)).collect(Collectors.toList()); + Map<String, Object> resultMap = new HashMap<>(); + resultMap.put("list", results); + //浠庡瓧鍏歌幏鍙栧熀鍑嗙嚎 + List<SysDictData> baseLines = dictDataMapper.selectDictDataByType("home_baseLine"); + String condition; + if (examineTag != null && examineTag == 1) { + condition = "video_province_baseLine"; + } else if (examineTag != null && examineTag == 2) { + condition = "video_dept_baseLine"; + } else { + condition = "video_all_baseLine"; + } + Optional<SysDictData> first = baseLines.stream().filter(sysDictData -> condition.equals(sysDictData.getDictLabel())).findFirst(); + if (first.isPresent()) { + SysDictData sysDictData = first.get(); + resultMap.put("baseLine", Integer.valueOf(sysDictData.getDictValue())); + } + return resultMap; + } + + + //棣栭〉杞﹁締鎶ヨ〃 + @Override + public Map<String, Object> carHome(HomeQuery monitorQuery) throws ParseException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { + List<HomeCarVO> results = new ArrayList<>(); + String month = monitorQuery.getDate(); + if (StringUtils.isEmpty(month)) { + //濡傛灉涓虹┖鏌ユ湰鏈堢殑鏁版嵁 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM"); + month = simpleDateFormat.format(new Date()); + } + // 鍒涘缓涓�涓猄impleDateFormat瀵硅薄鏉ヨВ鏋愭棩鏈熷瓧绗︿覆 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); + Date date = sdf.parse(month); + // 鍒涘缓涓�涓狢alendar瀵硅薄骞惰缃椂闂翠负瑙f瀽鍑虹殑Date + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + // 璁剧疆Calendar涓烘湀浠界殑绗竴澶� + calendar.set(Calendar.DAY_OF_MONTH, 1); + // 鑾峰彇鏈堜唤绗竴澶╃殑Date + Date startDate = calendar.getTime(); + // 璁剧疆Calendar涓烘湀浠界殑鏈�鍚庝竴澶╋紙閫氳繃澧炲姞涓�涓湀浠界劧鍚庡噺鍘讳竴澶╋級 + calendar.add(Calendar.MONTH, 1); + calendar.add(Calendar.DAY_OF_MONTH, -1); + // 鑾峰彇鏈堜唤鏈�鍚庝竴澶╃殑Date + Date endDate = calendar.getTime(); + //mongo鏌ユ姄鎷嶉噺 + MongoDatabase database = mongoTemplate.getDb(); + MongoCollection<Document> collection = database.getCollection("hk_snapshot_data_monitor"); + Integer examineTag = monitorQuery.getExamineTag(); + // 鏋勫缓鍩烘湰鐨�$match鏉′欢 + List<Document> matchConditions = new ArrayList<>(); + matchConditions.add(new Document("mongoCreateTime", new Document("$gte", startDate).append("$lte", endDate))); + matchConditions.add(new Document("dataType", new Document("$eq", ApiConstants.HK_DataType_CAR))); + if (examineTag != null && examineTag.equals(1)) { + matchConditions.add(new Document("provinceTag", true)); + } else if (examineTag != null && examineTag.equals(2)) { + matchConditions.add(new Document("deptTag", true)); + } + // 鏋勫缓鑱氬悎绠¢亾 + List<Document> pipeline = Arrays.asList( + new Document("$match", new Document("$and", matchConditions)), + new Document("$group", new Document("_id", "$mongoCreateTime") + .append("dataCount", new Document("$sum", "$dataCount")) + ) + ); + + // 鎵ц鑱氬悎鏌ヨ骞惰幏鍙栫粨鏋� + AggregateIterable<Document> result = collection.aggregate(pipeline); + for (Document doc : result) { + HomeCarVO homecarVO = new HomeCarVO(); + homecarVO.setCreateDate(doc.getDate("_id")); + homecarVO.setSnapCount(doc.getInteger("dataCount")); + results.add(homecarVO); + } + + //mongo鏌ョ偣浣嶅湪绾� + MongoCollection<Document> onlineCollection = database.getCollection("t_monitor_online"); + // 鏋勫缓鍩烘湰鐨�$match鏉′欢 + List<Document> onlineMatch = new ArrayList<>(); + onlineMatch.add(new Document("mongoCreateTime", new Document("$gte", startDate).append("$lte", endDate))); + onlineMatch.add(new Document("monitorType", new Document("$regex", "2"))); + if (examineTag != null && examineTag.equals(1)) { + onlineMatch.add(new Document("provinceTag", true)); + } else if (examineTag != null && examineTag.equals(2)) { + onlineMatch.add(new Document("deptTag", true)); + } + // 鏋勫缓鑱氬悎绠¢亾 + List<Document> onlinePipeline = Arrays.asList( + new Document("$match", new Document("$and", onlineMatch)), + new Document("$group", new Document("_id", "$mongoCreateTime") + .append("onlineCount", new Document("$sum", + new Document("$cond", Arrays.asList( + new Document("$eq", Arrays.asList("$online", Boolean.TRUE)), + 1, + 0 + )) + )) + ) + ); + // 鎵ц鑱氬悎鏌ヨ骞惰幏鍙栫粨鏋� + AggregateIterable<Document> onlineResult = onlineCollection.aggregate(onlinePipeline); + for (Document doc : onlineResult) { + HomeCarVO vo = findOrCreateVO(doc, results, HomeCarVO.class); + vo.setOnline(doc.getInteger("onlineCount")); + } + Map<String, Object> resultMap = new HashMap<>(); + //鎸夋椂闂存帓搴� + results = results.stream().sorted(Comparator.comparing(BaseHomeVO::getCreateDate)).collect(Collectors.toList()); + int snapCount = 0; + for (HomeCarVO vo : results) { + if (vo.getSnapCount() != null) { + snapCount += vo.getSnapCount(); + } + vo.setSnapCount(snapCount); + } + resultMap.put("list", results); + //浠庡瓧鍏歌幏鍙栧熀鍑嗙嚎 + List<SysDictData> baseLines = dictDataMapper.selectDictDataByType("home_baseLine"); + String condition; + if (examineTag != null && examineTag == 1) { + condition = "car_province_baseLine"; + } else if (examineTag != null && examineTag == 2) { + condition = "car_dept_baseLine"; + } else { + condition = "car_all_baseLine"; + } + + Optional<SysDictData> first = baseLines.stream().filter(sysDictData -> condition.equals(sysDictData.getDictLabel())).findFirst(); + if (first.isPresent()) { + SysDictData sysDictData = first.get(); + resultMap.put("baseLine", Integer.valueOf(sysDictData.getDictValue())); + } + return resultMap; + } + + //棣栭〉浜鸿劯鎶ヨ〃 + @Override + public Map<String, Object> faceHome(HomeQuery monitorQuery) throws ParseException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { + List<HomeFaceVO> results = new ArrayList<>(); + String month = monitorQuery.getDate(); + if (StringUtils.isEmpty(month)) { + //濡傛灉涓虹┖鏌ユ湰鏈堢殑鏁版嵁 + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM"); + month = simpleDateFormat.format(new Date()); + } + // 鍒涘缓涓�涓猄impleDateFormat瀵硅薄鏉ヨВ鏋愭棩鏈熷瓧绗︿覆 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); + Date date = sdf.parse(month); + // 鍒涘缓涓�涓狢alendar瀵硅薄骞惰缃椂闂翠负瑙f瀽鍑虹殑Date + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + // 璁剧疆Calendar涓烘湀浠界殑绗竴澶� + calendar.set(Calendar.DAY_OF_MONTH, 1); + // 鑾峰彇鏈堜唤绗竴澶╃殑Date + Date startDate = calendar.getTime(); + // 璁剧疆Calendar涓烘湀浠界殑鏈�鍚庝竴澶╋紙閫氳繃澧炲姞涓�涓湀浠界劧鍚庡噺鍘讳竴澶╋級 + calendar.add(Calendar.MONTH, 1); + calendar.add(Calendar.DAY_OF_MONTH, -1); + // 鑾峰彇鏈堜唤鏈�鍚庝竴澶╃殑Date + Date endDate = calendar.getTime(); + //mongo鏌ユ姄鎷嶉噺 + MongoDatabase database = mongoTemplate.getDb(); + MongoCollection<Document> collection = database.getCollection("hk_snapshot_data_monitor"); + Integer examineTag = monitorQuery.getExamineTag(); + // 鏋勫缓鍩烘湰鐨�$match鏉′欢 + List<Document> matchConditions = new ArrayList<>(); + matchConditions.add(new Document("mongoCreateTime", new Document("$gte", startDate).append("$lte", endDate))); + matchConditions.add(new Document("dataType", new Document("$eq", ApiConstants.HK_DataType_FACE))); + if (examineTag != null && examineTag.equals(1)) { + matchConditions.add(new Document("provinceTag", true)); + } else if (examineTag != null && examineTag.equals(2)) { + matchConditions.add(new Document("deptTag", true)); + } + // 鏋勫缓鑱氬悎绠¢亾 + List<Document> pipeline = Arrays.asList( + new Document("$match", new Document("$and", matchConditions)), + new Document("$group", new Document("_id", "$mongoCreateTime") + .append("dataCount", new Document("$sum", "$dataCount")) + ) + ); + + // 鎵ц鑱氬悎鏌ヨ骞惰幏鍙栫粨鏋� + AggregateIterable<Document> result = collection.aggregate(pipeline); + for (Document doc : result) { + HomeFaceVO homefaceVO = new HomeFaceVO(); + homefaceVO.setCreateDate(doc.getDate("_id")); + homefaceVO.setSnapCount(doc.getInteger("dataCount")); + results.add(homefaceVO); + } + + //mongo鏌ョ偣浣嶅湪绾� + MongoCollection<Document> onlineCollection = database.getCollection("t_monitor_online"); + // 鏋勫缓鍩烘湰鐨�$match鏉′欢 + List<Document> onlineMatch = new ArrayList<>(); + onlineMatch.add(new Document("mongoCreateTime", new Document("$gte", startDate).append("$lte", endDate))); + onlineMatch.add(new Document("monitorType", new Document("$regex", "3"))); + if (examineTag != null && examineTag.equals(1)) { + onlineMatch.add(new Document("provinceTag", true)); + } else if (examineTag != null && examineTag.equals(2)) { + onlineMatch.add(new Document("deptTag", true)); + } + // 鏋勫缓鑱氬悎绠¢亾 + List<Document> onlinePipeline = Arrays.asList( + new Document("$match", new Document("$and", onlineMatch)), + new Document("$group", new Document("_id", "$mongoCreateTime") + .append("onlineCount", new Document("$sum", + new Document("$cond", Arrays.asList( + new Document("$eq", Arrays.asList("$online", Boolean.TRUE)), + 1, + 0 + )) + )) + ) + ); + // 鎵ц鑱氬悎鏌ヨ骞惰幏鍙栫粨鏋� + AggregateIterable<Document> onlineResult = onlineCollection.aggregate(onlinePipeline); + for (Document doc : onlineResult) { + HomeFaceVO vo = findOrCreateVO(doc, results, HomeFaceVO.class); + vo.setOnline(doc.getInteger("onlineCount")); + } + //鎸夋椂闂存帓搴� + results = results.stream().sorted(Comparator.comparing(BaseHomeVO::getCreateDate)).collect(Collectors.toList()); + int snapCount = 0; + for (HomeFaceVO vo : results) { + if (vo.getSnapCount() != null) { + snapCount += vo.getSnapCount(); + } + vo.setSnapCount(snapCount); + } + Map<String, Object> resultMap = new HashMap<>(); + resultMap.put("list", results); + //浠庡瓧鍏歌幏鍙栧熀鍑嗙嚎 + List<SysDictData> baseLines = dictDataMapper.selectDictDataByType("home_baseLine"); + String condition; + if (examineTag != null && examineTag == 1) { + condition = "face_province_baseLine"; + } else if (examineTag != null && examineTag == 2) { + condition = "face_dept_baseLine"; + } else { + condition = "face_all_baseLine"; + } + Optional<SysDictData> first = baseLines.stream().filter(sysDictData -> condition.equals(sysDictData.getDictLabel())).findFirst(); + if (first.isPresent()) { + SysDictData sysDictData = first.get(); + resultMap.put("baseLine", Integer.valueOf(sysDictData.getDictValue())); + } + return resultMap; + } + + private <T extends BaseHomeVO> T findOrCreateVO(Document doc, List<T> results, Class<T> clazz) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { + Date createDate = doc.getDate("_id"); + for (T vo : results) { + if (vo.getCreateDate().equals(createDate)) { + return vo; + } + } + // 濡傛灉娌℃湁鎵惧埌鍖归厤椤癸紝鍒欏垱寤轰竴涓柊鐨刅O + T vo = clazz.getDeclaredConstructor().newInstance(); + vo.setCreateDate(createDate); + results.add(vo); + return vo; + } private Query getQuery(List<String> deviceIds, String month) { // 灏嗗勾鏈堝瓧绗︿覆瑙f瀽涓篩earMonth瀵硅薄 @@ -677,7 +1059,7 @@ field.setAccessible(true); //闃叉杞崲涓虹瀛﹁鏁版硶 BigDecimal bigDecimal = BigDecimal.valueOf(recordResult.getMissDuration() == null ? 0 : recordResult.getMissDuration()); - field.set(videoDailyExp,bigDecimal.toString()); + field.set(videoDailyExp, bigDecimal.toString()); } } } -- Gitblit v1.8.0