tangxu
2025-02-07 03a0d99de9c5fed6bea8bc83b49ce27786bda38c
BLL/IStation.BLL.Connect/AnaPrj.cs
@@ -14,32 +14,54 @@
    {
        public class SavePrjRequest
        {
            public string day { get; set; }
            public IStation.CalcModel.AnaPrj prj { get; set; }
            public Model.AnaSetting settting { get; set; }
            public Model.AnaRequestBase requestBase { 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 static  void SavePrj(DateTime day,Model.AnaRequest ana_request , Model.AnaSetting ana_settting,CalcModel.AnaPrj prj,bool isSubmit)
            public string StartReservoirLevel { get; set; }//开始水库水位(可空):单位m
            public List<int> 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 (!ServiceParas.IsRemote)
            if (!IStation.BLL.ServiceParas.IsRemote)
            {
                IStation.Common.HistoryAnaPrjFileHelper.SavePrj(day, ana_settting, ana_request == null ? null : new Model.AnaRequestBase(ana_request), prj); return;
                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);
            string url = string.Format(@"{0}/AnaPrj/SavePrj", ServiceParas.ApiServiceUrl);
            SavePrjRequest request = new SavePrjRequest();
            request.day = day.ToString("yyyy-MM-dd");
            request.prj = prj;
            request.requestBase = new Model.AnaRequestBase(ana_request);
            request.requestBase = new CalcModel.AnaRequestBase(ana_request);
            request.settting = ana_settting;
            request.isSubmit = isSubmit;
@@ -55,7 +77,7 @@
            myRequest.Method = "POST";
            //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;
@@ -82,25 +104,23 @@
            reader.Close();
            myResponse.Close();
        }
        public static CalcModel.AnaPrj GetPrj(DateTime day )
        public static CalcModel.AnaPrj GetDefaultPrjByStartDay(DateTime day)
        {
            if (!ServiceParas.IsRemote)
            {
                return IStation.Common.HistoryAnaPrjFileHelper.GetPrj(day );
                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\GetPrj?day={1}", ServiceParas.ApiServiceUrl, day.ToString("yyyy-MM-dd"));
            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";
@@ -112,7 +132,7 @@
            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;
@@ -136,7 +156,7 @@
            StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
            //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
            string returnData = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
            if(string.IsNullOrEmpty(returnData))
            if (string.IsNullOrEmpty(returnData))
            {
                myResponse.Close();
                return null;
@@ -145,15 +165,154 @@
            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<IStation.Dto.ApiResult<CalcModel.AnaPrj>>(returnData);
            reader.Close();
            myResponse.Close();
            return ret.Data;
        }
        /// <summary>
        ///
        /// 获取开始状态
        /// </summary>
        /// <param name="time"></param>
        /// <returns></returns>
        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<IStation.Dto.ApiResult<CalcModel.ZyStartInfo>>(returnData);
            reader.Close();
            myResponse.Close();
            return ret.Data;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="day"></param>
        /// <returns></returns>
        /// <returns></returns>
        public static Dictionary<int, bool> GetExistStatus(int year, int month)
        {
            if (!ServiceParas.IsRemote)
@@ -170,8 +329,7 @@
            {
                return null;
            }
            string url = string.Format(@"{0}\AnaPrj\GetExistStatus?year={1}&month={2}", apiServiceUrl, year, month);
            string url = string.Format(@"{0}/AnaPrj/GetExistStatus?year={1}&month={2}", apiServiceUrl, year, month);
            //先根据用户请求的uri构造请求地址
            //string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri);
@@ -184,7 +342,7 @@
            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;
@@ -219,10 +377,10 @@
            var list = ret.Data;
            return toFileDictionary(list);
        }
        private static  Dictionary<int, bool> toFileDictionary(List<string> list)
        private static Dictionary<int, bool> toFileDictionary(List<string> list)
        {
            Dictionary<int, bool> dict = new Dictionary<int, bool>();
            if (list != null && list.Count > 0)
@@ -233,28 +391,27 @@
                    dict[Convert.ToInt32(sss[0])] = Convert.ToBoolean(sss[1]);
                }
            }
            return dict;
            return dict;
        }
        /// <summary>
        ///
        ///
        /// </summary>
        /// <param name="day"></param>
        /// <returns></returns>
        public static int  GetLastTimeOpenPumpCount(DateTime day)
        /// <returns></returns>
        public static List<int> GetLastTimeOpenPumpStatus作废(DateTime day)
        {
            if (!ServiceParas.IsRemote)
            {
                return  IStation.Common.HistoryAnaPrjFileHelper.GetLastTime_OpenPumpCount(day);
            }
            //if (!ServiceParas.IsRemote)
            //{
            //    return IStation.Common.HistoryAnaPrjFileHelper.GetLastTime_OpenPumpStatus(day);
            //}
            if (string.IsNullOrEmpty(ServiceParas.ApiServiceUrl))
            {
                return -1;
                return null;
            }
            string url = string.Format(@"{0}\AnaPrj\GetLastTimeOpenPumpCount?day={1} ", ServiceParas.ApiServiceUrl, day.ToString("yyyy-MM-dd"));
            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);
@@ -267,7 +424,7 @@
            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;
@@ -294,16 +451,21 @@
            if (string.IsNullOrEmpty(returnData))
            {
                myResponse.Close();
                return -1;
                return null;
            }
            var ret = (new System.Web.Script.Serialization.JavaScriptSerializer()).Deserialize<IStation.Dto.ApiResult<int>>(returnData);
            var ret = (new System.Web.Script.Serialization.JavaScriptSerializer()).Deserialize<IStation.Dto.ApiResult<string >>(returnData);
            reader.Close();
            myResponse.Close();
            var res_str = ret.Data;
            if (string.IsNullOrEmpty(res_str))
            {
                return null ;
            }
            List<int> list = new List<int>();
            foreach (var s in list) { list.Add(Convert.ToInt32(s)); }
            return ret.Data;
            return list;
        }
    }
}
}