diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/BigScreenController.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/BigScreenController.java index e3a7715..774cdf6 100644 --- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/BigScreenController.java +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/BigScreenController.java @@ -681,7 +681,6 @@ public class BigScreenController { } //查询五常数据 - log.warn("ccc======"+waterIdList.size()); ScreenIndexSummaryDetailVo waterQuality = commonP2Service.processWaterQuality(screenSummaryVo,waterIdList,startTime,endTime); diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/BigScreenControllerP2.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/BigScreenControllerP2.java index c44dcb6..9b2372c 100644 --- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/BigScreenControllerP2.java +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/controller/BigScreenControllerP2.java @@ -10,16 +10,24 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.api.vo.Result; +import org.jeecg.common.constant.IotConstants; import org.jeecg.common.constant.enums.PollutionEnum; import org.jeecg.common.entity.SurvDeviceDeploy; import org.jeecg.common.entity.SurvMaintainRecord; +import org.jeecg.common.iot.common.VOIntegrateStatistic; +import org.jeecg.common.iot.common.VOSurvIntegrateResult; import org.jeecg.common.vo.params.StationMaintainPage; +import org.jeecg.common.vo.statistic.DeploySummaryVo; +import org.jeecg.common.vo.statistic.ScreenIndexSummaryDetailVo; +import org.jeecg.common.vo.statistic.ScreenSummaryDetailVo; +import org.jeecg.common.vo.statistic.ScreenSummaryVo; import org.jeecg.modules.appmana.service.ISurvDeviceDeployService; import org.jeecg.modules.appmana.service.ISurvMaintainRecordService; import org.jeecg.modules.appmana.service.impl.CommonServiceImpl; import org.jeecg.common.vo.VOBigScreenSurvQ; import org.jeecg.common.vo.VOHisFormResult; import org.jeecg.common.vo.VOHisResult; +import org.jeecg.modules.appmana.service.impl.IotCommonP2ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -27,6 +35,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; +import java.time.temporal.TemporalAdjusters; import java.util.ArrayList; import java.util.List; @@ -41,6 +50,8 @@ public class BigScreenControllerP2 { @Autowired private CommonServiceImpl commonService; @Autowired + private IotCommonP2ServiceImpl iotCommonP2Service; + @Autowired private ISurvMaintainRecordService maintainRecordService; @ApiOperationSupport(order = 1) @@ -97,4 +108,12 @@ public class BigScreenControllerP2 { return Result.OK(records); } + @ApiOperationSupport(order = 3) + @ApiOperation(value = "03. 实际日综合曲线数据", notes = "") + @PostMapping(value = "/timesIntegrate") + public Result timesIntegrate(@RequestBody DeploySummaryVo deploySummaryVo) { + VOIntegrateStatistic voIntegrateStatistic = iotCommonP2Service.CalAirSoilTimesIntegrate(deploySummaryVo); + return Result.OK(voIntegrateStatistic); + } + } diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/CommonServiceImpl.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/CommonServiceImpl.java index 1d44ec9..7769b99 100644 --- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/CommonServiceImpl.java +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/CommonServiceImpl.java @@ -153,4 +153,6 @@ public class CommonServiceImpl { return configService.getCacheConfig(tenantId, configType); } + + } diff --git a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/IotCommonP2ServiceImpl.java b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/IotCommonP2ServiceImpl.java index bd032df..d5dfcb1 100644 --- a/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/IotCommonP2ServiceImpl.java +++ b/zh-module-applet/zh-applet-admin/src/main/java/org/jeecg/modules/appmana/service/impl/IotCommonP2ServiceImpl.java @@ -1,15 +1,19 @@ package org.jeecg.modules.appmana.service.impl; import cn.hutool.json.JSONUtil; +import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.jeecg.common.constant.IotConstants; import org.jeecg.common.constant.enums.PollutionEnum; import org.jeecg.common.constant.enums.ScreenIndexSummaryEnum; +import org.jeecg.common.iot.common.VOIntegrateStatistic; import org.jeecg.common.iot.common.VOSurvIntegrateParam; import org.jeecg.common.iot.common.VOSurvIntegrateResult; import org.jeecg.common.iot.common.VOWaterSurvIntegrateParam; import org.jeecg.common.vo.VOHisFormResult; import org.jeecg.common.vo.VOHisResult; +import org.jeecg.common.vo.statistic.DeploySummaryVo; import org.jeecg.common.vo.statistic.ScreenIndexSummaryDetailVo; import org.jeecg.common.vo.statistic.ScreenSummaryVo; import org.jeecg.modules.appmana.mapper.IOTStatisticMapper; @@ -70,6 +74,15 @@ public class IotCommonP2ServiceImpl { return voHisResult; } + + /** + * 按实际时间返回综合统计 + * @param screenSummaryVo + * @param deviceList + * @param startTime + * @param endTime + * @return + */ public ScreenIndexSummaryDetailVo processWaterQuality(ScreenSummaryVo screenSummaryVo,List deviceList,String startTime,String endTime) { if(deviceList.isEmpty()){ return null; @@ -281,4 +294,163 @@ public class IotCommonP2ServiceImpl { return screenIndexSummaryDetailVo; } + + public VOIntegrateStatistic CalAirSoilTimesIntegrate(DeploySummaryVo deploySummaryVo) { + if(deploySummaryVo.getDeployIds()==null || deploySummaryVo.getDeployIds().isEmpty()){ + return null; + } + VOSurvIntegrateResult voSurvIntegrateResult = new VOSurvIntegrateResult(); + //默认日数据 + if(StringUtils.isBlank(deploySummaryVo.getSummrayMode())){ + deploySummaryVo.setSummrayMode(IotConstants.day_hours); + } + LocalDateTime nowDay = LocalDateTime.now(); + String startTime = deploySummaryVo.getStartTime(); + String endTime = deploySummaryVo.getEndTime(); + LocalDateTime startDay = null; + DateTimeFormatter daydtf = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + DateTimeFormatter monthdtf = DateTimeFormatter.ofPattern("yyyy-MM"); + DateTimeFormatter yeardtf = DateTimeFormatter.ofPattern("yyyy"); + + if(StringUtils.isBlank(deploySummaryVo.getStartTime())){ + if(IotConstants.day_hours.equals(deploySummaryVo.getSummrayMode())){//默认日 + startDay = LocalDateTime.of(nowDay.toLocalDate(),LocalTime.MIN); + startTime = startDay.format(daydtf); + endTime = LocalDateTime.of(nowDay.toLocalDate(),LocalTime.MAX).withNano(999999000).format(daydtf); + }else if(IotConstants.month_days.equals(deploySummaryVo.getSummrayMode())){ + startDay = nowDay.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN); + startTime = startDay.format(monthdtf); + endTime = nowDay.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX).withNano(999999000).format(monthdtf); + }else if(IotConstants.year_months.equals(deploySummaryVo.getSummrayMode())){ + startDay = nowDay.with(TemporalAdjusters.firstDayOfYear()).with(LocalTime.MIN); + startTime = startDay.format(yeardtf); + endTime = nowDay.with(TemporalAdjusters.lastDayOfYear()).with(LocalTime.MAX).withNano(999999000).format(yeardtf); + } + } + ScreenSummaryVo screenSummaryVo = new ScreenSummaryVo(); + screenSummaryVo.setStartTime(deploySummaryVo.getStartTime()); + screenSummaryVo.setEndTime(deploySummaryVo.getEndTime()); + screenSummaryVo.setSummrayMode(deploySummaryVo.getSummrayMode()); + + + VOSurvIntegrateParam voSurvIntegrateParam = new VOSurvIntegrateParam(); + voSurvIntegrateParam.setDeployIds(deploySummaryVo.getDeployIds()); + voSurvIntegrateParam.setSummrayMode(screenSummaryVo.getSummrayMode()); + voSurvIntegrateParam.setStartTime(startTime); + voSurvIntegrateParam.setEndTime(endTime); + VOSurvIntegrateResult nowItegrate =commonService.survDataIntegrateStatistic(voSurvIntegrateParam); + if(IotConstants.day_hours.equals(screenSummaryVo.getSummrayMode())) { + //处理时间格式 + nowItegrate.setIndexs(commonService.processTime(nowItegrate.getIndexs(),"yyyy-MM-dd HH","H时")); + } + + //数据 + List timeList = new ArrayList<>(); + LinkedHashMap> dataMap =new LinkedHashMap<>(); + //使用数据的数量,默认 + 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 = commonService.survDataIntegrateStatistic(voSurvIntegrateParam); + LinkedHashMap> yesterResult = yesterData.getSurvResult(); + //处理时间格式 + yesterData.setIndexs(commonService.processTime(yesterData.getIndexs(),"yyyy-MM-dd HH","H时")); + //数据截取 + dataMap = processDataSub(yesterResult,nowItegrate.getSurvResult(),todayDataCounts,yesterDataCounts); + 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 = commonService.survDataIntegrateStatistic(voSurvIntegrateParam); + LinkedHashMap> yesterResult = yesterData.getSurvResult(); + dataMap = processDataSub(yesterResult,nowItegrate.getSurvResult(),todayDataCounts,yesterDataCounts); + 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 = commonService.survDataIntegrateStatistic(voSurvIntegrateParam); + LinkedHashMap> yesterResult = yesterData.getSurvResult(); + dataMap = processDataSub(yesterResult,nowItegrate.getSurvResult(),todayDataCounts,yesterDataCounts); + timeList.addAll(yesterData.getIndexs().subList(yesterDataCounts,yesterData.getIndexs().size())); + } + } + + timeList.addAll(nowItegrate.getIndexs().subList(0,todayDataCounts)); + + voSurvIntegrateResult.setHeaders(nowItegrate.getHeaders()); + voSurvIntegrateResult.setSurvResult(dataMap); + voSurvIntegrateResult.setIndexs(timeList); + + + //组装数据 + VOIntegrateStatistic voIntegrateStatistic = new VOIntegrateStatistic(); + List> voSurvIntegrateTotals = commonService.transToMapList(voSurvIntegrateResult); + voIntegrateStatistic.setObjResults(voSurvIntegrateResult.getSurvResult()); + voIntegrateStatistic.setTableHead(voSurvIntegrateResult.getHeaders()); + voIntegrateStatistic.setTableIndex(voSurvIntegrateResult.getIndexs()); + voIntegrateStatistic.setTableData(voSurvIntegrateTotals); + voIntegrateStatistic.setTableData2(commonService.transToArr(voSurvIntegrateResult.getHeaders(),voSurvIntegrateTotals)); + voIntegrateStatistic.setRealTimeData(voSurvIntegrateResult.getLiveData()); + + return voIntegrateStatistic; + } + + /** + * 处理数据截取 + */ + private LinkedHashMap> processDataSub(LinkedHashMap> datas, LinkedHashMap> nowDatas, Integer todayDataCounts, Integer yesterDataCounts){ + LinkedHashMap> curDatas = new LinkedHashMap<>(); + LinkedHashMap> newData = new LinkedHashMap<>(); + if(nowDatas!=null && !nowDatas.isEmpty()){ + for (String items : nowDatas.keySet()) { + List nowData = nowDatas.get(items); + curDatas.put(items,nowData.subList(0,todayDataCounts)); + } + } + if(datas!=null && !datas.isEmpty()){ + for (String s : datas.keySet()) { + List survData = datas.get(s); + if(survData!=null && !survData.isEmpty()){ + List yesterData = survData.subList(yesterDataCounts,survData.size()); + //拼接新旧数据 + if(curDatas!=null) { + List itemCurData = curDatas.get(s); + yesterData.addAll(itemCurData); + } + newData.put(s,yesterData); + } + } + } + return newData; + } } diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/statistic/DeploySummaryVo.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/statistic/DeploySummaryVo.java new file mode 100644 index 0000000..e3c9f22 --- /dev/null +++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/statistic/DeploySummaryVo.java @@ -0,0 +1,19 @@ +package org.jeecg.common.vo.statistic; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class DeploySummaryVo { + @ApiModelProperty("站点编号") + private List deployIds; + @ApiModelProperty("开始时间") + private String startTime; + @ApiModelProperty("结束时间") + private String endTime; + @ApiModelProperty("统计模式,dayhours=日小时统计,monthDays=月每日统计,yearMonth=年每月统计") + private String summrayMode; + +} diff --git a/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/statistic/ScreenSummaryDetailVo.java b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/statistic/ScreenSummaryDetailVo.java new file mode 100644 index 0000000..4f613e5 --- /dev/null +++ b/zh-module-applet/zh-applet-common/src/main/java/org/jeecg/common/vo/statistic/ScreenSummaryDetailVo.java @@ -0,0 +1,15 @@ +package org.jeecg.common.vo.statistic; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +import java.util.LinkedHashMap; +import java.util.List; + +@Data +public class ScreenSummaryDetailVo { + @JSONField(name = "datas") + private LinkedHashMap> datas; + @JSONField(name = "dateStr") + private List dateStr; +}