Пример #1
0
        private void BindStockPosition(string dealerCode)
        {
            this.gridControl1.DataSource = null;

            var records = _tradeRecordService.GetDailyRecordsBySearchCondition(beneficiary: dealerCode, tradeDateFrom: _initDate);

            if (!records.Any())
            {
                return;
            }

            IList <StockPositionModel> userStockPositionInfos = new List <StockPositionModel>();

            var stockFullCodes = records.Select(x => x.StockCode).Distinct().ToArray();

            var today = DateTime.Now.Date;

            var currentClosePrices = this._tkLineService.GetStockClosePrices(today, stockFullCodes);

            var recordsByAccount = records.GroupBy(x => x.AccountId);

            var accountIds   = records.Select(x => x.AccountId).Distinct().ToArray();
            var accountInfos = _accountService.GetAccountInfos(accountIds: accountIds);

            foreach (var accountGroup in recordsByAccount)
            {
                var currentAccount = accountInfos.SingleOrDefault(x => x.Id == accountGroup.Key);

                if (currentAccount == null)
                {
                    continue;
                }

                var recordsByStock = accountGroup.GroupBy(x => x.StockCode);
                foreach (var stockGroup in recordsByStock)
                {
                    var holdingVolume = stockGroup.Sum(x => x.DealVolume);

                    if (holdingVolume == 0)
                    {
                        continue;
                    }

                    decimal closePrice = (currentClosePrices.SingleOrDefault(x => x.StockCode.Trim() == stockGroup.Key) ?? new TKLineToday()).Close;

                    decimal positionValue = holdingVolume * closePrice;

                    var userPositionModel = new StockPositionModel
                    {
                        AccountId           = currentAccount.Id,
                        AccountName         = currentAccount.Name,
                        SecurityCompanyName = currentAccount.SecurityCompanyName,
                        AttributeName       = currentAccount.AttributeName,
                        CurrentPrice        = closePrice,
                        DealerCode          = dealerCode,
                        DealerName          = this.luDealer.Text.Trim(),
                        PositionValue       = positionValue,
                        StockFullCode       = stockGroup.Key,
                        StockHoldingVolume  = holdingVolume,
                        StockName           = stockGroup.First().StockName,
                    };

                    userStockPositionInfos.Add(userPositionModel);
                }
            }

            userStockPositionInfos = userStockPositionInfos.OrderBy(x => x.AccountName).ThenBy(x => x.StockFullCode).ToList();

            this.gridControl1.DataSource = userStockPositionInfos;
        }