在线监测点超功能

This commit is contained in:
hzj
2024-05-22 14:54:17 +08:00
parent 34d57aafb9
commit 28487ceb63
12 changed files with 231 additions and 18 deletions

View File

@@ -18,13 +18,13 @@ import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.enums.DicDataTypeEnum;
import com.njcn.system.pojo.po.DictData;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.YearMonth;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -87,9 +87,41 @@ public class RMpPartHarmonicDetailDServiceImpl extends ServiceImpl<RMpPartHarmon
List<RMpPartHarmonicDetailDTO> result = rMpPartHarmonicDetailDTOS.stream().
filter(temp -> CollectionUtil.isEmpty(param.getHarmonicTypes()) ||param.getHarmonicTypes().contains(temp.getHarmonicType())).
filter(temp -> temp.getOverLimitrate() > param.getRate()).collect(Collectors.toList());
collect(Collectors.toList());
return result;
//合并指标天数计算连续超标天数,及总超标天数
Map<String, List<RMpPartHarmonicDetailDTO>> map = result.stream().collect(Collectors.groupingBy(RMpPartHarmonicDetailDTO::getMeasurementPointId));
List<RMpPartHarmonicDetailDTO> rMpPartHarmonicDetailDTOList = new ArrayList<>();
//获取所有指标类型如何前端为空则将所有子表类型塞入HarmonicTypes
List<String> collect = steadyStatis.stream().map(DictData::getId).collect(Collectors.toList());
map.forEach((k,v)->{
RMpPartHarmonicDetailDTO rMpPartHarmonicDetailDTO = new RMpPartHarmonicDetailDTO();
RMpPartHarmonicDetailDTO rMpPartHarmonicDetailDTO1 = v.get(0);
BeanUtils.copyProperties(rMpPartHarmonicDetailDTO1,rMpPartHarmonicDetailDTO);
rMpPartHarmonicDetailDTO.setHarmonicTypes( CollectionUtil.isEmpty(param.getHarmonicTypes())?collect:param.getHarmonicTypes());
List<List<LocalDate>> collect1 = v.stream().map(RMpPartHarmonicDetailDTO::getDateList).collect(Collectors.toList());
List<LocalDate> union = collect1.stream()
.flatMap(List::stream)
.distinct()
.collect(Collectors.toList());
rMpPartHarmonicDetailDTO.setDateList(union);
rMpPartHarmonicDetailDTO.setOverLimitDay(union.size());
rMpPartHarmonicDetailDTO.setOverLimitrate(Double.parseDouble(union.size()+"")/daysInMonth);
int i = maxConsecutiveDays(union);
rMpPartHarmonicDetailDTO.setOverLimitContinuous(i);
//监测点连续越限10天的为
//预警测点连续越限15天的为告警监测点
if(i<10){
return;
}else if(i>=10&&i<15) {
rMpPartHarmonicDetailDTO.setWarningFlag(1);
}else{
rMpPartHarmonicDetailDTO.setAlarmFlag(1);
}
rMpPartHarmonicDetailDTOList.add(rMpPartHarmonicDetailDTO);
});
return rMpPartHarmonicDetailDTOList;
}
@@ -200,4 +232,65 @@ public class RMpPartHarmonicDetailDServiceImpl extends ServiceImpl<RMpPartHarmon
}
return localDetails.stream().distinct().collect(Collectors.toList());
}
/**
* @Description: maxConsecutiveDays 一组List<LocalDate> 为超标天数,判断连续超标天数
* @Param:
* @return: int
* @Author: clam
* @Date: 2024/5/21
*/
public static int maxConsecutiveDays(List<LocalDate> signInDays) {
Collections.sort(signInDays);
int maxConsecutiveDays = 0;
int currentConsecutiveDays = 1;
for (int i = 1; i < signInDays.size(); i++) {
long daysBetween = ChronoUnit.DAYS.between(signInDays.get(i - 1), signInDays.get(i));
if (daysBetween == 1) {
currentConsecutiveDays++;
} else {
currentConsecutiveDays = 1;
}
maxConsecutiveDays = Math.max(maxConsecutiveDays, currentConsecutiveDays);
}
return maxConsecutiveDays;
}
public static void main(String[] args) {
List<LocalDate> signInDays = new ArrayList<>();
signInDays.add(LocalDate.of(2022, 1, 1));
signInDays.add(LocalDate.of(2022, 1, 2));
signInDays.add(LocalDate.of(2022, 1, 3));
signInDays.add(LocalDate.of(2022, 1, 5));
signInDays.add(LocalDate.of(2022, 1, 6));
signInDays.add(LocalDate.of(2022, 1, 7));
signInDays.add(LocalDate.of(2022, 1, 8));
signInDays.add(LocalDate.of(2022, 1, 9));
// signInDays.add(LocalDate.of(2022, 1, 10));
// signInDays.add(LocalDate.of(2022, 1, 11));
// signInDays.add(LocalDate.of(2022, 1, 12));
// signInDays.add(LocalDate.of(2022, 1, 14));
// signInDays.add(LocalDate.of(2022, 1, 15));
// signInDays.add(LocalDate.of(2022, 1, 16));
// signInDays.add(LocalDate.of(2022, 1, 18));
// signInDays.add(LocalDate.of(2022, 1, 19));
// signInDays.add(LocalDate.of(2022, 1, 20));
// signInDays.add(LocalDate.of(2022, 1, 21));
// signInDays.add(LocalDate.of(2022, 1, 22));
// signInDays.add(LocalDate.of(2022, 1, 23));
// signInDays.add(LocalDate.of(2022, 1, 24));
// signInDays.add(LocalDate.of(2022, 1, 25));
// signInDays.add(LocalDate.of(2022, 1, 26));
// signInDays.add(LocalDate.of(2022, 1, 27));
// signInDays.add(LocalDate.of(2022, 1, 28));
// signInDays.add(LocalDate.of(2022, 1, 29));
// signInDays.add(LocalDate.of(2022, 1, 30));
// signInDays.add(LocalDate.of(2022, 1, 31));
int maxConsecutiveDays = maxConsecutiveDays(signInDays);
System.out.println(maxConsecutiveDays);
}
}