Beispiel #1
0
        /// <summary>
        /// 将流水保存到数据库。
        /// </summary>
        /// <param name="flow">要保存的流水。</param>
        /// <param name="updateStock">指示是否更新库存数据。</param>
        /// <returns></returns>
        async Task SaveAsync <TStockKey>(Flow flow, bool updateStock) where TStockKey : StockKeyBase
        {
            if (flow.FlowId != 0)
            {
                throw new InvalidOperationException("不能保存重复的流水。");
            }
            await _session.SaveAsync(flow);

            if (updateStock)
            {
                var   key   = flow.GetStockKey <TStockKey>();
                Stock stock = await _session.Query <Stock>().OfStockKey(key).SingleOrDefaultAsync().ConfigureAwait(false);

                if (stock == null)
                {
                    stock = _stockFactory.CreateStock();
                    stock.SetStockKey(key);
                    stock.OutOrdering = _outOrderingProvider.GetOutOrdering(key);

                    // TODO 暂取记录的创建时间作为库龄基线
                    stock.AgeBaseline = DateTime.Now;
                    stock.Quantity    = (flow.Quantity * (int)flow.Direction);
                    await _session.SaveAsync(stock).ConfigureAwait(false);
                }
                else
                {
                    stock.Quantity += (flow.Quantity * (int)flow.Direction);
                    await _session.UpdateAsync(stock).ConfigureAwait(false);
                }

                flow.Balance = stock.Quantity;
            }
        }
Beispiel #2
0
        public void AddStock(AssetType assetType, decimal price, int quantity)
        {
            Stock stock = _stockFactory.CreateStock(assetType, price, quantity, _stocksCollections.Where(x => x.AssetType == assetType).Count());

            _stocksCollections.Add(stock);
            UpdateStockTotalValueFund();
            CalculateSummaryInfo();
        }
        public void AddStock(StockType stocktype, decimal price, decimal quantity)
        {
            int index;

            if (stocktype == StockType.Bond)
            {
                index = _stockData.Where(s => s.StockType == StockType.Bond).Count() + 1;
            }
            else
            {
                index = _stockData.Where(s => s.StockType == StockType.Equity).Count() + 1;
            }

            var newStock = _factory.CreateStock(stocktype, stocktype.ToString() + index, price, quantity);

            _stockData.Add(newStock);

            foreach (var stock in _stockData)
            {
                stock.AdjustStockWeight(TotalFundMarketValue);
            }

            RefreshTotalProperties();
        }