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
|
{
|
|
/// <summary>
|
/// 模糊合并时间段
|
/// </summary>
|
/// <param name="Date"></param>
|
/// <returns></returns>
|
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;
|
}
|
}
|
}
|