Пример #1
0
        public Stock GetStock(Guid productId)
        {
            var stockSpecification = StockExistSpecification.Create(productId);
            var stock = _stockRepository.Find(stockSpecification).FirstOrDefault();

            return(stock);
        }
Пример #2
0
        /// <summary>
        /// 根据部门ID得到进出库信息
        /// </summary>
        public dynamic Load(string username, int orgId, int pageindex, int pagesize)
        {
            _authoriseService.GetUserAccessed(username);
            if (_authoriseService.Orgs.Count == 0) //用户没有任何可见机构
            {
                return(new
                {
                    total = 0,
                    pageCurrent = pageindex
                });
            }

            var orgIds = _authoriseService.Orgs.Select(u => u.Id).ToArray(); //用户可访问的机构ID

            var orgs = _orgRepository.GetSubWithOwn(orgId)                   //点击的节点与用户可访问的机构合并
                       .Where(u => orgIds.Contains(u.Id))
                       .Select(u => u.Id).ToArray();

            var keys = _authoriseService.Resources.Select(r => r.Key);    //用户可访问的资源的KEY列表

            //由于库存Stock表开始没有设计资源有关的字段,暂时用User字段代替
            Expression <Func <Stock, bool> > exp = u => orgs.Contains(u.OrgId) && (u.User == "" || keys.Contains(u.User));
            var stocks = _repository.Find(pageindex, pagesize, "", exp);
            int total  = _repository.GetCount(exp);


            return(new
            {
                total = total,
                list = stocks,
                pageCurrent = pageindex
            });
        }
Пример #3
0
        /// <summary>
        /// 根据部门ID得到进出库信息
        /// </summary>
        public dynamic Load(string username, Guid orgId, int pageindex, int pagesize)
        {
            var service = _factory.Create(username);

            if (service.Orgs.Count == 0) //用户没有任何可见机构
            {
                return(new
                {
                    total = 0,
                    records = 0,
                    page = pageindex
                });
            }

            var orgIds = service.Orgs.Select(u => u.Id).ToArray(); //用户可访问的机构ID

            var orgs = _orgRepository.GetSubOrgs(orgId)            //点击的节点与用户可访问的机构合并
                       .Where(u => orgIds.Contains(u.Id))
                       .Select(u => u.Id).ToArray();

            var keys = service.Resources.Select(r => r.Key);    //用户可访问的资源的KEY列表

            Expression <Func <Stock, bool> > exp = u => u.OrgId != null && orgs.Contains(u.OrgId.Value) && (u.Viewable == "" || keys.Contains(u.Viewable));
            var stocks = _repository.Find(pageindex, pagesize, "", exp);
            int total  = _repository.GetCount(exp);


            return(new
            {
                records = total,
                total = (int)Math.Ceiling((double)total / pagesize),
                rows = stocks,
                page = pageindex
            });
        }
Пример #4
0
        public void ImportarHistorico(DateTime data)
        {
            var dividendsTask = _NasdaqAPIExternal.GetDividends(data);

            Task.WaitAll(dividendsTask);

            var dividendsResult = dividendsTask.Result;
            var storedSymbols   = _stockRepository.ListAllSymbols();

            if (dividendsResult.Status.RCode == 200 && dividendsResult.Data.Calendar.Rows?.Count > 0)
            {
                var stocksToImport = new List <string>();

                Parallel.ForEach(dividendsResult.Data.Calendar.Rows, (historico) =>
                {
                    var existInDatabase = false;

                    lock (storedSymbols)
                    {
                        existInDatabase = storedSymbols.Any(x => x == historico.Symbol);
                    }

                    if (existInDatabase)
                    {
                        if (!historico.PaymentDate.Equals("N/A"))
                        {
                            var paymentDate = Helper.ParseNasdaqDate(historico.PaymentDate);
                            var value       = historico.DividendRate;

                            var stock = _stockRepository.Find(historico.Symbol);

                            if (!stock.Dividends.Historico.Any(x => x.Date == paymentDate))
                            {
                                stock.Dividends.Historico.Add(new StockDataValueEntity(value, paymentDate));
                                stock.Dividends.CalculateAverage();

                                _stockRepository.Save(stock);
                            }
                        }
                    }
                    else
                    {
                        lock (stocksToImport)
                        {
                            stocksToImport.Add(historico.Symbol);
                        }
                    }
                });

                ImportStocks(stocksToImport);
            }
        }
        /// <summary>
        /// 根据部门ID得到进出库信息
        /// </summary>
        public dynamic Load(int orgId, int pageindex, int pagesize)
        {
            IEnumerable <Stock> Stocks;
            var user      = SessionHelper.GetSessionUser <LoginUserVM>();
            var loginOrgs = user.AccessedOrgs.Select(u => u.Id).ToArray();

            int total;

            if (orgId == 0)
            {
                if (loginOrgs.Length == 0)  //改用户没有任何可见机构
                {
                    Stocks = _repository.Find(pageindex, pagesize, "", u => u.User == user.User.Account);
                    total  = _repository.GetCount(u => u.User == user.User.Account);
                }
                else
                {
                    Stocks = _repository.LoadInOrgs(pageindex, pagesize, loginOrgs);
                    total  = _repository.GetStockCntInOrgs(loginOrgs);
                }
            }
            else  //加载选择的机构及用户可访问的所有子机构
            {
                var        orgs   = _orgRepository.GetSubOrgs(orgId).Where(u => loginOrgs.Contains(u.Id));
                List <int> orgIds = orgs.Select(u => u.Id).ToList();
                orgIds.Add(orgId);
                Stocks = _repository.LoadInOrgs(pageindex, pagesize, orgIds.ToArray());
                total  = _repository.GetStockCntInOrgs(orgIds.ToArray());
            }

            return(new
            {
                total = total,
                list = Stocks,
                pageCurrent = pageindex
            });
        }
Пример #6
0
        public async Task <Result> AddAsync(Dtos.ProductAddDto productDto)
        {
            var result = await Task.Run(() =>
            {
                var result = new Result();

                // add product
                var new_product        = productDto.CreateProduct();
                var new_stock          = productDto.CreateStock(new_product.Id);
                var exist_Product_Spec = new ProductSameExistSpecification(new_product);

                // is specification satisfied?
                var isStaisfy = exist_Product_Spec.IsSatisfiedBy(new_product);
                if (isStaisfy)
                {
                    var exist_product = _productRepository.Find(exist_Product_Spec).FirstOrDefault();
                    if (exist_product == null)
                    {
                        _productRepository.Add(new_product);
                        _productRepository.Complete();

                        var add_product_event = AbstractDomainEvent <ProductAddDto> .Create(_serviceProvider);
                        add_product_event.Raise(new_product);
                    }
                    else
                    {
                        result.IsError   = true;
                        result.Message   = "Product exist already";
                        result.StatuCode = 400;
                    }
                }

                if (!result.IsError)
                {
                    // add stock
                    var stock_Spec  = new StockExistSpecification(new_stock);
                    var exist_Stock = _stockRepository.Find(stock_Spec).FirstOrDefault();

                    // always statify ATM
                    var isSatisfy = stock_Spec.IsSatisfiedBy(new_stock);
                    if (isSatisfy)
                    {
                        if (exist_Stock == null)
                        {
                            _stockRepository.Add(new_stock);
                            _stockRepository.Complete();

                            var add_stock_event = AbstractDomainEvent <StockAddDto> .Create(_serviceProvider);
                            add_stock_event.Raise(new_stock);
                        }
                        else
                        {
                            result.IsError   = true;
                            result.Message   = "Stock exist already";
                            result.StatuCode = 400;
                            return(result);
                        }
                    }
                }

                return(result);
            });

            return(result);
        }