public async Task AddOrUpdateItem (ChartCacheItem item) { var db = GetAsyncConnection (); var existItem =await db.FindAsync<ChartCacheItem> (m => item.QueryString== m.QueryString).ConfigureAwait (false); if (existItem == null) { await db.InsertAsync (item).ConfigureAwait (false); } else { existItem.Created = DateTime.UtcNow; existItem.JsonData = item.JsonData; existItem.QueryString = item.QueryString; await db.UpdateAsync (existItem).ConfigureAwait (false); } }
public async Task LoadData (string itemCode, DateTime date, string itemName) { _firstSeries.ItemsSource = null; _secondSeries.ItemsSource = null; _thirdSeries.ItemsSource = null; _maxSeries.ItemsSource = null; _lastItemCode = itemCode; _lastDate = date; _lastItemName = itemName; _chart.Title.Text = itemName; var queryString = WebAccessTestDataHelper.GetChartParameterString (date, itemCode); var shortQueryString = WebAccessTestDataHelper.GetChartShortParameterString (date, itemCode); string jsonString = ""; ChartCacheItem cacheItem = null; if (CrossConnectivity.Current.IsConnected) { jsonString = await WebAccessTestDataHelper.GetChartData (queryString); if (!string.IsNullOrEmpty (jsonString)) { cacheItem = new ChartCacheItem () { Created = DateTime.UtcNow, JsonData = jsonString, QueryString = shortQueryString }; await _repository.AddOrUpdateItem (cacheItem); } } else { cacheItem = await _repository.GetChartCacheItemByQueryString (shortQueryString); if (cacheItem != null) { jsonString = cacheItem.JsonData; await App.ShowNotification ("Отсутствует интернет соединение", "Данные получены из кеша"); } } if (jsonString != null) { var data = JsonConvert.DeserializeObject<ChartSeriesModel[]> (jsonString); if (data != null && data.Any ()) { var daysCount = data.First ().data.Count; var minimumValues = new List<double> (daysCount); var maximumValues = new List<double> (daysCount); var itemsForFakeSeries = new List<ChartDataPoint> (daysCount); for (int i = 0; i < data.Count (); i++) { var dataSeries = data.ElementAt (i); var tempItems = new List<ChartDataPoint> (); if (dataSeries.data.Any ()) { foreach (var d in dataSeries.data) { var dataPoint = new ChartDataPoint () { Category = ((DateTime)d [0]).Day.ToString (), Value = double.Parse (d [1].ToString ()) }; tempItems.Add (dataPoint); var existPoint = itemsForFakeSeries.FirstOrDefault (x => x.Category == dataPoint.Category); if (existPoint == null) { itemsForFakeSeries.Add (new ChartDataPoint () { Category = dataPoint.Category }); } } minimumValues.Add (tempItems.Min (x => x.Value)); maximumValues.Add (tempItems.Max (x => x.Value)); } var dataSeriesColor = Color.FromHex (dataSeries.color); switch (i) { case 0: MessagingCenter.Send (this, MessagingCenterKeys.UpdateSeriesColorKey, new ChartSeriesColorEventArgs () { SeriesNumber = 0, Color = dataSeriesColor }); _firstSeries.Color = dataSeriesColor; _firstSeries.ItemsSource = tempItems; break; case 1: MessagingCenter.Send (this, MessagingCenterKeys.UpdateSeriesColorKey, new ChartSeriesColorEventArgs () { SeriesNumber = 1, Color = dataSeriesColor }); _secondSeries.Color = dataSeriesColor; _secondSeries.ItemsSource = tempItems; break; case 2: MessagingCenter.Send (this, MessagingCenterKeys.UpdateSeriesColorKey, new ChartSeriesColorEventArgs () { SeriesNumber = 2, Color = dataSeriesColor }); _thirdSeries.Color = dataSeriesColor; _thirdSeries.ItemsSource = tempItems; break; } } if (minimumValues.Any ()) { var minValue = minimumValues.Min () - 5; _secondaryAxis.Minimum = Math.Min (0, minValue); } if (maximumValues.Any ()) { var maxValue = maximumValues.Max () + 5; _secondaryAxis.Maximum = maxValue; foreach (var item in itemsForFakeSeries) { item.Value = maxValue; } _maxSeries.ItemsSource = itemsForFakeSeries; } } } }