Java: 统计出入流量数据,日期为空时添加对应信息
private JSONObject statistic(List<EntranceTrafficVO> query, String ksrq, String jsrq) {
JSONObject object = new JSONObject();
// 日期数组
List<String> dateList = new ArrayList<>();
// 出入口数据map
Map<String, Map<String, List<Integer>>> entranceMap = new HashMap<>();
// 将输入的日期字符串转换为LocalDate对象
LocalDate startDate = LocalDate.parse(ksrq);
LocalDate endDate = LocalDate.parse(jsrq);
// 遍历日期范围内的每一天
while (!startDate.isAfter(endDate)) {
String currentDate = startDate.toString();
dateList.add(currentDate);
// 遍历出入口数据
for (EntranceTrafficVO entranceTrafficVO : query) {
// 如果出入口数据日期为空,则将该出入口信息添加到map中,各数量为0
if (Objects.isNull(entranceTrafficVO.getYear()) || Objects.isNull(entranceTrafficVO.getMonth()) || Objects.isNull(entranceTrafficVO.getDay())) {
String entranceName = entranceTrafficVO.getEntranceName();
if (!entranceMap.containsKey(entranceName)) {
Map<String, List<Integer>> dataMap = new HashMap<>();
List<Integer> rkList = new ArrayList<>();
List<Integer> ckList = new ArrayList<>();
rkList.add(0);
ckList.add(0);
dataMap.put('dataRk', rkList);
dataMap.put('dataCk', ckList);
entranceMap.put(entranceName, dataMap);
}
} else if (startDate.getYear() == entranceTrafficVO.getYear() && startDate.getMonthValue() == entranceTrafficVO.getMonth() && startDate.getDayOfMonth() == entranceTrafficVO.getDay()) {
// 如果出入口数据日期与当前日期相同,则将数据添加到对应的map中
// 获取当前出入口名称
String entranceName = entranceTrafficVO.getEntranceName();
// 根据出入口名称获取对应的map
Map<String, List<Integer>> dataMap = entranceMap.getOrDefault(entranceName, new HashMap<>());
// 如果当前map不存在,则创建一个新的map
if (dataMap.isEmpty()) {
List<Integer> rkList = new ArrayList<>();
List<Integer> ckList = new ArrayList<>();
rkList.add(entranceTrafficVO.getRksl());
ckList.add(entranceTrafficVO.getCksl());
dataMap.put('dataRk', rkList);
dataMap.put('dataCk', ckList);
entranceMap.put(entranceName, dataMap);
} else {
// 如果当前map存在,则将当前日期的入口流量和出口流量添加到对应数组中
List<Integer> rkList = dataMap.getOrDefault('dataRk', new ArrayList<>());
List<Integer> ckList = dataMap.getOrDefault('dataCk', new ArrayList<>());
rkList.add(entranceTrafficVO.getRksl());
ckList.add(entranceTrafficVO.getCksl());
dataMap.put('dataRk', rkList);
dataMap.put('dataCk', ckList);
entranceMap.put(entranceName, dataMap);
}
}
}
// 处理下一天
startDate = startDate.plusDays(1);
}
// 根据出入口名称数组,创建对应的出入口数据数组
List<Map<String, Object>> yList = new ArrayList<>();
for (String entranceName : entranceMap.keySet()) {
Map<String, Object> seriesMap = new HashMap<>();
List<Integer> rkList = entranceMap.get(entranceName).getOrDefault('dataRk', new ArrayList<>());
List<Integer> ckList = entranceMap.get(entranceName).getOrDefault('dataCk', new ArrayList<>());
seriesMap.put('name', entranceName);
seriesMap.put('dataRk', rkList);
seriesMap.put('dataCk', ckList);
yList.add(seriesMap);
}
object.put('xAxis', dateList);
object.put('series', yList);
return object;
}
原文地址: https://www.cveoy.top/t/topic/oZOU 著作权归作者所有。请勿转载和采集!