示例#1
0
        public ActionResult GenerateStockReportsModal()
        {
            GenerateStockReportsInput model = new GenerateStockReportsInput();

            model.StartDate = DateTime.Now.AddDays(-1);
            model.EndDate   = model.StartDate.AddMonths(2);
            model.Lookback  = 5;

            return(PartialView("Modals/_GenerateStockReportsModal", model));
        }
        public async Task GenerateReports(GenerateStockReportsInput input)
        {
            try
            {
                //this._sqlExecuter.Execute("DELETE FROM [GuerillaTrader].[dbo].[StockReports]");

                List <Stock> stocks = new List <Stock>();

                using (var unitOfWork = this.UnitOfWorkManager.Begin())
                {
                    stocks = this._repository.GetAllIncluding(x => x.StockReports.Select(y => y.StockBars)).ToList();
                    unitOfWork.Complete();
                }

                int pageSize  = 50;
                int pageCount = (int)Math.Ceiling(((Double)stocks.Count / (Double)pageSize));

                for (int i = 0; i < pageCount; i++)
                {
                    this._consoleHubProxy.WriteLine(ConsoleWriteLineInput.Create($"Page {i + 1} of {pageCount}..."));

                    using (var unitOfWork = this.UnitOfWorkManager.Begin())
                    {
                        List <StockDto> dtos = (await Task.WhenAll(stocks.Skip(i * pageSize).Take(pageSize).Select(x => ReportWrapper(x, input.StartDate, input.Period, input.Lookback)).ToArray())).ToList();
                        foreach (StockDto dto in dtos)
                        {
                            dto.SetStats(input.Period);
                            Save(dto);
                        }
                        unitOfWork.Complete();
                    }

                    this._consoleHubProxy.WriteLine(ConsoleWriteLineInput.Create($"Page {i + 1} of {pageCount} finished."));
                }
            }
            catch (Exception ex)
            {
                this._consoleHubProxy.WriteLine(ConsoleWriteLineInput.Create($"Exception: {ex.Message} {Environment.NewLine} Stacktrace: {ex.StackTrace}"));
            }
        }