龚焕茏
2024-08-30 dffa4edacd228bb7aa385525e4a30db2384bc78f
ycl-server/src/main/java/com/ycl/task/MonitorTask.java
@@ -21,6 +21,7 @@
import enumeration.general.AreaDeptEnum;
import enumeration.general.PointStatus;
import lombok.extern.slf4j.Slf4j;
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;
@@ -56,37 +57,28 @@
    private RedisTemplate redisTemplate;
    //同步mongodb一机一档到数据库
    @Transactional(rollbackFor = Exception.class)
    public void synchronize() {
        // 获取Calendar实例,默认使用当前时区和语言环境
        Calendar calendar = Calendar.getInstance();
        // 清除Calendar中的所有字段值,以避免它们对当前日期时间有影响
        calendar.clear();
        // 设置年份、月份(注意:月份是从0开始的,所以8月是7)、日期
        calendar.set(Calendar.YEAR, 2024);
        calendar.set(Calendar.MONTH, Calendar.AUGUST);
        calendar.set(Calendar.DAY_OF_MONTH, 13);
        // Calendar.getTime()方法返回一个表示此Calendar时间值的Date对象
        Date date = calendar.getTime();
        Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date)));
//        Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())));
        log.info("开始同步mongodb一机一档到数据库");
        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);
        //数据库monitor表数据
        Map<String, TMonitorVO> monitorVOMap = monitorMapper.selectMonitorVOList().stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity()));
        //准备插入设备表的数据
        List<TMonitor> monitorList = new ArrayList<>();
        //准备插入点位表的数据
        List<YwPoint> ywPointList = new ArrayList<>();
        //新的数据,原数据库中不存在的数据
        Set<TMonitor> newMonitorList = new HashSet<>();
        //点位数据
        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());
        //准备插入设备表的数据
        List<TMonitor> monitorList = new ArrayList<>();
        //准备插入点位表的数据
        List<YwPoint> ywPointList = new ArrayList<>();
        //新的数据,原数据库中不存在的数据
        Set<TMonitor> newMonitorList = new HashSet<>();
        //全年留存
        for (MonitorQualifyResult result : oneMachineFileResults) {
@@ -99,6 +91,22 @@
                newMonitorList.add(monitor);
            }
        }
        //添加老数据
        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);
                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)){
                ywPointList.add(value);
            }
        });
        log.info("result集合{},设备集合{},点位集合{}", oneMachineFileResults.size(), monitorList.size(), ywPointList.size());
        //插入数据库
        if (!CollectionUtils.isEmpty(monitorList)) {
@@ -111,6 +119,7 @@
        }
        //新的数据放入Redis中等待考核指标任务使用
        redisTemplate.opsForValue().set(RedisConstant.New_Monitor_Set, JSONArray.toJSONString(newMonitorList));
        log.info("结束同步mongodb一机一档到数据库");
    }
    private YwPoint getPoint(MonitorQualifyResult result, Map<String, YwPoint> pointMap, List<String> importantSite) {