调整大屏统计代码

This commit is contained in:
zy 2025-11-21 19:04:29 +08:00
parent fb4c2f4cab
commit e7656ebb37
3 changed files with 257 additions and 136 deletions

View File

@ -544,8 +544,7 @@ public class BigScreenController {
public Result<List<ScreenIndexSummaryDetailVo>> getIndexSummry (@RequestBody ScreenSummaryVo screenSummaryVo){
List<ScreenIndexSummaryDetailVo> results = new ArrayList<>();
List<SurvStationInfo> stationList = survStationInfoService.getAllStationAndDevice(screenSummaryVo.getStationCode(),"","token");
//补充最新数据进入
// JSONArray returnArrs= new JSONArray();
Integer intYear = LocalDateTime.now().getYear();
String curYear = String.valueOf(intYear);
String lastYear = String.valueOf(intYear-1);
@ -558,7 +557,7 @@ public class BigScreenController {
for (Integer i = 1; i <= curMonth; i++) {
wholeTime.add(curYear+"-"+String.format("%02d", i));
}
Integer lastYearMonth = 12 -curMonth;
Integer lastYearMonth = 12 - curMonth;
Boolean isNeedLastYear = Boolean.FALSE;
if(lastYearMonth>0){
isNeedLastYear = Boolean.TRUE;
@ -579,26 +578,45 @@ public class BigScreenController {
String startTime = screenSummaryVo.getStartTime();
String endTime = screenSummaryVo.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(screenSummaryVo.getStartTime())){
if(IotConstants.day_hours.equals(screenSummaryVo.getSummrayMode())){//默认日
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
startDay = LocalDateTime.of(nowDay.toLocalDate(),LocalTime.MIN);
startTime = startDay.format(dtf);
endTime = LocalDateTime.of(nowDay.toLocalDate(),LocalTime.MAX).withNano(999999000).format(dtf);
startTime = startDay.format(daydtf);
endTime = LocalDateTime.of(nowDay.toLocalDate(),LocalTime.MAX).withNano(999999000).format(daydtf);
}else if(IotConstants.month_days.equals(screenSummaryVo.getSummrayMode())){
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM");
startDay = nowDay.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);
startTime = startDay.format(dtf);
endTime = nowDay.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX).withNano(999999000).format(dtf);
startTime = startDay.format(monthdtf);
endTime = nowDay.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX).withNano(999999000).format(monthdtf);
}else if(IotConstants.year_months.equals(screenSummaryVo.getSummrayMode())){
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy");
startDay = nowDay.with(TemporalAdjusters.firstDayOfYear()).with(LocalTime.MIN);
startTime = startDay.format(dtf);
endTime = nowDay.with(TemporalAdjusters.lastDayOfYear()).with(LocalTime.MAX).withNano(999999000).format(dtf);
startTime = startDay.format(yeardtf);
endTime = nowDay.with(TemporalAdjusters.lastDayOfYear()).with(LocalTime.MAX).withNano(999999000).format(yeardtf);
}
}else{
curYear = screenSummaryVo.getStartTime();
if(IotConstants.year_months.equals(screenSummaryVo.getSummrayMode())){//如果传入时间非本年重新计算年数据
if(!curYear.equals(nowDay.format(yeardtf))){
wholeTime = new ArrayList<>();
for (Integer i = 1; i <= 12; i++) {
wholeTime.add(curYear+"-"+String.format("%02d", i));
}
}
}
}
//使用数据的数量默认
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(stationList!=null&&stationList.size()>0){
@ -649,57 +667,9 @@ public class BigScreenController {
List<Double> avgNH = new ArrayList<>();//填充数据用
List<Double> avgCOD = new ArrayList<>();//填充数据用
if(IotConstants.day_hours.equals(screenSummaryVo.getSummrayMode()) || IotConstants.month_days.equals(screenSummaryVo.getSummrayMode())) {//小时
VOWaterSurvIntegrateParam voSurvIntegrateParam = new VOWaterSurvIntegrateParam();
voSurvIntegrateParam.setDeployIds(orientIdList);
voSurvIntegrateParam.setSummrayMode(screenSummaryVo.getSummrayMode());
voSurvIntegrateParam.setStartTime(startTime);
voSurvIntegrateParam.setEndTime(endTime);
VOSurvIntegrateResult survIntegrateResult = commonService.WaterIntegrateStatistic(voSurvIntegrateParam);
//数据
LinkedHashMap<String, List<Double>> maps = new LinkedHashMap<>();
LinkedHashMap<String,List<String>> survResult = survIntegrateResult.getSurvResult();
List<String> tnDatas = survResult.get(PollutionEnum.dataWaterTn.getCode());
List<String> tpDatas = survResult.get(PollutionEnum.dataWaterTp.getCode());
List<String> noDatas =survResult.get(PollutionEnum.dataWaterNo.getCode());
List<String> codDatas =survResult.get(PollutionEnum.dataWaterCod.getCode());
List<String> nhDatas = survResult.get(PollutionEnum.dataWaterNh.getCode());
if(tnDatas!=null) {
avgTN = tnDatas.stream()
.map(Double::parseDouble)
.collect(Collectors.toList());
}
if(tpDatas!=null) {
avgTP = tpDatas.stream()
.map(Double::parseDouble)
.collect(Collectors.toList());
}
if(noDatas!=null) {
avgNO = noDatas.stream()
.map(Double::parseDouble)
.collect(Collectors.toList());
}
if(codDatas!=null) {
avgCOD = codDatas.stream()
.map(Double::parseDouble)
.collect(Collectors.toList());
}
if(nhDatas!=null) {
avgNH = nhDatas.stream()
.map(Double::parseDouble)
.collect(Collectors.toList());
}
maps.put(ScreenIndexSummaryEnum.TNSummry.getDesc(),avgTN);
maps.put(ScreenIndexSummaryEnum.TPSummry.getDesc(),avgTP);
maps.put(ScreenIndexSummaryEnum.NOSummry.getDesc(),avgNO);
maps.put(ScreenIndexSummaryEnum.CODSummry.getDesc(),avgCOD);
maps.put(ScreenIndexSummaryEnum.NHSummry.getDesc(),avgNH);
screenIndexSummaryDetailVo.setDatas(maps);
//时间
screenIndexSummaryDetailVo.setDateStr(survIntegrateResult.getIndexs());
screenIndexSummaryDetailVo = commonService.processWaterDataSummary(screenSummaryVo,orientIdList,startTime,endTime);
}else if(IotConstants.year_months.equals(screenSummaryVo.getSummrayMode())){
screenIndexSummaryDetailVo.setDateStr(wholeTime);
if(curMonth>0) {//如果本年是一月份则只需要查询去年的
List<OrientDataTrans> orientSummry = hisdataOrientwaterService.getMonthSummry(orientList,curYear);
for (int i= 0;i<curMonth;i++) {
avgTN.add(orientSummry.get(i).getAvgTN());
@ -709,7 +679,6 @@ public class BigScreenController {
avgNH.add(0D);
avgCOD.add(0D);
}
}
if(isNeedLastYear){
List<OrientDataTrans> lastYearOrientSummry = hisdataOrientwaterService.getMonthSummry(orientList,lastYear);
List<Double> lastavgTN = new ArrayList<>();
@ -740,9 +709,7 @@ public class BigScreenController {
avgNH = lastavgNH;
avgCOD = lastavgCOD;
}
}
// StationSummry stationSummry =new StationSummry();
LinkedHashMap<String, List<Double>> maps = new LinkedHashMap<>();
maps.put(ScreenIndexSummaryEnum.TNSummry.getDesc(),avgTN);
maps.put(ScreenIndexSummaryEnum.TPSummry.getDesc(),avgTP);
@ -751,6 +718,8 @@ public class BigScreenController {
maps.put(ScreenIndexSummaryEnum.NHSummry.getDesc(),avgNH);
screenIndexSummaryDetailVo.setDatas(maps);
}
screenIndexSummaryDetailVo.setGroupId(survStationInfo.getGroupId());
screenIndexSummaryDetailVo.setGroupName(survStationInfo.getGroupName());
@ -766,57 +735,9 @@ public class BigScreenController {
List<Double> avgNO = new ArrayList<>(); //填充数据用
if(IotConstants.day_hours.equals(screenSummaryVo.getSummrayMode()) || IotConstants.month_days.equals(screenSummaryVo.getSummrayMode())) {//小时
VOWaterSurvIntegrateParam voSurvIntegrateParam = new VOWaterSurvIntegrateParam();
voSurvIntegrateParam.setDeployIds(liveIdList);
voSurvIntegrateParam.setSummrayMode(screenSummaryVo.getSummrayMode());
voSurvIntegrateParam.setStartTime(startTime);
voSurvIntegrateParam.setEndTime(endTime);
VOSurvIntegrateResult survIntegrateResult = commonService.WaterIntegrateStatistic(voSurvIntegrateParam);
//数据
LinkedHashMap<String, List<Double>> maps = new LinkedHashMap<>();
LinkedHashMap<String,List<String>> survResult = survIntegrateResult.getSurvResult();
List<String> tnDatas = survResult.get(PollutionEnum.dataWaterTn.getCode());
List<String> tpDatas = survResult.get(PollutionEnum.dataWaterTp.getCode());
List<String> noDatas =survResult.get(PollutionEnum.dataWaterNo.getCode());
List<String> codDatas =survResult.get(PollutionEnum.dataWaterCod.getCode());
List<String> nhDatas = survResult.get(PollutionEnum.dataWaterNh.getCode());
if(tnDatas!=null) {
avgTN = tnDatas.stream()
.map(Double::parseDouble)
.collect(Collectors.toList());
}
if(tpDatas!=null) {
avgTP = tpDatas.stream()
.map(Double::parseDouble)
.collect(Collectors.toList());
}
if(noDatas!=null) {
avgNO = noDatas.stream()
.map(Double::parseDouble)
.collect(Collectors.toList());
}
if(codDatas!=null) {
avgCOD = codDatas.stream()
.map(Double::parseDouble)
.collect(Collectors.toList());
}
if(nhDatas!=null) {
avgNH = nhDatas.stream()
.map(Double::parseDouble)
.collect(Collectors.toList());
}
maps.put(ScreenIndexSummaryEnum.TNSummry.getDesc(),avgTN);
maps.put(ScreenIndexSummaryEnum.TPSummry.getDesc(),avgTP);
maps.put(ScreenIndexSummaryEnum.NOSummry.getDesc(),avgNO);
maps.put(ScreenIndexSummaryEnum.CODSummry.getDesc(),avgCOD);
maps.put(ScreenIndexSummaryEnum.NHSummry.getDesc(),avgNH);
screenIndexSummaryDetailVo.setDatas(maps);
//时间
screenIndexSummaryDetailVo.setDateStr(survIntegrateResult.getIndexs());
screenIndexSummaryDetailVo = commonService.processWaterDataSummary(screenSummaryVo,liveIdList,startTime,endTime);
}else if(IotConstants.year_months.equals(screenSummaryVo.getSummrayMode())) {
screenIndexSummaryDetailVo.setDateStr(wholeTime);
if (curMonth > 0) {//如果本年是一月份则只需要查询去年的
List<LiveDataTrans> liveSummry = hisdataLivestockwaterService.getMonthSummry(liveList, curYear);
for (int i = 0; i < curMonth; i++) {
avgTN.add(liveSummry.get(i).getAvgTN());
@ -826,7 +747,6 @@ public class BigScreenController {
avgNO.add(0D);
}
}
if (isNeedLastYear) {
List<LiveDataTrans> lastYearSummry = hisdataLivestockwaterService.getMonthSummry(liveList, lastYear);
@ -858,7 +778,7 @@ public class BigScreenController {
avgCOD = lastavgCOD;
avgNO = lastavgNO;
}
}
LinkedHashMap<String, List<Double>> maps = new LinkedHashMap<>();
maps.put(ScreenIndexSummaryEnum.TNSummry.getDesc(),avgTN);
@ -868,6 +788,8 @@ public class BigScreenController {
maps.put(ScreenIndexSummaryEnum.NHSummry.getDesc(),avgNH);
screenIndexSummaryDetailVo.setDatas(maps);
}
screenIndexSummaryDetailVo.setGroupId(survStationInfo.getGroupId());
screenIndexSummaryDetailVo.setGroupName(survStationInfo.getGroupName());

View File

@ -7,6 +7,7 @@ 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;
@ -14,6 +15,8 @@ import org.jeecg.common.iot.common.*;
import org.jeecg.common.util.DateTimeRangeUtils;
import org.jeecg.common.util.ReflectionUtils;
import org.jeecg.common.vo.CommonDataTrans;
import org.jeecg.common.vo.statistic.ScreenIndexSummaryDetailVo;
import org.jeecg.common.vo.statistic.ScreenSummaryVo;
import org.jeecg.modules.appmana.service.*;
import org.jeecg.modules.appmana.utils.CommonUtils;
import org.jeecg.modules.appmana.utils.Iotutils;
@ -23,6 +26,8 @@ import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
@ -1123,6 +1128,200 @@ public class IotCommonServiceImpl {
result.setLiveData(commonDataTransList);
return result;
}
public ScreenIndexSummaryDetailVo processWaterDataSummary(ScreenSummaryVo screenSummaryVo,List<String> deviceList,String startTime,String endTime){
ScreenIndexSummaryDetailVo screenIndexSummaryDetailVo = new ScreenIndexSummaryDetailVo();
List<Double> avgTN = new ArrayList<>();
List<Double> avgTP = new ArrayList<>();
List<Double> avgNO = new ArrayList<>();
List<Double> avgNH = new ArrayList<>();//填充数据用
List<Double> avgCOD = new ArrayList<>();//填充数据用
VOWaterSurvIntegrateParam voSurvIntegrateParam = new VOWaterSurvIntegrateParam();
voSurvIntegrateParam.setDeployIds(deviceList);
voSurvIntegrateParam.setSummrayMode(screenSummaryVo.getSummrayMode());
voSurvIntegrateParam.setStartTime(startTime);
voSurvIntegrateParam.setEndTime(endTime);
VOSurvIntegrateResult survIntegrateResult = WaterIntegrateStatistic(voSurvIntegrateParam);
if(IotConstants.day_hours.equals(screenSummaryVo.getSummrayMode())) {
//处理时间格式
survIntegrateResult.setIndexs(processTime(survIntegrateResult.getIndexs(),"yyyy-MM-dd HH","H时"));
}
//数据
LinkedHashMap<String, List<Double>> maps = new LinkedHashMap<>();
LinkedHashMap<String,List<String>> survResult = survIntegrateResult.getSurvResult();
List<String> tnDatas = new ArrayList<>();
List<String> tpDatas = new ArrayList<>();
List<String> noDatas = new ArrayList<>();
List<String> codDatas = new ArrayList<>();
List<String> nhDatas = 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 = WaterIntegrateStatistic(voSurvIntegrateParam);
LinkedHashMap<String,List<String>> yesterResult = yesterData.getSurvResult();
//处理时间格式
yesterData.setIndexs(processTime(yesterData.getIndexs(),"yyyy-MM-dd HH","H时"));
List<String> y1 = yesterResult.get(PollutionEnum.dataWaterTn.getCode());
if(y1!=null){
tnDatas.addAll(y1.subList(yesterDataCounts,y1.size()));
}
List<String> y2= yesterResult.get(PollutionEnum.dataWaterTp.getCode());
if(y2!=null){
tpDatas.addAll(y2.subList(yesterDataCounts,y2.size()));
}
List<String> y3 = yesterResult.get(PollutionEnum.dataWaterNo.getCode());
if(y3!=null){
noDatas.addAll(y3.subList(yesterDataCounts,y3.size()));
}
List<String> y4 = yesterResult.get(PollutionEnum.dataWaterCod.getCode());
if(y4!=null) {
codDatas.addAll(y4.subList(yesterDataCounts,y4.size()));
}
List<String> y5 = yesterResult.get(PollutionEnum.dataWaterNh.getCode());
if(y5!=null){
nhDatas.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)){//如果查询是今天再查询一次昨天拼接为24小时
LocalDateTime yesterMonth = nowDay.minusMonths(1);
todayDataCounts = nowDay.getDayOfMonth();
yesterDataCounts = todayDataCounts;
String newTimes = yesterMonth.format(monthdtf);
voSurvIntegrateParam.setStartTime(newTimes);
voSurvIntegrateParam.setEndTime(newTimes);
VOSurvIntegrateResult yesterData = WaterIntegrateStatistic(voSurvIntegrateParam);
LinkedHashMap<String,List<String>> yesterResult = yesterData.getSurvResult();
List<String> y1 = yesterResult.get(PollutionEnum.dataWaterTn.getCode());
if(y1!=null){
tnDatas.addAll(y1.subList(yesterDataCounts,y1.size()));
}
List<String> y2= yesterResult.get(PollutionEnum.dataWaterTp.getCode());
if(y2!=null){
tpDatas.addAll(y2.subList(yesterDataCounts,y2.size()));
}
List<String> y3 = yesterResult.get(PollutionEnum.dataWaterNo.getCode());
if(y3!=null){
noDatas.addAll(y3.subList(yesterDataCounts,y3.size()));
}
List<String> y4 = yesterResult.get(PollutionEnum.dataWaterCod.getCode());
if(y4!=null) {
codDatas.addAll(y4.subList(yesterDataCounts,y4.size()));
}
List<String> y5 = yesterResult.get(PollutionEnum.dataWaterNh.getCode());
if(y5!=null){
nhDatas.addAll(y5.subList(yesterDataCounts,y5.size()));
}
timeList.addAll(yesterData.getIndexs().subList(yesterDataCounts,yesterData.getIndexs().size()));
}
}
timeList.addAll(survIntegrateResult.getIndexs().subList(0,todayDataCounts));
List<String> t1 = survResult.get(PollutionEnum.dataWaterTn.getCode());
if(t1!=null){
tnDatas.addAll(t1.subList(0,todayDataCounts)) ;
}
List<String> t2= survResult.get(PollutionEnum.dataWaterTp.getCode());
if(t2!=null){
tpDatas.addAll(t2.subList(0,todayDataCounts));
}
List<String> t3 = survResult.get(PollutionEnum.dataWaterNo.getCode());
if(t3!=null){
noDatas.addAll(t3.subList(0,todayDataCounts));
}
List<String> t4 = survResult.get(PollutionEnum.dataWaterCod.getCode());
if(t4!=null) {
codDatas.addAll(t4.subList(0,todayDataCounts));
}
List<String> t5 = survResult.get(PollutionEnum.dataWaterNh.getCode());
if(t5!=null){
nhDatas.addAll(t5.subList(0,todayDataCounts));
}
if(!tnDatas.isEmpty()) {
avgTN = tnDatas.stream()
.map(Double::parseDouble)
.collect(Collectors.toList());
}
if(!tpDatas.isEmpty()) {
avgTP = tpDatas.stream()
.map(Double::parseDouble)
.collect(Collectors.toList());
}
if(!noDatas.isEmpty()) {
avgNO = noDatas.stream()
.map(Double::parseDouble)
.collect(Collectors.toList());
}
if(!codDatas.isEmpty()) {
avgCOD = codDatas.stream()
.map(Double::parseDouble)
.collect(Collectors.toList());
}
if(!nhDatas.isEmpty()) {
avgNH = nhDatas.stream()
.map(Double::parseDouble)
.collect(Collectors.toList());
}
maps.put(ScreenIndexSummaryEnum.TNSummry.getDesc(),avgTN);
maps.put(ScreenIndexSummaryEnum.TPSummry.getDesc(),avgTP);
maps.put(ScreenIndexSummaryEnum.NOSummry.getDesc(),avgNO);
maps.put(ScreenIndexSummaryEnum.CODSummry.getDesc(),avgCOD);
maps.put(ScreenIndexSummaryEnum.NHSummry.getDesc(),avgNH);
screenIndexSummaryDetailVo.setDatas(maps);
//时间
screenIndexSummaryDetailVo.setDateStr(timeList);
return screenIndexSummaryDetailVo;
}
/**
* 统一处理时间格式
*/
List<String> processTime(List<String> timeList,String timeformat,String transtoformat){
List<String> result = new ArrayList<>();
if(timeList!=null && !timeList.isEmpty()){
SimpleDateFormat s1= new SimpleDateFormat(timeformat);
SimpleDateFormat s2= new SimpleDateFormat(transtoformat);
for (String s : timeList) {
try{
String newTime = s2.format(s1.parse(s));
result.add(newTime);
}catch (ParseException e){
e.printStackTrace();
continue;
}
}
}
return result;
}
}

View File

@ -35,12 +35,12 @@ public class test {
s1.add("3");
s1.add("4");
s1.add("5");
List<String> s2 = new ArrayList<>();
s2.add("1");
s2.add("2");
s2.addAll(s1);
s1 = s2;
System.out.println( s1);
// List<String> s2 = new ArrayList<>();
// s2.add("1");
// s2.add("2");
// s2.addAll(s1);
// s1 = s2;
System.out.println( s1.subList(1,s1.size()));
}
}