public void Enqueue(StoneDelegateSellOrderInfo sellOrder) { lock (_lockList) { ListOrders.Add(sellOrder); } }
public StoneDelegateSellOrderInfo DeleteOrder(string orderNumber) { StoneDelegateSellOrderInfo sellOrder = null; lock (_lockList) { if (ListOrders.Count > 0) { int index = -1; for (int i = 0; i < ListOrders.Count; i++) { if (ListOrders[i].OrderNumber == orderNumber) { index = i; break; } } if (index >= 0) { sellOrder = ListOrders[index]; ListOrders.RemoveAt(index); } } } return(sellOrder); }
private void InsertToSellQueue(StoneDelegateSellOrderInfo item, CustomerMySqlTransaction myTrans) { //需要分别处理Waiting和Splited两种情况 if (item.SellState != StoneDelegateSellState.Waiting && item.SellState != StoneDelegateSellState.Splited) { return; } int index = this._todayTradeInfo.InsertSellUnit(item.SellUnit); ListStoneDelegateSellOrderInfoCollection queueSell = null; if (_dicWaitingSellInfos.ContainsKey(item.SellUnit.Price)) { queueSell = _dicWaitingSellInfos[item.SellUnit.Price]; } else { queueSell = new ListStoneDelegateSellOrderInfoCollection(); _dicWaitingSellInfos[item.SellUnit.Price] = queueSell; } queueSell.Enqueue(item); if (myTrans != null) { DBProvider.StoneStackDBProvider.SaveWaitingStoneDelegateSellOrderInfo(item, myTrans); } }
/// <summary> /// /// </summary> /// <param name="sellOrder"></param> /// <param name="myTrans"></param> /// <returns></returns> public bool CancelSellStoneOrder(StoneDelegateSellOrderInfo sellOrder, CustomerMySqlTransaction myTrans) { MySqlCommand mycmd = null; try { mycmd = myTrans.CreateCommand(); //string cmdTextA = "update notfinishedstonedelegatesellorderinfo set `SellState`=@SellState,`FinishedTime`=@FinishedTime where `OrderNumber` = @OrderNumber"; //mycmd.CommandText = cmdTextA; //mycmd.Parameters.AddWithValue("@SellState", (int)sellOrder.SellState); //mycmd.Parameters.AddWithValue("@FinishedTime", sellOrder.FinishedTime.ToDateTime()); //mycmd.Parameters.AddWithValue("@OrderNumber", sellOrder.OrderNumber); //mycmd.ExecuteNonQuery(); //return true; string cmdTextA = "insert into stonedelegatesellordercanceledinfo " + "(`OrderNumber`, `UserID`, `Price`, `TradeStoneHandCount`, `FinishedStoneTradeHandCount`, `SellState`, `DelegateTime`, `IsSubOrder`, `ParentOrderNumber`, `FinishedTime` ) " + " values " + "(@OrderNumber, @UserID, @Price, @TradeStoneHandCount, @FinishedStoneTradeHandCount, @SellState, @DelegateTime, @IsSubOrder, @ParentOrderNumber, @FinishedTime); "; string cmdTextB = "delete from notfinishedstonedelegatesellorderinfo where `OrderNumber` = @OrderNumber ;"; mycmd.CommandText = cmdTextA + cmdTextB; mycmd.Parameters.AddWithValue("@OrderNumber", sellOrder.OrderNumber); mycmd.Parameters.AddWithValue("@UserID", sellOrder.UserID); mycmd.Parameters.AddWithValue("@Price", sellOrder.SellUnit.Price); mycmd.Parameters.AddWithValue("@TradeStoneHandCount", sellOrder.SellUnit.TradeStoneHandCount); mycmd.Parameters.AddWithValue("@FinishedStoneTradeHandCount", sellOrder.FinishedStoneTradeHandCount); mycmd.Parameters.AddWithValue("@SellState", (int)sellOrder.SellState); mycmd.Parameters.AddWithValue("@DelegateTime", sellOrder.DelegateTime.ToDateTime()); mycmd.Parameters.AddWithValue("@IsSubOrder", sellOrder.IsSubOrder); if (sellOrder.ParentOrderNumber == null) { mycmd.Parameters.AddWithValue("@ParentOrderNumber", DBNull.Value); } else { mycmd.Parameters.AddWithValue("@ParentOrderNumber", sellOrder.ParentOrderNumber); } mycmd.Parameters.AddWithValue("@FinishedTime", sellOrder.FinishedTime); //myconn.Open(); mycmd.ExecuteNonQuery(); return(true); } finally { if (mycmd != null) { mycmd.Dispose(); } } }
public int CancelDelegateSellStone(string token, MetaData.Game.StoneStack.StoneDelegateSellOrderInfo sellOrder) { if (RSAProvider.LoadRSA(token)) { string userName = ""; try { userName = ClientManager.GetClientUserName(token); var playerRunner = PlayerController.Instance.GetRunnable(userName); if (playerRunner == null) { return(OperResult.RESULTCODE_USER_NOT_EXIST); } CustomerMySqlTransaction myTrans = MyDBHelper.Instance.CreateTrans(); try { StoneDelegateSellOrderInfo canceledSellOrder = null; var resultObj = OrderController.Instance.StoneStackController.PlayerCancelSellStone(sellOrder.OrderNumber, sellOrder.SellUnit.Price, myTrans, out canceledSellOrder); if (resultObj.OperResultCode != OperResult.RESULTCODE_TRUE) { return(resultObj.OperResultCode); } if (canceledSellOrder == null) { return(OperResult.RESULTCODE_FALSE); } playerRunner.CancelDelegateSellStoneOrder(canceledSellOrder, myTrans); myTrans.Commit(); LogHelper.Instance.AddInfoLog("玩家[" + userName + "], 撤消矿石委托卖单。Order: " + canceledSellOrder.ToString()); return(OperResult.RESULTCODE_TRUE); } catch (Exception exc) { myTrans.Rollback(); LogHelper.Instance.AddErrorLog("ServiceToClient.CancelDelegateSellStone Exception userName: "******"玩家[" + userName + "] CancelDelegateSellStone Exception", exc); return(OperResult.RESULTCODE_EXCEPTION); } } else { throw new Exception(); } }
public void AsyncCancelDelegateSellStoneOrder(StoneDelegateSellOrderInfo sellOrder) { if (GlobalData.Client == null || !GlobalData.Client.IsEnable) { return; } App.BusyToken.ShowBusyWindow("正在提交数据..."); GlobalData.Client.CancelDelegateSellStone(sellOrder, null); }
public StoneDelegateSellOrderInfo Dequeue() { StoneDelegateSellOrderInfo sellOrder = null; lock (_lockList) { if (ListOrders.Count > 0) { sellOrder = ListOrders[0]; ListOrders.RemoveAt(0); } } return(sellOrder); }
private void AddLogNotifySeller(StoneDelegateSellOrderInfo sellOrder) { //PlayerActionController.Instance.AddLog(sellOrder.UserName, MetaData.ActionLog.ActionType.DelegateSellStoneSucceed, sellOrder.FinishedStoneTradeHandCount * GlobalConfig.GameConfig.HandStoneCount); string tokenBuyer = ClientManager.GetToken(sellOrder.UserName); if (!string.IsNullOrEmpty(tokenBuyer)) { if (DelegateStoneOrderTradeSucceedNotifyPlayer != null) { DelegateStoneOrderTradeSucceedNotifyPlayer(tokenBuyer, sellOrder.OrderNumber, AlipayTradeInType.StackStoneSell); LogHelper.Instance.AddInfoLog("委托卖单。订单号: " + sellOrder.OrderNumber + " 矿石交易成功,Order:" + sellOrder.ToString()); } } }
public OperResultObject PlayerDelegateSellStone(StoneDelegateSellOrderInfo sellOrder, CustomerMySqlTransaction myTrans) { OperResultObject result = new OperResultObject(); //只有开市期间才可挂单,间休期间暂时也不可挂单 if (this._todayTradeInfo.MarketState != StackMarketState.Opening) { result.OperResultCode = OperResult.RESULTCODE_STACK_DELEGATEORDER_FAILED_MARKETISCLOSED; return(result); } if (sellOrder.SellUnit.Price < this._todayTradeInfo.DailyInfo.LimitDownPrice || sellOrder.SellUnit.Price > this._todayTradeInfo.DailyInfo.LimitUpPrice) { result.OperResultCode = OperResult.RESULTCODE_STACK_PRICE_OUTOFRANGE; return(result); } InsertToSellQueue(sellOrder, myTrans); result.OperResultCode = OperResult.RESULTCODE_TRUE; return(result); }
/// <summary> /// 保存到未完成表 /// </summary> /// <param name="sellOrder"></param> /// <returns></returns> public bool SaveWaitingStoneDelegateSellOrderInfo(StoneDelegateSellOrderInfo sellOrder) { CustomerMySqlTransaction myTrans = MyDBHelper.Instance.CreateTrans(); try { SaveWaitingStoneDelegateSellOrderInfo(sellOrder, myTrans); myTrans.Commit(); return(true); } catch (Exception exc) { myTrans.Rollback(); throw exc; } finally { if (myTrans != null) { myTrans.Dispose(); } } }
public StoneDelegateSellOrderInfoUIModel(StoneDelegateSellOrderInfo parent) { ParentObject = parent; }
public void CancelDelegateSellStone(StoneDelegateSellOrderInfo sellOrder, object userState) { this._invoker.InvokeUserState <int>(this._context, "CancelDelegateSellStone", this.CancelDelegateSellStoneCompleted, userState, GlobalData.Token, sellOrder); }
/// <summary> /// 返回买单处理结果 /// </summary> /// <param name="sellPrice"></param> /// <param name="queueSellOrders"></param> /// <param name="listTradeSucceedSellOrders"></param> /// <param name="buyOrder"></param> /// <returns></returns> private StackTradeResult TradeSamePriceSellOrder(decimal sellPrice, ListStoneDelegateSellOrderInfoCollection queueSellOrders, List <StoneDelegateSellOrderInfo> listTradeSucceedSellOrders, StackTradeUnit buyUnit, string buyerUserName) { StackTradeResult buyOrderResult = new StackTradeResult(); //取出卖价对应的卖单 StoneDelegateSellOrderInfo sellOrder = queueSellOrders.Dequeue(); if (sellOrder == null) { return(buyOrderResult); } int surplusStoneHandCount = buyUnit.TradeStoneHandCount - sellOrder.SellUnit.TradeStoneHandCount; //买单量大于或等于卖单量 while (surplusStoneHandCount > 0)//继续找其他卖单凑量 { sellOrder.SellState = StoneDelegateSellState.Succeed; sellOrder.FinishedStoneTradeHandCount = sellOrder.SellUnit.TradeStoneHandCount; sellOrder.FinishedTime = new MyDateTime(DateTime.Now); listTradeSucceedSellOrders.Add(sellOrder); var operResult = this._todayTradeInfo.DecreaseSellUnit(sellOrder.SellUnit.Price, sellOrder.SellUnit.TradeStoneHandCount); if (operResult.OperResultCode != OperResult.RESULTCODE_TRUE) { LogHelper.Instance.AddErrorLog("TradeBuy1Orders DecreaseSellUnit Error1. " + operResult.Message, null); } var nextSellOrder = queueSellOrders.Dequeue(); if (nextSellOrder == null) { //说明已经没有当前价格的卖单了。 //买单只消化一部,需要被拆分 buyOrderResult.State = StackTradeState.Splited; buyOrderResult.SucceedStoneHandCount = buyUnit.TradeStoneHandCount - surplusStoneHandCount; return(buyOrderResult); } else { //判断下一卖单 sellOrder = nextSellOrder; surplusStoneHandCount = surplusStoneHandCount - sellOrder.SellUnit.TradeStoneHandCount; } } //卖单量等于买单量 if (surplusStoneHandCount == 0) { sellOrder.SellState = StoneDelegateSellState.Succeed; sellOrder.FinishedStoneTradeHandCount = sellOrder.SellUnit.TradeStoneHandCount; sellOrder.FinishedTime = new MyDateTime(DateTime.Now); listTradeSucceedSellOrders.Add(sellOrder); var operResult = this._todayTradeInfo.DecreaseSellUnit(sellOrder.SellUnit.Price, sellOrder.SellUnit.TradeStoneHandCount); if (operResult.OperResultCode != OperResult.RESULTCODE_TRUE) { LogHelper.Instance.AddErrorLog("TradeBuy1Orders DecreaseSellUnit Error2. " + operResult.Message, null); } } else { //卖单量大于买单量,需要将当前卖单拆分。将已成功的部分拆成一新订单添加到数据库中;将老订单缩减到剩余部分,继续留在市场中。 sellOrder.SellState = StoneDelegateSellState.Splited; sellOrder.FinishedStoneTradeHandCount = sellOrder.SellUnit.TradeStoneHandCount + surplusStoneHandCount; sellOrder.FinishedTime = new MyDateTime(DateTime.Now); listTradeSucceedSellOrders.Add(sellOrder); var operResult = this._todayTradeInfo.DecreaseSellUnit(sellOrder.SellUnit.Price, sellOrder.FinishedStoneTradeHandCount); if (operResult.OperResultCode != OperResult.RESULTCODE_TRUE) { LogHelper.Instance.AddErrorLog("TradeBuy1Orders DecreaseSellUnit Error3. " + operResult.Message, null); } DateTime nowTime = DateTime.Now; //拆分后的订单,再保存到数据库,并添加到集合中。 StoneDelegateSellOrderInfo newSellOrder = new StoneDelegateSellOrderInfo() { OrderNumber = OrderController.Instance.CreateOrderNumber(sellOrder.UserName, nowTime, AlipayTradeInType.StackStoneSell), UserID = sellOrder.UserID, UserName = sellOrder.UserName, SellState = StoneDelegateSellState.Waiting, DelegateTime = new MyDateTime(nowTime), SellUnit = new StackTradeUnit() { Price = sellOrder.SellUnit.Price, TradeStoneHandCount = sellOrder.SellUnit.TradeStoneHandCount - sellOrder.FinishedStoneTradeHandCount }, IsSubOrder = true }; try { DBProvider.StoneStackDBProvider.SaveWaitingStoneDelegateSellOrderInfo(newSellOrder); queueSellOrders.Enqueue(newSellOrder); } catch (Exception exc) { LogHelper.Instance.AddErrorLog("股票操作。TradeSamePriceSellOrder.SaveWaitingStoneDelegateSellOrderInfo 异常。信息为:" + newSellOrder.ToString(), exc); } } //买单已全部被消化 buyOrderResult.State = StackTradeState.Succeed; buyOrderResult.SucceedStoneHandCount = buyUnit.TradeStoneHandCount; return(buyOrderResult); }
public OperResultObject PlayerCancelSellStone(string orderNumber, decimal sellPrice, CustomerMySqlTransaction myTrans, out StoneDelegateSellOrderInfo canceledSellOrder) { canceledSellOrder = null; OperResultObject result = new OperResultObject(); ////开市期间不可撤单 //if (this._todayTradeInfo.MarketState == StackMarketState.Opening) //{ // result.OperResultCode = OperResult.RESULTCODE_STACK_CANCELORDER_FAILED_MARKETISOPENING; // return result; //} canceledSellOrder = this._dicWaitingSellInfos[sellPrice].DeleteOrder(orderNumber); if (canceledSellOrder != null) { result = this._todayTradeInfo.DeleteSellUnit(canceledSellOrder.SellUnit); if (result.OperResultCode != OperResult.RESULTCODE_TRUE) { return(result); } canceledSellOrder.SellState = StoneDelegateSellState.Cancel; canceledSellOrder.FinishedTime = new MyDateTime(DateTime.Now); DBProvider.StoneStackDBProvider.CancelSellStoneOrder(canceledSellOrder, myTrans); result.OperResultCode = OperResult.RESULTCODE_TRUE; } else { result.OperResultCode = OperResult.RESULTCODE_FALSE; } return(result); }
public int DelegateSellStone(string token, int sellStoneHandsCount, decimal price) { if (RSAProvider.LoadRSA(token)) { string userName = ""; try { if (sellStoneHandsCount <= 0) { return(OperResult.RESULTCODE_PARAM_INVALID); } userName = ClientManager.GetClientUserName(token); var playerRunner = PlayerController.Instance.GetRunnable(userName); if (playerRunner == null) { return(OperResult.RESULTCODE_USER_NOT_EXIST); } int sellStoneCount = sellStoneHandsCount * GlobalConfig.GameConfig.HandStoneCount; int feeNeedStoneCount = (int)(sellStoneHandsCount * GlobalConfig.GameConfig.HandStoneCount * (GlobalConfig.GameConfig.ExchangeExpensePercent / 100)); if (playerRunner.SellableStonesCount < sellStoneCount + feeNeedStoneCount) { return(OperResult.RESULTCODE_ORDER_SELLABLE_STONE_LACK); } DateTime timenow = DateTime.Now; StoneDelegateSellOrderInfo sellOrder = new StoneDelegateSellOrderInfo() { UserID = playerRunner.BasePlayer.SimpleInfo.UserID, UserName = playerRunner.BasePlayer.SimpleInfo.UserName, DelegateTime = new MyDateTime(timenow), OrderNumber = OrderController.Instance.CreateOrderNumber(userName, timenow, MetaData.Trade.AlipayTradeInType.StackStoneSell), SellState = StoneDelegateSellState.Waiting, IsSubOrder = false, SellUnit = new StackTradeUnit() { Price = price, TradeStoneHandCount = sellStoneHandsCount } }; CustomerMySqlTransaction myTrans = MyDBHelper.Instance.CreateTrans(); try { var resultObj = OrderController.Instance.StoneStackController.PlayerDelegateSellStone(sellOrder, myTrans); if (resultObj.OperResultCode != OperResult.RESULTCODE_TRUE) { //卖单提交失败,不再进行数据库操作 return(resultObj.OperResultCode); } playerRunner.AddNewSellStonesByDelegate(sellStoneCount, feeNeedStoneCount, myTrans); myTrans.Commit(); //PlayerActionController.Instance.AddLog(userName, MetaData.ActionLog.ActionType.DelegateSellStone, sellStoneHandsCount, ""); LogHelper.Instance.AddInfoLog("玩家[" + userName + "] 挂单委托出售 " + sellStoneHandsCount + " 手矿石,Price:" + price); return(OperResult.RESULTCODE_TRUE); } catch (Exception exc) { myTrans.Rollback(); LogHelper.Instance.AddErrorLog("ServiceToClient.DelegateSellStone Exception userName: "******"玩家[" + userName + "] DelegateSellStone Exception", exc); return(OperResult.RESULTCODE_EXCEPTION); } } else { throw new Exception(); } }