예제 #1
0
        private void CreatePortfolioNavDateSecurityPrices(ISession session, NavDate currentNavDate)
        {
            IList <PortfolioNavDate> portfolioNavDateList = portfolioNavDateRepository.GetPortfolioNavDateListByNavDate(session, currentNavDate);

            foreach (var portfolioNavDate in portfolioNavDateList)
            {
                logger.Log(LogLevel.Info, $"[PortfolioNavDate: PortfolioId {portfolioNavDate.Portfolio.PortfolioId}, NavDate {portfolioNavDate.NavDate.Date}]: Creating PortfolioNavDateSecurityPrices");

                IList <Entities.PortfolioSecurity> portfolioSecurityList = portfolioSecurityRepository.GetPortfolioSecurityList(session, portfolioNavDate.Portfolio);
                logger.Log(LogLevel.Info, $"[PortfolioNavDate: PortfolioId {portfolioNavDate.Portfolio.PortfolioId}, NavDate {portfolioNavDate.NavDate.Date}]: {portfolioSecurityList.Count} PortfolioSecurity Count");

                IList <PortfolioNavDateSecurityPrice> portfolioNavDateSecurityPriceList = portfolioNavDateSecurityPriceRepository.GetPortfolioNavDateSecurityPriceListByPortfolioNavDate(session, portfolioNavDate);

                IDictionary <long, Entities.PortfolioSecurity>    portfolioSecurityDictionary             = portfolioSecurityList.ToDictionary(x => x.PortfolioSecurityId);
                IDictionary <long, PortfolioNavDateSecurityPrice> portfolioNavDateSecurityPriceDictionary = portfolioNavDateSecurityPriceList.ToDictionary(x => x.PortfolioSecurity.PortfolioSecurityId);

                IList <long> missingPortfolioSecurityList = portfolioSecurityDictionary.Keys.Except(portfolioNavDateSecurityPriceDictionary.Keys).ToList();

                logger.Log(LogLevel.Info, $"[PortfolioNavDate: PortfolioId {portfolioNavDate.Portfolio.PortfolioId}, NavDate {portfolioNavDate.NavDate.Date}]: {portfolioNavDateSecurityPriceList.Count}/{portfolioSecurityList.Count} PortfolioSecurityPrices already been created");
                logger.Log(LogLevel.Info, $"[PortfolioNavDate: PortfolioId {portfolioNavDate.Portfolio.PortfolioId}, NavDate {portfolioNavDate.NavDate.Date}]: {missingPortfolioSecurityList.Count} PortfolioSecurityPrices need to be created");

                using (var transaction = session.BeginTransaction())
                {
                    foreach (var portfolioSecurityId in missingPortfolioSecurityList)
                    {
                        Entities.PortfolioSecurity portfolioSecurity = portfolioSecurityDictionary[portfolioSecurityId];

                        PortfolioNavDateSecurityPrice portfolioNavDateSecurityPrice = new PortfolioNavDateSecurityPrice()
                        {
                            PortfolioNavDate  = portfolioNavDate,
                            PortfolioSecurity = portfolioSecurity,
                            PriceStatus       = PriceStatus.ToBeRequested,
                            CreateDate        = DateTime.Now,
                            UpdateDate        = DateTime.Now,
                            Currency          = portfolioSecurity.Security.Currency
                        };

                        portfolioNavDateSecurityPriceRepository.SaveOrUpdate(session, portfolioNavDateSecurityPrice);
                    }

                    transaction.Commit();

                    logger.Log(LogLevel.Info, $"[PortfolioNavDate: PortfolioId {portfolioNavDate.Portfolio.PortfolioId}, NavDate {portfolioNavDate.NavDate.Date}]: {missingPortfolioSecurityList.Count} PortfolioSecurityPrices created");
                }
            }
        }
        public IList <PortfolioNavDateSecurityPrice> GetPortfolioNavDateSecurityPriceByNavDateSymbol(ISession session, DateTime navDate, string symbol)
        {
            PortfolioNavDate pnd = null;

            Entities.PortfolioSecurity ps = null;
            NavDate   nd = null;
            Security  sd = null;
            Portfolio pt = null;

            return(session.QueryOver <PortfolioNavDateSecurityPrice>()
                   .Fetch(SelectMode.ChildFetch, p => p.PortfolioNavDate)
                   .Fetch(SelectMode.ChildFetch, p => p.PortfolioSecurity)
                   .JoinAlias(p => p.PortfolioNavDate, () => pnd).JoinAlias(() => pnd.NavDate, () => nd).JoinAlias(() => pnd.Portfolio, () => pt)
                   .JoinAlias(p => p.PortfolioSecurity, () => ps).JoinAlias(() => ps.Security, () => sd)
                   .Where(() => nd.Date == navDate.Date)
                   .And(() => sd.Symbol == symbol)
                   .List());
        }