/// <summary> /// Разбор ар /// </summary> /// <param name="data"></param> /// <returns></returns> public static ICollection <Model.ArchAP> ArchAPs(string data) { var list = Utils.ParseRecords(data); if (list == null) { return(null); } ICollection <Model.ArchAP> result = new List <Model.ArchAP>(); foreach (var nvc in list) { var nodetype = nvc.Get("TYPE"); if (String.IsNullOrWhiteSpace(nodetype)) { return(null); } var ap = new Model.ArchAP(); int intValue = 0; ap.Type = nvc.Get("TYPE"); int.TryParse(nvc.Get("ID"), out intValue); ap.Id = intValue; ap.Name = nvc.Get("NAME"); intValue = 0; switch (nodetype) { case "GROUP": var group = new Model.ArchGroup(); int.TryParse(nvc.Get("ID"), out intValue); group.Id = intValue; group.Name = nvc.Get("GR_NAME"); group.Code = nvc.Get("GR_CODE"); group.Code = nvc.Get("GR_TYPE_NAME"); ap.AP = group; break; case "POINT": var point = new Model.ArchPoint(); int.TryParse(nvc.Get("ID"), out intValue); point.Id = intValue; point.Name = nvc.Get("POINT_NAME"); point.CODE = nvc.Get("POINT_CODE"); point.CODE = nvc.Get("POINT_TYPE_NAME"); point.Ecp_Name = nvc.Get("ECP_NAME"); ap.AP = point; break; } result.Add(ap); } return(result); }
/// <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)); } }