예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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));
            }
        }