public async Task <IActionResult> Post() { MicexISSClient micexClient = new MicexISSClient(new CommonLib.WebApiClient()); var apiClient = new CommonLib.WebApiClient(); TinkoffClient tinkoffClient = new TinkoffClient(apiClient); apiClient.addHeader("Authorization", "Bearer t.FwRjwQy5LHo3uXE0iQ6D4VGVFRvccr1_PItEHgLIOt4sc7QkQkBzd_eDACB0TTfnBBOWi_mtg84cPbvKwD4gpQ"); string tinkoff_stocks = await tinkoffClient.GetStocks(); string moex_json = await micexClient.GetSecurityList("shares", "TQBR"); JObject obj = JObject.Parse(tinkoff_stocks); JObject moexObj = JObject.Parse(moex_json); JArray instruments = (JArray)obj["payload"]["instruments"]; JArray moex_data = (JArray)moexObj["securities"]["data"]; IList <string> moex_columns = moexObj["securities"]["columns"].Select(c => (string)c).ToList(); int isin_column = moex_columns.IndexOf("ISIN"); IList <string> moex_isin = moex_data.Select(t => (string)t[isin_column]).ToList(); foreach (var jtoken in instruments) { SecurityRaw raw = jtoken.ToObject <SecurityRaw>(); raw.Board = moex_isin.Contains(raw.isin) ? "TQBR" : "SPBMX"; Security sec = _context.SecuritySet.Include(s => s.Emitent).SingleOrDefault(c => c.ISIN == raw.isin); if (sec != null) { raw.Processed = true; raw.Emitent = sec.Emitent.Code; } ; if (!_context.SecurityRawSet.Any(r => r.isin == raw.isin)) { _context.SecurityRawSet.Add(raw); } } _context.SaveChanges(); return(Ok()); }
public IActionResult Post([FromBody] ImportRequest requestModel) { if (requestModel.Object == "deal") { var dealRaws = _context.DealRawSet.ToList(); var accounts = _context.AccountSet.ToList(); foreach (DealRaw rawItem in dealRaws) { var security = _context.SecuritySet.Single(s => s.Code == rawItem.symbol); Deal deal = new Deal() { Number = rawItem.number, Operation = rawItem.operation == "Купля" ? OrderOperationEnum.Buy : OrderOperationEnum.Sell, securityId = security.Id, accountId = accounts.Single(a => a.Client == rawItem.client).Id, Board = rawItem.board, Date = DateTime.ParseExact($"{rawItem.date} {rawItem.time}", "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture), DeliveryDate = DateTime.ParseExact(rawItem.delivery_date, "dd.MM.yyyy", CultureInfo.InvariantCulture), Count = rawItem.count, Price = rawItem.price, Volume = rawItem.volume, NKD = security.Market == "bonds" ? rawItem.nkd : null }; _context.DealSet.Add(deal); } _context.SaveChanges(); } if (requestModel.Object == "stock") { foreach (string isin in requestModel.ISIN) { Emitent emitent = null; SecurityRaw rawItem = _context.SecurityRawSet.Single(s => s.isin == isin); if (string.IsNullOrEmpty(rawItem.Emitent)) { emitent = new Emitent() { Code = rawItem.ticker, Name = rawItem.name, FinancialPage = rawItem.Board == "SPBMX" ? rawItem.ticker : $"{rawItem.ticker}.ME" }; } else { emitent = _context.EmitentSet.Single(e => e.Code == rawItem.Emitent); } Share stock = new Share() { Emitent = emitent, ISIN = rawItem.isin, Code = rawItem.ticker, Name = rawItem.name, Region = rawItem.Board == "SPBMX" ? "United States" : "Moscow", Currency = rawItem.currency, Market = "shares", Board = rawItem.Board }; Quote quote = new Quote() { Id = Guid.NewGuid(), figi = rawItem.figi, symbol = rawItem.ticker, Board = rawItem.Board }; _context.ShareSet.Add(stock); _context.QuoteSet.Add(quote); rawItem.Processed = true; rawItem.Emitent = emitent.Code; _context.SecurityRawSet.Update(rawItem); _context.SaveChanges(); } } return(Ok()); }