Example #1
0
        /// <summary>
        /// 查询持仓接口
        /// </summary>
        /// <returns></returns>
        public List <ChildStock> QueryStocks(MainAccount account)
        {
            var list   = new List <ChildStock>();
            var result = Core.ServiceManager.QueryStocks(account);

            if (result.Result)
            {
                foreach (var line in result.Data.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries))
                {
                    list.Add(ChildStock.Parse(line));
                }
            }
            return(list);
        }
Example #2
0
        public void UpdateAuthorize(ChildAuthorize model)
        {
            using (var db = GetDbContext())
            {
                var entity = db.ChildAuthorizes.FirstOrDefault(e => e.AuthorizeIndex == model.AuthorizeIndex);
                if (entity == null)
                {
                    return;
                }
                var endStatus = "已成,已撤,部撤,已报";
                //如果状态不变且处于终结状态,则说明是当前状态已处理过的委托
                if (entity.AuthorizeState == model.AuthorizeState && endStatus.Contains(model.AuthorizeState))
                {
                    return;
                }

                var isBuy = entity.TradeFlag == "1";
                var child = db.ChildAccounts.FirstOrDefault(e => e.ChildID == entity.ClientID);
                var stock = db.ChildStocks.FirstOrDefault(e => e.StockCode == model.StockCode && e.ChildID == entity.ClientID);
                //本次成交量变化
                switch (model.AuthorizeState)
                {
                case "已成":
                case "已撤":
                case "部撤":
                    var shouxufei = child.GetShouXuFei(model.StockCode, model.StrikePrice, model.StrikeCount);
                    var guohufei  = child.GetGuoHuFei(model.StockCode, model.StrikePrice, model.StrikeCount);
                    //扣除手续费和过户费
                    child.UseableMoney = child.UseableMoney - shouxufei - guohufei;
                    if (isBuy)
                    {
                        //如果是买入,持仓股票总量增加
                        if (stock != null)
                        {
                            stock.AllCount += model.StrikeCount;
                        }
                        else
                        {
                            //如果持仓不存在该股,则添加新纪录
                            stock = new ChildStock
                            {
                                AllCount     = model.StrikeCount,
                                ChildID      = entity.ClientID,
                                CurrentPrice = model.StrikePrice,
                                LastTime     = DateTime.Now.ToUnixTime(),
                                PrimeCost    = model.StrikePrice,
                                StockCode    = model.StockCode,
                                StockName    = model.StockName,
                                ID           = DateTime.Now.ToString("yyyyMMddHHmmssffff")
                            };
                            db.ChildStocks.Add(stock);
                        }
                    }
                    else
                    {
                        //如果是卖出,扣除印花税,另外余额增加股票的市值
                        child.UseableMoney -= child.GetYinHuaShui(model.StockCode, model.StrikePrice, model.StrikeCount);
                        child.UseableMoney += model.StrikePrice * model.StrikeCount;

                        //更新持仓数量
                        stock.AllCount     -= model.StrikeCount;
                        stock.UseableCount -= model.StrikeCount;
                    }

                    //如果是撤单
                    if (model.AuthorizeState.Contains("撤"))
                    {
                        //更新撤单数量
                        entity.UndoCount = model.AuthorizeCount - model.StrikeCount;
                        if (isBuy)
                        {
                            child.UseableMoney += model.StrikePrice * model.StrikeCount;
                            stock.AllCount     -= model.StrikeCount;
                            stock.UseableCount -= model.StrikeCount;
                        }
                        else
                        {
                            stock.AllCount     += model.StrikeCount;
                            stock.UseableCount += model.StrikeCount;
                        }
                    }
                    //成交时间
                    entity.TradeTime = DateTime.Now.ToUnixTime();

                    break;

                default:
                    break;
                }
                entity.StrikeCount    = model.StrikeCount;
                entity.StrikePrice    = model.StrikePrice;
                entity.AuthorizeState = model.AuthorizeState;
                entity.StockName      = model.StockName;

                db.SaveChanges();
            }
        }
Example #3
0
        /// <summary>
        /// 更新委托的状态
        /// </summary>
        public void UpdateAuthorize(ChildAuthorize model)
        {
            using (var db = GetDbContext())
            {
                var entity = db.ChildAuthorizes.FirstOrDefault(e => e.AuthorizeIndex == model.AuthorizeIndex);
                if (entity == null)
                {
                    return;
                }
                var endStatus = "已成,已撤,部撤,部废,废单";
                //如果状态不变且处于终结状态,则说明是当前状态已处理过的委托
                if (entity.AuthorizeState == model.AuthorizeState && endStatus.Contains(model.AuthorizeState))
                {
                    return;
                }

                var isBuy = entity.TradeFlag == "1";
                var child = db.ChildAccounts.FirstOrDefault(e => e.ChildID == entity.ChildID);
                var stock = db.ChildStocks.FirstOrDefault(e => e.StockCode == model.StockCode && e.ChildID == entity.ChildID);
                //有成交量,先结算成交量
                if ("已成,部撤,部废".Contains(model.AuthorizeState))
                {
                    if (isBuy)
                    {
                        //如果是买入,持仓股票总量增加
                        if (stock != null)
                        {
                            stock.AllCount += model.StrikeCount;
                        }
                        else
                        {
                            //如果持仓不存在该股,则添加新纪录
                            stock = new ChildStock
                            {
                                AllCount     = model.StrikeCount,
                                ChildID      = entity.ChildID,
                                CurrentPrice = model.StrikePrice,
                                LastTime     = DateTime.Now.ToUnixTime(),
                                PrimeCost    = model.StrikePrice,
                                StockCode    = model.StockCode,
                                StockName    = model.StockName,
                                ID           = DateTime.Now.ToString("yyyyMMddHHmmssffff")
                            };
                            db.ChildStocks.Add(stock);
                        }
                    }
                    else
                    {
                        //如果卖出成功,则只需要余额增加股票成交额即可,手续费在发起委托时已扣
                        child.UseableMoney += model.StrikePrice * model.StrikeCount;
                        //更新持仓数量
                        stock.AllCount     -= model.StrikeCount;
                        stock.UseableCount -= model.StrikeCount;
                    }
                }
                //有废单或撤单,撤销相关资产
                if ("废单,已撤,部撤,部废".Contains(model.AuthorizeState))
                {
                    //如果是撤单,更新撤单数量字段
                    if (model.AuthorizeState.Contains("撤"))
                    {
                        entity.UndoCount = model.AuthorizeCount - model.StrikeCount;
                    }
                    //不论买入还是卖出,都事先扣除了手续费,在撤单时要归还撤单数量对应的手续费
                    var undoMoney = model.AuthorizePrice * model.UndoCount +
                                    child.GetGuoHuFei(model.StockCode, model.AuthorizePrice, model.UndoCount) +
                                    child.GetShouXuFei(model.StockCode, model.AuthorizePrice, model.UndoCount);
                    child.UseableMoney += undoMoney;

                    if (isBuy)
                    {
                        //买入并不会更新股票可用余额 所以只需要更新总量
                        stock.AllCount -= model.StrikeCount;
                    }
                    else
                    {
                        //更新持仓数量
                        stock.AllCount     += model.StrikeCount;
                        stock.UseableCount += model.StrikeCount;
                    }
                }

                entity.StrikeCount    = model.StrikeCount;
                entity.StrikePrice    = model.StrikePrice;
                entity.AuthorizeState = model.AuthorizeState;
                entity.StockName      = model.StockName;

                db.SaveChanges();
            }
        }