소스 검색

pms 瑞恒看板 当日注气量 累计注气量 单位修改成 万方

zhangcl 1 일 전
부모
커밋
5f3818c0da

+ 58 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/stat/IotStaticController.java

@@ -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)->{

+ 1 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/iotprojecttask/IotRhDailyReportMapper.xml

@@ -91,7 +91,7 @@
             resultType="cn.iocoder.yudao.module.pms.controller.admin.stat.vo.YearTotalGas">
         SELECT
         DATE_FORMAT(create_time, '%Y-%m') AS month,
-        SUM(IFNULL(daily_gas_injection, 0)) AS total_gas
+        ROUND(SUM(IFNULL(daily_gas_injection, 0)) / 10000, 2) AS total_gas
         FROM
             rq_iot_rh_daily_report a
         WHERE