/// <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); }
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); }); }
/// <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); }
/// <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; }
/// <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); }