瀏覽代碼

完善峰平谷时间段用电量数据展示

lingpeng.li 5 月之前
父節點
當前提交
20727f6d56

+ 0 - 1
zgztBus/jeecg-module-lesm/src/main/java/org/jeecg/modules/deviceLesm/service/impl/DeviceInformationServiceImpl.java

@@ -165,7 +165,6 @@ public class DeviceInformationServiceImpl extends ServiceImpl<DeviceInformationM
                 .stream()
                 .collect(Collectors.toList()); // 转换成 List
         result.setStatiscsModelDataResultList(latestRecords);
-        System.out.println("当前数据为======" + latestRecords);
         log.info("{}{}", "模型信息总数:", latestRecords.size());
         return result;
     }

+ 7 - 6
zgztBus/jeecg-module-lesm/src/main/java/org/jeecg/modules/fpgLeanModel/service/impl/FpgLeanModelServiceImpl.java

@@ -82,7 +82,9 @@ public class FpgLeanModelServiceImpl extends ServiceImpl<FpgLeanModelMapper, Fpg
 
         Query query = new Query()
                 .addCriteria(Criteria.where("deviceRegionId").is(deviceRegionId))
-                .addCriteria(Criteria.where("deviceInformationId").is(deviceInformationId));
+                .addCriteria(Criteria.where("deviceInformationId").is(deviceInformationId))
+                .with(Sort.by(Sort.Order.desc("deviceStartTime")));  // 按 deviceStartTime 降序排序
+
         // 进行分页
         long total = mongoTemplate.count(query, DeviceStatiscsModelMongodb.class, "total_startstop");
         query.skip((pageNo - 1) * pageSize).limit(pageSize);
@@ -100,6 +102,8 @@ public class FpgLeanModelServiceImpl extends ServiceImpl<FpgLeanModelMapper, Fpg
             BeanUtils.copyProperties(x, leanModelDeviceHistoryInfo);
             leanModelDeviceHistoryInfoList.add(leanModelDeviceHistoryInfo);
         });
+
+        // 其他逻辑
         leanModelDeviceHistoryInfoList.forEach(y -> {
             LambdaQueryWrapper<LeanEventWarnInfo> queryWrapper = new LambdaQueryWrapper<>();
             queryWrapper.eq(LeanEventWarnInfo::getDeviceInformationId, y.getDeviceInformationId());
@@ -108,16 +112,13 @@ public class FpgLeanModelServiceImpl extends ServiceImpl<FpgLeanModelMapper, Fpg
             y.setWarnSum(leanEventWarnSum);
         });
 
-        List<LeanModelDeviceHistoryInfo> leanModelDeviceHistoryInfoSortList = leanModelDeviceHistoryInfoList.stream()
-                .sorted(Comparator.comparing(LeanModelDeviceHistoryInfo::getDeviceStartTime).reversed())
-                .collect(Collectors.toList());
-
-        leanModelDeviceHistoryInfoIPage.setRecords(leanModelDeviceHistoryInfoSortList);
+        leanModelDeviceHistoryInfoIPage.setRecords(leanModelDeviceHistoryInfoList);
         leanModelDeviceHistoryInfoIPage.setTotal(total);
         leanModelDeviceHistoryInfoIPage.setSize(pageSize);
         return leanModelDeviceHistoryInfoIPage;
     }
 
+
     @Override
     public List<DeviceStatiscsModelMongodb> queryRealTimeDataById(String deviceInformationId) {
         Query query = new Query();

+ 101 - 23
zgztBus/jeecg-module-lesm/src/main/java/org/jeecg/modules/homePageData/service/impl/HomePageDataServiceImpl.java

@@ -26,7 +26,10 @@ import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicReference;
 
@@ -212,19 +215,20 @@ public class HomePageDataServiceImpl implements IHomePageDataService {
         if (leanModelCode.equals(ModelCodeContant.LARGE_SCREEN_RUN_REALTIME)){
             Query query = new Query();
             query.with(Sort.by(Sort.Direction.ASC, "createTime"));
-            Date startTime = new Date();
-            // 加8小时
-            Calendar calendar1 = Calendar.getInstance();
-            calendar1.setTime(startTime);
-            calendar1.add(Calendar.HOUR, 8);
-            Date specifiedTimePlus8HoursStartTime = calendar1.getTime();
 
-            String e = DateUtils.date2Str(new Date(), DateUtils.date_sdf.get())+ " 08:00:00";
-            Date specifiedTimePlus8HoursStartEndTime = DateUtils.str2Date(e, DateUtils.datetimeFormat.get());
+            // 获取当前日期 尖峰平谷 时长、用电、占比
+            LocalDate currentDate = LocalDate.now();
+            // 定义日期格式
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            // 将当前日期格式化为字符串
+            String formattedDate = currentDate.format(formatter);
+            String  queryDateParam = "";
+            queryDateParam = formattedDate;
+
+            query.addCriteria(Criteria.where("dates").is(queryDateParam));
 
-            query.addCriteria(Criteria.where("createTime").gte(specifiedTimePlus8HoursStartEndTime).lt(specifiedTimePlus8HoursStartTime));
             // 执行查询
-            List<DeviceStatiscsModelMongodb> deviceStatiscsModelMongodbList = mongoTemplate.find(query, DeviceStatiscsModelMongodb.class, "large_screen_run_realtime");
+            List<DeviceStatiscsModelMongodb> deviceStatiscsModelMongodbList = mongoTemplate.find(query, DeviceStatiscsModelMongodb.class, "leanmodel_large_screen_run_realtime");
             if (oConvertUtils.listIsEmpty(deviceStatiscsModelMongodbList)){
                 res.put("tops",tops);
                 res.put("peaks",peaks);
@@ -232,17 +236,31 @@ public class HomePageDataServiceImpl implements IHomePageDataService {
                 res.put("valleys",valleys);
                 return res;
             }
-            deviceStatiscsModelMongodbList.forEach(x ->{
-                tops.add(getMap(x.getCreateTime(), x.getTopsPower().toString()));
-                peaks.add(getMap(x.getCreateTime(), x.getPeaksPower().toString()));
-                flat.add(getMap(x.getCreateTime(), x.getFlatPower().toString()));
-                valleys.add(getMap(x.getCreateTime(), x.getValleysPower().toString()));
+
+
+            deviceStatiscsModelMongodbList.forEach(x -> {
+                if (x != null) {
+                    // 判空处理,确保 `getDatestr` 和其他方法返回的值不为 null
+                    if (x.getDatestr() != null && x.getTopsPower() != null) {
+                        tops.add(getMap(parseDate(x.getDatestr()), x.getTopsPower().toString()));
+                    }
+                    if (x.getDatestr() != null && x.getPeaksPower() != null) {
+                        peaks.add(getMap(parseDate(x.getDatestr()), x.getPeaksPower().toString()));
+                    }
+                    if (x.getDatestr() != null && x.getFlatPower() != null) {
+                        flat.add(getMap(parseDate(x.getDatestr()), x.getFlatPower().toString()));
+                    }
+                    if (x.getDatestr() != null && x.getValleysPower() != null) {
+                        valleys.add(getMap(parseDate(x.getDatestr()), x.getValleysPower().toString()));
+                    }
+                }
             });
         }
-        res.put("tops",tops);
-        res.put("peaks",peaks);
-        res.put("flat",flat);
-        res.put("valleys",valleys);
+        // 合并相同时间的值并更新到结果中
+        res.put("tops", mergeListByTime(tops));
+        res.put("peaks", mergeListByTime(peaks));
+        res.put("flat", mergeListByTime(flat));
+        res.put("valleys", mergeListByTime(valleys));
         return res;
     }
 
@@ -310,11 +328,71 @@ public class HomePageDataServiceImpl implements IHomePageDataService {
     }
 
 
-    private Map<String,String> getMap(Date date,String value){
-        Map<String,String> res = new HashMap<>();
+//    private Map<String,String> getMap(Date date,String value){
+//        Map<String,String> res = new HashMap<>();
+//        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
+//        res.put("time",simpleDateFormat.format(date));
+//        res.put("value",value);
+//        return res;
+//    }
+
+    // 添加一个方法将 datestr 转换为 Date 类型
+    private Date parseDate(String datestr) {
+        // 获取当前日期
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        // 当前日期,格式 "yyyy-MM-dd"
+        String currentDate = dateFormat.format(new Date());
+
+        // 拼接日期和时间
+        String dateTimeStr = currentDate + " " + datestr + ":00";  // 例如 "2024-12-12 01:00:00"
+
+        // 使用 "yyyy-MM-dd HH:mm:ss" 格式解析完整的日期时间字符串
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            return simpleDateFormat.parse(dateTimeStr);
+        } catch (ParseException e) {
+            // 解析失败返回 null,或根据需要处理异常
+            return null;
+        }
+    }
+
+    private List<Map<String, String>> mergeListByTime(List<Map<String, String>> list) {
+        Map<String, Double> mergedMap = new HashMap<>();
+
+        // 累加相同时间点的值
+        for (Map<String, String> entry : list) {
+            String time = entry.get("time");
+            Double value = Double.parseDouble(entry.get("value"));
+            mergedMap.put(time, mergedMap.getOrDefault(time, 0.0) + value);
+        }
+
+        // 转换回 List<Map<String, String>> 格式
+        List<Map<String, String>> mergedList = new ArrayList<>();
+        for (Map.Entry<String, Double> entry : mergedMap.entrySet()) {
+            Map<String, String> map = new HashMap<>();
+            map.put("time", entry.getKey());
+            map.put("value", String.format("%.2f", entry.getValue())); // 保留两位小数
+            mergedList.add(map);
+        }
+
+        // 按时间从小到大排序
+        mergedList.sort(Comparator.comparing(o -> o.get("time")));
+
+        return mergedList;
+    }
+
+
+
+    private Map<String, String> getMap(Date date, String value) {
+        Map<String, String> res = new HashMap<>();
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
-        res.put("time",simpleDateFormat.format(date));
-        res.put("value",value);
+        if (date != null) {
+            res.put("time", simpleDateFormat.format(date));
+        } else {
+            // 当 date 为 null 时,设置一个默认值
+            res.put("time", "unknown");
+        }
+        res.put("value", value);
         return res;
     }