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; } }