duheng
2024-05-13 af447e8f2a28cd775bb8bd345ee59dbd575beb47
WaterPredict/IStation.ChEr.Application.WaterPredict/02-predict/ConnectHelper.cs
@@ -1,4 +1,5 @@
using System;
using IStation.ChEr.Application;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
@@ -9,158 +10,92 @@
namespace IStation.Application
{
    /// <summary>
    ///
    ///
    /// </summary>
    public class ConnectHelper
    {
        /// <summary>
        ///
        ///
        /// </summary>
        public class OutTotalDayList
        {
            /// <summary>
            ///
            ///
            /// </summary>
            public DateTime DateTime { get; set; }
            /// <summary>
            ///
            ///
            /// </summary>
            public List<TotalOneDay> pumpOutWater { get; set; }
        }
        /// <summary>
        ///
        ///
        /// </summary>
        public class TotalOneDay
        {
            /// <summary>
            ///
            ///
            /// </summary>
            public DateTime DateTime { get; set; }
            /// <summary>
            ///
            ///
            /// </summary>
            public double Total { get; set; }
        }
        //获取总管天参数(瞬时总计)
        public static List<OutTotalDayList> ReadPumpAllDayOutWater(DateTime StartDay, DateTime EndDay)
        {
          var root_folder = System.IO.Path.Combine(IStation.DataFolderHelper.GetRootPath(), "供水参数");
         // var root_folder = "D:\\IStation\\ChErWebApi\\Data\\供水参数";
            if (!System.IO.Directory.Exists(root_folder))
            {
                return null;
            }
            var month_folder = System.IO.Path.Combine(root_folder, "瞬时总计");
            //  day.ToString("yyyy-MM")
            List<OutTotalDayList> outTotalDayLists = new List<OutTotalDayList>();
            for (DateTime date = StartDay; date < EndDay; date = date.AddDays(1))
            {
                string Path = System.IO.Path.Combine(month_folder,
                string.Format("{0}", date.ToString("yyyy-MM")));
                string filepath = System.IO.Path.Combine(Path,
                string.Format("{0}.json", date.ToString("yyyy-MM-dd")));
                if (!File.Exists(filepath))
                {
                    return null;
                }
                string Text = File.ReadAllText(filepath);
                var outwater = Yw.JsonHelper.Json2Object<List<TotalOneDay>>(Text);
                outTotalDayLists.Add(new OutTotalDayList() { pumpOutWater = outwater, DateTime = outwater[0].DateTime });
            }
            return outTotalDayLists;
        }
        //获取总管天参数(累计总计)
        public static List<OutTotalDayList> ReadPumpAllDayAccOutWater(DateTime StartDay, DateTime EndDay)
        {
            var root_folder = System.IO.Path.Combine(IStation.DataFolderHelper.GetRootPath(), "供水参数");
            //var root_folder = System.IO.Path.Combine(IStation.DataFolderHelper.GetRootPath(), "供水参数");
            var root_folder = "C:\\Users\\ZKC\\Desktop\\累计总计";
            // var root_folder = "D:\\IStation\\ChErWebApi\\Data\\供水参数";
            if (!System.IO.Directory.Exists(root_folder))
            {
                return null;
            }
            var month_folder = System.IO.Path.Combine(root_folder, "累计总计");
            //  var month_folder = System.IO.Path.Combine(root_folder, "累计总计");
            //  day.ToString("yyyy-MM")
            List<OutTotalDayList> outTotalDayLists = new List<OutTotalDayList>();
            if(StartDay<new DateTime(2022, 11, 2))
            if (StartDay < new DateTime(2022, 11, 2))
            {
                return null;
            }
            for (DateTime date = StartDay; date < EndDay; date = date.AddDays(1))
            {
                string Path = System.IO.Path.Combine(month_folder,
                string Path = System.IO.Path.Combine(root_folder,
                string.Format("{0}", date.ToString("yyyy-MM")));
                string filepath = System.IO.Path.Combine(Path,
                string.Format("{0}.json", date.ToString("yyyy-MM-dd")));
                 if (!File.Exists(filepath))
                if (!File.Exists(filepath))
                {
                    var  reuslt=  GetByPumpOneDayWaterData(date, date);
                    outTotalDayLists.Add(new OutTotalDayList() { pumpOutWater = reuslt, DateTime = reuslt[0].DateTime });
                 }
                    // var reuslt = GetByPumpOneDayWaterData(date, date);
                    //   outTotalDayLists.Add(new OutTotalDayList() { pumpOutWater = reuslt, DateTime = reuslt[0].DateTime });
                }
                else
                {
                    string Text = File.ReadAllText(filepath);
                    var outwater = Yw.JsonHelper.Json2Object<List<TotalOneDay>>(Text);
                    outTotalDayLists.Add(new OutTotalDayList() { pumpOutWater = outwater, DateTime = outwater[0].DateTime });
                  }
              }
                }
            }
            return outTotalDayLists;
        }
        public List<TotalOneDay> GetMeanValue(List<OutTotalDayList> realHistoryData)
        {
            List<TotalOneDay> listoutwater = new List<TotalOneDay>();
            List<OutTotalDayList> currentlist = new List<OutTotalDayList>(realHistoryData); // 创建一个新的列表,并将 realHistoryData 的内容复制过来
            for (int i = 0; i < 2; i++)
            {
                var totalSumByTimePoint = currentlist
                    .SelectMany(otdl => otdl.pumpOutWater)
                    .GroupBy(totalDay => totalDay.DateTime.TimeOfDay) // 按照小时和分钟进行分组
                    .Select(group =>
                    {
                        var time = group.First().DateTime.TimeOfDay; // 从组中获取时间
                        var totalSumForTimePoint = group.Sum(totalDay => totalDay.Total); // 在时间点分组中计算总和
                        return new { Time = time, Total = totalSumForTimePoint };
                    });
                List<TotalOneDay> demo = new List<TotalOneDay>();
                foreach (var item in totalSumByTimePoint)
                {
                    listoutwater.Add(new TotalOneDay() { DateTime = currentlist.Last().DateTime.AddDays(1) + item.Time, Total = Math.Round(item.Total / currentlist.Count, 2) });
                    demo.Add(new TotalOneDay() { DateTime = currentlist.Last().DateTime.AddDays(1) + item.Time, Total = Math.Round(item.Total / currentlist.Count, 2) });
                }
                currentlist.Add(new OutTotalDayList() { DateTime = currentlist.Last().DateTime.AddDays(1), pumpOutWater = demo });
                currentlist.RemoveAt(0);
                demo = new List<TotalOneDay>();
            }
            return listoutwater;
        }
        public  static  List<TotalOneDay> GetByPumpOneDayWaterData(DateTime starttime,DateTime endtime)
        public static SSAData GetByPumpOneDayWaterData(DateTime starttime)
        {
            // string apiServiceUrl = System.Configuration.ConfigurationManager.AppSettings["ApiServiceUrl"];
            string apiServiceUrl = "http://47.100.245.85:86/";
            string url = string.Format(@"{0}/PumpRun/GetPumpHistoryData?startday={1}&endday={2}", apiServiceUrl,starttime,endtime);
            string url = string.Format(@"{0}/PumpRun/GetPumpHistoryData?startday={1}&endday={2}", apiServiceUrl, starttime, starttime);
            string Accept = "application/json";
            //创建Web访问对象
            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
            myRequest.Method = "GET";
            //myRequest.Accept = "application/json";
            // myRequest.ContentType = "application/json";  // //Content-Type: application/x-www-form-urlencoded
            // myRequest.ContentType = "application/json";  // //Content-Type: application/x-www-form-urlencoded
            myRequest.AutomaticDecompression = DecompressionMethods.GZip;
            myRequest.Accept = Accept;
            //myRequest.ContentType = ContentType;
@@ -176,14 +111,14 @@
            if (string.IsNullOrEmpty(returnData))
            {
                myResponse.Close();
         //       error = "利用StreamReader就可以从响应内容从头读到尾";
                //       error = "利用StreamReader就可以从响应内容从头读到尾";
                return null;
            }
            var ret = Yw.JsonHelper.Json2Object<IStation.Dto.ApiResult<List<TotalOneDay>>>(returnData);
            var ret = Yw.JsonHelper.Json2Object<IStation.Dto.ApiResult<List<SSAData>>>(returnData);
            reader.Close();
            myResponse.Close();
         //   error = null;
            return ret.Data;
            //   error = null;
            return ret.Data.Last();
        }
    }
}
}