duheng
2024-03-27 dc97e187c607119bbd2945b9a277db8da15f8dc0
DAL/IStation.DAL.Paras/±ÃÔËÐвÎÊý/PumpHistoryDataFileHelper.cs
@@ -1,23 +1,56 @@
using IStation.Model;
using IStation.CalcModel.Tide;
using IStation.Model;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.AccessControl;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace IStation.Common
{
    public class PumpHistoryDataFileHelper
    {
        public class RunParasData
        public class RunParasData
        {
            public DateTime Day { get; set; }
            /// <summary>
            /// æ•°æ®æ—¥æœŸ
            /// </summary>
            public DateTime DateTime { get; set; }
            /// <summary>
            /// æ³µè¿è¡ŒçŠ¶æ€
            /// </summary>
            public List<RunParasBlock>   Blocks { get; set; }
            public List<RunParasBlock> Pump1 { get; set; }
            public List<RunParasBlock> Pump2 { get; set; }
            public List<RunParasBlock> Pump3 { get; set; }
            public List<RunParasBlock> Pump4 { get; set; }
            public List<RunParasBlock> Pump5 { get; set; }
            /// <summary>
            /// æ€»å–水量
            /// </summary>
            public double FlowIn { get; set; }
            /// <summary>
            /// æ€»ç”¨ç”µé‡
            /// </summary>
            public double Electric { get; set; }
            /// <summary>
            /// æ€»ç”µè´¹
            /// </summary>
            public double Money { get; set; }
        }
        public class RunParasBlock
        {
            /// <summary>
            /// å¼€å§‹æ—¶é—´
            /// </summary>
            public DateTime StartTime { get; set; }
            /// <summary>
            /// ç»“束时间
            /// </summary>
            public DateTime EndTime { get; set; }
            /// <summary>
            /// å–水量
            /// </summary>
@@ -26,106 +59,533 @@
            /// ç”¨ç”µé‡
            /// </summary>
            public double Electric { get; set; }
            /// <summary>
            /// ç”¨ç”µé‡
            /// ç”µè´¹
            /// </summary>
            public double Money { get; set; }
        }
        public class RunParasBlock
        {
            public DateTime StartTime { get; set; }
            public DateTime EndTime { get; set; }
            public double FlowIn1 { get; set; }
        List<ZyModel.RealScadaData> allFlows = null;
        List<ZyModel.RealScadaData> allEles = null;
            public double FlowIn2 { get; set; }
        //取水量
        private double? GetPumpFlowIndexByStartTime(int start_index, int pump_index, DateTime time)
        {
            for (int i = 0; i < allFlows[pump_index].MonitorRecords.Count; i++)
            {
                var v = allFlows[pump_index].MonitorRecords[i];
                if (v.Time >= time && v.Value != null)
                {
                    return v.Value;
                }
            }
            public double FlowIn3 { get; set; }
            public double FlowIn4 { get; set; }
            public double FlowIn5 { get; set; }
            /// <summary>
            /// ç”¨ç”µé‡
            /// </summary>
            public double Electric1 { get; set; }
            /// <summary>
            /// ç”µè´¹
            /// </summary>
            public double Money1 { get; set; }
            /// <summary>
            /// ç”¨ç”µé‡
            /// </summary>
            public double Electric2 { get; set; }
            /// <summary>
            /// ç”µè´¹
            /// </summary>
            public double Money2 { get; set; }
            /// <summary>
            /// ç”¨ç”µé‡
            /// </summary>
            public double Electric3 { get; set; }
            /// <summary>
            /// ç”µè´¹
            /// </summary>
            public double Money3 { get; set; }
            /// <summary>
            /// ç”¨ç”µé‡
            /// </summary>
            public double Electric4 { get; set; }
            /// <summary>
            /// ç”µè´¹
            /// </summary>
            public double Money4 { get; set; }
            /// <summary>
            /// ç”¨ç”µé‡
            /// </summary>
            public double Electric5 { get; set; }
            /// <summary>
            /// ç”µè´¹
            /// </summary>
            public double Money5 { get; set; }
            return -1;
        }
        //电能
        private double? GetPumpEleIndexByStartTime(int start_index, int pump_index, DateTime time)
        {
            for (int i = 0; i < allEles[pump_index].MonitorRecords.Count; i++)
            {
                var v = allEles[pump_index].MonitorRecords[i];
                if (v.Time >= time && v.Value != null)
                {
                    return v.Value;
                }
            }
            return -1;
        }
        private double GetByEndTime(int index, DateTime time)
        {
            foreach (var v in allFlows[index].MonitorRecords)
            {
                if (v.Time >= time && v.Value != null)
                    return v.Value.Value;
            }
            return -1;
        }
        /// <summary>
        /// åˆå§‹æ–¹æ³•获取所有数据
        /// </summary>
        /// <param name="day"></param>
        /// <returns></returns>
        public static List<RunParasData> GetHistoryData(DateTime day)
        public void GetHistoryData()
        {
            List<double> doublesWater = new List<double>();
            List<double> doublesEle = new List<double>();
            var PumpIsOpen = getPumpIsOpen(day);
            foreach (var item in PumpIsOpen)
            List<RunParasData> runParasDatasList = new List<RunParasData>();
            DateTime startDay = new DateTime(2022, 11, 1);
            DateTime endDay = new DateTime(2023, 11, 14);
            allFlows = GetAllWaterData();  //取水量
            allEles = GetAllEleData();           //有功电能
            //var allRunStaus = GetAllRunStatusData();
            var allRunstatus = getPumpIsOpen();//运行参数
            var pumprun1 = allRunstatus.Where(x => x.Item1 == 1).ToList();
            var pumprun2 = allRunstatus.Where(x => x.Item1 == 2).ToList();
            var pumprun3 = allRunstatus.Where(x => x.Item1 == 3).ToList();
            var pumprun4 = allRunstatus.Where(x => x.Item1 == 4).ToList();
            var pumprun5 = allRunstatus.Where(x => x.Item1 == 5).ToList();
            List<RunParasBlock> runParasBlockpump1 = new List<RunParasBlock>();
            List<RunParasBlock> runParasBlockpump2 = new List<RunParasBlock>();
            List<RunParasBlock> runParasBlockpump3 = new List<RunParasBlock>();
            List<RunParasBlock> runParasBlockpump4 = new List<RunParasBlock>();
            List<RunParasBlock> runParasBlockpump5 = new List<RunParasBlock>();
            RunParasData day_sum = new RunParasData();
            for (DateTime day = startDay; day <= endDay; day = day.AddDays(1))
            {
                doublesWater.Add(GetWaterdata(item.Item1, item.Item2));
                day_sum = new RunParasData();
                var next_day = day.AddDays(1);
                day_sum.DateTime = day;
                foreach (var time_block in pumprun1)
                {
                    if (time_block.Item2 >= day && time_block.Item3 <= next_day)
                    {
                        RunParasBlock block = new RunParasBlock();
                        block.EndTime = time_block.Item3;
                        block.StartTime = time_block.Item2;
                        double? start_flow_in = GetPumpFlowIndexByStartTime(0, 0, time_block.Item2);
                        double? end_flow = GetPumpFlowIndexByStartTime(0, 0, time_block.Item3);
                        if (end_flow >= 0 && start_flow_in >= 0 && start_flow_in < end_flow)
                        {
                            block.FlowIn = (double)(end_flow - start_flow_in);  //取水量
                        }
                        double? start_ELe = GetPumpEleIndexByStartTime(0, 0, time_block.Item2);
                        double? end_Ele = GetPumpEleIndexByStartTime(0, 0, time_block.Item3);
                        if (end_flow >= 0 && start_flow_in >= 0 && start_flow_in < end_flow)
                        {
                            block.Electric = (double)(end_Ele - start_ELe);  //用电量
                        }
                        block.Money = GetMoney(time_block.Item2, time_block.Item3, 0);
                        if (time_block.Item1 == 1)
                        {
                            runParasBlockpump1.Add(block);
                        }
                        if (time_block.Item1 == 2)
                        {
                            runParasBlockpump2.Add(block);
                        }
                        if (time_block.Item1 == 3)
                        {
                            runParasBlockpump3.Add(block);
                        }
                        if (time_block.Item1 == 4)
                        {
                            runParasBlockpump4.Add(block);
                        }
                        if (time_block.Item1 == 5)
                        {
                            runParasBlockpump5.Add(block);
                        }
                    }
                }
                foreach (var item in pumprun2)
                {
                    if (item.Item2 >= day && item.Item3 <= next_day)
                    {
                        RunParasBlock block = new RunParasBlock();
                        block.EndTime = item.Item3;
                        block.StartTime = item.Item2;
                        double? start_flow_in = GetPumpFlowIndexByStartTime(1, 1, item.Item2);
                        double? end_flow = GetPumpFlowIndexByStartTime(1, 1, item.Item3);
                        if (end_flow >= 0 && start_flow_in >= 0 && start_flow_in < end_flow)
                        {
                            block.FlowIn = (double)(end_flow - start_flow_in);  //取水量
                        }
                        double? start_ELe = GetPumpEleIndexByStartTime(1, 1, item.Item2);
                        double? end_Ele = GetPumpEleIndexByStartTime(1, 1, item.Item3);
                        if (end_flow >= 0 && start_flow_in >= 0 && start_flow_in < end_flow)
                        {
                            block.Electric = (double)(end_Ele - start_ELe);  //用电量
                        }
                        block.Money = GetMoney(item.Item2, item.Item3, 1);
                        if (item.Item1 == 1)
                        {
                            runParasBlockpump1.Add(block);
                        }
                        if (item.Item1 == 2)
                        {
                            runParasBlockpump2.Add(block);
                        }
                        if (item.Item1 == 3)
                        {
                            runParasBlockpump3.Add(block);
                        }
                        if (item.Item1 == 4)
                        {
                            runParasBlockpump4.Add(block);
                        }
                        if (item.Item1 == 5)
                        {
                            runParasBlockpump5.Add(block);
                        }
                    }
                }
                foreach (var item in pumprun3)
                {
                    if (item.Item2 >= day && item.Item3 <= next_day)
                    {
                        RunParasBlock block = new RunParasBlock();
                        block.EndTime = item.Item3;
                        block.StartTime = item.Item2;
                        double? start_flow_in = GetPumpFlowIndexByStartTime(2, 2, item.Item2);
                        double? end_flow = GetPumpFlowIndexByStartTime(2, 2, item.Item3);
                        if (end_flow >= 0 && start_flow_in >= 0 && start_flow_in < end_flow)
                        {
                            block.FlowIn = (double)(end_flow - start_flow_in);  //取水量
                        }
                        double? start_ELe = GetPumpEleIndexByStartTime(2, 2, item.Item2);
                        double? end_Ele = GetPumpEleIndexByStartTime(2, 2, item.Item3);
                        if (end_flow >= 0 && start_flow_in >= 0 && start_flow_in < end_flow)
                        {
                            block.Electric = (double)(end_Ele - start_ELe);  //用电量
                        }
                        block.Money = GetMoney(item.Item2, item.Item3, 2);
                        if (item.Item1 == 1)
                        {
                            runParasBlockpump1.Add(block);
                        }
                        if (item.Item1 == 2)
                        {
                            runParasBlockpump2.Add(block);
                        }
                        if (item.Item1 == 3)
                        {
                            runParasBlockpump3.Add(block);
                        }
                        if (item.Item1 == 4)
                        {
                            runParasBlockpump4.Add(block);
                        }
                        if (item.Item1 == 5)
                        {
                            runParasBlockpump5.Add(block);
                        }
                    }
                }
                foreach (var item in pumprun4)
                {
                    if (item.Item2 >= day && item.Item3 <= next_day)
                    {
                        RunParasBlock block = new RunParasBlock();
                        block.EndTime = item.Item3;
                        block.StartTime = item.Item2;
                        double? start_flow_in = GetPumpFlowIndexByStartTime(3, 3, item.Item2);
                        double? end_flow = GetPumpFlowIndexByStartTime(3, 3, item.Item3);
                        if (end_flow >= 0 && start_flow_in >= 0 && start_flow_in < end_flow)
                        {
                            block.FlowIn = (double)(end_flow - start_flow_in);  //取水量
                        }
                        double? start_ELe = GetPumpEleIndexByStartTime(3, 3, item.Item2);
                        double? end_Ele = GetPumpEleIndexByStartTime(3, 3, item.Item3);
                        if (end_flow >= 0 && start_flow_in >= 0 && start_flow_in < end_flow)
                        {
                            block.Electric = (double)(end_Ele - start_ELe);  //用电量
                        }
                        block.Money = GetMoney(item.Item2, item.Item3, 3);
                        if (item.Item1 == 1)
                        {
                            runParasBlockpump1.Add(block);
                        }
                        if (item.Item1 == 2)
                        {
                            runParasBlockpump2.Add(block);
                        }
                        if (item.Item1 == 3)
                        {
                            runParasBlockpump3.Add(block);
                        }
                        if (item.Item1 == 4)
                        {
                            runParasBlockpump4.Add(block);
                        }
                        if (item.Item1 == 5)
                        {
                            runParasBlockpump5.Add(block);
                        }
                    }
                }
                foreach (var item in pumprun5)
                {
                    if (item.Item2 >= day && item.Item3 <= next_day)
                    {
                        RunParasBlock block = new RunParasBlock();
                        block.EndTime = item.Item3;
                        block.StartTime = item.Item2;
                        double? start_flow_in = GetPumpFlowIndexByStartTime(4, 4, item.Item2);
                        double? end_flow = GetPumpFlowIndexByStartTime(4, 4, item.Item3);
                        if (end_flow >= 0 && start_flow_in >= 0 && start_flow_in < end_flow)
                        {
                            block.FlowIn = (double)(end_flow - start_flow_in);  //取水量
                        }
                        double? start_ELe = GetPumpEleIndexByStartTime(4, 4, item.Item2);
                        double? end_Ele = GetPumpEleIndexByStartTime(4, 4, item.Item3);
                        if (end_flow >= 0 && start_flow_in >= 0 && start_flow_in < end_flow)
                        {
                            block.Electric = (double)(end_Ele - start_ELe);  //用电量
                        }
                        block.Money = GetMoney(item.Item2, item.Item3, 4);
                        if (item.Item1 == 1)
                        {
                            runParasBlockpump1.Add(block);
                        }
                        if (item.Item1 == 2)
                        {
                            runParasBlockpump2.Add(block);
                        }
                        if (item.Item1 == 3)
                        {
                            runParasBlockpump3.Add(block);
                        }
                        if (item.Item1 == 4)
                        {
                            runParasBlockpump4.Add(block);
                        }
                        if (item.Item1 == 5)
                        {
                            runParasBlockpump5.Add(block);
                        }
                    }
                }
                day_sum.Pump1 = runParasBlockpump1;
                day_sum.Pump2 = runParasBlockpump2;
                day_sum.Pump3 = runParasBlockpump3;
                day_sum.Pump4 = runParasBlockpump4;
                day_sum.Pump5 = runParasBlockpump5;
                foreach (var item in runParasBlockpump1)
                {
                    day_sum.Electric += item.Electric;
                    day_sum.FlowIn += item.FlowIn;
                    day_sum.Money += item.Money;
                }
                foreach (var item in runParasBlockpump2)
                {
                    day_sum.Electric += item.Electric;
                    day_sum.FlowIn += item.FlowIn;
                    day_sum.Money += item.Money;
                }
                foreach (var item in runParasBlockpump3)
                {
                    day_sum.Electric += item.Electric;
                    day_sum.FlowIn += item.FlowIn;
                    day_sum.Money += item.Money;
                }
                foreach (var item in runParasBlockpump4)
                {
                    day_sum.Electric += item.Electric;
                    day_sum.FlowIn += item.FlowIn;
                    day_sum.Money += item.Money;
                }
                foreach (var item in runParasBlockpump5)
                {
                    day_sum.Electric += item.Electric;
                    day_sum.FlowIn += item.FlowIn;
                    day_sum.Money += item.Money;
                }
                runParasDatasList.Add(day_sum);
                var json = JsonHelper.Object2Json(runParasDatasList);
                runParasBlockpump1 = new List<RunParasBlock>();
                runParasBlockpump2 = new List<RunParasBlock>();
                runParasBlockpump3 = new List<RunParasBlock>();
                runParasBlockpump4 = new List<RunParasBlock>();
                runParasBlockpump5 = new List<RunParasBlock>();
            }
            foreach (var item in PumpIsOpen)
            DateTime date = new DateTime(2022, 11, 1);
            DateTime currenttime = new DateTime(2022, 11, 1);
            //  int daysInMonth = DateTime.DaysInMonth(date.Year, date.Month);
            //  var path = "C:\\Users\\ZKC\\Desktop\\新建文件夹 (2)";
            int processedDays = 0;
            for (int k = 0; k < 30; k++)
            {
                doublesEle.Add(GetElectrityData(item.Item1, item.Item2));
                int daysInMonth = DateTime.DaysInMonth(date.Year, date.Month); // èŽ·å–å½“å‰æœˆä»½çš„å¤©æ•°
                 var path22 = $"C:\\Users\\ZKC\\Desktop\\新建文件夹 (2)\\{date.ToString("yyyy-MM")}";
                var filepath = Directory.CreateDirectory(path22);
                 int i = 0;
                foreach (var item in runParasDatasList.Skip(processedDays)) // è·³è¿‡å·²å¤„理的天数
                {
                    string jsonpath = string.Concat(path22, $"\\{currenttime.ToString("dd")}");
                    string json = JsonHelper.Object2Json(item);
                    File.WriteAllText($"{jsonpath}.json", json);
                    currenttime = currenttime.AddDays(1);
                    i++;
                    if (i == daysInMonth)
                        break;
                }
                processedDays += i; // æ›´æ–°å·²å¤„理的天数
                date = date.AddMonths(1); // æ›´æ–°æ—¥æœŸåˆ°ä¸‹ä¸€ä¸ªæœˆä»½
                currenttime = date; // é‡ç½® currenttime ä¸ºæ–°æœˆä»½çš„第一
            }
            List<RunParasData> runParasDatas = new List<RunParasData>();
            runParasDatas.Add(new RunParasData
            {
                /*TimeRunParas = PumpIsOpen,
                Water = doublesWater,
                Electric = doublesEle*/
            });
            return runParasDatas;
        }
        /*
                /// <summary>
                ///取水量
                /// </summary>
                /// <returns></returns>
                public   List<ZyModel.StatusScadaData> GetWater()
                {
                    var tagDict = new List<string>
                    {
                           "_0402010204012101001",//"二取水1号泵累计流量" },
                           "_0402010204012203002",//"二取水2号泵累计流量" },
                           "_0402010204012303002",// "二取水3号泵累计流量" },
                           "_0402010204012403002", //"二取水4号泵累计流量" },
                           "_0402010204012503002", //"二取水5号泵累计流量" },
                    };
                    ZyModel.StatusScadaData pump1 = new ZyModel.StatusScadaData();
                    pump1.TagName = tagDict[0];
                    pump1.MonitorRecords = new List<ZyModel.RunStatusRecord>();
                    ZyModel.StatusScadaData pump2 = new ZyModel.StatusScadaData();
                    ZyModel.StatusScadaData pump3 = new ZyModel.StatusScadaData();
                    ZyModel.StatusScadaData pump4 = new ZyModel.StatusScadaData();
                    ZyModel.StatusScadaData pump5 = new ZyModel.StatusScadaData();
                     string path = System.IO.Path.Combine(IStation.DataFolderHelper.GetRootPath(),
                      "PumpRunParas", "二取水机泵开停状态.csv");
                    if (!File.Exists(path))
                        return null;
                    int totalLines = File.ReadLines(path, Encoding.GetEncoding("gb2312")).Count();//总行数
                    System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Open);
                    System.IO.StreamReader sr = new System.IO.StreamReader(fs, Encoding.GetEncoding("gb2312"));
                    string tempText;
                     int last_status1 = 0;
                    for (int i = 0; i < totalLines - 1; i++)
                    {
                        tempText = sr.ReadLine();
                        string[] arr = tempText.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                         var row = new ZyModel.MonitorRecord
                        {
                            Time = Convert.ToDateTime(arr[0]),
                            Value = Convert.ToDouble(arr[2])
                        };
                     }
                    fs.Close();
                     //   return new List<ZyModel.RealScadaData>() { pump1, pump2, pump3, pump4, pump5 };
                    return null;
                }*/
        /*        /// <summary>
                /// èŽ·å–ç”µè´¹ä»·æ ¼
                /// </summary>
                private double getEleMoney(List<RunParasBlock> runParasBlocks)
                {
                    double totalPrice=0;
                    foreach (var item in runParasBlocks)
                    {
                        totalPrice+=GetMoney(item.StartTime, item.EndTime);
                    }
                    return totalPrice;
                }*/
        //获取电费
        private double GetMoney(DateTime str, DateTime end, int sort)
        {
            var list = IStation.Common.ElecPrice.GetAll();
            double Price = 0;
            var month = str.Month;
            var Starthour = str.Hour;
            var Endhour = end.Hour;
            foreach (var item in list[0].Settings.MonthList)
            {
                if (month >= item.StartMonth && month <= item.EndMonth)
                {
                    foreach (var Hour in item.HourList)
                    {
                        if (Starthour == Endhour) continue;
                        // Check if the hour range overlaps with the given start and end hours
                        if ((Starthour >= Hour.StartHour && Starthour <= Hour.EndHour) ||
                          (Endhour >= Hour.StartHour && Endhour <= Hour.EndHour) ||
                          (Starthour < Hour.StartHour && Endhour > Hour.EndHour)) // If the range spans across multiple hours
                        {
                            // Calculate the amount based on the portion of hours covered
                            double? start_flow_in = GetPumpFlowIndexByStartTime(sort, sort, new DateTime(str.Year, str.Month, str.Day, Starthour, 0, 0));
                            double? end_flow = GetPumpFlowIndexByStartTime(sort, sort, new DateTime(str.Year, str.Month, str.Day, Endhour, 0, 0));
                            double amount = 0;
                            if (Starthour >= Hour.StartHour && Endhour <= Hour.EndHour) // If start and end hours are within this hour range
                            {
                                amount = (double)(end_flow - start_flow_in);
                                Price += Hour.Price * amount; // Accumulate price
                                Starthour = Endhour; // Update StartHour to EndHour for next iteration
                            }
                            else if (Starthour < Hour.StartHour && Endhour <= Hour.EndHour) // If the range starts before this hour range
                            {
                                double? next_flow = GetPumpFlowIndexByStartTime(sort, sort, new DateTime(str.Year, str.Month, str.Day, Hour.StartHour, 0, 0));
                                amount = (double)(next_flow - start_flow_in);
                                Price += Hour.Price * amount; // Accumulate price
                                Starthour = Hour.StartHour; // Update StartHour to Hour.StartHour for next iteration
                            }
                            else if (Starthour >= Hour.StartHour && Endhour > Hour.EndHour && Starthour < Hour.EndHour) // If the range ends after this hour range
                            {
                                double? prev_flow = GetPumpFlowIndexByStartTime(sort, sort, new DateTime(str.Year, str.Month, str.Day, Hour.EndHour, 0, 0));
                                amount = (double)(prev_flow - start_flow_in);
                                Price += Hour.Price * amount; // Accumulate price
                                Starthour = Hour.EndHour; // Update StartHour to Hour.EndHour for next iteration
                            }
                            else // If the range spans across this hour range
                            {
                                double? next_flow = GetPumpFlowIndexByStartTime(sort, sort, new DateTime(str.Year, str.Month, str.Day, Hour.StartHour, 0, 0));
                                double? prev_flow = GetPumpFlowIndexByStartTime(sort, sort, new DateTime(str.Year, str.Month, str.Day, Hour.EndHour, 0, 0));
                                amount = (double)(next_flow - prev_flow);
                                Price += Hour.Price * amount; // Accumulate price
                                Starthour = Hour.EndHour; // Update StartHour to Hour.EndHour for next iteration
                            }
                        }
                    }
                }
            };
            return Price;
        }
        /// <summary>
        /// èŽ·å–æ€»å–æ°´é‡
        /// </summary>
        /// <returns></returns>
        public static List<Model.PumpWater> GetWaterData()
        public List<ZyModel.RealScadaData> GetAllWaterData()
        {
            var tagDict = new List<string>
            {
                   "二取水1号主水泵.日累计",//"二取水1号泵累计流量" },
                   "二取水2号主水泵.日累计",//"二取水2号泵累计流量" },
                   "二取水3号主水泵.日累计",// "二取水3号泵累计流量" },
                   "二取水4号主水泵.日累计", //"二取水4号泵累计流量" },
                   "二取水5号主水泵.日累计", //"二取水5号泵累计流量" },
            };
            ZyModel.RealScadaData pump1 = new ZyModel.RealScadaData();
            pump1.TagName = tagDict[0];
            pump1.MonitorRecords = new List<ZyModel.MonitorRecord>();
            ZyModel.RealScadaData pump2 = new ZyModel.RealScadaData();
            pump2.TagName = tagDict[1];
            pump2.MonitorRecords = new List<ZyModel.MonitorRecord>();
            ZyModel.RealScadaData pump3 = new ZyModel.RealScadaData();
            pump3.TagName = tagDict[2];
            pump3.MonitorRecords = new List<ZyModel.MonitorRecord>();
            ZyModel.RealScadaData pump4 = new ZyModel.RealScadaData();
            pump4.TagName = tagDict[3];
            pump4.MonitorRecords = new List<ZyModel.MonitorRecord>();
            ZyModel.RealScadaData pump5 = new ZyModel.RealScadaData();
            pump5.TagName = tagDict[4];
            pump5.MonitorRecords = new List<ZyModel.MonitorRecord>();
            string path = System.IO.Path.Combine(IStation.DataFolderHelper.GetRootPath(),
              "PumpRunParas", "二取水机泵累计流量.csv");
            if (!File.Exists(path))
@@ -134,36 +594,39 @@
            System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Open);
            System.IO.StreamReader sr = new System.IO.StreamReader(fs, Encoding.GetEncoding("gb2312"));
            string tempText;
            List<Model.PumpWater> pumpISopenlist = new List<Model.PumpWater>();
            for (int i = 0; i < totalLines-1; i++)
            for (int i = 0; i < totalLines - 1; i++)
            {
                tempText = sr.ReadLine();
                string[] arr = tempText.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                try
                var row = new ZyModel.MonitorRecord
                {
                    var pumpISopen = new Model.PumpWater
                    {
                        Tag = arr[1],
                        Values = new List<Model.Water>
                    {
                        new Model.Water
                        {
                            DateTime = Convert.ToDateTime(arr[0]),
                            SingleWater =Convert.ToDouble( arr[2])
                        }
                     }
                    };
                    pumpISopenlist.Add(pumpISopen);
                    Time = Convert.ToDateTime(arr[0]),
                    Value = Convert.ToDouble(arr[2])
                };
                if (arr[1] == tagDict[0])
                {
                    pump1.MonitorRecords.Add(row);
                }
                catch
                if (arr[1] == tagDict[1])
                {
                    var a = i;
                    pump2.MonitorRecords.Add(row);
                }
                if (arr[1] == tagDict[2])
                {
                    pump3.MonitorRecords.Add(row);
                }
                if (arr[1] == tagDict[3])
                {
                    pump4.MonitorRecords.Add(row);
                }
                if (arr[1] == tagDict[4])
                {
                    pump5.MonitorRecords.Add(row);
                }
            }
            fs.Close();
            return pumpISopenlist;
            return new List<ZyModel.RealScadaData>() { pump1, pump2, pump3, pump4, pump5 };
        }
@@ -172,8 +635,16 @@
        /// èŽ·å–æœ‰åŠŸç”µèƒ½
        /// </summary>
        /// <returns></returns>
        public static List<Model.electricity> GetEleData()
        public static List<ZyModel.RealScadaData> GetAllEleData()
        {
            var tagDict = new List<string>
            {
                   "_0402010204040193046",//"二取水1号泵累计流量" },
                   "_0402010204040193047",//"二取水2号泵累计流量" },
                   "_0402010204012308007",// "二取水3号泵累计流量" },
                   "_0402010204012408007", //"二取水4号泵累计流量" },
                   "_0402010204012508007", //"二取水5号泵累计流量" },
            };
            string path = System.IO.Path.Combine(IStation.DataFolderHelper.GetRootPath(),
              "PumpRunParas", "二取水机泵有功电能.csv");
            if (!File.Exists(path))
@@ -181,28 +652,54 @@
            int totalLines = File.ReadLines(path, Encoding.GetEncoding("gb2312")).Count();//总行数
            System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Open);
            System.IO.StreamReader sr = new System.IO.StreamReader(fs, Encoding.GetEncoding("gb2312"));
            ZyModel.RealScadaData pump1 = new ZyModel.RealScadaData();
            pump1.TagName = tagDict[0];
            pump1.MonitorRecords = new List<ZyModel.MonitorRecord>();
            ZyModel.RealScadaData pump2 = new ZyModel.RealScadaData();
            pump2.TagName = tagDict[1];
            pump2.MonitorRecords = new List<ZyModel.MonitorRecord>();
            ZyModel.RealScadaData pump3 = new ZyModel.RealScadaData();
            pump3.TagName = tagDict[2];
            pump3.MonitorRecords = new List<ZyModel.MonitorRecord>();
            ZyModel.RealScadaData pump4 = new ZyModel.RealScadaData();
            pump4.TagName = tagDict[3];
            pump4.MonitorRecords = new List<ZyModel.MonitorRecord>();
            ZyModel.RealScadaData pump5 = new ZyModel.RealScadaData();
            pump5.TagName = tagDict[4];
            pump5.MonitorRecords = new List<ZyModel.MonitorRecord>();
            string tempText;
            List<Model.electricity> pumpISopenlist = new List<Model.electricity>();
            for (int i = 0; i < totalLines; i++)
            {
                tempText = sr.ReadLine();
                string[] arr = tempText.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                var pumpISopen = new Model.electricity
                var row = new ZyModel.MonitorRecord
                {
                    Tag = arr[1],
                    TotalEle = new List<Model.Ele>
                    {
                       new Model.Ele
                        {
                            DateTime = Convert.ToDateTime(arr[0]),
                            Value =Convert.ToDouble( arr[2])
                        }
                    }
                    Time = Convert.ToDateTime(arr[0]),
                    Value = Convert.ToDouble(arr[2])
                };
                pumpISopenlist.Add(pumpISopen);
                if (arr[1] == tagDict[0])
                {
                    pump1.MonitorRecords.Add(row);
                }
                if (arr[1] == tagDict[1])
                {
                    pump2.MonitorRecords.Add(row);
                }
                if (arr[1] == tagDict[2])
                {
                    pump3.MonitorRecords.Add(row);
                }
                if (arr[1] == tagDict[3])
                {
                    pump4.MonitorRecords.Add(row);
                }
                if (arr[1] == tagDict[4])
                {
                    pump5.MonitorRecords.Add(row);
                }
            }
            fs.Close();
            return pumpISopenlist;
            return new List<ZyModel.RealScadaData>() { pump1, pump2, pump3, pump4, pump5 };
        }
@@ -210,7 +707,7 @@
        /// <summary>
        /// èŽ·å–å…·ä½“æ—¶é—´æ®µçš„å¼€æ³µå°æ•°
        /// </summary>
        public static List<(DateTime, DateTime, int)> getPumpIsOpen(DateTime datetime)
        public List<(int, DateTime, DateTime)> getPumpIsOpen()
        {
            List<IsOpen> isOpenpump1 = new List<IsOpen>();
            List<IsOpen> isOpenpump2 = new List<IsOpen>();
@@ -223,44 +720,44 @@
            var Pump1 = TestIsOpen.Where(x => x.Tag == "_0402010204012101001").ToList();
            foreach (var item in Pump1)
            {
                isOpenpump1.AddRange(item.Values.Where(x => x.DateTime >= datetime && x.DateTime <= datetime.AddHours(23).AddMinutes(59)).ToList());
                isOpenpump1.AddRange(item.Values);
            }
            var Pump2 = TestIsOpen.Where(x => x.Tag == "_0402010204012201001").ToList();
            foreach (var item in Pump2)
            {
                isOpenpump2.AddRange(item.Values.Where(x => x.DateTime >= datetime && x.DateTime <= datetime.AddHours(23).AddMinutes(59)).ToList());
                isOpenpump2.AddRange(item.Values);
            }
            var Pump3 = TestIsOpen.Where(x => x.Tag == "_0402010204012301001").ToList();
            foreach (var item in Pump3)
            {
                isOpenpump3.AddRange(item.Values.Where(x => x.DateTime >= datetime && x.DateTime <= datetime.AddHours(23).AddMinutes(59)).ToList());
                isOpenpump3.AddRange(item.Values);
            }
            var Pump4 = TestIsOpen.Where(x => x.Tag == "_0402010204012401001").ToList();
            foreach (var item in Pump4)
            {
                isOpenpump4.AddRange(item.Values.Where(x => x.DateTime >= datetime && x.DateTime <= datetime.AddHours(23).AddMinutes(59)).ToList());
                isOpenpump4.AddRange(item.Values);
            }
            var Pump5 = TestIsOpen.Where(x => x.Tag == "_0402010204012501001").ToList();
            foreach (var item in Pump5)
            {
                isOpenpump5.AddRange(item.Values.Where(x => x.DateTime >= datetime && x.DateTime <= datetime.AddHours(23).AddMinutes(59)).ToList());
                isOpenpump5.AddRange(item.Values);
            }
            List<string> startTime = new List<string>();
            List<string> endtime = new List<string>();
            var Run1 = GetData(isOpenpump1);
            var Run2 = GetData(isOpenpump2);
            var Run3 = GetData(isOpenpump3);
            var Run4 = GetData(isOpenpump4);
            var Run5 = GetData(isOpenpump5);
            List<(DateTime, DateTime)> mergedList = MergeList(Run1, Run2, Run3, Run4, Run5);
            return MergeTimeSlots(mergedList);
            //    List<string> startTime = new List<string>();
            //  List<string> endtime = new List<string>();
            var Run1 = GetData(isOpenpump1, 1);
            var Run2 = GetData(isOpenpump2, 2);
            var Run3 = GetData(isOpenpump3, 3);
            var Run4 = GetData(isOpenpump4, 4);
            var Run5 = GetData(isOpenpump5, 5);
            List<(int, DateTime, DateTime)> mergedList = MergeList(Run1, Run2, Run3, Run4, Run5);
            return (mergedList);
        }
        /// <summary>
        /// èŽ·å–æ³µçš„å¼€æœºå‚æ•°
        /// </summary>
        /// <returns></returns>
        public static List<Model.PumpIsopen> GetPumpRunParas()
        public List<Model.PumpIsopen> GetPumpRunParas()
        {
            string path = System.IO.Path.Combine(IStation.DataFolderHelper.GetRootPath(),
               "PumpRunParas", "二取水机泵开停状态.csv");
@@ -295,34 +792,51 @@
        //泵开机参数的辅助方法
        private  static List<(DateTime, DateTime)> GetData(List<IsOpen> PumpList)
        private static List<(int, DateTime, DateTime)> GetData(List<IsOpen> PumpList, int sort)
        {
            List<(DateTime, DateTime)> values = new List<(DateTime, DateTime)>();
            values.Clear();
            //    List<DateTime> Endvalues = new List<DateTime>();
            DateTime startTime;
            DateTime EndTime;
            for (int time = 0; time < PumpList.Count; time++)
            List<(int, DateTime, DateTime)> openTimeRanges = new List<(int, DateTime, DateTime)>();
            // æ¯å¤©çš„æ•°æ®æ¡æ•°
            int itemsPerDay = 288;
            // éåŽ†åˆ—è¡¨
            for (int i = 0; i < PumpList.Count - 1; i += itemsPerDay)
            {
                if (PumpList[time].Isopen == "1")
                DateTime currentDate = PumpList[i].DateTime.Date;
                DateTime startTime = DateTime.MinValue;
                bool isOpen = false;
                // éåŽ†å½“å¤©çš„æ•°æ®
                for (int j = i; j < i + itemsPerDay && j < PumpList.Count - 1; j++)
                {
                    startTime = PumpList[time].DateTime;
                    EndTime = PumpList[time].DateTime;
                    for (int k = time + 1; k < PumpList.Count; k++)   //k为从开机后比较的变量下标
                    if (PumpList[j].Isopen == "1")
                    {
                        if (PumpList[k].Isopen == "1")
                        if (!isOpen)
                        {
                            EndTime = PumpList[k].DateTime;
                            time = k;
                            startTime = PumpList[j].DateTime;
                            isOpen = true;
                        }
                        else break;
                    }
                    values.Add((startTime, EndTime));
                    else
                    {
                        if (isOpen)
                        {
                            openTimeRanges.Add((sort, startTime, PumpList[j - 1].DateTime));
                            isOpen = false;
                        }
                    }
                }
                // å¦‚果当天最后一条数据是打开状态,添加时间段
                if (isOpen)
                {
                    openTimeRanges.Add((sort, startTime, PumpList[i + itemsPerDay - 1].DateTime));
                }
            }
            return values;
            return openTimeRanges;
        }
@@ -374,9 +888,9 @@
        /// </summary>
        /// <param name="lists"></param>
        /// <returns></returns>
        static List<(DateTime, DateTime)> MergeList(params List<(DateTime, DateTime)>[] lists)
        static List<(int, DateTime, DateTime)> MergeList(params List<(int, DateTime, DateTime)>[] lists)
        {
            List<(DateTime, DateTime)> mergedList = new List<(DateTime, DateTime)>();
            List<(int, DateTime, DateTime)> mergedList = new List<(int, DateTime, DateTime)>();
            foreach (var list in lists)
            {
                mergedList.AddRange(list);
@@ -387,88 +901,89 @@
        private  static double GetWaterdata(DateTime Str, DateTime end)
        /*  private static double GetWaterdata(DateTime Str, DateTime end)
          {
              List<Model.Water> water1 = new List<Model.Water>();
              List<Model.Water> water2 = new List<Model.Water>();
              List<Model.Water> water3 = new List<Model.Water>();
              List<Model.Water> water4 = new List<Model.Water>();
              List<Model.Water> water5 = new List<Model.Water>();
              var waterData = GetWaterData();
              var pump1 = waterData.Where(x => x.Tag == "二取水1号主水泵.日累计").ToList();
              foreach (var item in pump1)
              {
                  water1.AddRange(item.Values.Where(x => x.DateTime >= Str && x.DateTime <= end));
              }
              var pump2 = waterData.Where(x => x.Tag == "二取水2号主水泵.日累计").ToList();
              foreach (var item in pump2)
              {
                  water2.AddRange(item.Values.Where(x => x.DateTime >= Str && x.DateTime <= end));
              }
              var pump3 = waterData.Where(x => x.Tag == "二取水3号主水泵.日累计").ToList();
              foreach (var item in pump3)
              {
                  water3.AddRange(item.Values.Where(x => x.DateTime >= Str && x.DateTime <= end));
              }
              var pump4 = waterData.Where(x => x.Tag == "二取水4号主水泵.日累计").ToList();
              foreach (var item in pump4)
              {
                  water4.AddRange(item.Values.Where(x => x.DateTime >= Str && x.DateTime <= end));
              }
              var pump5 = waterData.Where(x => x.Tag == "二取水5号主水泵.日累计").ToList();
              foreach (var item in pump5)
              {
                  water5.AddRange(item.Values.Where(x => x.DateTime >= Str && x.DateTime <= end));
              }
              var Result1 = water1.Last().SingleWater - water1.First().SingleWater;
              var Result2 = water2.Last().SingleWater - water2.First().SingleWater;
              var Result3 = water3.Last().SingleWater - water3.First().SingleWater;
              var Result4 = water4.Last().SingleWater - water4.First().SingleWater;
              var Result5 = water5.Last().SingleWater - water5.First().SingleWater;
              return Result1 + Result2 + Result3 + Result4 + Result5;
          }
  */
        private static double GetElectrityData(DateTime Str, DateTime end)
        {
            List<Model.Water> water1 = new List<Model.Water>();
            List<Model.Water> water2 = new List<Model.Water>();
            List<Model.Water> water3 = new List<Model.Water>();
            List<Model.Water> water4 = new List<Model.Water>();
            List<Model.Water> water5 = new List<Model.Water>();
             var waterData = GetWaterData();
            var pump1 = waterData.Where(x => x.Tag == "二取水1号主水泵.日累计").ToList();
            foreach (var item in pump1)
            {
                water1.AddRange(item.Values.Where(x => x.DateTime >= Str && x.DateTime <= end));
            }
            var pump2 = waterData.Where(x => x.Tag == "二取水2号主水泵.日累计").ToList();
            foreach (var item in pump2)
            {
                water2.AddRange(item.Values.Where(x => x.DateTime >= Str && x.DateTime <= end));
            }
            var pump3 = waterData.Where(x => x.Tag == "二取水3号主水泵.日累计").ToList();
            foreach (var item in pump3)
            {
                water3.AddRange(item.Values.Where(x => x.DateTime >= Str && x.DateTime <= end));
            }
            var pump4 = waterData.Where(x => x.Tag == "二取水4号主水泵.日累计").ToList();
            foreach (var item in pump4)
            {
                water4.AddRange(item.Values.Where(x => x.DateTime >= Str && x.DateTime <= end));
            }
            var pump5 = waterData.Where(x => x.Tag == "二取水5号主水泵.日累计").ToList();
            foreach (var item in pump5)
            {
                water5.AddRange(item.Values.Where(x => x.DateTime >= Str && x.DateTime <= end));
            }
            var Result1 = water1.Last().SingleWater - water1.First().SingleWater;
            var Result2 = water2.Last().SingleWater - water2.First().SingleWater;
            var Result3 = water3.Last().SingleWater - water3.First().SingleWater;
            var Result4 = water4.Last().SingleWater - water4.First().SingleWater;
            var Result5 = water5.Last().SingleWater - water5.First().SingleWater;
            return Result1 + Result2 + Result3 + Result4 + Result5;
        }
        private  static double GetElectrityData(DateTime Str, DateTime end)
        {
             var Ele = GetEleData();
            List<Model.Ele> Ele1 = new List<Model.Ele>();
            List<Model.Ele> Ele2 = new List<Model.Ele>();
            List<Model.Ele> Ele3 = new List<Model.Ele>();
            List<Model.Ele> Ele4 = new List<Model.Ele>();
            List<Model.Ele> Ele5 = new List<Model.Ele>();
            var pump1 = Ele.Where(x => x.Tag == "_0402010204040193046").ToList();
            foreach (var item in pump1)
            {
                Ele1.AddRange(item.TotalEle.Where(x => x.DateTime >= Str && x.DateTime <= end));
            }
            var pump2 = Ele.Where(x => x.Tag == "_0402010204040193047").ToList();
            foreach (var item in pump2)
            {
                Ele2.AddRange(item.TotalEle.Where(x => x.DateTime >= Str && x.DateTime <= end));
            }
            var pump3 = Ele.Where(x => x.Tag == "_0402010204012308007").ToList();
            foreach (var item in pump3)
            {
                Ele3.AddRange(item.TotalEle.Where(x => x.DateTime >= Str && x.DateTime <= end));
            }
            var pump4 = Ele.Where(x => x.Tag == "_0402010204012408007").ToList();
            foreach (var item in pump4)
            {
                Ele4.AddRange(item.TotalEle.Where(x => x.DateTime >= Str && x.DateTime <= end));
            }
            var pump5 = Ele.Where(x => x.Tag == "_0402010204012508007").ToList();
            foreach (var item in pump5)
            {
                Ele5.AddRange(item.TotalEle.Where(x => x.DateTime >= Str && x.DateTime <= end));
            }
            var Result1 = Ele1.Last().Value - Ele1.First().Value;
            var Result2 = Ele2.Last().Value - Ele2.First().Value;
            var Result3 = Ele3.Last().Value - Ele3.First().Value;
            var Result4 = Ele4.Last().Value - Ele4.First().Value;
            var Result5 = Ele5.Last().Value - Ele5.First().Value;
            return Result1 + Result2 + Result3 + Result4 + Result5;
            /*   var Ele = GetEleData();
              List<Model.Ele> Ele1 = new List<Model.Ele>();
              List<Model.Ele> Ele2 = new List<Model.Ele>();
              List<Model.Ele> Ele3 = new List<Model.Ele>();
              List<Model.Ele> Ele4 = new List<Model.Ele>();
              List<Model.Ele> Ele5 = new List<Model.Ele>();*/
            /*         var pump1 = Ele.Where(x => x.Tag == "_0402010204040193046").ToList();
                     foreach (var item in pump1)
                     {
                         Ele1.AddRange(item.TotalEle.Where(x => x.DateTime >= Str && x.DateTime <= end));
                     }
                     var pump2 = Ele.Where(x => x.Tag == "_0402010204040193047").ToList();
                     foreach (var item in pump2)
                     {
                         Ele2.AddRange(item.TotalEle.Where(x => x.DateTime >= Str && x.DateTime <= end));
                     }
                     var pump3 = Ele.Where(x => x.Tag == "_0402010204012308007").ToList();
                     foreach (var item in pump3)
                     {
                         Ele3.AddRange(item.TotalEle.Where(x => x.DateTime >= Str && x.DateTime <= end));
                     }
                     var pump4 = Ele.Where(x => x.Tag == "_0402010204012408007").ToList();
                     foreach (var item in pump4)
                     {
                         Ele4.AddRange(item.TotalEle.Where(x => x.DateTime >= Str && x.DateTime <= end));
                     }
                     var pump5 = Ele.Where(x => x.Tag == "_0402010204012508007").ToList();
                     foreach (var item in pump5)
                     {
                         Ele5.AddRange(item.TotalEle.Where(x => x.DateTime >= Str && x.DateTime <= end));
                     }
                     var Result1 = Ele1.Last().Value - Ele1.First().Value;
                     var Result2 = Ele2.Last().Value - Ele2.First().Value;
                     var Result3 = Ele3.Last().Value - Ele3.First().Value;
                     var Result4 = Ele4.Last().Value - Ele4.First().Value;
                     var Result5 = Ele5.Last().Value - Ele5.First().Value;
                     return Result1 + Result2 + Result3 + Result4 + Result5;*/
            return 0;
        }
    }
}