|
|
@@ -956,6 +956,63 @@ public class IotStaticController {
|
|
|
return dateMap;
|
|
|
}
|
|
|
|
|
|
+ public static LinkedHashMap<String, Double> sumTotalByDates(List<Map<String, Object>> records, int days, String key) {
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+ LocalDate today = LocalDate.now();
|
|
|
+
|
|
|
+ // 生成近days天的日期列表,初始值为0
|
|
|
+ LinkedHashMap<String, Double> dateMap = new LinkedHashMap<>();
|
|
|
+ for (int i = days - 1; i >= 0; i--) {
|
|
|
+ LocalDate date = today.minusDays(i);
|
|
|
+ dateMap.put(date.format(formatter), 0.0);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 统计每天的total字段之和
|
|
|
+ Map<String, Double> sumMap = records.stream()
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
+ record -> {
|
|
|
+ try {
|
|
|
+ // 提取日期部分(假设createTime格式为yyyy-MM-dd...)
|
|
|
+ return String.valueOf(record.get("createTime")).substring(0, 10);
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.err.println("日期格式错误: " + record.get("createTime"));
|
|
|
+ return "invalid_date";
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 累加每天的total字段值,处理可能的格式问题
|
|
|
+ Collectors.summingDouble(record -> {
|
|
|
+ try {
|
|
|
+ Object totalObj = record.get(key);
|
|
|
+ if (totalObj instanceof Number) {
|
|
|
+ return ((Number) totalObj).doubleValue();
|
|
|
+ } else if (totalObj instanceof String) {
|
|
|
+ return Double.parseDouble((String) totalObj);
|
|
|
+ } else {
|
|
|
+ return Double.parseDouble(String.valueOf(totalObj));
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.err.println("处理total字段出错: " + e.getMessage());
|
|
|
+ return 0.0;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ ));
|
|
|
+
|
|
|
+ // 合并结果,转为“万方”并保留两位小数
|
|
|
+ dateMap.forEach((date, defaultValue) -> {
|
|
|
+ if (sumMap.containsKey(date)) {
|
|
|
+ double totalFang = sumMap.get(date); // 原始值,单位:方
|
|
|
+ double totalWanFang = totalFang / 10000.0; // 转换为万方
|
|
|
+ // 四舍五入保留两位小数
|
|
|
+ double rounded = Math.round(totalWanFang * 100.0) / 100.0;
|
|
|
+ dateMap.put(date, rounded);
|
|
|
+ } else {
|
|
|
+ dateMap.put(date, 0.0);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ return dateMap;
|
|
|
+ }
|
|
|
+
|
|
|
public static LinkedHashMap<String, Long> countYwcbByDate(List<IotOutboundDO> records, int days) {
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
LocalDate today = LocalDate.now();
|
|
|
@@ -1234,7 +1291,7 @@ public class IotStaticController {
|
|
|
abc.put("today", e.getDailyGasInjection());
|
|
|
return abc;
|
|
|
}).collect(Collectors.toList());
|
|
|
- LinkedHashMap<String, Long> fillMap = sumTotalByDate(fills, 7,"today");
|
|
|
+ LinkedHashMap<String, Double> fillMap = sumTotalByDates(fills, 7,"today");
|
|
|
LinkedList<Object> xAxis = new LinkedList<>();
|
|
|
LinkedList<Object> fillData = new LinkedList<>();
|
|
|
fillMap.forEach( (k,v)->{
|