增加按设备过滤统计项

This commit is contained in:
zhangyue 2026-07-20 19:19:56 +08:00
parent deb3443da2
commit f742eb6cca
2 changed files with 219 additions and 11 deletions

View File

@ -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<SurvHisdataVocsMappe
@Autowired
@Lazy
private SurvConfigServiceImpl configService;
@Resource
@Lazy
private IotCommonServiceImpl commonService;
@Override
public ScreenIndexSummaryDetailVo getStinkSummry(ScreenSummaryVo screenSummaryVo, List<String> stinkList, String startTime, String endTime) {
VOCommonSurvIntegrateParam voCommonSurvIntegrateParam = new VOCommonSurvIntegrateParam();
voCommonSurvIntegrateParam.setDeployIds(stinkList);
voCommonSurvIntegrateParam.setStartTime(startTime);
voCommonSurvIntegrateParam.setEndTime(endTime);
voCommonSurvIntegrateParam.setSummrayMode(screenSummaryVo.getSummrayMode());
StinkIntegrateStatistic(voCommonSurvIntegrateParam);
ScreenIndexSummaryDetailVo screenIndexSummaryDetailVo = processVocQuality(screenSummaryVo, stinkList, startTime, endTime);
return screenIndexSummaryDetailVo;
}
/**
* 按实际时间返回综合统计
* @param screenSummaryVo
* @param deviceList
* @param startTime
* @param endTime
* @return
*/
public ScreenIndexSummaryDetailVo processVocQuality(ScreenSummaryVo screenSummaryVo,List<String> deviceList,String startTime,String endTime) {
if(deviceList.isEmpty()){
return null;
}
ScreenIndexSummaryDetailVo screenIndexSummaryDetailVo = new ScreenIndexSummaryDetailVo();
List<Double> avgQu = new ArrayList<>();
List<Double> avgNh3 = new ArrayList<>();
List<Double> avgH2s = new ArrayList<>();
List<Double> 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<String, List<Double>> maps = new LinkedHashMap<>();
LinkedHashMap<String,List<String>> survResult = survIntegrateResult.getSurvResult();
List<String> StinkOuDatas = new ArrayList<>();
List<String> StinkNh3Datas = new ArrayList<>();
List<String> StinkH2sDatas = new ArrayList<>();
List<String> StinkTvocDatas = new ArrayList<>();
List<String> 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<String,List<String>> yesterResult = yesterData.getSurvResult();
//处理时间格式
yesterData.setIndexs(commonService.processTime(yesterData.getIndexs(),"yyyy-MM-dd HH","H时"));
List<String> y2= yesterResult.get(PollutionEnum.dataStinkOu.getCode());
if(y2!=null){
StinkOuDatas.addAll(y2.subList(yesterDataCounts,y2.size()));
}
List<String> y3 = yesterResult.get(PollutionEnum.dataStinkNh3.getCode());
if(y3!=null){
StinkNh3Datas.addAll(y3.subList(yesterDataCounts,y3.size()));
}
List<String> y4 = yesterResult.get(PollutionEnum.dataStinkH2s.getCode());
if(y4!=null) {
StinkH2sDatas.addAll(y4.subList(yesterDataCounts,y4.size()));
}
List<String> 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<String,List<String>> yesterResult = yesterData.getSurvResult();
List<String> y2= yesterResult.get(PollutionEnum.dataStinkOu.getCode());
if(y2!=null){
StinkOuDatas.addAll(y2.subList(yesterDataCounts,y2.size()));
}
List<String> y3 = yesterResult.get(PollutionEnum.dataStinkNh3.getCode());
if(y3!=null){
StinkNh3Datas.addAll(y3.subList(yesterDataCounts,y3.size()));
}
List<String> y4 = yesterResult.get(PollutionEnum.dataStinkH2s.getCode());
if(y4!=null) {
StinkH2sDatas.addAll(y4.subList(yesterDataCounts,y4.size()));
}
List<String> 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<String,List<String>> yesterResult = yesterData.getSurvResult();
List<String> y2= yesterResult.get(PollutionEnum.dataStinkOu.getCode());
if(y2!=null){
StinkOuDatas.addAll(y2.subList(yesterDataCounts,y2.size()));
}
List<String> y3 = yesterResult.get(PollutionEnum.dataStinkNh3.getCode());
if(y3!=null){
StinkNh3Datas.addAll(y3.subList(yesterDataCounts,y3.size()));
}
List<String> y4 = yesterResult.get(PollutionEnum.dataStinkH2s.getCode());
if(y4!=null) {
StinkH2sDatas.addAll(y4.subList(yesterDataCounts,y4.size()));
}
List<String> 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<String> t2= survResult.get(PollutionEnum.dataWaterPh.getCode());
if(t2!=null){
StinkOuDatas.addAll(t2.subList(0,todayDataCounts));
}
List<String> t3 = survResult.get(PollutionEnum.dataWaterDdl.getCode());
if(t3!=null){
StinkNh3Datas.addAll(t3.subList(0,todayDataCounts));
}
List<String> t4 = survResult.get(PollutionEnum.dataWaterNtu.getCode());
if(t4!=null) {
StinkH2sDatas.addAll(t4.subList(0,todayDataCounts));
}
List<String> 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<VOSurvIntegrateStinkDetail> integrateSummary(String tenantId, List<String> stinkList, String timeDataFormat, LocalDateTime startTime, LocalDateTime endTime) {
return baseMapper.integrateSummary(tenantId,stinkList,timeDataFormat, startTime, endTime);
}

View File

@ -15,6 +15,10 @@ public enum ScreenIndexSummaryEnum {
DDLSummry("DDLSummry","电导率"),
NTUSummry("NTUSummry","浊度"),
DOSummry("DOSummry","溶解氧"),
QuSummry("QuSummry","臭气浓度"),
Nh3Summry("Nh3Summry","氨气"),
H2sSummry("H2sSummry","硫化氢"),
TvocSummry("TvocSummry","总挥发性有机物"),
OTHER("other","其他")
;