| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | |
| | | 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; |
| | | |
| | |
| | | private MongoTemplate mongoTemplate; |
| | | @Autowired |
| | | private WorkOrderMapper workOrderMapper; |
| | | @Autowired |
| | | private SysDictDataMapper dictDataMapper; |
| | | |
| | | /** |
| | | * 查询设备资产 |
| | |
| | | @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()); |
| | |
| | | @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()); |
| | |
| | | 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); |
| | |
| | | @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()); |
| | |
| | | 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); |
| | |
| | | @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()); |
| | |
| | | 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); |
| | |
| | | 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()); |
| | | } |
| | | // 创建一个SimpleDateFormat对象来解析日期字符串 |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); |
| | | Date date = sdf.parse(month); |
| | | // 创建一个Calendar对象并设置时间为解析出的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()); |
| | | } |
| | | // 创建一个SimpleDateFormat对象来解析日期字符串 |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); |
| | | Date date = sdf.parse(month); |
| | | // 创建一个Calendar对象并设置时间为解析出的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()); |
| | | } |
| | | // 创建一个SimpleDateFormat对象来解析日期字符串 |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); |
| | | Date date = sdf.parse(month); |
| | | // 创建一个Calendar对象并设置时间为解析出的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; |
| | | } |
| | | } |
| | | // 如果没有找到匹配项,则创建一个新的VO |
| | | T vo = clazz.getDeclaredConstructor().newInstance(); |
| | | vo.setCreateDate(createDate); |
| | | results.add(vo); |
| | | return vo; |
| | | } |
| | | |
| | | private Query getQuery(List<String> deviceIds, String month) { |
| | | // 将年月字符串解析为YearMonth对象 |
| | |
| | | field.setAccessible(true); |
| | | //防止转换为科学计数法 |
| | | BigDecimal bigDecimal = BigDecimal.valueOf(recordResult.getMissDuration() == null ? 0 : recordResult.getMissDuration()); |
| | | field.set(videoDailyExp,bigDecimal.toString()); |
| | | field.set(videoDailyExp, bigDecimal.toString()); |
| | | } |
| | | } |
| | | } |