private void UpdateData() { try { Dictionary <long, Position> oldPositions = PositionsHelper.GetLastLoadPositions() .ToDictionary(el => el.Auc); IAucJsonFile file = GetAucJsonFile(); List <Position> newPositions = file.AucPositions.ToList(); List <Position> oldHardPositions = new List <Position>(); List <Position> newHardPositions = new List <Position>(); List <Position> toUpdatePositions = new List <Position>(); foreach (Position newPos in newPositions) { Position oldPos = null; // Если не получилось найти, значит лот новый (раньше такого лота не было, позможно перевыставили). if (!oldPositions.TryGetValue(newPos.Auc, out oldPos)) { newHardPositions.Add(newPos); } } // Обновляем старые лоты. AucTraderDbContextHelper.SavePositionsAsPackages(newHardPositions); } catch (Exception) { } }
public void ParseAucJsonFileTest() { // Arange IAucJsonFile jsonFile = null; ResponseParser parser = new ResponseParser(); // Act jsonFile = parser.ParseAucJsonFile(aucJsonFile); // Assert Assert.IsNotNull(jsonFile); Assert.AreEqual("Deathguard", jsonFile.AucRealms[0].Name, "Неверное название реалма"); Assert.AreEqual("deathguard", jsonFile.AucRealms[0].Slug, "Неверный slug"); Assert.AreNotEqual(jsonFile.AucPositions.Count(), String.Format("ParseAucResponseTest. Прочитали Files {0}, а должно быть {1}", jsonFile.AucPositions.Count(), 1)); Assert.AreEqual(1525884116, jsonFile.AucPositions[0].Auc, "Неверный Auc"); Assert.AreEqual(110640, jsonFile.AucPositions[0].Item); Assert.AreEqual("Тест", jsonFile.AucPositions[0].Owner); Assert.AreEqual("Тест", jsonFile.AucPositions[0].OwnerRealm); Assert.AreEqual(1000000, jsonFile.AucPositions[0].Bid); Assert.AreEqual(1000000, jsonFile.AucPositions[0].BuyOut); Assert.AreEqual(1, jsonFile.AucPositions[0].Quantity); //Assert.AreEqual("LONG", jsonFile.AucPositions[0].TimeLeft); Assert.AreEqual(0, jsonFile.AucPositions[0].Rand); Assert.AreEqual(0, jsonFile.AucPositions[0].Seed); Assert.AreEqual(0, jsonFile.AucPositions[0].Context); }
private void UpdateData2() { try { Dictionary <long, Position> oldPositions = PositionsHelper.GetLastLoadPositions2() .ToDictionary(el => el.Auc); IAucJsonFile file = GetAucJsonFile(); List <Position> newPositions = file.AucPositions.ToList(); Dictionary <long, Position> toUpdatePositions = new Dictionary <long, Position>(); List <Position> newHardPositions = new List <Position>(); List <Position> oldHardPositions = new List <Position>(); DateTime withdrwanDateTime = newPositions.First().LoadDateTime; foreach (Position newPos in newPositions) { Position oldPos = null; // Если не получилось найти, значит лот новый (раньше такого лота не было, позможно перевыставили). if (!oldPositions.TryGetValue(newPos.Auc, out oldPos)) { // Не нашли старой позиции, значит новая, может быть перевыставили и пох, пока что. newHardPositions.Add(newPos); continue; } // Нашли старую идентичную позицию, обновим ее новыми даннымы. if (oldPos != null) { newPos.Id = oldPos.Id; toUpdatePositions.Add(newPos.Auc, newPos); } } foreach (var oldPos in oldPositions.Values) { Position pos; if (!toUpdatePositions.TryGetValue(oldPos.Auc, out pos)) { // Не смогли найти, значит лот выбыл. oldPos.WithdrawnDateTime = withdrwanDateTime; oldHardPositions.Add(oldPos); } } // Закрываем старые лоты. AucTraderDbContextHelper.SavePositionsAsPackages(oldHardPositions); // Обновляем старые данные. AucTraderDbContextHelper.SavePositionsAsPackages(toUpdatePositions.Values.ToList()); // Обновляем старые лоты. AucTraderDbContextHelper.SavePositionsAsPackages(newHardPositions); } catch (Exception e) { AppLogHelper.TraceError("", e); } }
private IAucJsonFile GetAucJsonFile() { AucDataLoader loader = new AucDataLoader(); DateTime lastModifyDate; IAucJsonFile file = loader.GetAucJsonFile(out lastModifyDate); foreach (var position in file.AucPositions) { position.LoadDateTime = lastModifyDate; } return(file); }
public IAucJsonFile ParseAucJsonFile(string responseStr) { IAucJsonFile response = null; if (String.IsNullOrEmpty(responseStr)) { return(null); } try { DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(AucJsonFile)); response = (AucJsonFile)json.ReadObject(new System.IO.MemoryStream(Encoding.UTF8.GetBytes(responseStr))); } catch (Exception e) { throw new ApplicationException("Не удалось прочитать ответ с сервера API.", e); } return(response); }
public IAucJsonFile GetAucJsonFile(out DateTime lastModifyDate) { try { IAucJsonFile response = null; IAucResponse aucResponse = GetAucResponse(); DateTime baseDateTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); lastModifyDate = baseDateTime.AddMilliseconds(aucResponse.Files.First().LastModified).ToLocalTime(); IWebApiClient webApiClient = new WebApiClient(Resources.Locale, Resources.ApiKey); string file = webApiClient.GetAucFile(aucResponse.Files[0].Url); IResponseParser parser = new ResponseParser(); response = parser.ParseAucJsonFile(file); return(response); } catch (Exception e) { throw; } }