public Stock GetStock(Guid productId) { var stockSpecification = StockExistSpecification.Create(productId); var stock = _stockRepository.Find(stockSpecification).FirstOrDefault(); return(stock); }
/// <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 }); }
/// <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 }); }
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 }); }
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); }