예제 #1
0
        private async Task <FileStatus> ProcessNavFileReport(ImportedFile file, Stream stream)
        {
            if (stream == null || stream.Length == 0)
            {
                return(await Task.FromResult(FileStatus.Failed));
            }

            var newTradeNavList = new List <TradeNav>();

            using (var reader = new StreamReader(stream))
            {
                while (!reader.EndOfStream)
                {
                    var row = await reader.ReadLineAsync();

                    if (!row.Trim().StartsWith("<EquitySummaryByReportDateInBase "))
                    {
                        continue;
                    }

                    try
                    {
                        var doc = XDocument.Load(new MemoryStream(Encoding.UTF8.GetBytes(row)));

                        if (!doc.Elements().Any())
                        {
                            continue;
                        }

                        var e = doc.Elements().First();

                        var reportDate = DateHelper.ParseDate(e.Attribute(XName.Get("reportDate"))?.Value);
                        if (reportDate == null)
                        {
                            continue;
                        }

                        var tradeAccId = GetOrCreateTradeAccountId(new TradeAccount
                        {
                            AccountName     = _fileNameMatcher.GetCorrectAccountId(e.Attribute(XName.Get("accountId"))?.Value),
                            AccountAlias    = e.Attribute(XName.Get("acctAlias"))?.Value,
                            MasterAccountId = file.MasterAccountId
                        });

                        var newTradeNav = new TradeNav
                        {
                            TradeAccountId = tradeAccId,
                            ReportDate     = reportDate.Value,
                            Total          = ParseDecimal(e.Attribute(XName.Get("total"))?.Value)
                        };

                        newTradeNavList.Add(newTradeNav);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"Error while parsing TradeNav record. \nRow: {row} \nException: {ex}");
                        loggerException.Error(this.GetErrorLogMessage(ex));
                    }
                }
            }

            {
                var counter = 0;
                foreach (var tradeNav in newTradeNavList)
                {
                    try
                    {
                        _importJobRepository.AddTradeNav(tradeNav);

                        if (counter % 100 == 0)
                        {
                            Console.WriteLine($"Handled {counter} of {newTradeNavList.Count} trade nav records");
                            logger.Log(LogLevel.Info,
                                       $"import$ Handled {counter} of {newTradeNavList.Count} trade nav records");
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"Error while adding TradeNav record to DB. Exception: {ex}");
                        loggerException.Error(this.GetErrorLogMessage(ex));
                    }

                    counter++;
                }
            }

            _importJobRepository.SaveChanges();

            return(await Task.FromResult(FileStatus.Success));
        }
예제 #2
0
        private async Task <FileStatus> ProcessNavFileReport(ImportedFile file, Stream stream)
        {
            if (stream == null || stream.Length == 0)
            {
                return(await Task.FromResult(FileStatus.Failed));
            }

            var newTradeNavList = new List <TradeNav>();

            using (var reader = new StreamReader(stream))
            {
                while (!reader.EndOfStream)
                {
                    var row = await reader.ReadLineAsync();

                    if (!row.Trim().StartsWith("<EquitySummaryByReportDateInBase "))
                    {
                        continue;
                    }

                    try
                    {
                        var doc = XDocument.Load(new MemoryStream(Encoding.UTF8.GetBytes(row)));

                        if (!doc.Elements().Any())
                        {
                            continue;
                        }

                        var e = doc.Elements().First();

                        var reportDate = DateHelper.ParseDate(e.Attribute(XName.Get("reportDate"))?.Value);
                        if (reportDate == null)
                        {
                            continue;
                        }

                        var tradeAccId = GetOrCreateTradeAccountId(new TradeAccount
                        {
                            AccountName =
                                _fileNameMatcher.GetCorrectAccountId(e.Attribute(XName.Get("accountId"))?.Value),
                            AccountAlias    = e.Attribute(XName.Get("acctAlias"))?.Value,
                            MasterAccountId = file.MasterAccountId,
                            ImportedFile    = file
                        });


                        var newTradeNav = new TradeNav
                        {
                            TradeAccountId   = tradeAccId,
                            ReportDate       = reportDate.Value,
                            Total            = ParseDecimal(e.Attribute(XName.Get("total"))?.Value),
                            Cash             = ParseDecimal(e.Attribute(XName.Get("cash"))?.Value),
                            Stock            = ParseDecimal(e.Attribute(XName.Get("stock"))?.Value),
                            Options          = ParseDecimal(e.Attribute(XName.Get("options"))?.Value),
                            Commodities      = ParseDecimal(e.Attribute(XName.Get("commodities"))?.Value),
                            InterestAccruals = ParseDecimal(e.Attribute(XName.Get("interestAccruals"))?.Value),

                            TotalLong            = ParseDecimal(e.Attribute(XName.Get("totalLong"))?.Value),
                            CashLong             = ParseDecimal(e.Attribute(XName.Get("cashLong"))?.Value),
                            StockLong            = ParseDecimal(e.Attribute(XName.Get("stockLong"))?.Value),
                            OptionsLong          = ParseDecimal(e.Attribute(XName.Get("optionsLong"))?.Value),
                            CommoditiesLong      = ParseDecimal(e.Attribute(XName.Get("commoditiesLong"))?.Value),
                            InterestAccrualsLong = ParseDecimal(e.Attribute(XName.Get("interestAccrualsLong"))?.Value),

                            TotalShort            = ParseDecimal(e.Attribute(XName.Get("totalShort"))?.Value),
                            CashShort             = ParseDecimal(e.Attribute(XName.Get("cashShort"))?.Value),
                            StockShort            = ParseDecimal(e.Attribute(XName.Get("stockShort"))?.Value),
                            OptionsShort          = ParseDecimal(e.Attribute(XName.Get("optionsShort"))?.Value),
                            CommoditiesShort      = ParseDecimal(e.Attribute(XName.Get("commoditiesShort"))?.Value),
                            InterestAccrualsShort = ParseDecimal(e.Attribute(XName.Get("interestAccrualsShort"))?.Value),

                            ImportedFile = file
                        };
                        newTradeNavList.Add(newTradeNav);
                    }
                    catch (Exception ex)
                    {
                        GlobalLogger.LogError($"Error while parsing TradeNav record. \nRow: {row}", ex, GetType().Name,
                                              true);
                    }
                }
            }

            try
            {
                _importJobRepository.AddRangeTradeNav(newTradeNavList);
                _importJobRepository.SaveChanges();
            }
            catch (Exception ex)
            {
                GlobalLogger.LogError($"Error while adding TradeNav records to DB.", ex, GetType().Name, true);
                return(await Task.FromResult(FileStatus.Failed));
            }

            return(await Task.FromResult(FileStatus.Success));
        }
예제 #3
0
 public void AddTradeNav(TradeNav nav)
 {
     _dbContext.TradeNavs.Add(nav);
 }