private void LoadDB() { var allSellOrders = DBProvider.StoneOrderDBProvider.GetSellOrderList("", "", (int)SellOrderState.Wait, null, null, -1, -1); Dictionary <string, PlayerInfo> dicPlayers = new Dictionary <string, PlayerInfo>(); foreach (var item in allSellOrders) { PlayerInfo playerInfo = null; if (dicPlayers.ContainsKey(item.SellerUserName)) { playerInfo = dicPlayers[item.SellerUserName]; } else { playerInfo = DBProvider.UserDBProvider.GetPlayerByUserName(item.SellerUserName); dicPlayers.Add(item.SellerUserName, playerInfo); } playerInfo.FortuneInfo.FreezingStones -= item.SellStonesCount; if (playerInfo.FortuneInfo.FreezingStones < 0) { playerInfo.FortuneInfo.FreezingStones = 0; } playerInfo.FortuneInfo.StockOfStones -= item.SellStonesCount; if (playerInfo.FortuneInfo.StockOfStones < 0) { playerInfo.FortuneInfo.StockOfStones = 0; } var valueDiamond = item.ValueRMB - item.Expense; if (valueDiamond < 100) { valueDiamond = 100; } playerInfo.FortuneInfo.StockOfDiamonds += valueDiamond; } CustomerMySqlTransaction trans = MyDBHelper.Instance.CreateTrans(); try { foreach (var item in dicPlayers.Values) { DBProvider.UserDBProvider.SavePlayerFortuneInfo(item.SimpleInfo.UserID, item.FortuneInfo, trans); } DBProvider.StoneOrderDBProvider.UpdateAllSellOrderState(SellOrderState.Wait, SellOrderState.Finish, trans); trans.Commit(); MessageBox.Show("操作成功"); } catch (Exception exc) { trans.Rollback(); MessageBox.Show(exc.Message); } finally { trans.Dispose(); } }
private void BuyMineByRMB(MinesBuyRecord record, TradeOperResult result) { CustomerMySqlTransaction myTrans = null; try { myTrans = MyDBHelper.Instance.CreateTrans(); int value = PlayerController.Instance.BuyMineByRMB(record, myTrans); result.ResultCode = value; if (value == OperResult.RESULTCODE_TRUE) { record.PayTime = DateTime.Now; DBProvider.MineRecordDBProvider.SaveFinalMineTradeRecord(record, myTrans); PlayerActionController.Instance.AddLog(record.UserName, MetaData.ActionLog.ActionType.BuyMine, (int)record.GainMinesCount, "增加了 " + record.GainStonesReserves.ToString() + " 的矿石储量"); } myTrans.Commit(); } catch (Exception exc) { myTrans.Rollback(); LogHelper.Instance.AddErrorLog("玩家[" + record.UserName + "], 用灵币购买矿山异常", exc); } finally { if (myTrans != null) { myTrans.Dispose(); } } }
private StackTradeResult TradeOneBuyOrder(StoneDelegateBuyOrderInfo buyOrder) { List <StoneDelegateSellOrderInfo> listTradeSucceedSellOrders = new List <StoneDelegateSellOrderInfo>(); StackTradeResult buyOrderResult = TradeSell1Orders(buyOrder, listTradeSucceedSellOrders); if (buyOrderResult.State == StackTradeState.Failed) { return(buyOrderResult); } CustomerMySqlTransaction myTrans = null; try { myTrans = MyDBHelper.Instance.CreateTrans(); foreach (var item in listTradeSucceedSellOrders) { DBProvider.StoneStackDBProvider.SaveFinishedStoneDelegateSellOrderInfo(item); PlayerController.Instance.PayDelegateBuyStonesUpdateSellerInfo(item, myTrans); } int selfSellHandCount = 0; foreach (var item in listTradeSucceedSellOrders) { if (item.UserID == buyOrder.UserID) { selfSellHandCount += item.FinishedStoneTradeHandCount; } } decimal allNeedRMB = (buyOrder.FinishedStoneTradeHandCount - selfSellHandCount) * buyOrder.BuyUnit.Price; buyOrder.AwardGoldCoin = (int)((allNeedRMB * GlobalConfig.GameConfig.StoneBuyerAwardGoldCoinMultiple) * GlobalConfig.GameConfig.RMB_GoldCoin); DBProvider.StoneStackDBProvider.SaveFinishedStoneDelegateBuyOrderInfo(buyOrder); PlayerController.Instance.PayDelegateBuyStonesUpdateBuyerInfo(buyOrder, myTrans); myTrans.Commit(); //计算成交价 this._todayTradeInfo.ComputeTradePrice(buyOrder.BuyUnit.Price, listTradeSucceedSellOrders[0].SellUnit.Price, buyOrder.FinishedStoneTradeHandCount); foreach (var item in listTradeSucceedSellOrders) { AddLogNotifySeller(item); LogHelper.Instance.AddInfoLog("委卖矿石交易成功:" + item.ToString()); } AddLogNotifyBuyer(buyOrder); LogHelper.Instance.AddInfoLog("委买矿石交易成功:" + buyOrder.ToString()); } catch (Exception exc) { LogHelper.Instance.AddErrorLog("ThreadStoneStackTrade.SaveStoneSellOrderHandler Exception", exc); myTrans.Rollback(); } finally { myTrans.Dispose(); } return(buyOrderResult); }
public int CancelDelegateBuyStone(string token, MetaData.Game.StoneStack.StoneDelegateBuyOrderInfo buyOrder) { 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); } StoneDelegateBuyOrderInfo canceledBuyOrder = null; CustomerMySqlTransaction myTrans = MyDBHelper.Instance.CreateTrans(); try { var resultObj = OrderController.Instance.StoneStackController.PlayerCancelBuyStone(buyOrder.OrderNumber, buyOrder.BuyUnit.Price, myTrans, out canceledBuyOrder); if (resultObj.OperResultCode != OperResult.RESULTCODE_TRUE) { return(resultObj.OperResultCode); } if (canceledBuyOrder == null) { return(OperResult.RESULTCODE_FALSE); } playerRunner.CancelDelegateBuyStoneOrder(canceledBuyOrder, myTrans); myTrans.Commit(); LogHelper.Instance.AddInfoLog("玩家[" + userName + "], 撤消矿石委托买单。Order: " + canceledBuyOrder.ToString()); return(OperResult.RESULTCODE_TRUE); } catch (Exception exc) { myTrans.Rollback(); string errorMsg = "ServiceToClient.CancelDelegateBuyStone Exception userName: "******", buyOrder : " + buyOrder.ToString(); LogHelper.Instance.AddErrorLog(errorMsg, exc); return(OperResult.RESULTCODE_FALSE); } finally { myTrans.Dispose(); } } catch (Exception exc) { LogHelper.Instance.AddErrorLog("玩家[" + userName + "] DelegateSellStone Exception", exc); return(OperResult.RESULTCODE_EXCEPTION); } } else { throw new Exception(); } }
public LockSellStonesOrder Lock(string playerUserName) { lock (this._lock) { CustomerMySqlTransaction trans = null; try { if (this._lockOrderObject != null && !CheckOrderLockedTimeOut()) { return(this._lockOrderObject); } if (trans == null) { trans = MyDBHelper.Instance.CreateTrans(); } this._lockOrderObject = new LockSellStonesOrder() { StonesOrder = this._sellOrder, PayUrl = OrderController.Instance.CreateAlipayLink(playerUserName, this.OrderNumber, "迅灵矿石", this.ValueRMB, GlobalConfig.GameConfig.Stones_RMB + "矿石 = 1 灵币 = " + 1 / GlobalConfig.GameConfig.Yuan_RMB + "元人民币"), LockedByUserName = playerUserName, LockedTime = DateTime.Now, OrderLockedTimeSpan = 0 }; this._sellOrder.OrderState = SellOrderState.Lock; DBProvider.StoneOrderDBProvider.LockOrder(this._lockOrderObject, trans); trans.Commit(); return(this._lockOrderObject); } catch (Exception exc) { if (trans != null) { trans.Rollback(); } this._sellOrder.OrderState = SellOrderState.Wait; this._lockOrderObject = null; LogHelper.Instance.AddErrorLog("Lock Order[" + this._sellOrder.OrderNumber + "] by User[" + playerUserName + "] Error", exc); return(null); } finally { if (trans != null) { trans.Dispose(); } } } }
/// <summary> /// RESULTCODE_ORDER_NOT_EXIST; RESULTCODE_ORDER_NOT_BELONE_CURRENT_PLAYER; RESULTCODE_ORDER_BE_LOCKED; RESULTCODE_TRUE; RESULTCODE_FALSE /// </summary> /// <param name="orderNumber"></param> /// <returns></returns> public int CancelSellOrder(string sellUserName, string orderNumber) { lock (this._lockListSellOrders) { StoneOrderRunnable runnable = null; this.dicSellOrders.TryGetValue(orderNumber, out runnable); if (runnable == null) { return(OperResult.RESULTCODE_ORDER_NOT_EXIST); } SellStonesOrder order = runnable.SellOrder; if (order.SellerUserName != sellUserName) { return(OperResult.RESULTCODE_ORDER_NOT_BELONE_CURRENT_PLAYER); } if (order.OrderState != SellOrderState.Wait) { return(OperResult.RESULTCODE_ORDER_BE_LOCKED); } CustomerMySqlTransaction trans = null; try { trans = MyDBHelper.Instance.CreateTrans(); PlayerController.Instance.CancelSellStones(order, trans); DBProvider.StoneOrderDBProvider.CancelSellOrder(order, trans); trans.Commit(); this.dicSellOrders.TryRemove(orderNumber, out runnable); return(OperResult.RESULTCODE_TRUE); } catch (Exception exc) { trans.Rollback(); LogHelper.Instance.AddErrorLog("玩家[" + orderNumber + "]取消矿石订单:" + sellUserName + "异常。", exc); return(OperResult.RESULTCODE_FALSE); } finally { if (trans != null) { trans.Dispose(); } } } }
private TradeOperResult RechargeGoldCoinByRMB(GoldCoinRechargeRecord record) { TradeOperResult result = new TradeOperResult(); CustomerMySqlTransaction myTrans = null; try { myTrans = MyDBHelper.Instance.CreateTrans(); int value = PlayerController.Instance.RechargeGoldCoinByRMB(record.UserName, (int)record.SpendRMB, (int)record.GainGoldCoin, myTrans); result.ResultCode = value; if (value == OperResult.RESULTCODE_TRUE) { record.PayTime = DateTime.Now; DBProvider.GoldCoinRecordDBProvider.SaveFinalGoldCoinRechargeRecord(record, myTrans); } myTrans.Commit(); PlayerActionController.Instance.AddLog(record.UserName, MetaData.ActionLog.ActionType.GoldCoinRecharge, record.GainGoldCoin, "充值了 " + record.GainGoldCoin.ToString() + " 的金币"); return(result); } catch (Exception exc) { myTrans.Rollback(); LogHelper.Instance.AddErrorLog("玩家[" + record.UserName + "] 用灵币购买金币异常", exc); result.ResultCode = OperResult.RESULTCODE_EXCEPTION; return(result); } finally { if (myTrans != null) { myTrans.Dispose(); } } }
/// <summary> /// 如果订单状态为异常时,不取消锁定 /// </summary> /// <returns></returns> public bool ReleaseLock() { lock (this._lock) { if (this._sellOrder.OrderState == SellOrderState.Exception) { return(false); } CustomerMySqlTransaction trans = null; try { trans = MyDBHelper.Instance.CreateTrans(); DBProvider.StoneOrderDBProvider.ReleaseOrderLock(this._sellOrder.OrderNumber, trans); trans.Commit(); this._sellOrder.OrderState = SellOrderState.Wait; this._lockOrderObject = null; return(true); } catch (Exception exc) { if (trans != null) { trans.Rollback(); } LogHelper.Instance.AddErrorLog("ReleaseLock Order[" + this._sellOrder.OrderNumber + "] Error", exc); return(false); } finally { if (trans != null) { trans.Dispose(); } } } }
void FinishRound(object sender, ElapsedEventArgs e) { this._timer.Stop(); try { lock (_lockJoin) { if (this._currentRoundInfo.State == MetaData.Game.RaideroftheLostArk.RaiderRoundState.Finished) { return; } this._currentRoundInfo.State = RaiderRoundState.Finished; if (this.listPlayerBetInfos.Count == 0) { return; } RaiderPlayerBetInfo winnerBetInfo = FindWinner(); var winnerPersonAllBetCount = this.listPlayerBetInfos.Where(b => b.UserID == winnerBetInfo.UserID).Sum(b => b.BetStones); int expense = (int)Math.Ceiling(this._currentRoundInfo.AwardPoolSumStones * GlobalConfig.GameConfig.RaiderExpense); int winnerGainBetCount = this._currentRoundInfo.AwardPoolSumStones - expense; if (winnerGainBetCount < winnerPersonAllBetCount) { winnerGainBetCount = winnerPersonAllBetCount; } this._currentRoundInfo.EndTime = new MyDateTime(DateTime.Now); this._currentRoundInfo.WinnerUserName = winnerBetInfo.UserName; this._currentRoundInfo.WinStones = winnerGainBetCount; bool isOK = false; CustomerMySqlTransaction myTrans = null; try { myTrans = MyDBHelper.Instance.CreateTrans(); DBProvider.GameRaiderofLostArkDBProvider.UpdateRaiderRoundMetaDataInfo(this._currentRoundInfo, myTrans); int result = PlayerController.Instance.WinRaiderGetAward(winnerBetInfo.UserName, winnerGainBetCount, myTrans); if (result != OperResult.RESULTCODE_TRUE) { LogHelper.Instance.AddErrorLog("夺宝奇兵给玩家返奖失败。" + this._currentRoundInfo.ToString(), null); } myTrans.Commit(); isOK = true; } catch (Exception exc) { myTrans.Rollback(); isOK = false; LogHelper.Instance.AddErrorLog("RaiderofLostArk Finish Round SaveTo DB Exception. Round Info: " + this._currentRoundInfo.ToString(), exc); } finally { if (myTrans != null) { myTrans.Dispose(); } } if (isOK) { if (NotifyAllPlayerRaiderWinnerEvent != null) { NotifyAllPlayerRaiderWinnerEvent(this._currentRoundInfo); } //10秒后再开始下一轮。 System.Threading.Thread.Sleep(10 * 1000); CreateNewRound(); } } } catch (Exception exc) { LogHelper.Instance.AddErrorLog("RaiderofLostArk Finish Round Exception. Round Info: " + this._currentRoundInfo.ToString(), exc); } }
public int JoinRaider(string token, int roundID, int betStoneCount) { 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); } int result = OperResult.RESULTCODE_FALSE; CustomerMySqlTransaction myTrans = null; try { myTrans = MyDBHelper.Instance.CreateTrans(); result = playerRunner.JoinRaider(betStoneCount, myTrans); if (result != OperResult.RESULTCODE_TRUE) { return(result); } result = RaidersofLostArkController.Instance.Join(playerRunner.BasePlayer.SimpleInfo.UserID, userName, roundID, betStoneCount); if (result == OperResult.RESULTCODE_TRUE || result == OperResult.RESULTCODE_GAME_RAIDER_WAITINGSECONDPLAYERJOIN_TOSTART) { myTrans.Commit(); } else { myTrans.Rollback(); playerRunner.RefreshFortune(); } } catch (Exception exc) { myTrans.Rollback(); LogHelper.Instance.AddErrorLog("ServiceToClient.JoinRaider DB Transaction Exception. UserName:"******"; RoundID: " + roundID + "; BetStoneCount: " + betStoneCount, exc); return(OperResult.RESULTCODE_EXCEPTION); } finally { if (myTrans != null) { myTrans.Dispose(); } } if (result == OperResult.RESULTCODE_TRUE || result == OperResult.RESULTCODE_GAME_RAIDER_WAITINGSECONDPLAYERJOIN_TOSTART) { //NotifyAllPlayerBetInfo(RaidersofLostArkController.Instance.CurrentRoundInfo); LogHelper.Instance.AddInfoLog("玩家[" + userName + "] 在第" + roundID + "期 夺宝奇兵,下注" + betStoneCount + "矿石"); //PlayerActionController.Instance.AddLog(userName, MetaData.ActionLog.ActionType.GameRaiderJoinBet, roundID, betStoneCount.ToString()); } return(result); } catch (Exception exc) { LogHelper.Instance.AddErrorLog("ServiceToClient.JoinRaider Exception. UserName:"******"; RoundID: " + roundID + "; BetStoneCount: " + betStoneCount, exc); return(OperResult.RESULTCODE_EXCEPTION); } } else { throw new Exception(); } }
public int AlipayCallback(AlipayRechargeRecord alipayRecord) { GoldCoinRechargeRecord rechargeRecord = FindRecordByOrderNumber(alipayRecord.out_trade_no); if (rechargeRecord == null) { rechargeRecord = DBProvider.GoldCoinRecordDBProvider.GetGoldCoinRechargeRecord(alipayRecord.user_name, alipayRecord.out_trade_no); if (rechargeRecord != null) { return(OperResult.RESULTCODE_ORDER_BUY_SUCCEED); } LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 支付宝购买金币回调,找不到订单。支付宝信息:" + alipayRecord.ToString()); return(OperResult.RESULTCODE_ORDER_NOT_EXIST); } CustomerMySqlTransaction myTrans = null; try { int value = OperResult.RESULTCODE_FALSE; myTrans = MyDBHelper.Instance.CreateTrans(); alipayRecord.user_name = rechargeRecord.UserName; if (alipayRecord.out_trade_no == rechargeRecord.OrderNumber && alipayRecord.value_rmb >= rechargeRecord.SpendRMB) { rechargeRecord.PayTime = DateTime.Now; value = PlayerController.Instance.RechargeGoldCoinByAlipay(rechargeRecord.UserName, alipayRecord.total_fee, (int)rechargeRecord.SpendRMB, (int)(rechargeRecord.SpendRMB * GlobalConfig.GameConfig.RMB_GoldCoin), myTrans); if (value == OperResult.RESULTCODE_TRUE) { DBProvider.GoldCoinRecordDBProvider.SaveFinalGoldCoinRechargeRecord(rechargeRecord, myTrans); DBProvider.GoldCoinRecordDBProvider.DeleteTempGoldCoinRechargeTradeRecord(rechargeRecord.OrderNumber, myTrans); this.RemoveRecord(alipayRecord.out_trade_no); string tokenBuyer = ClientManager.GetToken(rechargeRecord.UserName); if (GoldCoinOrderPaySucceedNotify != null) { GoldCoinOrderPaySucceedNotify(tokenBuyer, rechargeRecord.OrderNumber); } LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 成功充值" + rechargeRecord.GainGoldCoin + "金币。ano: " + alipayRecord.alipay_trade_no); } else { LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 金币充值失败,原因为:" + OperResult.GetMsg(value) + "。ano: " + alipayRecord.alipay_trade_no); } } DBProvider.AlipayRecordDBProvider.SaveAlipayRechargeRecord(alipayRecord, myTrans); myTrans.Commit(); return(value); } catch (Exception exc) { myTrans.Rollback(); PlayerController.Instance.RefreshFortune(alipayRecord.user_name); LogHelper.Instance.AddErrorLog("玩家[" + alipayRecord.user_name + "] 支付宝金币充值,回调异常。AlipayInfo : " + alipayRecord.ToString(), exc); return(OperResult.RESULTCODE_EXCEPTION); } finally { if (myTrans != null) { myTrans.Dispose(); } } }
public int AlipayCallback(AlipayRechargeRecord alipayRecord) { MinesBuyRecord buyRecord = FindRecordByOrderNumber(alipayRecord.out_trade_no); if (buyRecord == null) { buyRecord = DBProvider.MineRecordDBProvider.GetMineTradeRecord(alipayRecord.user_name, alipayRecord.out_trade_no); if (buyRecord != null) { return(OperResult.RESULTCODE_ORDER_BUY_SUCCEED); } LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 支付宝购买矿山回调,找不到订单。支付宝信息:" + alipayRecord.ToString()); return(OperResult.RESULTCODE_ORDER_NOT_EXIST); } CustomerMySqlTransaction myTrans = null; try { int result = OperResult.RESULTCODE_FALSE; myTrans = MyDBHelper.Instance.CreateTrans(); //alipayRecord.user_name = buyRecord.UserName; if (alipayRecord.value_rmb >= buyRecord.SpendRMB) { result = PlayerController.Instance.BuyMineByAlipay(buyRecord, alipayRecord.total_fee, myTrans); if (result == OperResult.RESULTCODE_TRUE) { buyRecord.PayTime = DateTime.Now; DBProvider.MineRecordDBProvider.SaveFinalMineTradeRecord(buyRecord, myTrans); DBProvider.MineRecordDBProvider.DeleteTempMineTradeRecord(buyRecord.OrderNumber, myTrans); this.RemoveRecord(alipayRecord.out_trade_no); string tokenBuyer = ClientManager.GetToken(buyRecord.UserName); if (!string.IsNullOrEmpty(tokenBuyer) && MineOrderPaySucceedNotify != null) { MineOrderPaySucceedNotify(tokenBuyer, buyRecord.OrderNumber); } LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 成功购买" + buyRecord.GainMinesCount + "座矿山。ano: " + alipayRecord.alipay_trade_no); } else { LogHelper.Instance.AddInfoLog("玩家[" + alipayRecord.user_name + "] 购买矿山失败,原因为:" + OperResult.GetMsg(result) + "。ano: " + alipayRecord.alipay_trade_no); } } DBProvider.AlipayRecordDBProvider.SaveAlipayRechargeRecord(alipayRecord, myTrans); myTrans.Commit(); PlayerActionController.Instance.AddLog(buyRecord.UserName, MetaData.ActionLog.ActionType.BuyMine, buyRecord.GainMinesCount, "增加了 " + buyRecord.GainStonesReserves.ToString() + " 的矿石储量"); return(result); } catch (Exception exc) { myTrans.Rollback(); PlayerController.Instance.RefreshFortune(alipayRecord.user_name); LogHelper.Instance.AddErrorLog("玩家[" + alipayRecord.user_name + "] 支付宝金币充值,回调异常。AlipayInfo : " + alipayRecord.ToString(), exc); return(OperResult.RESULTCODE_EXCEPTION); } finally { if (myTrans != null) { myTrans.Dispose(); } } }
public int AlipayCallback(AlipayRechargeRecord alipayRecord) { int result = OperResult.RESULTCODE_FALSE; var alipayRecordFromDB = DBProvider.AlipayRecordDBProvider.GetAlipayRechargeRecordByOrderNumber_OR_Alipay_trade_no(alipayRecord.out_trade_no, alipayRecord.alipay_trade_no); if (alipayRecordFromDB != null) { return(OperResult.RESULTCODE_ORDER_BUY_SUCCEED); } StoneDelegateBuyOrderInfo buyOrder = null; lock (_lockTempAlipayList) { for (int i = 0; i < _listTempAlipayBuyOrders.Count; i++) { if (_listTempAlipayBuyOrders[i].OrderNumber == alipayRecord.out_trade_no) { buyOrder = _listTempAlipayBuyOrders[i]; decimal valueRMB = buyOrder.BuyUnit.Price * buyOrder.BuyUnit.TradeStoneHandCount; if (alipayRecord.value_rmb < valueRMB) { buyOrder.BuyState = StoneDelegateBuyState.Exception; LogHelper.Instance.AddErrorLog(alipayRecord.ToString() + " 充值的灵币小于需要的灵币:" + valueRMB, null); } else { buyOrder.BuyState = StoneDelegateBuyState.Waiting; } this._listTempAlipayBuyOrders.RemoveAt(i); break; } } } if (buyOrder == null) { LogHelper.Instance.AddErrorLog("委托挂单购买矿石,支付宝回调,没有找到订单。" + alipayRecord.ToString(), null); } CustomerMySqlTransaction myTrans = MyDBHelper.Instance.CreateTrans(); try { DBProvider.AlipayRecordDBProvider.SaveAlipayRechargeRecord(alipayRecord, myTrans); if (buyOrder != null) { DBProvider.StoneStackDBProvider.UpdateWaitingStoneDelegateBuyOrderState(buyOrder.OrderNumber, buyOrder.BuyState, myTrans); } myTrans.Commit(); result = OperResult.RESULTCODE_TRUE; } catch (Exception exc) { myTrans.Rollback(); LogHelper.Instance.AddErrorLog("StoneStackControl.AlipayCallback.SaveAlipayRechargeRecord Exception. " + alipayRecord.ToString() + ". buyOrder: " + (buyOrder == null ? "NULL" : buyOrder.ToString()), exc); } finally { myTrans.Dispose(); } if (result == OperResult.RESULTCODE_TRUE) { if (buyOrder != null) { this.InsertToBuyQueue(buyOrder, null); } //PlayerActionController.Instance.AddLog(alipayRecord.user_name, MetaData.ActionLog.ActionType.DelegateBuyStone, buyOrder.BuyUnit.TradeStoneHandCount, ""); BuyOrderAlipayPaySucceedNotify(alipayRecord.user_name, alipayRecord.out_trade_no); } return(result); }
/// <summary> /// /// </summary> /// <param name="token"></param> /// <param name="buyStoneHandsCount"></param> /// <param name="price"></param> /// <param name="paytype"></param> /// <returns></returns> public OperResultObject DelegateBuyStone(string token, int buyStoneHandsCount, decimal price, MetaData.Trade.PayType paytype) { if (RSAProvider.LoadRSA(token)) { OperResultObject resultObj = new OperResultObject(); string userName = ""; try { if (buyStoneHandsCount <= 0) { resultObj.OperResultCode = OperResult.RESULTCODE_PARAM_INVALID; return(resultObj); } userName = ClientManager.GetClientUserName(token); var playerRunner = PlayerController.Instance.GetRunnable(userName); if (playerRunner == null) { resultObj.OperResultCode = OperResult.RESULTCODE_USER_NOT_EXIST; return(resultObj); } decimal allNeedRMB = buyStoneHandsCount * price; if (paytype == MetaData.Trade.PayType.RMB) { if (playerRunner.BasePlayer.FortuneInfo.RMB < allNeedRMB) { resultObj.OperResultCode = OperResult.RESULTCODE_LACK_OF_BALANCE; return(resultObj); } } else if (paytype == MetaData.Trade.PayType.Diamand) { if (playerRunner.BasePlayer.FortuneInfo.StockOfDiamonds < allNeedRMB * GlobalConfig.GameConfig.Diamonds_RMB) { resultObj.OperResultCode = OperResult.RESULTCODE_LACK_OF_BALANCE; return(resultObj); } } DateTime timenow = DateTime.Now; StoneDelegateBuyOrderInfo buyOrder = new StoneDelegateBuyOrderInfo() { UserID = playerRunner.BasePlayer.SimpleInfo.UserID, UserName = playerRunner.BasePlayer.SimpleInfo.UserName, DelegateTime = new MyDateTime(timenow), OrderNumber = OrderController.Instance.CreateOrderNumber(userName, timenow, MetaData.Trade.AlipayTradeInType.StackStoneBuy), BuyState = StoneDelegateBuyState.Waiting, IsSubOrder = false, PayType = paytype, BuyUnit = new StackTradeUnit() { Price = price, TradeStoneHandCount = buyStoneHandsCount } }; if (paytype == MetaData.Trade.PayType.Alipay) { string payLink = OrderController.Instance.CreateAlipayLink(userName, buyOrder.OrderNumber, "矿石", allNeedRMB, "迅灵矿石"); buyOrder.AlipayLink = payLink; } CustomerMySqlTransaction myTrans = MyDBHelper.Instance.CreateTrans(); try { resultObj = OrderController.Instance.StoneStackController.PlayerDelegateBuyStone(buyOrder, myTrans); if (resultObj.OperResultCode != OperResult.RESULTCODE_TRUE) { //卖单提交失败,不再进行数据库操作 return(resultObj); } playerRunner.AddNewBuyStonesByDelegate(buyOrder, myTrans); myTrans.Commit(); if (paytype != MetaData.Trade.PayType.Alipay) { //PlayerActionController.Instance.AddLog(userName, MetaData.ActionLog.ActionType.DelegateBuyStone, buyStoneHandsCount, ""); } LogHelper.Instance.AddInfoLog("玩家[" + userName + "] 挂单委托买入 " + buyStoneHandsCount + " 手矿石:" + buyOrder.ToString()); resultObj.OperResultCode = OperResult.RESULTCODE_TRUE; resultObj.Message = buyOrder.AlipayLink; return(resultObj); } catch (Exception exc) { myTrans.Rollback(); LogHelper.Instance.AddErrorLog("ServiceToClient.DelegateBuyStone Exception userName: "******"玩家[" + userName + "] DelegateBuyStone Exception", exc); resultObj.OperResultCode = OperResult.RESULTCODE_EXCEPTION; return(resultObj); } } else { throw new Exception(); } }
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(); } }