在线监测点超功能
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user