public async Task <AnalysisAddressResultNew> AnalysisAddressTuningUp(ListAnalysisAddressNewResultItem model) { var rs = new AnalysisAddressResultNew() { Result = Result.Success, ListResult = new List <AnalysisAddressNewResultItem>() }; if (model.AnalysisAddressResultItems.Count > 0) { var cities = await _cityRepository.Query().OrderBy(c => c.DisplayOrder).Include(c => c.Exceptions) .ToListAsync(); List <AnalysisAddressNewResultItem> citiesRS = new List <AnalysisAddressNewResultItem>(); foreach (var modelAnalysisAddressItem in model.AnalysisAddressResultItems) { AnalysisAddressNewResultItem cityRS = new AnalysisAddressNewResultItem() { Result = Result.Success, Guid = modelAnalysisAddressItem.Guid }; var beginNumber = Regex.Match(modelAnalysisAddressItem.Address, @"^\d+").ToString(); if (!string.IsNullOrEmpty(beginNumber)) { var address = modelAnalysisAddressItem.Address; modelAnalysisAddressItem.Address = modelAnalysisAddressItem.Address.Substring(beginNumber.Length, address.Length - beginNumber.Length); } string currentAddress; cityRS = AnalysisCity(modelAnalysisAddressItem, cities, cityRS, out currentAddress); if (rs.Result != Result.Success) { return(rs); } modelAnalysisAddressItem.Address = currentAddress; citiesRS.Add(cityRS); } //District var cityIds = citiesRS.Where(x => x.CityId > 0).Select(x => x.CityId).Distinct().ToList(); var districts = await _districtRepository.Query().Where(x => cityIds.Contains(x.CityId)).OrderBy(c => c.DisplayOrder) .Include(c => c.Exceptions).ToListAsync(); List <AnalysisAddressNewResultItem> districtsRS = new List <AnalysisAddressNewResultItem>(); foreach (var modelAnalysisAddressItem in model.AnalysisAddressResultItems) { AnalysisAddressNewResultItem districtRS = new AnalysisAddressNewResultItem() { Result = Result.Success, Guid = modelAnalysisAddressItem.Guid }; var cityCheck = citiesRS.FirstOrDefault(x => x.Guid == modelAnalysisAddressItem.Guid); if (cityCheck != null && cityCheck.CityId > 0) { districtRS.CityId = cityCheck.CityId; districtRS.CityName = cityCheck.CityName; districtRS.CityRealm = cityCheck.CityRealm; } var beginNumber = Regex.Match(modelAnalysisAddressItem.Address, @"^\d+").ToString(); if (!string.IsNullOrEmpty(beginNumber)) { var address = modelAnalysisAddressItem.Address; modelAnalysisAddressItem.Address = modelAnalysisAddressItem.Address.Substring(beginNumber.Length, address.Length - beginNumber.Length); } string currentAddress; var districtCheck = districts.Where(x => x.CityId == districtRS.CityId).ToList(); districtRS = AnalysisDistrict(modelAnalysisAddressItem, districtCheck, districtRS, out currentAddress); if (rs.Result != Result.Success) { return(rs); } modelAnalysisAddressItem.Address = currentAddress; districtsRS.Add(districtRS); } //Ward var districtIds = districtsRS.Where(x => x.DistrictId > 0).Select(x => x.DistrictId).Distinct().ToList(); var wards = await _wardRepository.Query().Where(x => districtIds.Contains(x.DistrictId)).OrderBy(c => c.DisplayOrder).Include(c => c.Exceptions) .ToListAsync(); List <AnalysisAddressNewResultItem> wardsRS = new List <AnalysisAddressNewResultItem>(); foreach (var modelAnalysisAddressItem in model.AnalysisAddressResultItems) { AnalysisAddressNewResultItem wardRS = new AnalysisAddressNewResultItem() { Result = Result.Success, Guid = modelAnalysisAddressItem.Guid }; var districtCheck = districtsRS.FirstOrDefault(x => x.Guid == modelAnalysisAddressItem.Guid); if (districtCheck != null && districtCheck.DistrictId > 0) { wardRS.DistrictId = districtCheck.DistrictId; wardRS.DistrictName = districtCheck.DistrictName; } var beginNumber = Regex.Match(modelAnalysisAddressItem.Address, @"^\d+").ToString(); if (!string.IsNullOrEmpty(beginNumber)) { var address = modelAnalysisAddressItem.Address; modelAnalysisAddressItem.Address = modelAnalysisAddressItem.Address.Substring(beginNumber.Length, address.Length - beginNumber.Length); } var wardCheck = wards.Where(x => x.DistrictId == wardRS.DistrictId).ToList(); wardRS = AnalysisWard(modelAnalysisAddressItem, wardCheck, wardRS); if (rs.Result != Result.Success) { return(rs); } wardsRS.Add(wardRS); } foreach (var modelAnalysisAddressItem in model.AnalysisAddressResultItems) { AnalysisAddressNewResultItem resultItem = new AnalysisAddressNewResultItem() { Result = Result.Success, Guid = modelAnalysisAddressItem.Guid }; var resultCity = citiesRS.FirstOrDefault(x => x.Guid == modelAnalysisAddressItem.Guid); if (resultCity != null) { resultItem.CityId = resultCity.CityId; resultItem.CityName = resultCity.CityName; resultItem.CityRealm = resultCity.CityRealm; } var resultDistrict = districtsRS.FirstOrDefault(x => x.Guid == modelAnalysisAddressItem.Guid); if (resultDistrict != null) { resultItem.DistrictId = resultDistrict.DistrictId; resultItem.DistrictName = resultDistrict.DistrictName; } var resultWard = wardsRS.FirstOrDefault(x => x.Guid == modelAnalysisAddressItem.Guid); if (resultWard != null) { resultItem.WardId = resultWard.WardId; resultItem.WardName = resultWard.WardName; resultItem.IsOutOfServe = resultWard.IsOutOfServe; } rs.ListResult.Add(resultItem); } } return(rs); }
public async Task <AnalysisAddressNewResult> GetAddressByName(AnalysisAddressNewModel model) { var result = new AnalysisAddressNewResult() { Result = Result.Success }; var analysisAddressModel = new ListAnalysisAddressNewResultItem { AnalysisAddressResultItems = new List <AnalysisAddressNewItem>() }; var sourceOrderId = Guid.NewGuid().ToString(); var destOrderId = Guid.NewGuid().ToString(); var returnOrderId = Guid.NewGuid().ToString(); analysisAddressModel.AnalysisAddressResultItems.Add(new AnalysisAddressNewItem { Guid = sourceOrderId, Address = !string.IsNullOrEmpty(model.SourceAddress) ? model.SourceAddress.Trim() : "", CityName = !string.IsNullOrEmpty(model.SourceCity) ? model.SourceCity.Trim() : "", DistrictName = !string.IsNullOrEmpty(model.SourceDistrict) ? model.SourceDistrict.Trim() : "", WardName = !string.IsNullOrEmpty(model.SourceWard) ? model.SourceWard.Trim() : "" }); analysisAddressModel.AnalysisAddressResultItems.Add(new AnalysisAddressNewItem { Guid = destOrderId, Address = !string.IsNullOrEmpty(model.DestAddress) ? model.DestAddress.Trim() : "", CityName = !string.IsNullOrEmpty(model.DestCity) ? model.DestCity.Trim() : "", DistrictName = !string.IsNullOrEmpty(model.DestDistrict) ? model.DestDistrict.Trim() : "", WardName = !string.IsNullOrEmpty(model.DestWard) ? model.DestWard.Trim() : "" }); analysisAddressModel.AnalysisAddressResultItems.Add(new AnalysisAddressNewItem { Guid = returnOrderId, Address = !string.IsNullOrEmpty(model.ReturnAddress) ? model.ReturnAddress.Trim() : "", CityName = !string.IsNullOrEmpty(model.ReturnCity) ? model.ReturnCity.Trim() : "", DistrictName = !string.IsNullOrEmpty(model.ReturnDistrict) ? model.ReturnDistrict.Trim() : "", WardName = !string.IsNullOrEmpty(model.ReturnWard) ? model.ReturnWard.Trim() : "" }); var analysisAddressResult = await AnalysisAddressTuningUp(analysisAddressModel); var sourceAddress = analysisAddressResult.ListResult.FirstOrDefault(x => x.Guid == sourceOrderId); var destAddress = analysisAddressResult.ListResult.FirstOrDefault(x => x.Guid == destOrderId); var returnAddress = analysisAddressResult.ListResult.FirstOrDefault(x => x.Guid == returnOrderId); if (sourceAddress != null) { if (sourceAddress.CityId > 0 && sourceAddress.CityId != null) { result.SourceCity = sourceAddress.CityName; result.SourceCityId = sourceAddress.CityId; } if (sourceAddress.DistrictId > 0 && sourceAddress.DistrictId != null) { result.SourceDistrict = sourceAddress.DistrictName; result.SourceDistrictId = sourceAddress.DistrictId; } if (sourceAddress.WardId > 0 && sourceAddress.WardId != null) { result.SourceWard = sourceAddress.WardName; result.SourceWardId = sourceAddress.WardId; } } if (destAddress != null) { if (destAddress.CityId > 0 && destAddress.CityId != null) { result.DestCity = destAddress.CityName; result.DestCityId = destAddress.CityId; } if (destAddress.DistrictId > 0 && destAddress.DistrictId != null) { result.DestDistrict = destAddress.DistrictName; result.DestDistrictId = destAddress.DistrictId; } if (destAddress.WardId > 0 && destAddress.WardId != null) { result.DestWard = destAddress.WardName; result.DestWardId = destAddress.WardId; } } if (returnAddress != null) { if (returnAddress.CityId > 0 && returnAddress.CityId != null) { result.ReturnCity = returnAddress.CityName; result.ReturnCityId = returnAddress.CityId; } if (returnAddress.DistrictId > 0 && returnAddress.DistrictId != null) { result.ReturnDistrict = returnAddress.DistrictName; result.ReturnDistrictId = returnAddress.DistrictId; } if (returnAddress.WardId > 0 && returnAddress.WardId != null) { result.ReturnWard = returnAddress.WardName; result.ReturnWardId = returnAddress.WardId; } } if (destAddress.IsOutOfServe == true || sourceAddress.IsOutOfServe == true || returnAddress.IsOutOfServe == true) { result.IsOutOfServe = true; result.Message = "Ngoài vùng phục vụ"; } if (sourceAddress.CityId == null && destAddress.CityId == null && returnAddress.CityId == null) { result.Result = Result.Failed; result.Message = "Không tìm thấy tỉnh quận phường"; } return(result); }