/// <summary> /// Получение архивных данных энергии, заданной параметром /// </summary> /// <param name="pointId">ИД точки</param> /// <param name="pointName">Название точки</param> /// <param name="startDate">Начальная дата</param> /// <param name="endDate">Конечная дата</param> /// <param name="ml">Параметр, описывающий энергию - тип, направление, а также вид временного интервала</param> /// <returns>Список <see cref="Model.ArchData"/> для каждого интервала времени</returns> public static IEnumerable <Model.ArchData> GetPointArchive(int pointId, string pointName, DateTime startDate, DateTime endDate, Model.ML_Param ml) { var point = new Model.ArchAP { Id = pointId, Type = "POINT", Name = pointName }; IEnumerable <Model.ArchData> list; try { list = EmcosSiteWrapper.Instance.GetArchiveData(ml, point, startDate, endDate).Result; } catch (Exception e) { TMPApplication.TMPApp.LogInfo(String.Format("GetPointArchive. Ошибка получения данных по точке: ИД-[{0}], название-[{1}]. Сообщение: {2}", pointId, pointName, e.Message)); return(null); } return(list); }
/// <summary> /// Возвращает архивные значения указанной точке по указанному измерению и периоду /// </summary> /// <param name="param">измерение</param> /// <param name="point">точка</param> /// <param name="startDate">начало периода</param> /// <param name="endDate">конец периода</param> /// <param name="ct">токен отмены</param> /// <returns></returns> public Task <IEnumerable <Model.ArchData> > GetArchiveData(Model.ML_Param param, Model.ArchAP point, DateTime startDate, DateTime endDate) { var md = param.MD.Id; var aggs = param.AGGS.Id; var datacode = param.Id; var type = point.Type; var id = point.Id; var sendData = String.Format( "action=GET&dataBlock=DW&BILLING_HOUR=0&FREEZED=0&SHOW_MAP_DATA=0&GR_VALUE={0}&" + "EC_ID=&MD_ID={1}&WO_ACTS=0&WO_BYP=0&GMOD_ID=&TimeEnd={3}&TimeBegin={2}&AGGS_ID={4}&DATA_CODE={5}&TYPE={6}&ID={7}", "VAL", md, startDate.ToString("yyyy.MM.dd"), endDate.ToString("yyyy.MM.dd"), aggs, datacode, type, id); sendData = System.Web.HttpUtility.UrlPathEncode(sendData).Replace("_", "%5F").Replace("+", "%2B").ToUpper(); var url = @"{0}scripts/arch.asp"; url = string.Format(url, this.SiteAddress); var httpWebRequest = (HttpWebRequest)WebRequest.Create(url); ConfigureRequest(ref httpWebRequest); httpWebRequest.Method = WebRequestMethods.Http.Post; httpWebRequest.Accept = "*/*"; httpWebRequest.Headers.Add("Accept-Encoding: gzip, deflate"); IEnumerable <Model.ArchData> empty = new List <Model.ArchData>(); // передаём куки if (TryAddCookie(ref httpWebRequest) == false) { SetFailResult(null, "[EmcosSiteWrapper] Функция GetArchiveData - ошибка: не удалось добавить куки"); return(Task.FromResult(empty)); } var buffer = Encoding.UTF8.GetBytes(sendData); httpWebRequest.ContentType = "application/x-www-form-urlencoded"; try { using (var postStream = httpWebRequest.GetRequestStream()) { postStream.Write(buffer, 0, buffer.Length); } var task = Task.Factory.FromAsync( httpWebRequest.BeginGetResponse, asyncResult => httpWebRequest.EndGetResponse(asyncResult), (object)null); return(task.ContinueWith(t => { var data = ReadStreamFromResponse(t.Result); if (String.IsNullOrWhiteSpace(data)) { SetFailResult(null, "[EmcosSiteWrapper] Архивные данные отсутствуют. Точка: " + point.Name); return null; } var list = Utils.ArchiveData(data); SetOKResult(); return list; })); } catch (Exception ex) { SetFailResult(ex, "[EmcosSiteWrapper] Функция GetArchiveData - ошибка: " + ex.Message); return(Task.FromResult(empty)); } }
/// <summary> /// Разбор измерений /// </summary> /// <param name="data"></param> /// <returns></returns> public static ICollection <Model.IParam> Params(string data) { var list = Utils.ParseRecords(data); if (list == null) { return(null); } ICollection <Model.IParam> result = new List <Model.IParam>(); foreach (var nvc in list) { var nodetype = nvc.Get("TYPE"); if (String.IsNullOrWhiteSpace(nodetype)) { return(null); } // &MS_TYPE_ID_0=1&MS_TYPE_NAME_0=Электричество&TYPE_0=MS_TYPE&result=0&recordCount=1 switch (nodetype) { case "MS_TYPE": var ms_param = new Model.MS_Param(); result.Add(ms_param); break; case "AGGS_TYPE": var aggs_param = new Model.AGGS_Param(); aggs_param.Id = nvc.Get("AGGS_TYPE_ID"); aggs_param.Name = nvc.Get("AGGS_TYPE_NAME"); result.Add(aggs_param); break; case "MSF": var msf_param = new Model.MSF_Param(); msf_param.Id = nvc.Get("MSF_ID"); msf_param.Name = nvc.Get("MSF_NAME"); msf_param.AGGS.Id = nvc.Get("AGGS_TYPE_ID"); result.Add(msf_param); break; case "ML": var ml_param = new Model.ML_Param(); if (nvc.Get("ML_ID") != null) { ml_param.Id = nvc.Get("ML_ID"); } if (nvc.Get("ID") != null) { ml_param.Id = nvc.Get("ID"); } if (nvc.Get("ML_NAME") != null) { ml_param.Name = nvc.Get("ML_NAME"); } if (nvc.Get("NAME") != null) { ml_param.Name = nvc.Get("NAME"); } ml_param.AGGF.Id = nvc.Get("AGGF_ID"); ml_param.AGGF.Name = nvc.Get("AGGF_NAME"); ml_param.DIR.Id = nvc.Get("DIR_ID"); ml_param.DIR.Name = nvc.Get("DIR_NAME"); ml_param.DIR.Code = nvc.Get("DIR_CODE"); ml_param.EU.Id = nvc.Get("EU_ID"); ml_param.EU.Name = nvc.Get("EU_NAME"); ml_param.EU.Code = nvc.Get("EU_CODE"); ml_param.TFF.Id = nvc.Get("TFF_ID"); ml_param.TFF.Name = nvc.Get("TFF_NAME"); ml_param.AGGS.Id = nvc.Get("AGGS_ID"); ml_param.AGGS.Name = nvc.Get("AGGS_NAME"); ml_param.AGGS.Value = nvc.Get("AGGS_VALUE"); ml_param.AGGS.Per_Id = nvc.Get("AGGS_PER_ID"); ml_param.AGGS.Per_Code = nvc.Get("AGGS_PER_CODE"); ml_param.AGGS.Per_Name = nvc.Get("AGGS_PER_NAME"); ml_param.MS.Id = nvc.Get("MS_ID"); ml_param.MS.Name = nvc.Get("MS_NAME"); ml_param.MS.Code = nvc.Get("MS_CODE"); ml_param.MD.Id = nvc.Get("MD_ID"); ml_param.MD.Name = nvc.Get("MD_NAME"); ml_param.MD.Code = nvc.Get("MD_CODE"); ml_param.MD.Per_Id = nvc.Get("MD_PER_ID"); ml_param.MD.Per_Code = nvc.Get("MD_PER_CODE"); ml_param.MD.Per_Name = nvc.Get("MD_PER_NAME"); ml_param.MD.Int_Value = nvc.Get("MD_INT_VALUE"); ml_param.MSF.Id = nvc.Get("MSF_ID"); ml_param.MSF.Name = nvc.Get("MSF_NAME"); ml_param.MSF.Code = nvc.Get("MSF_CODE"); ml_param.OBIS = nvc.Get("OBIS"); result.Add(ml_param); break; } } return(result); }