示例#1
0
        public async Task Handle(EodProcessFinishedEvent e, ICommandSender sender)
        {
            var productsResult = await _productsRepository.GetAllAsync(null, null, isStarted : false);

            if (productsResult.IsSuccess && productsResult.Value != null && productsResult.Value.Any())
            {
                var products    = productsResult.Value;
                var markets     = products.Select(x => x.Market).Distinct().ToArray();
                var marketInfos = await _marketDayOffService.GetMarketsInfo(markets, null);

                var productsToStart = productsResult.Value
                                      .Where(x => x.StartDate < marketInfos[x.Market].NextTradingDayStart.Date.AddDays(1))
                                      .ToList();

                _log.WriteInfo(nameof(StartProductsSaga), nameof(Handle),
                               $"Found {productsToStart.Count} products that need to be started. Ids are: {string.Concat(',', productsToStart.Select(x => x.ProductId))}"
                               );

                foreach (var product in productsToStart)
                {
                    sender.SendCommand(new StartProductCommand()
                    {
                        ProductId   = product.ProductId,
                        OperationId = e.OperationId,
                    }, _contextNames.AssetService);
                }
            }
        }
        public async Task <Dictionary <string, TradingDayInfoContract> > GetMarketsInfo([FromBody] string[] marketIds = null,
                                                                                        [FromQuery] DateTime?date     = null)
        {
            var allMarkets = (await _marketSettingsService.GetAllMarketSettingsAsync()).Select(x => x.Id).ToHashSet();

            allMarkets.Add(_platformSettings.PlatformMarketId);
            allMarkets.Add(AssetPairConstants.FxMarketId);
            if (marketIds == null || !marketIds.Any())
            {
                marketIds = allMarkets.ToArray();
            }
            else
            {
                foreach (var marketId in marketIds)
                {
                    if (allMarkets.Contains(marketId))
                    {
                        continue;
                    }

                    throw new ArgumentException($"Market {marketId} does not exist", nameof(marketIds));
                }
            }

            var info = await _marketDayOffService.GetMarketsInfo(marketIds, date);

            return(info.ToDictionary(k => k.Key, v => new TradingDayInfoContract()
            {
                IsTradingEnabled = v.Value.IsTradingEnabled,
                LastTradingDay = v.Value.LastTradingDay,
                NextTradingDayStart = v.Value.NextTradingDayStart,
                IsBusinessDay = v.Value.IsBusinessDay
            }));
        }