fuliqi
2024-12-19 7b73755e320f1bec9254b86a0f078c5f7969880d
ycl-server/src/main/java/com/ycl/task/MonitorTask.java
@@ -83,72 +83,74 @@
//        Date yesterday = DateUtils.addDays(new Date(), -1);
        Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
        List<MonitorQualifyResult> oneMachineFileResults = mongoTemplate.find(query, MonitorQualifyResult.class);
        //mongo品牌数据
        Query OSDQuery = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
        Map<String, OsdCheckResult> osdMap = mongoTemplate.find(query, OsdCheckResult.class).stream().collect(Collectors.toMap(OsdCheckResult::getDeviceNo, Function.identity()));
        //数据库monitor表数据
        Map<String, TMonitorVO> monitorVOMap = monitorMapper.selectMonitorVOList().stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity()));
        //点位数据
        Map<String, YwPoint> pointMap = ywPointService.list(new QueryWrapper<YwPoint>()).stream().collect(Collectors.toMap(YwPoint::getSerialNumber, Function.identity()));
        if(!CollectionUtils.isEmpty(oneMachineFileResults)) {
            //mongo品牌数据
            Query OSDQuery = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
            Map<String, OsdCheckResult> osdMap = mongoTemplate.find(query, OsdCheckResult.class).stream().collect(Collectors.toMap(OsdCheckResult::getDeviceNo, Function.identity()));
            //数据库monitor表数据
            Map<String, TMonitorVO> monitorVOMap = monitorMapper.selectMonitorVOList().stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity()));
            //点位数据
            Map<String, YwPoint> pointMap = ywPointService.list(new QueryWrapper<YwPoint>()).stream().collect(Collectors.toMap(YwPoint::getSerialNumber, Function.identity()));
        //重点点位集合字典(解析SXJCJQY字段)
        SysDictData sysDictData = new SysDictData();
        sysDictData.setDictType("platform_important_site");
        List<SysDictData> DictDataList = dictDataService.selectDictDataList(sysDictData);
        //采集区域为重点点位的集合
        List<String> importantSite = DictDataList.stream().map(SysDictData::getDictValue).collect(Collectors.toList());
            //重点点位集合字典(解析SXJCJQY字段)
            SysDictData sysDictData = new SysDictData();
            sysDictData.setDictType("platform_important_site");
            List<SysDictData> DictDataList = dictDataService.selectDictDataList(sysDictData);
            //采集区域为重点点位的集合
            List<String> importantSite = DictDataList.stream().map(SysDictData::getDictValue).collect(Collectors.toList());
        //准备插入设备表的数据
        List<TMonitor> monitorList = new ArrayList<>();
        //准备插入点位表的数据
        List<YwPoint> ywPointList = new ArrayList<>();
            //准备插入设备表的数据
            List<TMonitor> monitorList = new ArrayList<>();
            //准备插入点位表的数据
            List<YwPoint> ywPointList = new ArrayList<>();
        //全年留存
        for (MonitorQualifyResult result : oneMachineFileResults) {
            TMonitor monitor = getMonitor(result, monitorVOMap, osdMap);
            YwPoint point = getPoint(result, pointMap, importantSite);
            monitorList.add(monitor);
            ywPointList.add(point);
        }
        //添加老数据
        List<String> numbers = CollectionUtils.isEmpty(monitorList) ? new ArrayList<>() : monitorList.stream().map(TMonitor::getSerialNumber).collect(Collectors.toList());
        monitorVOMap.forEach((key, value) -> {
            if (!numbers.contains(key)) {
                TMonitor monitor = new TMonitor();
                BeanUtils.copyProperties(value, monitor);
                //填补品牌
                OsdCheckResult osdCheckResult = osdMap.get(key);
                if (osdCheckResult != null) {
                    monitor.setDeviceType(osdCheckResult.getDeviceBrand());
                }
            //全年留存
            for (MonitorQualifyResult result : oneMachineFileResults) {
                TMonitor monitor = getMonitor(result, monitorVOMap, osdMap);
                YwPoint point = getPoint(result, pointMap, importantSite);
                monitorList.add(monitor);
                ywPointList.add(point);
            }
        });
        List<String> points = CollectionUtils.isEmpty(ywPointList) ? new ArrayList<>() : ywPointList.stream().map(YwPoint::getSerialNumber).collect(Collectors.toList());
        pointMap.forEach((key, value) -> {
            //老设备状态改为不参与考核
            if (!points.contains(key)) {
                value.setExamineStatus(Boolean.FALSE);
                //单位设置为空
                value.setUnitId(null);
                ywPointList.add(value);
            }
        });
            //添加老数据
            List<String> numbers = CollectionUtils.isEmpty(monitorList) ? new ArrayList<>() : monitorList.stream().map(TMonitor::getSerialNumber).collect(Collectors.toList());
            monitorVOMap.forEach((key, value) -> {
                if (!numbers.contains(key)) {
                    TMonitor monitor = new TMonitor();
                    BeanUtils.copyProperties(value, monitor);
                    //填补品牌
                    OsdCheckResult osdCheckResult = osdMap.get(key);
                    if (osdCheckResult != null) {
                        monitor.setDeviceType(osdCheckResult.getDeviceBrand());
                    }
        log.info("result集合{},设备集合{},点位集合{}", oneMachineFileResults.size(), monitorList.size(), ywPointList.size());
        //插入数据库
        if (!CollectionUtils.isEmpty(monitorList)) {
            monitorMapper.deleteAll();
            monitorService.saveBatch(monitorList);
        }
        if (!CollectionUtils.isEmpty(ywPointList)) {
            ywPointMapper.deleteAll();
            ywPointService.saveBatch(ywPointList);
        }
        //新的数据放入Redis中等待考核指标任务使用(弃用,改为标签形式)
                    monitorList.add(monitor);
                }
            });
            List<String> points = CollectionUtils.isEmpty(ywPointList) ? new ArrayList<>() : ywPointList.stream().map(YwPoint::getSerialNumber).collect(Collectors.toList());
            pointMap.forEach((key, value) -> {
                //老设备状态改为不参与考核
                if (!points.contains(key)) {
                    value.setExamineStatus(Boolean.FALSE);
                    //单位设置为空(TODO:为啥)
                    value.setUnitId(null);
                    ywPointList.add(value);
                }
            });
            log.info("result集合{},设备集合{},点位集合{}", oneMachineFileResults.size(), monitorList.size(), ywPointList.size());
            //插入数据库
            if (!CollectionUtils.isEmpty(monitorList)) {
                monitorMapper.deleteAll();
                monitorService.saveBatch(monitorList);
            }
            if (!CollectionUtils.isEmpty(ywPointList)) {
                ywPointMapper.deleteAll();
                ywPointService.saveBatch(ywPointList);
            }
            //新的数据放入Redis中等待考核指标任务使用(弃用,改为标签形式)
//        redisTemplate.opsForValue().set(RedisConstant.New_Monitor_Set, JSONArray.toJSONString(newMonitorList));
        }
        log.info("结束同步mongodb一机一档到数据库");
    }