using IStation.Model;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace IStation.WinFrmUI.Monitor
{
public class HistoryDataAPiHelper
{
///
/// 模糊合并时间段
///
///
///
public List<(DateTime, DateTime, int, double, double, double)> MergeTimeSlots(List<(DateTime, DateTime, double, double, double)> Date)
{
if(Date==null)
return null;
List<(DateTime, DateTime, int, double, double, double)> mergedSlots = new List<(DateTime, DateTime, int, double, double, double)>(); // 初始化合并后的列表
Date.Sort((x, y) => x.Item2.CompareTo(y.Item2)); // 按照起始时间排序
if (Date.Count==0)
return null;
DateTime mergedStart = Date[0].Item1;
DateTime mergedEnd = Date[0].Item2;
int mergeCount = 1;
double mergedDoubleELePrice = Date[0].Item3; // 电费
double mergedDoubleWater = Date[0].Item4; // 取水量
double mergedDoubleEle = Date[0].Item5; // 用电量
// 从第二个时间段开始迭代
for (int i = 1; i < Date.Count; i++)
{
DateTime start = Date[i].Item1;
DateTime end = Date[i].Item2;
double currentDouble1 = Date[i].Item3;
double currentDouble2 = Date[i].Item4;
double currentDouble3 = Date[i].Item5;
// 如果当前时间段与合并时间段有重叠,则合并
if (start <= mergedStart.AddMinutes(30) && start >= mergedStart.AddMinutes(-30) &&
end <= mergedEnd.AddMinutes(30) && end >= mergedEnd.AddMinutes(-30))
{
mergedStart = DateTime.Compare(mergedStart, start) < 0 ? mergedStart : start;
mergedEnd = DateTime.Compare(mergedEnd, end) < 0 ? end : mergedEnd;
mergeCount++;
mergedDoubleELePrice += currentDouble1;
mergedDoubleWater += currentDouble2;
mergedDoubleEle += currentDouble3;
}
else
{
// 将已合并的时间段添加到列表中
mergedSlots.Add((mergedStart, mergedEnd, mergeCount, mergedDoubleELePrice, mergedDoubleWater, mergedDoubleEle));
// 更新合并时间段和 double 字段为当前时间段的值
mergedStart = start;
mergedEnd = end;
mergeCount = 1;
mergedDoubleELePrice = currentDouble1;
mergedDoubleWater = currentDouble2;
mergedDoubleEle = currentDouble3;
}
}
// 添加最后一个时间段
mergedSlots.Add((mergedStart, mergedEnd, mergeCount, mergedDoubleELePrice, mergedDoubleWater, mergedDoubleEle));
return mergedSlots;
}
}
}