/// <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); }
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(); } }
/// <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(); } }