예제 #1
0
        /// <summary>
        /// Функция для получения координат для объекта
        /// </summary>
        /// <param name="data">Объект</param>
        /// <returns>Возвращает ошибку</returns>
        private Exception SetGeoCod(EntityGeoCod data)
        {
            Exception error    = null;
            string    errorMsg = string.Empty;

            data.Status = StatusType.GeoCodingNow;

            _geoCodingService.GetGeoCod((d, e) =>
            {
                error = e;
                if (e == null)
                {
                    data.ListGeoCod  = GetListGeoCod(d);
                    data.CountResult = data.ListGeoCod != null ? data.ListGeoCod.Count : 0;

                    if (data.ListGeoCod != null && data.ListGeoCod.Any())
                    {
                        data.MainGeoCod = GetMainGeoCod(data.ListGeoCod);
                    }

                    if (data.MainGeoCod != null)
                    {
                        data.Status = StatusType.OK;
                        data.Error  = string.Empty;
                    }
                    else
                    {
                        if (data.CountResult == 0)
                        {
                            errorMsg = _errorGeoCodNotFound;
                        }
                        if (data.CountResult > 1 && data.MainGeoCod == null)
                        {
                            errorMsg = _errorGeoCodFoundResultMoreOne;
                        }

                        if (!string.IsNullOrEmpty(errorMsg))
                        {
                            SetError(data, errorMsg);
                        }
                    }
                }
                else
                {
                    data.Error  = e.Message;
                    data.Status = StatusType.Error;
                }

                data.DateTimeGeoCod = DateTime.Now;
            }, data.Address);

            return(error);
        }
예제 #2
0
        public async void GetDataFromBDAsync(Action <IEnumerable <EntityGeoCod>, Exception> callback, BDSettings bds, string query)
        {
            Exception           error = null;
            List <EntityGeoCod> data  = new List <EntityGeoCod>();

            await Task.Factory.StartNew(() =>
            {
                _bdService.ExecuteUserQuery((d, e) =>
                {
                    if (e == null)
                    {
                        foreach (var item in d)
                        {
                            var a = new EntityGeoCod();

                            if (item.OrponId == 0)
                            {
                                SetError(a, _errorIsFormatIDWrong);
                            }
                            else
                            {
                                a.GlobalID = item.OrponId;
                            }

                            if (string.IsNullOrEmpty(item.Address))
                            {
                                SetError(a, _errorIsAddressEmpty);
                            }
                            else
                            {
                                a.Address = item.Address;
                            }

                            data.Add(a);
                        }
                    }
                    else
                    {
                        error = e;
                    }
                }, new BDService.ConnectionSettings()
                {
                    Server   = bds.Server,
                    BDName   = bds.BDName,
                    Port     = bds.Port,
                    Login    = bds.Login,
                    Password = bds.Password
                }, query);

                callback(data, error);
            });
        }
예제 #3
0
        /// <summary>
        /// Метод для получения координат объекта
        /// </summary>
        /// <param name="callback">Функция обратного вызова, с параметром: ошибка</param>
        /// <param name="data">Объект для которого нужны координаты</param>
        public async void GetGeoCod(Action <Exception> callback, EntityGeoCod data)
        {
            Exception error = null;

            data.MainGeoCod = null;

            await Task.Factory.StartNew(() =>
            {
                error = SetGeoCod(data);
            });

            callback(error);
        }
예제 #4
0
 /// <summary>
 /// Метод заполнения свойств объекта EntityGeoCod при ошибках
 /// </summary>
 /// <param name="geocod">Объект EntityGeoCod</param>
 /// <param name="mes">Сообщение ошибки</param>
 private void SetError(EntityGeoCod geocod, string mes)
 {
     geocod.Error  = mes;
     geocod.Status = StatusType.Error;
 }
예제 #5
0
        /// <summary>
        /// Метод преобразования строки в объект EntityGeoCod
        /// </summary>
        /// <param name="callback">Функция обратного вызова, с параметрами: множество объектов EntityGeoCod и ошибка</param>
        /// <param name="d">Множество строк</param>
        private void StringToEntityGeoCod(Action <IEnumerable <EntityGeoCod>, Exception> callback, IEnumerable <string> d)
        {
            Exception           error = null;
            List <EntityGeoCod> data  = null;
            int countError            = -1;

            if (d != null && d.Any())
            {
                if (IsFirstStringNameColumn(d.First()))
                {
                    data = new List <EntityGeoCod>(d.Count());
                    foreach (var item in d.Skip(1))
                    {
                        if (countError >= _maxCountError)
                        {
                            error = new Exception(_errorLotOfMistakes);
                            data  = null;
                            break;
                        }

                        EntityGeoCod geocod = new EntityGeoCod();
                        var          s      = item.Split(_charSplit);

                        try
                        {
                            if (int.TryParse(s[_globalIDColumnIndexLoadFile].Trim(), out int id))
                            {
                                geocod.GlobalID = id;
                            }
                            else
                            {
                                SetError(geocod, _errorIsFormatIDWrong);
                                countError++;
                            }

                            if (!string.IsNullOrEmpty(s[_addressColumnIndexLoadFile]))
                            {
                                geocod.Address = s[_addressColumnIndexLoadFile];
                            }
                            else
                            {
                                SetError(geocod, _errorIsAddressEmpty);
                                countError++;
                            }

                            if (IsFirstStringNameColumnTempFile(d.First()))
                            {
                                if (!string.IsNullOrEmpty(s[2]) && !string.IsNullOrEmpty(s[3]))
                                {
                                    geocod.MainGeoCod = new GeoCod()
                                    {
                                        AddressWeb = s[2],
                                        Longitude  = s[3],
                                        Latitude   = s[4],
                                    };
                                    byte.TryParse(s[5], out byte qcode);
                                    geocod.MainGeoCod.Qcode = qcode;
                                    Enum.TryParse(s[9], out KindType kt);
                                    geocod.MainGeoCod.Kind = kt;
                                    Enum.TryParse(s[10], out PrecisionType pt);
                                    geocod.MainGeoCod.Precision = pt;
                                }

                                geocod.Error = s[6];
                                Enum.TryParse(s[7], out StatusType a);
                                geocod.Status = a;
                                DateTime.TryParse(s[8], out DateTime dt);
                                geocod.DateTimeGeoCod = dt;
                                byte.TryParse(s[11], out byte c);
                                geocod.CountResult = c;
                            }
                            else if (IsFirstStringNameColumnErrorFile(d.First()))
                            {
                                geocod.Error  = s[2];
                                geocod.Status = StatusType.Error;
                            }
                        }
                        catch (Exception ex)
                        {
                            SetError(geocod, ex.Message);
                            countError++;
                        }

                        data.Add(geocod);
                    }
                }
                else
                {
                    error = new Exception(_errorIsNotFirstStringNameColumn);
                }
            }

            callback(data, error);
        }