From dc97e187c607119bbd2945b9a277db8da15f8dc0 Mon Sep 17 00:00:00 2001 From: duheng <2784771470@qq.com> Date: 星期三, 27 三月 2024 13:51:36 +0800 Subject: [PATCH] 重新优化接口调取数据 --- DAL/IStation.DAL.Paras/泵运行参数/PumpHistoryDataFileHelper.cs | 973 +++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 744 insertions(+), 229 deletions(-) diff --git "a/DAL/IStation.DAL.Paras/\346\263\265\350\277\220\350\241\214\345\217\202\346\225\260/PumpHistoryDataFileHelper.cs" "b/DAL/IStation.DAL.Paras/\346\263\265\350\277\220\350\241\214\345\217\202\346\225\260/PumpHistoryDataFileHelper.cs" index c59dda0..9b183b6 100644 --- "a/DAL/IStation.DAL.Paras/\346\263\265\350\277\220\350\241\214\345\217\202\346\225\260/PumpHistoryDataFileHelper.cs" +++ "b/DAL/IStation.DAL.Paras/\346\263\265\350\277\220\350\241\214\345\217\202\346\225\260/PumpHistoryDataFileHelper.cs" @@ -1,23 +1,56 @@ -锘縰sing IStation.Model; +锘縰sing 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; } } } -- Gitblit v1.9.3