using IStation.Model; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace IStation.BLL { public class AnaPrj { public class SavePrjRequest { public IStation.CalcModel.AnaPrj prj { get; set; } public IStation.CalcModel.AnaSetting settting { get; set; } public IStation.CalcModel.AnaRequestBase requestBase { get; set; } public bool isSubmit { get; set; } } public class ZyPrjRequest { public string StartTime { get; set; } public string EndTime { get; set; } //public int? StartOpenCount { get; set; } = -1;//已作废 public string StartReservoirLevel { get; set; }//开始水库水位(可空):单位m public List StartOpenPumpIndexArray { get; set; }//开始机泵开机状态(新) public string TotalFlowIn { get; set; }//取水总量 (单位 吨) public string TotalFlowOut { get; set; }//供水总量 (单位 吨) 不输入就用预测值 public string MaxReservoirLevel { get; set; }//最高水库水位限制(可空):单位m public string MaxReservoirLevelTime { get; set; }//最高水库水位限制时间(可空) 时间格式 public string IsSubmit { get; set; }//计算完,是否推送 public string IsTemporary { get; set; }//是否是临时算一下(新) } public static void SavePrj(CalcModel.AnaRequest ana_request, CalcModel.AnaSetting ana_settting, CalcModel.AnaPrj prj, bool isSubmit) { if (!IStation.BLL.ServiceParas.IsRemote) { IStation.Common.HistoryAnaPrjFileHelper.SavePrj(ana_settting, true, ana_request == null ? null : new CalcModel.AnaRequestBase(ana_request), prj); return; } if (string.IsNullOrEmpty(ServiceParas.ApiServiceUrl)) { return; } if (string.IsNullOrEmpty(prj.ID)) { var time = DateTime.Now; prj.ID = $"{time.Year}{time.Month}{time.Day}{time.Hour}{time.Minute}{time.Second}"; } string url = string.Format(@"{0}/AnaPrj/SavePrj", ServiceParas.ApiServiceUrl); SavePrjRequest request = new SavePrjRequest(); request.prj = prj; request.requestBase = new CalcModel.AnaRequestBase(ana_request); request.settting = ana_settting; request.isSubmit = isSubmit; string parameterData = (new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(request); //先根据用户请求的uri构造请求地址 //string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri); //string ContentType = "application/json"; string Accept = "application/json"; //创建Web访问对象 HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url); //把用户传过来的数据转成“UTF-8”的字节流 byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(parameterData); myRequest.Method = "POST"; //myRequest.Accept = "application/json"; //myRequest.ContentType = "application/json"; // //Content-Type: application/x-www-form-urlencoded myRequest.AutomaticDecompression = DecompressionMethods.GZip; myRequest.Accept = Accept; //myRequest.ContentType = ContentType; myRequest.ContentType = "application/json; charset=UTF-8"; myRequest.ContentLength = buf.Length; myRequest.MaximumAutomaticRedirections = 1; myRequest.AllowAutoRedirect = true; //myRequest.Headers.Add("content-type", "application/json"); //myRequest.Headers.Add("accept-encoding", "gzip"); //myRequest.Headers.Add("accept-charset", "utf-8"); //发送请求 Stream stream = myRequest.GetRequestStream(); stream.Write(buf, 0, buf.Length); stream.Close(); //通过Web访问对象获取响应内容 HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快 StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法 string returnData = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾 reader.Close(); myResponse.Close(); } public static CalcModel.AnaPrj GetDefaultPrjByStartDay(DateTime day) { if (!ServiceParas.IsRemote) { IStation.CalcModel.AnaRequestBase requestBase; return IStation.Common.HistoryAnaPrjFileHelper.GetByStartDay(day, out requestBase); } if (string.IsNullOrEmpty(ServiceParas.ApiServiceUrl)) { return null; } string url = string.Format(@"{0}/AnaPrj/GetDefaultPrjByStartDay?day={1}", ServiceParas.ApiServiceUrl, day.ToString("yyyy-MM-dd")); //先根据用户请求的uri构造请求地址 //string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri); //string ContentType = "application/json"; string Accept = "application/json"; //创建Web访问对象 HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url); //把用户传过来的数据转成“UTF-8”的字节流 //byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(parameterData); myRequest.Method = "GET"; //myRequest.Accept = "application/json"; //myRequest.ContentType = "application/json"; // //Content-Type: application/x-www-form-urlencoded myRequest.AutomaticDecompression = DecompressionMethods.GZip; myRequest.Accept = Accept; //myRequest.ContentType = ContentType; myRequest.ContentType = "application/json; charset=UTF-8"; //myRequest.ContentLength = buf.Length; myRequest.MaximumAutomaticRedirections = 1; myRequest.AllowAutoRedirect = true; //myRequest.Headers.Add("content-type", "application/json"); //myRequest.Headers.Add("accept-encoding", "gzip"); //myRequest.Headers.Add("accept-charset", "utf-8"); //发送请求 //Stream stream = myRequest.GetRequestStream(); //stream.Write(buf, 0, buf.Length); //stream.Close(); //通过Web访问对象获取响应内容 HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快 StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法 string returnData = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾 if (string.IsNullOrEmpty(returnData)) { myResponse.Close(); return null; } var ret = (new System.Web.Script.Serialization.JavaScriptSerializer()).Deserialize>(returnData); reader.Close(); myResponse.Close(); return ret.Data; } public static CalcModel.AnaPrj CalcPrj(CalcModel.AnaRequest ana_request,bool isUsePredictRecord, bool isTemp ) { if (string.IsNullOrEmpty(ServiceParas.ApiServiceUrl)) { return null; } string url = string.Format(@"{0}/AnaPrj/Calc", ServiceParas.ApiServiceUrl); ZyPrjRequest request = new ZyPrjRequest(); request.StartTime = ana_request.StartTime.ToString("yyyy-MM-dd HH:mm:ss"); request.EndTime = ana_request.EndTime.ToString("yyyy-MM-dd HH:mm:ss"); request.IsTemporary = isTemp.ToString(); request.IsSubmit = "false"; if(ana_request.MaxReservoirLevel != null) request.MaxReservoirLevel = ana_request.MaxReservoirLevel.ToString(); request.MaxReservoirLevelTime = ana_request.MaxReservoirLevelTime; request.StartReservoirLevel = ana_request.StartReservoirLevel.ToString(); request.StartOpenPumpIndexArray = ana_request.StartOpenPumpIndexArray; if(ana_request.TotalFlowIn != null) request.TotalFlowIn = ana_request.TotalFlowIn.ToString(); if (!isUsePredictRecord) request.TotalFlowOut = (ana_request.PerHourFlowOut.Sum() - ana_request.PerHourFlowOut.Last()).ToString(); string parameterData = (new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(request); //先根据用户请求的uri构造请求地址 //string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri); //string ContentType = "application/json"; string Accept = "application/json"; //创建Web访问对象 HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url); //把用户传过来的数据转成“UTF-8”的字节流 byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(parameterData); myRequest.Method = "POST"; //myRequest.Accept = "application/json"; //myRequest.ContentType = "application/json"; // //Content-Type: application/x-www-form-urlencoded myRequest.AutomaticDecompression = DecompressionMethods.GZip; myRequest.Accept = Accept; //myRequest.ContentType = ContentType; myRequest.ContentType = "application/json; charset=UTF-8"; myRequest.ContentLength = buf.Length; myRequest.MaximumAutomaticRedirections = 1; myRequest.AllowAutoRedirect = true; //myRequest.Headers.Add("content-type", "application/json"); //myRequest.Headers.Add("accept-encoding", "gzip"); //myRequest.Headers.Add("accept-charset", "utf-8"); //发送请求 Stream stream = myRequest.GetRequestStream(); stream.Write(buf, 0, buf.Length); stream.Close(); //通过Web访问对象获取响应内容 HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快 StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法 string returnData = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾 var ret = (new System.Web.Script.Serialization.JavaScriptSerializer()).Deserialize>(returnData); reader.Close(); myResponse.Close(); return ret.Data; } /// /// 获取开始状态 /// /// /// public static CalcModel.ZyStartInfo GetAnaStartPara(DateTime time ) { if (!ServiceParas.IsRemote) { return null; } if (string.IsNullOrEmpty(ServiceParas.ApiServiceUrl)) { return null; } string url = string.Format(@"{0}/AnaPrj/GetAnaStartPara?AnaStartTime={1}", ServiceParas.ApiServiceUrl, time.ToString("yyyy-MM-dd HH:mm:ss")); //先根据用户请求的uri构造请求地址 //string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri); //string ContentType = "application/json"; string Accept = "application/json"; //创建Web访问对象 HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url); //把用户传过来的数据转成“UTF-8”的字节流 //byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(parameterData); myRequest.Method = "GET"; //myRequest.Accept = "application/json"; //myRequest.ContentType = "application/json"; // //Content-Type: application/x-www-form-urlencoded myRequest.AutomaticDecompression = DecompressionMethods.GZip; myRequest.Accept = Accept; //myRequest.ContentType = ContentType; myRequest.ContentType = "application/json; charset=UTF-8"; //myRequest.ContentLength = buf.Length; myRequest.MaximumAutomaticRedirections = 1; myRequest.AllowAutoRedirect = true; //myRequest.Headers.Add("content-type", "application/json"); //myRequest.Headers.Add("accept-encoding", "gzip"); //myRequest.Headers.Add("accept-charset", "utf-8"); //发送请求 //Stream stream = myRequest.GetRequestStream(); //stream.Write(buf, 0, buf.Length); //stream.Close(); //通过Web访问对象获取响应内容 HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快 StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法 string returnData = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾 if (string.IsNullOrEmpty(returnData)) { myResponse.Close(); return null; } var ret = (new System.Web.Script.Serialization.JavaScriptSerializer()).Deserialize>(returnData); reader.Close(); myResponse.Close(); return ret.Data; } /// /// /// /// /// public static Dictionary GetExistStatus(int year, int month) { if (!ServiceParas.IsRemote) { return toFileDictionary(IStation.Common.HistoryAnaPrjFileHelper.GetExistStatus(year, month)); } if (string.IsNullOrEmpty(ServiceParas.ApiServiceUrl)) { return null; } string apiServiceUrl = System.Configuration.ConfigurationManager.AppSettings["ApiServiceUrl"]; if (string.IsNullOrEmpty(apiServiceUrl)) { return null; } string url = string.Format(@"{0}/AnaPrj/GetExistStatus?year={1}&month={2}", apiServiceUrl, year, month); //先根据用户请求的uri构造请求地址 //string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri); //string ContentType = "application/json"; string Accept = "application/json"; //创建Web访问对象 HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url); //把用户传过来的数据转成“UTF-8”的字节流 //byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(parameterData); myRequest.Method = "GET"; //myRequest.Accept = "application/json"; //myRequest.ContentType = "application/json"; // //Content-Type: application/x-www-form-urlencoded myRequest.AutomaticDecompression = DecompressionMethods.GZip; myRequest.Accept = Accept; //myRequest.ContentType = ContentType; myRequest.ContentType = "application/json; charset=UTF-8"; //myRequest.ContentLength = buf.Length; myRequest.MaximumAutomaticRedirections = 1; myRequest.AllowAutoRedirect = true; //myRequest.Headers.Add("content-type", "application/json"); //myRequest.Headers.Add("accept-encoding", "gzip"); //myRequest.Headers.Add("accept-charset", "utf-8"); //发送请求 //Stream stream = myRequest.GetRequestStream(); //stream.Write(buf, 0, buf.Length); //stream.Close(); //通过Web访问对象获取响应内容 HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快 StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法 string returnData = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾 if (string.IsNullOrEmpty(returnData)) { myResponse.Close(); return null; } var ret = (new System.Web.Script.Serialization.JavaScriptSerializer()).Deserialize>>(returnData); reader.Close(); myResponse.Close(); var list = ret.Data; return toFileDictionary(list); } private static Dictionary toFileDictionary(List list) { Dictionary dict = new Dictionary(); if (list != null && list.Count > 0) { foreach (var m in list) { var sss = m.Split(':'); dict[Convert.ToInt32(sss[0])] = Convert.ToBoolean(sss[1]); } } return dict; } /// /// /// /// /// public static List GetLastTimeOpenPumpStatus作废(DateTime day) { //if (!ServiceParas.IsRemote) //{ // return IStation.Common.HistoryAnaPrjFileHelper.GetLastTime_OpenPumpStatus(day); //} if (string.IsNullOrEmpty(ServiceParas.ApiServiceUrl)) { return null; } string url = string.Format(@"{0}/AnaPrj/GetLastTimeOpenPumpStatus?day={1} ", ServiceParas.ApiServiceUrl, day.ToString("yyyy-MM-dd")); //先根据用户请求的uri构造请求地址 //string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri); //string ContentType = "application/json"; string Accept = "application/json"; //创建Web访问对象 HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url); //把用户传过来的数据转成“UTF-8”的字节流 //byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(parameterData); myRequest.Method = "GET"; //myRequest.Accept = "application/json"; //myRequest.ContentType = "application/json"; // //Content-Type: application/x-www-form-urlencoded myRequest.AutomaticDecompression = DecompressionMethods.GZip; myRequest.Accept = Accept; //myRequest.ContentType = ContentType; myRequest.ContentType = "application/json; charset=UTF-8"; //myRequest.ContentLength = buf.Length; myRequest.MaximumAutomaticRedirections = 1; myRequest.AllowAutoRedirect = true; //myRequest.Headers.Add("content-type", "application/json"); //myRequest.Headers.Add("accept-encoding", "gzip"); //myRequest.Headers.Add("accept-charset", "utf-8"); //发送请求 //Stream stream = myRequest.GetRequestStream(); //stream.Write(buf, 0, buf.Length); //stream.Close(); //通过Web访问对象获取响应内容 HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快 StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法 string returnData = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾 if (string.IsNullOrEmpty(returnData)) { myResponse.Close(); return null; } var ret = (new System.Web.Script.Serialization.JavaScriptSerializer()).Deserialize>(returnData); reader.Close(); myResponse.Close(); var res_str = ret.Data; if (string.IsNullOrEmpty(res_str)) { return null ; } List list = new List(); foreach (var s in list) { list.Add(Convert.ToInt32(s)); } return list; } } }