解释看hour代码,其他同理
@Override
public WorkOrderReportVo queryRepair(String startTime, String endTime, String cycle) {
// sql查出数据
List<WorkProcessCompleteVo> dataList = new ArrayList<>();
List<Map<String, Object>> comList = new ArrayList<>();
WorkOrderReportVo reportVo = new WorkOrderReportVo();// 返回数据
if (CycleType.HOUR.equals(cycle)) {
//已有的时间
comList = workOrderProcessRepositoryDsl.queryCompleteHour(startTime, endTime);
//已有的时间
comList.forEach(m -> {
WorkProcessCompleteVo compVo = new WorkProcessCompleteVo();
compVo.setCycle(String.valueOf(m.get("hour")));
compVo.setCount(Long.parseLong(String.valueOf(m.get("count"))));
dataList.add(compVo);
});
//已有的时间转成map
Map<String, Long> mapData = dataList.stream()
.collect(Collectors.toMap(WorkProcessCompleteVo::getCycle, WorkProcessCompleteVo::getCount));
//已有的时间的和
Long total = dataList.stream().collect(Collectors.summingLong(WorkProcessCompleteVo::getCount));
//时间段格式转化
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
List<LocalDateTime> list = new ArrayList<>();
List<WorkProcessCompleteVo> listResult = new ArrayList<>();
//String转LocalDateTime
LocalDateTime startDate = LocalDateTime.parse(startTime, df);
LocalDateTime endDate = LocalDateTime.parse(endTime, df);
//得到时间段内的所有小时数(24小时制,查询条件是一天内)
long distance = ChronoUnit.HOURS.between(startDate, endDate);
//时间段相减小于1 就返回
if (distance < 1) {
//把数据库查出数据放入返回实体类中
reportVo.setDetail(dataList);
reportVo.setTotal(total);
return reportVo;
}
//把查出所有小时放入list里
Stream.iterate(startDate, d -> d.plusHours(1)).limit(distance + 1).forEach(f -> {
list.add(f);
});
list.forEach(l -> {
WorkProcessCompleteVo completeVo = new WorkProcessCompleteVo();
completeVo.setCycle(df.format(l).substring(11, 13) + ":00");
completeVo.setCount(0L);
listResult.add(completeVo);
});
//sql查出数据通过遍历放入所有时间list里
listResult.stream().map(a -> {
if (mapData.containsKey(a.getCycle())) {
a.setCount(mapData.get(a.getCycle()));
}
return a;
}).collect(Collectors.toList());
//返回数据
reportVo.setDetail(listResult);
reportVo.setTotal(total);
return reportVo;
} else if (CycleType.DAY.equals(cycle)) {
comList = workOrderProcessRepositoryDsl.queryCompleteDay(startTime, endTime);
// 获取现有的天数
comList.forEach(m -> {
WorkProcessCompleteVo compVo = new WorkProcessCompleteVo();
compVo.setCycle(String.valueOf(m.get("day")));
compVo.setCount(Long.parseLong(String.valueOf(m.get("count"))));
dataList.add(compVo);
});
// 转成map
Map<String, Long> mapData = dataList.stream()
.collect(Collectors.toMap(WorkProcessCompleteVo::getCycle, WorkProcessCompleteVo::getCount));
Long total = dataList.stream().collect(Collectors.summingLong(WorkProcessCompleteVo::getCount));
// 获取时间段内所有时间
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
List<LocalDateTime> list = new ArrayList<>();
List<WorkProcessCompleteVo> listResult = new ArrayList<>();
LocalDateTime startDate = LocalDateTime.parse(startTime, df);
LocalDateTime endDate = LocalDateTime.parse(endTime, df);
long distance = ChronoUnit.DAYS.between(startDate, endDate);
if (distance < 1) {
reportVo.setDetail(dataList);
reportVo.setTotal(total);
return reportVo;
}
Stream.iterate(startDate, d -> d.plusDays(1)).limit(distance + 1).forEach(f -> {
list.add(f);
});
// 所有时间
list.forEach(l -> {
WorkProcessCompleteVo completeVo = new WorkProcessCompleteVo();
completeVo.setCycle(df.format(l).substring(0, 10));
completeVo.setCount(0L);
listResult.add(completeVo);
});
// 整合数据
listResult.stream().map(a -> {
if (mapData.containsKey(a.getCycle())) {
a.setCount(mapData.get(a.getCycle()));
}
return a;
}).collect(Collectors.toList());
reportVo.setDetail(listResult);
reportVo.setTotal(total);
return reportVo;
} else if (CycleType.MONTH.equals(cycle)) {
comList = workOrderProcessRepositoryDsl.queryCompleteMonth(startTime, endTime);
// 获取现有的月份
comList.forEach(m -> {
WorkProcessCompleteVo compVo = new WorkProcessCompleteVo();
compVo.setCycle(String.valueOf(m.get("month")));
compVo.setCount(Long.parseLong(String.valueOf(m.get("count"))));
dataList.add(compVo);
});
// 转成map
Map<String, Long> mapData = dataList.stream()
.collect(Collectors.toMap(WorkProcessCompleteVo::getCycle, WorkProcessCompleteVo::getCount));
Long total = dataList.stream().collect(Collectors.summingLong(WorkProcessCompleteVo::getCount));
// 获取时间段内所有时间
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
List<LocalDateTime> list = new ArrayList<>();
List<WorkProcessCompleteVo> listResult = new ArrayList<>();
LocalDateTime startDate = LocalDateTime.parse(startTime, df);
LocalDateTime endDate = LocalDateTime.parse(endTime, df);
long distance = ChronoUnit.MONTHS.between(startDate, endDate);
if (distance < 1) {
reportVo.setDetail(dataList);
reportVo.setTotal(total);
return reportVo;
}
Stream.iterate(startDate, d -> d.plusMonths(1)).limit(distance + 1).forEach(f -> {
list.add(f);
});
// 所有时间
list.forEach(l -> {
WorkProcessCompleteVo completeVo = new WorkProcessCompleteVo();
completeVo.setCycle(df.format(l).substring(0, 7));
completeVo.setCount(0L);
listResult.add(completeVo);
});
// 整合数据
listResult.stream().map(a -> {
if (mapData.containsKey(a.getCycle())) {
a.setCount(mapData.get(a.getCycle()));
}
return a;
}).collect(Collectors.toList());
reportVo.setDetail(listResult);
reportVo.setTotal(total);
return reportVo;
} else if (CycleType.YEAR.equals(cycle)) {
comList = workOrderProcessRepositoryDsl.queryCompleteYear(startTime, endTime);
// 获取现有的年
comList.forEach(m -> {
WorkProcessCompleteVo compVo = new WorkProcessCompleteVo();
compVo.setCycle(String.valueOf(m.get("year")));
compVo.setCount(Long.parseLong(String.valueOf(m.get("count"))));
dataList.add(compVo);
});
// 转成map
Map<String, Long> mapData = dataList.stream()
.collect(Collectors.toMap(WorkProcessCompleteVo::getCycle, WorkProcessCompleteVo::getCount));
Long total = dataList.stream().collect(Collectors.summingLong(WorkProcessCompleteVo::getCount));
// 获取时间段内所有时间
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
List<LocalDateTime> list = new ArrayList<>();
List<WorkProcessCompleteVo> listResult = new ArrayList<>();
LocalDateTime startDate = LocalDateTime.parse(startTime, df);
LocalDateTime endDate = LocalDateTime.parse(endTime, df);
long distance = ChronoUnit.YEARS.between(startDate, endDate);
if (distance < 1) {
reportVo.setDetail(dataList);
reportVo.setTotal(total);
return reportVo;
}
Stream.iterate(startDate, d -> d.plusYears(1)).limit(distance + 1).forEach(f -> {
list.add(f);
});
// 所有时间
list.forEach(l -> {
WorkProcessCompleteVo completeVo = new WorkProcessCompleteVo();
completeVo.setCycle(df.format(l).substring(0, 4) + "年");
completeVo.setCount(0L);
listResult.add(completeVo);
});
// 整合数据
listResult.stream().map(a -> {
if (mapData.containsKey(a.getCycle())) {
a.setCount(mapData.get(a.getCycle()));
}
return a;
}).collect(Collectors.toList());
reportVo.setDetail(listResult);
reportVo.setTotal(total);
return reportVo;
}
return null;
}