diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataVocsServiceImpl.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataVocsServiceImpl.java index 076e1f4..e565ec9 100644 --- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataVocsServiceImpl.java +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/SurvHisdataVocsServiceImpl.java @@ -8,14 +8,12 @@ import org.apache.commons.lang3.StringUtils; import org.jeecg.common.constant.IotConstants; import org.jeecg.common.constant.PollutionConstants; import org.jeecg.common.constant.enums.PollutionEnum; +import org.jeecg.common.constant.enums.ScreenIndexSummaryEnum; import org.jeecg.common.entity.ScEquZhibiao; import org.jeecg.common.entity.SurvConfig; import org.jeecg.common.entity.SurvDeviceDeploy; import org.jeecg.common.entity.SurvHisdataVocs; -import org.jeecg.common.iot.common.VOCommonSurvIntegrateParam; -import org.jeecg.common.iot.common.VOSurvElement; -import org.jeecg.common.iot.common.VOSurvIntegrateResult; -import org.jeecg.common.iot.common.VOSurvIntegrateStinkDetail; +import org.jeecg.common.iot.common.*; import org.jeecg.common.util.DateTimeRangeUtils; import org.jeecg.common.vo.CommonDataTrans; import org.jeecg.common.vo.statistic.ScreenIndexSummaryDetailVo; @@ -29,6 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.lang.reflect.Field; import java.math.BigDecimal; import java.time.LocalDate; @@ -37,6 +36,7 @@ import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; import java.util.*; +import java.util.stream.Collectors; /** * @Description: 恶臭实时历史数据 @@ -53,19 +53,223 @@ public class SurvHisdataVocsServiceImpl extends ServiceImpl stinkList, String startTime, String endTime) { - VOCommonSurvIntegrateParam voCommonSurvIntegrateParam = new VOCommonSurvIntegrateParam(); - voCommonSurvIntegrateParam.setDeployIds(stinkList); - voCommonSurvIntegrateParam.setStartTime(startTime); - voCommonSurvIntegrateParam.setEndTime(endTime); - voCommonSurvIntegrateParam.setSummrayMode(screenSummaryVo.getSummrayMode()); - StinkIntegrateStatistic(voCommonSurvIntegrateParam); - return null; + ScreenIndexSummaryDetailVo screenIndexSummaryDetailVo = processVocQuality(screenSummaryVo, stinkList, startTime, endTime); + return screenIndexSummaryDetailVo; } + + + /** + * 按实际时间返回综合统计 + * @param screenSummaryVo + * @param deviceList + * @param startTime + * @param endTime + * @return + */ + public ScreenIndexSummaryDetailVo processVocQuality(ScreenSummaryVo screenSummaryVo,List deviceList,String startTime,String endTime) { + if(deviceList.isEmpty()){ + return null; + } + + ScreenIndexSummaryDetailVo screenIndexSummaryDetailVo = new ScreenIndexSummaryDetailVo(); + List avgQu = new ArrayList<>(); + List avgNh3 = new ArrayList<>(); + List avgH2s = new ArrayList<>(); + List avgTvoc = new ArrayList<>(); + + VOCommonSurvIntegrateParam voSurvIntegrateParam = new VOCommonSurvIntegrateParam(); + voSurvIntegrateParam.setDeployIds(deviceList); + voSurvIntegrateParam.setSummrayMode(screenSummaryVo.getSummrayMode()); + voSurvIntegrateParam.setStartTime(startTime); + voSurvIntegrateParam.setEndTime(endTime); + VOSurvIntegrateResult survIntegrateResult =StinkIntegrateStatistic(voSurvIntegrateParam); + + + if(IotConstants.day_hours.equals(screenSummaryVo.getSummrayMode())) { + //处理时间格式 + survIntegrateResult.setIndexs(commonService.processTime(survIntegrateResult.getIndexs(),"yyyy-MM-dd HH","H时")); + } + + //数据 + LinkedHashMap> maps = new LinkedHashMap<>(); + LinkedHashMap> survResult = survIntegrateResult.getSurvResult(); + List StinkOuDatas = new ArrayList<>(); + List StinkNh3Datas = new ArrayList<>(); + List StinkH2sDatas = new ArrayList<>(); + List StinkTvocDatas = new ArrayList<>(); + + List timeList = new ArrayList<>(); + LocalDateTime nowDay = LocalDateTime.now(); + DateTimeFormatter daydtf = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + DateTimeFormatter monthdtf = DateTimeFormatter.ofPattern("yyyy-MM"); + DateTimeFormatter yeardtf = DateTimeFormatter.ofPattern("yyyy"); + + //使用数据的数量,默认 + int todayDataCounts = 0; + //需要拼接的数量 + int yesterDataCounts = 0; + if(IotConstants.day_hours.equals(screenSummaryVo.getSummrayMode())) {//日需要24数据 + todayDataCounts =24; + }else if(IotConstants.month_days.equals(screenSummaryVo.getSummrayMode())){//月需要数据量 + LocalDate curDateMark = LocalDate.parse(startTime+"-01",daydtf); + todayDataCounts = curDateMark.with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth(); + } + + if(IotConstants.day_hours.equals(screenSummaryVo.getSummrayMode())){//检查是否是今天 + if(nowDay.format(daydtf).equals(startTime)){//如果查询是今天,再查询一次昨天,拼接为24小时 + LocalDateTime yesterday = nowDay.minusDays(1); + + todayDataCounts = nowDay.getHour()+1;//0点开始,故+1 + yesterDataCounts = todayDataCounts; + String newTimes = yesterday.format(daydtf); + voSurvIntegrateParam.setStartTime(newTimes); + voSurvIntegrateParam.setEndTime(newTimes); + VOSurvIntegrateResult yesterData = StinkIntegrateStatistic(voSurvIntegrateParam); + LinkedHashMap> yesterResult = yesterData.getSurvResult(); + //处理时间格式 + yesterData.setIndexs(commonService.processTime(yesterData.getIndexs(),"yyyy-MM-dd HH","H时")); + + List y2= yesterResult.get(PollutionEnum.dataStinkOu.getCode()); + if(y2!=null){ + StinkOuDatas.addAll(y2.subList(yesterDataCounts,y2.size())); + } + List y3 = yesterResult.get(PollutionEnum.dataStinkNh3.getCode()); + if(y3!=null){ + StinkNh3Datas.addAll(y3.subList(yesterDataCounts,y3.size())); + } + List y4 = yesterResult.get(PollutionEnum.dataStinkH2s.getCode()); + if(y4!=null) { + StinkH2sDatas.addAll(y4.subList(yesterDataCounts,y4.size())); + } + List y5 = yesterResult.get(PollutionEnum.dataStinkTvoc.getCode()); + if(y5!=null){ + StinkTvocDatas.addAll(y5.subList(yesterDataCounts,y5.size())); + } + timeList.addAll(yesterData.getIndexs().subList(yesterDataCounts,yesterData.getIndexs().size())); + } + } else if (IotConstants.month_days.equals(screenSummaryVo.getSummrayMode())){//检查是否是本月 + if(nowDay.format(monthdtf).equals(startTime)){//如果查询是本月,再查询一次上个月,拼接为30天 + LocalDateTime yesterMonth = nowDay.minusMonths(1); + + todayDataCounts = nowDay.getDayOfMonth(); + yesterDataCounts = todayDataCounts; + String newTimes = yesterMonth.format(monthdtf); + voSurvIntegrateParam.setStartTime(newTimes); + voSurvIntegrateParam.setEndTime(newTimes); + VOSurvIntegrateResult yesterData = StinkIntegrateStatistic(voSurvIntegrateParam); + LinkedHashMap> yesterResult = yesterData.getSurvResult(); + + List y2= yesterResult.get(PollutionEnum.dataStinkOu.getCode()); + if(y2!=null){ + StinkOuDatas.addAll(y2.subList(yesterDataCounts,y2.size())); + } + List y3 = yesterResult.get(PollutionEnum.dataStinkNh3.getCode()); + if(y3!=null){ + StinkNh3Datas.addAll(y3.subList(yesterDataCounts,y3.size())); + } + List y4 = yesterResult.get(PollutionEnum.dataStinkH2s.getCode()); + if(y4!=null) { + StinkH2sDatas.addAll(y4.subList(yesterDataCounts,y4.size())); + } + List y5 = yesterResult.get(PollutionEnum.dataStinkTvoc.getCode()); + if(y5!=null){ + StinkTvocDatas.addAll(y5.subList(yesterDataCounts,y5.size())); + } + timeList.addAll(yesterData.getIndexs().subList(yesterDataCounts,yesterData.getIndexs().size())); + } + } else if (IotConstants.year_months.equals(screenSummaryVo.getSummrayMode())){//检查是否是本年 + if(nowDay.format(yeardtf).equals(startTime)){//如果查询是本年,再查询一次去年,拼接为12个月 + LocalDateTime yesterYear = nowDay.minusYears(1); + + todayDataCounts = nowDay.getMonthValue(); + yesterDataCounts = todayDataCounts; + String newTimes = yesterYear.format(yeardtf); + voSurvIntegrateParam.setStartTime(newTimes); + voSurvIntegrateParam.setEndTime(newTimes); + VOSurvIntegrateResult yesterData = StinkIntegrateStatistic(voSurvIntegrateParam); + LinkedHashMap> yesterResult = yesterData.getSurvResult(); + + List y2= yesterResult.get(PollutionEnum.dataStinkOu.getCode()); + if(y2!=null){ + StinkOuDatas.addAll(y2.subList(yesterDataCounts,y2.size())); + } + List y3 = yesterResult.get(PollutionEnum.dataStinkNh3.getCode()); + if(y3!=null){ + StinkNh3Datas.addAll(y3.subList(yesterDataCounts,y3.size())); + } + List y4 = yesterResult.get(PollutionEnum.dataStinkH2s.getCode()); + if(y4!=null) { + StinkH2sDatas.addAll(y4.subList(yesterDataCounts,y4.size())); + } + List y5 = yesterResult.get(PollutionEnum.dataStinkTvoc.getCode()); + if(y5!=null){ + StinkTvocDatas.addAll(y5.subList(yesterDataCounts,y5.size())); + } + timeList.addAll(yesterData.getIndexs().subList(yesterDataCounts,yesterData.getIndexs().size())); + } + } + + timeList.addAll(survIntegrateResult.getIndexs().subList(0,todayDataCounts)); + + List t2= survResult.get(PollutionEnum.dataWaterPh.getCode()); + if(t2!=null){ + StinkOuDatas.addAll(t2.subList(0,todayDataCounts)); + } + List t3 = survResult.get(PollutionEnum.dataWaterDdl.getCode()); + if(t3!=null){ + StinkNh3Datas.addAll(t3.subList(0,todayDataCounts)); + } + List t4 = survResult.get(PollutionEnum.dataWaterNtu.getCode()); + if(t4!=null) { + StinkH2sDatas.addAll(t4.subList(0,todayDataCounts)); + } + List t5 = survResult.get(PollutionEnum.dataWaterDo.getCode()); + if(t5!=null){ + StinkTvocDatas.addAll(t5.subList(0,todayDataCounts)); + } + + + if(!StinkOuDatas.isEmpty()) { + avgQu = StinkOuDatas.stream() + .map(Double::parseDouble) + .collect(Collectors.toList()); + } + if(!StinkNh3Datas.isEmpty()) { + avgNh3 = StinkNh3Datas.stream() + .map(Double::parseDouble) + .collect(Collectors.toList()); + } + if(!StinkH2sDatas.isEmpty()) { + avgH2s = StinkH2sDatas.stream() + .map(Double::parseDouble) + .collect(Collectors.toList()); + } + if(!StinkTvocDatas.isEmpty()) { + avgTvoc = StinkTvocDatas.stream() + .map(Double::parseDouble) + .collect(Collectors.toList()); + } + maps.put(ScreenIndexSummaryEnum.QuSummry.getDesc(),avgQu); + maps.put(ScreenIndexSummaryEnum.Nh3Summry.getDesc(),avgNh3); + maps.put(ScreenIndexSummaryEnum.H2sSummry.getDesc(),avgH2s); + maps.put(ScreenIndexSummaryEnum.TvocSummry.getDesc(),avgTvoc); + + screenIndexSummaryDetailVo.setDatas(maps); + //时间 + screenIndexSummaryDetailVo.setDateStr(timeList); + + return screenIndexSummaryDetailVo; + } + + public List integrateSummary(String tenantId, List stinkList, String timeDataFormat, LocalDateTime startTime, LocalDateTime endTime) { return baseMapper.integrateSummary(tenantId,stinkList,timeDataFormat, startTime, endTime); } diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/enums/ScreenIndexSummaryEnum.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/enums/ScreenIndexSummaryEnum.java index 943f8e7..362cb89 100644 --- a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/enums/ScreenIndexSummaryEnum.java +++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/constant/enums/ScreenIndexSummaryEnum.java @@ -15,6 +15,10 @@ public enum ScreenIndexSummaryEnum { DDLSummry("DDLSummry","电导率"), NTUSummry("NTUSummry","浊度"), DOSummry("DOSummry","溶解氧"), + QuSummry("QuSummry","臭气浓度"), + Nh3Summry("Nh3Summry","氨气"), + H2sSummry("H2sSummry","硫化氢"), + TvocSummry("TvocSummry","总挥发性有机物"), OTHER("other","其他") ;