示例#1
0
        public int OpenFactory(int userID, CustomerMySqlTransaction myTrans)
        {
            //工厂开启状态。开启一次 1000积分。72小时 没有存入矿石和苦力 就 在关闭
            bool isOK = DBProvider.PlayerStoneFactoryDBProvider.OpenFactory(userID, myTrans);

            return(isOK ? OperResult.RESULTCODE_TRUE : OperResult.RESULTCODE_FALSE);
        }
示例#2
0
        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);
            }
        }
        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();
                }
            }
        }
示例#4
0
        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();
            }
        }
示例#5
0
        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);
        }
示例#6
0
 public void AddSellOrder(SellStonesOrder order, int userID, CustomerMySqlTransaction myTrans)
 {
     lock (this._lockListSellOrders)
     {
         DBProvider.StoneOrderDBProvider.AddSellOrder(order, userID, myTrans);
         dicSellOrders[order.OrderNumber] = new StoneOrderRunnable(order);
     }
 }
示例#7
0
        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();
            }
        }
示例#8
0
        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();
                    }
                }
            }
        }
示例#9
0
        /// <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();
                    }
                }
            }
        }
示例#10
0
        public BuyStonesOrder Pay(CustomerMySqlTransaction trans)
        {
            lock (this._lock)
            {
                //此处暂不检查TimeOut
                BuyStonesOrder buyOrder = new BuyStonesOrder()
                {
                    StonesOrder   = this._sellOrder,
                    BuyerUserName = this._lockOrderObject.LockedByUserName,
                    BuyTime       = this._lockOrderObject.LockedTime,
                    AwardGoldCoin = (int)((this.ValueRMB * GlobalConfig.GameConfig.StoneBuyerAwardGoldCoinMultiple) * GlobalConfig.GameConfig.RMB_GoldCoin)
                };

                this._sellOrder.OrderState = SellOrderState.Finish;
                DBProvider.StoneOrderDBProvider.PayOrder(buyOrder, trans);
                DBProvider.StoneOrderDBProvider.FinishOrderLock(this._sellOrder.OrderNumber, trans);

                return(buyOrder);
            }
        }
示例#11
0
        public PlayerGravelRequsetRecordInfo GetGravel(int userID, CustomerMySqlTransaction myTrans, out int result)
        {
            //领取比请求要晚一天
            PlayerGravelRequsetRecordInfo[] records = DBProvider.GravelDBProvider.GetLastDayPlayerGravelRequsetRecords(new MetaData.MyDateTime(DateTime.Now.AddDays(-1)), userID);
            if (records == null || records.Length == 0)
            {
                result = OperResult.RESULTCODE_GRAVEL_GETFAILED_NOTHINGTOGET;
                return(null);
            }

            PlayerGravelRequsetRecordInfo record = records[0];

            if (record.IsGoted)
            {
                result = OperResult.RESULTCODE_GRAVEL_GETFAILED_NOTHINGTOGET;
                return(null);
            }
            record.IsGoted = true;
            DBProvider.GravelDBProvider.SetPlayerGravelRequsetRecordInfoIsGoted(record, myTrans);
            result = OperResult.RESULTCODE_TRUE;
            return(record);
        }
示例#12
0
        public int AddFoods(int userID, int foodsCount, CustomerMySqlTransaction myTrans)
        {
            int result = CheckTime();

            if (result != OperResult.RESULTCODE_TRUE)
            {
                return(result);
            }

            PlayerStoneFactoryAccountInfo factoryAccount = DBProvider.PlayerStoneFactoryDBProvider.GetPlayerStoneFactoryAccountInfo(userID);

            if (factoryAccount == null || !factoryAccount.FactoryIsOpening || factoryAccount.FactoryLiveDays <= 0)
            {
                return(OperResult.RESULTCODE_STONEFACTORYISCLOSED);
            }

            factoryAccount.Food += foodsCount;

            bool isOK = DBProvider.PlayerStoneFactoryDBProvider.SavePlayerStoneFactoryAccountInfo(factoryAccount, myTrans);

            return(isOK ? OperResult.RESULTCODE_TRUE : OperResult.RESULTCODE_FALSE);
        }
示例#13
0
        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();
                }
            }
        }
示例#14
0
 /// <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();
             }
         }
     }
 }
示例#15
0
        /// <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();
            }
        }
        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 BuyVirtualShoppingItem(int userID, string userName, VirtualShoppingItem shoppingItem, CustomerMySqlTransaction myTrans)
        {
            PlayerBuyVirtualShoppingItemRecord record = null;
            DateTime time = DateTime.Now;

            if (shoppingItem.ItemType == VirtualShoppingItemType.FactorySlaveFoods30Days)
            {
                int result = StoneFactoryController.Instance.AddFoods(userID, 30, myTrans);
                if (result != OperResult.RESULTCODE_TRUE)
                {
                    return(result);
                }

                record = new PlayerBuyVirtualShoppingItemRecord()
                {
                    OrderNumber             = OrderController.Instance.CreateOrderNumber(userName, time, AlipayTradeInType.VirtualShopping),
                    UserID                  = userID,
                    VirtualShoppingItemID   = shoppingItem.ID,
                    VirtualShoppingItemName = shoppingItem.Name,
                    BuyTime                 = new MetaData.MyDateTime(time),
                    UserName                = userName,
                };
            }
            else if (shoppingItem.ItemType == VirtualShoppingItemType.FactoryOpenTool)
            {
                int result = StoneFactoryController.Instance.OpenFactory(userID, myTrans);
                if (result != OperResult.RESULTCODE_TRUE)
                {
                    return(result);
                }

                record = new PlayerBuyVirtualShoppingItemRecord()
                {
                    OrderNumber             = OrderController.Instance.CreateOrderNumber(userName, time, AlipayTradeInType.VirtualShopping),
                    UserID                  = userID,
                    VirtualShoppingItemID   = shoppingItem.ID,
                    VirtualShoppingItemName = shoppingItem.Name,
                    BuyTime                 = new MetaData.MyDateTime(time),
                    UserName                = userName,
                };
            }
            else
            {
                record = new PlayerBuyVirtualShoppingItemRecord()
                {
                    OrderNumber           = OrderController.Instance.CreateOrderNumber(userName, time, AlipayTradeInType.VirtualShopping),
                    UserID                = userID,
                    VirtualShoppingItemID = shoppingItem.ID,
                    BuyTime               = new MetaData.MyDateTime(time)
                };
            }

            bool isOK = DBProvider.VirtualShoppingItemDBProvider.AddPlayerBuyVirtualShoppingItemRecord(record, myTrans);

            if (isOK)
            {
                return(OperResult.RESULTCODE_TRUE);
            }
            return(OperResult.RESULTCODE_FALSE);
        }
示例#18
0
        public int BuyDiamondShoppingItem(int userID, string userName, DiamondShoppingItem shoppingItem, PostAddress address, CustomerMySqlTransaction myTrans)
        {
            DateTime time = DateTime.Now;
            PlayerBuyDiamondShoppingItemRecord record = null;

            record = new PlayerBuyDiamondShoppingItemRecord()
            {
                OrderNumber           = OrderController.Instance.CreateOrderNumber(userName, time, AlipayTradeInType.DiamondShopping),
                UserID                = userID,
                DiamondShoppingItemID = shoppingItem.ID,
                BuyTime               = new MetaData.MyDateTime(time),
                SendAddress           = address.ToString(),
                ShoppingState         = DiamondShoppingState.Payed
            };

            bool isOK = DBProvider.DiamondShoppingDBProvider.AddPlayerBuyDiamondShoppingItemRecord(record, myTrans);

            if (isOK)
            {
                return(OperResult.RESULTCODE_TRUE);
            }
            return(OperResult.RESULTCODE_FALSE);
        }
示例#19
0
        public bool PlayerRechargeRMB(PlayerInfo player, AgentAwardType awardType, decimal playerInchargeRMB, CustomerMySqlTransaction trans)
        {
            if (player.SimpleInfo.IsAgentReferred || player.FortuneInfo.Exp < 50 ||
                player.SimpleInfo.AgentUserID == 0 ||
                player.SimpleInfo.AgentReferredLevel == 0 || player.SimpleInfo.AgentReferredLevel > 2)
            {
                return(false);
            }

            var agent = GetReferredAgent(player);

            if (agent == null)
            {
                return(false);
            }

            AgentAwardRecord record = new AgentAwardRecord();

            record.AgentID        = agent.ID;
            record.AgentUserName  = agent.Player.SimpleInfo.UserName;
            record.PlayerID       = player.SimpleInfo.UserID;
            record.PlayerUserName = player.SimpleInfo.UserName;
            record.Time           = MyDateTime.FromDateTime(DateTime.Now);
            switch (awardType)
            {
            case AgentAwardType.PlayerAgentExp:
                record.PlayerInchargeRMB     = 0;
                record.AgentAwardRMB         = 30 * GlobalConfig.GameConfig.Yuan_RMB;
                record.PlayerInchargeContent = "玩家贡献值达到50奖励";
                break;

            case AgentAwardType.PlayerInchargeGoldCoin:
                record.PlayerInchargeRMB = playerInchargeRMB;
                if (player.SimpleInfo.AgentReferredLevel == 1)
                {
                    record.AgentAwardRMB = 0.1m * playerInchargeRMB;
                }
                else if (player.SimpleInfo.AgentReferredLevel == 2)
                {
                    record.AgentAwardRMB = 0.05m * playerInchargeRMB;
                }
                record.PlayerInchargeContent = "玩家用充值金币奖励";
                break;

            case AgentAwardType.PlayerInchargeMine:
                record.PlayerInchargeRMB = playerInchargeRMB;
                if (player.SimpleInfo.AgentReferredLevel == 1)
                {
                    record.AgentAwardRMB = 0.1m * playerInchargeRMB;
                }
                else if (player.SimpleInfo.AgentReferredLevel == 2)
                {
                    record.AgentAwardRMB = 0.05m * playerInchargeRMB;
                }
                record.PlayerInchargeContent = "玩家购买矿山奖励";
                break;

            default:
                break;
            }

            if (record.AgentAwardRMB > 1)
            {
                DBProvider.AgentAwardRecordDBProvider.AddAgentAwardRecord(record, trans);
            }

            return(true);
        }
        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();
            }
        }
示例#21
0
        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);
        }
示例#22
0
        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();
                }
            }
        }
示例#23
0
        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();
                }
            }
        }
示例#24
0
        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);
        }
示例#25
0
        private GambleStonePlayerBetRecord WinToUpdatePlayer(Dictionary <int, int> dicPlayerBetStoneCount, int winTimes, CustomerMySqlTransaction myTrans)
        {
            int maxWinnedUserID;
            int maxWinnedStone = 0;

            foreach (var kv in dicPlayerBetStoneCount)
            {
                int userID      = kv.Key;
                int winnedStone = kv.Value * winTimes;
                if (winnedStone > maxWinnedStone)
                {
                    maxWinnedStone  = winnedStone;
                    maxWinnedUserID = userID;
                }

                string userName = null;
                GambleStonePlayerBetRecord playerBetRecord = null;
                if (this._dicPlayerBetRecord.ContainsKey(userID))
                {
                    playerBetRecord = this._dicPlayerBetRecord[userID];
                    userName        = this._dicPlayerBetRecord[userID].UserName;
                }
                if (string.IsNullOrEmpty(userName))
                {
                    LogHelper.Instance.AddErrorLog("Gamble NotifyWinnedPlayer Not find PlayerInfo in _dicPlayerBetRecord ", null);
                    var player = PlayerController.Instance.GetPlayerInfoByUserID(userID);
                    userName = player.SimpleInfo.UserName;
                }

                PlayerController.Instance.WinGambleStone(userName, winnedStone, myTrans);
                if (playerBetRecord != null)
                {
                    playerBetRecord.WinnedStone += winnedStone;
                }
            }

            int maxWinnedStoneCount = 0;
            GambleStonePlayerBetRecord maxWinnedBetRecord = null;

            foreach (var item in this._dicPlayerBetRecord.Values)
            {
                if (item.WinnedStone > maxWinnedStoneCount)
                {
                    maxWinnedBetRecord  = item;
                    maxWinnedStoneCount = item.WinnedStone;
                }
                DBProvider.GambleStoneDBProvider.AddGambleStonePlayerBetRecord(item, this._roundInfo.TableName, myTrans);
            }

            return(maxWinnedBetRecord);
        }
示例#26
0
        /// <summary>
        /// 付款方式为支付宝的订单,添加到临时集合中
        /// </summary>
        /// <param name="buyOrder"></param>
        /// <returns></returns>
        public OperResultObject PlayerDelegateBuyStone(StoneDelegateBuyOrderInfo buyOrder, CustomerMySqlTransaction myTrans)
        {
            OperResultObject result = new OperResultObject();

            //只有开市期间才可挂单,间休期间暂时也不可挂单
            if (this._todayTradeInfo.MarketState != StackMarketState.Opening)
            {
                result.OperResultCode = OperResult.RESULTCODE_STACK_DELEGATEORDER_FAILED_MARKETISCLOSED;
                return(result);
            }

            if (buyOrder.PayType == PayType.Alipay)
            {
                //也要保存到数据库里
                buyOrder.BuyState = StoneDelegateBuyState.NotPayed;
                DBProvider.StoneStackDBProvider.SaveWaitingStoneDelegateBuyOrderInfo(buyOrder, myTrans);
                lock (_lockTempAlipayList)
                {
                    this._listTempAlipayBuyOrders.Add(buyOrder);
                }
            }
            else
            {
                InsertToBuyQueue(buyOrder, myTrans);
            }
            result.OperResultCode = OperResult.RESULTCODE_TRUE;
            return(result);
        }
示例#27
0
        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();
            }
        }
示例#28
0
        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);
        }
示例#29
0
        public OperResultObject PlayerCancelBuyStone(string orderNumber, decimal buyPrice, CustomerMySqlTransaction myTrans, out StoneDelegateBuyOrderInfo canceledBuyOrder)
        {
            canceledBuyOrder = null;
            OperResultObject result = new OperResultObject();

            ////开市期间不可撤单
            //if (this._todayTradeInfo.MarketState == StackMarketState.Opening)
            //{
            //    result.OperResultCode = OperResult.RESULTCODE_STACK_CANCELORDER_FAILED_MARKETISOPENING;
            //    return result;
            //}
            if (this._dicWaitingBuyInfos.ContainsKey(buyPrice))
            {
                canceledBuyOrder = this._dicWaitingBuyInfos[buyPrice].DeleteOrder(orderNumber);
            }

            if (canceledBuyOrder != null)
            {
                result = this._todayTradeInfo.DeleteBuyUnit(canceledBuyOrder.BuyUnit);
                if (result.OperResultCode != OperResult.RESULTCODE_TRUE)
                {
                    return(result);
                }

                canceledBuyOrder.BuyState     = StoneDelegateBuyState.Cancel;
                canceledBuyOrder.FinishedTime = new MyDateTime(DateTime.Now);
                DBProvider.StoneStackDBProvider.CancelBuyStoneOrder(canceledBuyOrder, myTrans);
                result.OperResultCode = OperResult.RESULTCODE_TRUE;
            }
            else
            {
                canceledBuyOrder = this._listTempAlipayBuyOrders.FirstOrDefault(s => s.OrderNumber == orderNumber);
                if (canceledBuyOrder != null)
                {
                    canceledBuyOrder.BuyState     = StoneDelegateBuyState.Cancel;
                    canceledBuyOrder.FinishedTime = new MyDateTime(DateTime.Now);
                    DBProvider.StoneStackDBProvider.CancelBuyStoneOrder(canceledBuyOrder, myTrans);
                    this._listTempAlipayBuyOrders.Remove(canceledBuyOrder);
                    result.OperResultCode = OperResult.RESULTCODE_TRUE;
                }
                else
                {
                    result.OperResultCode = OperResult.RESULTCODE_FALSE;
                }
            }

            return(result);
        }