Java: 生成入口流量统计数据 JSON 对象
private JSONObject statistic(List<EntranceTrafficVO> query, String ksrq, String jsrq) {
JSONObject object = new JSONObject();
// 日期数组
List<String> dateList = new ArrayList<>();
// 出入口数据数组
List<Map<String, Object>> seriesList = new ArrayList<>();
// 出入口名称数组
List<String> entranceList = new ArrayList<>();
// 将输入的日期字符串转换为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) {
// 如果出入口数据日期与当前日期相同,则将数据添加到对应的出入口数据数组
if (Objects.equals(entranceTrafficVO.getYear() + '-' + entranceTrafficVO.getMonth() + '-' + entranceTrafficVO.getDay(), currentDate)) {
// 获取当前出入口名称
String entranceName = entranceTrafficVO.getEntranceName();
// 如果当前出入口名称不存在于出入口名称数组中,则添加到数组中
if (!entranceList.contains(entranceName)) {
entranceList.add(entranceName);
}
// 遍历出入口数据数组,找到对应的出入口数据,并将当前日期的入口流量和出口流量添加到对应数组中
boolean found = false;
for (Map<String, Object> series : seriesList) {
if (series.get('name').equals(entranceName)) {
found = true;
List<Integer> rkList = (List<Integer>) series.get('dataRk');
List<Integer> ckList = (List<Integer>) series.get('dataCk');
if (entranceTrafficVO.getRksl() != null) {
rkList.add(entranceTrafficVO.getRksl());
} else {
rkList.add(0);
}
if (entranceTrafficVO.getCksl() != null) {
ckList.add(entranceTrafficVO.getCksl());
} else {
ckList.add(0);
}
break;
}
}
// 如果当前出入口数据数组不存在,则创建一个新的出入口数据数组,并将当前日期的入口流量和出口流量添加到对应数组中
if (!found) {
Map<String, Object> seriesMap = new HashMap<>();
List<Integer> rkList = new ArrayList<>();
List<Integer> ckList = new ArrayList<>();
if (entranceTrafficVO.getRksl() != null) {
rkList.add(entranceTrafficVO.getRksl());
} else {
rkList.add(0);
}
if (entranceTrafficVO.getCksl() != null) {
ckList.add(entranceTrafficVO.getCksl());
} else {
ckList.add(0);
}
seriesMap.put('name', entranceName);
seriesMap.put('dataRk', rkList);
seriesMap.put('dataCk', ckList);
seriesList.add(seriesMap);
}
}
}
// 处理下一天
startDate = startDate.plusDays(1);
}
// 根据出入口名称数组,创建对应的出入口数据数组
List<Map<String, Object>> yList = new ArrayList<>();
for (String entranceName : entranceList) {
Map<String, Object> seriesMap = new HashMap<>();
List<Integer> rkList = new ArrayList<>();
List<Integer> ckList = new ArrayList<>();
seriesMap.put('name', entranceName);
for (Map<String, Object> series : seriesList) {
if (series.get('name').equals(entranceName)) {
List<Integer> dataRk = (List<Integer>) series.get('dataRk');
List<Integer> dataCk = (List<Integer>) series.get('dataCk');
for (int i = 0; i < dateList.size(); i++) {
if (i < dataRk.size()) {
rkList.add(dataRk.get(i));
} else {
rkList.add(0);
}
if (i < dataCk.size()) {
ckList.add(dataCk.get(i));
} else {
ckList.add(0);
}
}
break;
}
}
seriesMap.put('dataRk', rkList);
seriesMap.put('dataCk', ckList);
yList.add(seriesMap);
}
object.put('xAxis', dateList);
object.put('series', yList);
return object;
}
修改内容:
- 修改了日期相等的判断方式,使用字符串比较;
- 对于数据为空的情况,添加了判断并设置为0;
- 修改了最后生成的数据格式,保证了数据与日期一一对应。
原文地址: https://www.cveoy.top/t/topic/oZO4 著作权归作者所有。请勿转载和采集!