近七日趋势展示(数据小于7天,补全日期与相应数据)
最近做项目遇到一个问题,就是获取近七日趋势数据的展示,从数据库中查询出满足条件的数据有几条就返回几条,如果条数<7,就会缺失相应日期与该日期对应的数据,在前端界面上显示就会不太美观。接下来就针对上述问题进行处理,如果数据库返回的数据的条数小于7,则补全缺少的日期,该日期对应的数据为0。
获取近七日日期的工具类
public static Set<String> getBeforeDayTimeOnlyDayList() {
Set<String> timeList = new HashSet<>();
Date startDate = getDateBefore(new Date(), 6);
Date endDate = new Date();
Calendar start = Calendar.getInstance();
start.setTime(startDate);
SimpleDateFormat sdf = new SimpleDateFormat(DATE_MONTH_DAY);
while (startDate.getTime() <= endDate.getTime()) {
timeList.add(sdf.format(startDate));
start.add(Calendar.DAY_OF_MONTH, 1);
startDate = start.getTime();
}
// Comparator<String>sort=Comparator.comparing(S)
timeList.stream().sorted();
return timeList;
}
具体业务处理过程
public BaseResult<List> get7dayZdrTotalTrend() {
try {
String endTime = DateUtils.getDay()+" 23:59:59";
String startTime = DateUtils.getAfterDay(-6)+" 00:00:00";
Set<String> dateList = getBeforeDayTimeOnlyDayList();
List<ZdrTrendDto> dtoList = new ArrayList<>();
List<ZdrTrendDto> resList = new ArrayList<>();
List<Map<String, Object>> list = zdrAlarmInfoRepository.get7dayZdrTotalTrend(startTime, endTime);
if (CollectionUtils.isNotEmpty(list)) {
dtoList = list.stream().map(item -> {
ZdrTrendDto dto = new ZdrTrendDto();
dto.setDay(String.valueOf(item.get("daystr")).substring(5, 10));
dto.setZdrNum(Integer.valueOf(String.valueOf(item.get("zdrnum"))));
return dto;
}).collect(Collectors.toList());
} //else {
for (String str : dateList) {
ZdrTrendDto zdrTrendDto = new ZdrTrendDto();
ZdrTrendDto dto =
dtoList.stream().filter(x -> x.getDay().equalsIgnoreCase(str)).findAny().orElse(null);
if(dto!=null){
zdrTrendDto.setZdrNum(dto.getZdrNum()==null?0:dto.getZdrNum());
}else{
zdrTrendDto.setZdrNum(0);
}
zdrTrendDto.setDay(str);
resList.add(zdrTrendDto);
Comparator<ZdrTrendDto> sort = Comparator.comparing(ZdrTrendDto::getDay);
resList.sort(sort);
//}
}
return BaseResult.success(resList);
} catch (Exception e) {
logger.error("获取7日重点人趋势失败", e.getMessage(), e);
throw new BusinessExceptionAdapter(ErrorCode.ZDR.GET_ZDR_TOTAL_TREND_ERROR);
}
}