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(); } } }
public bool SaveFinalMineTradeRecord(MinesBuyRecord record, CustomerMySqlTransaction myTrans) { MySqlCommand mycmd = null; try { mycmd = myTrans.CreateCommand(); string cmdTextA = "insert into minesbuyrecord " + "(`OrderNumber`, `UserID`, `SpendRMB`, `GainMinesCount`,`GainStonesReserves`, `CreateTime`, `PayTime`) values " + " (@OrderNumber, @UserID, @SpendRMB, @GainMinesCount, @GainStonesReserves, @CreateTime, @PayTime); "; mycmd.CommandText = cmdTextA; mycmd.Parameters.AddWithValue("@OrderNumber", record.OrderNumber); mycmd.Parameters.AddWithValue("@UserID", record.UserID); mycmd.Parameters.AddWithValue("@SpendRMB", record.SpendRMB); mycmd.Parameters.AddWithValue("@GainMinesCount", record.GainMinesCount); mycmd.Parameters.AddWithValue("@GainStonesReserves", record.GainStonesReserves); mycmd.Parameters.AddWithValue("@CreateTime", record.CreateTime); mycmd.Parameters.AddWithValue("@PayTime", record.PayTime); mycmd.ExecuteNonQuery(); return(true); } finally { if (mycmd != null) { mycmd.Dispose(); } } }
private MinesBuyRecord FindRecordByOrderNumber(string orderNumber) { lock (this._lock) { MinesBuyRecord buyRecord = null; this._listTempRecord.TryGetValue(orderNumber, out buyRecord); return(buyRecord); } }
public bool SaveTempMineTradeRecord(MinesBuyRecord record) { MySqlConnection myconn = MyDBHelper.Instance.CreateConnection(); MySqlCommand mycmd = null; try { myconn.Open(); mycmd = myconn.CreateCommand(); string cmdTextA = "insert into tempminesbuyrecord " + "(`OrderNumber`, `UserID`, `SpendRMB`, `GainMinesCount`,`GainStonesReserves`, `CreateTime`) values " + " (@OrderNumber, @UserID, @SpendRMB, @GainMinesCount, @GainStonesReserves, @CreateTime); "; mycmd.CommandText = cmdTextA; mycmd.Parameters.AddWithValue("@OrderNumber", record.OrderNumber); mycmd.Parameters.AddWithValue("@UserID", record.UserID); mycmd.Parameters.AddWithValue("@SpendRMB", record.SpendRMB); mycmd.Parameters.AddWithValue("@GainMinesCount", record.GainMinesCount); mycmd.Parameters.AddWithValue("@GainStonesReserves", record.GainStonesReserves); mycmd.Parameters.AddWithValue("@CreateTime", record.CreateTime); mycmd.ExecuteNonQuery(); return(true); } finally { if (mycmd != null) { mycmd.Dispose(); } if (myconn != null) { myconn.Close(); myconn.Dispose(); } } }
public MinesBuyRecordUIModel(MinesBuyRecord parent) { this.ParentObject = parent; }
public TradeOperResult BuyMine(string userName, int minesCount, int payType) { TradeOperResult result = new TradeOperResult(); var systemState = DBProvider.UserDBProvider.GetAllXunLingMineFortuneState(); int surplus = GlobalConfig.GameConfig.LimitStoneCount - (int)systemState.AllStonesCount; if (surplus <= 0) { result.ResultCode = OperResult.RESULTCODE_BUYMINE_MINEISFULL; return(result); } result.PayType = payType; DateTime timenow = DateTime.Now; var playerInfo = PlayerController.Instance.GetPlayerInfoByUserName(userName); bool isVIP = playerInfo.FortuneInfo.Exp > GlobalConfig.GameConfig.PlayerVIPInterval; string orderNumber = OrderController.Instance.CreateOrderNumber(userName, timenow, AlipayTradeInType.BuyMine); result.OperNumber = GetStoneCount_BuyMine(minesCount, isVIP, surplus); MinesBuyRecord record = new MinesBuyRecord() { OrderNumber = orderNumber, CreateTime = timenow, UserID = playerInfo.SimpleInfo.UserID, UserName = userName, GainMinesCount = minesCount, GainStonesReserves = (int)result.OperNumber, SpendRMB = (int)Math.Ceiling(minesCount * GlobalConfig.GameConfig.RMB_Mine) }; switch ((PayType)payType) { case PayType.Alipay: lock (this._lock) { this._listTempRecord.Add(record.OrderNumber, record); } DBProvider.MineRecordDBProvider.SaveTempMineTradeRecord(record); result.ResultCode = OperResult.RESULTCODE_TRUE; result.AlipayLink = OrderController.Instance.CreateAlipayLink(userName, record.OrderNumber, "迅灵矿山", record.SpendRMB, "勘探一座矿山,可增加" + result.OperNumber + "矿石储量"); break; case PayType.RMB: BuyMineByRMB(record, result); break; case PayType.GoldCoin: break; case PayType.Diamand: BuyMineByDiamond(record, result); break; case PayType.Credits: BuyMineByShoppingCredits(record, result); break; default: break; } return(result); }
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(); } } }