|
@@ -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;
|
|
|
}
|
|
|
|