Newer
Older
newfiber-termite / newfiber-termites / newfiber-termites-dataup / src / main / java / com / newfiber / termite / service / impl / StatisticsServiceImpl.java
@xiongkai xiongkai 22 days ago 4 KB 统计接口
package com.newfiber.termite.service.impl;

import com.newfiber.termite.domain.DeviceMonitoringData;
import com.newfiber.termite.domain.request.statistic.SiteWarnDailySeqStatisticRequest;
import com.newfiber.termite.domain.request.statistic.SiteWarnTotalCountStatisticRequest;
import com.newfiber.termite.domain.response.statistic.SiteDailyWarnCount;
import com.newfiber.termite.domain.response.statistic.SiteTotalWarnCount;
import com.newfiber.termite.enums.EExistsAnt;
import com.newfiber.termite.service.IDeviceMonitoringDataService;
import com.newfiber.termite.service.IStatisticsService;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
import java.util.TreeMap;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;

/**
 *
 * @author X.K
 * @date 2024-05-27
 */
@Service
public class StatisticsServiceImpl implements IStatisticsService {

    @Resource
    private IDeviceMonitoringDataService deviceMonitoringDataService;

    @Override
    public Map<String, List<SiteDailyWarnCount>> warnDailySeqStatistic(
            SiteWarnDailySeqStatisticRequest request) {
        List<DeviceMonitoringData> deviceMonitoringDataList = deviceMonitoringDataService.selectList(request.getProjectCode(), EExistsAnt.True);
        List<String> dateList = deviceMonitoringDataList.stream().map(t -> t.getDate().split(" ")[0]).distinct().sorted().collect(Collectors.toList());
        Map<String, List<SiteDailyWarnCount>> response = new TreeMap<>();

        for(String date : dateList){
            Map<String, List<DeviceMonitoringData>> dailyDeviceMonitoringDataMap = deviceMonitoringDataList.stream().filter(t ->
                    date.equals(t.getDate().split(" ")[0])).collect(Collectors.groupingBy(DeviceMonitoringData::getSn));

            List<SiteDailyWarnCount> siteDailyWarnCountList = new ArrayList<>();
            for(Entry<String, List<DeviceMonitoringData>> entry : dailyDeviceMonitoringDataMap.entrySet()){
                Optional<DeviceMonitoringData> firstWarnDeviceMonitoringDataOptional = entry.getValue().stream()
                        .min(Comparator.comparing(DeviceMonitoringData::getDate));

                if(firstWarnDeviceMonitoringDataOptional.isPresent()){
                    DeviceMonitoringData firstWarnDeviceMonitoringData = firstWarnDeviceMonitoringDataOptional.get();
                    siteDailyWarnCountList.add(new SiteDailyWarnCount(entry.getKey(), firstWarnDeviceMonitoringData.getDate(), firstWarnDeviceMonitoringData.getLocation(),
                            entry.getValue().size(), firstWarnDeviceMonitoringData.getLocationType(), firstWarnDeviceMonitoringData.getLonandlat()));
                }
            }

            siteDailyWarnCountList = siteDailyWarnCountList.stream().sorted(Comparator.comparing(SiteDailyWarnCount::getDailyFirstWarnDatetime)).collect(Collectors.toList());

            response.put(date, siteDailyWarnCountList);
        }

        return response;
    }

    @Override
    public List<SiteTotalWarnCount> siteWarnTotalCountStatistic(SiteWarnTotalCountStatisticRequest request) {
        List<DeviceMonitoringData> deviceMonitoringDataList = deviceMonitoringDataService.selectList(request.getProjectCode(), EExistsAnt.True);
        List<SiteTotalWarnCount> siteTotalWarnCountList = new ArrayList<>();

        Map<String, List<DeviceMonitoringData>> siteDeviceMonitoringDataMap = deviceMonitoringDataList.stream().collect(Collectors.groupingBy(DeviceMonitoringData::getSn));
        for(Entry<String, List<DeviceMonitoringData>> entry : siteDeviceMonitoringDataMap.entrySet()){
            DeviceMonitoringData deviceMonitoringData = entry.getValue().get(0);
            siteTotalWarnCountList.add(new SiteTotalWarnCount(entry.getKey(), deviceMonitoringData.getLocation(),
                    entry.getValue().size(), deviceMonitoringData.getLocationType(), deviceMonitoringData.getLonandlat()));
        }

        return siteTotalWarnCountList;
    }

}