/// <summary> /// 将IDataReader的当前记录读取到GambleHostEntity 对象 /// </summary> /// <param name="reader"></param> /// <returns></returns> public GambleHostEntity LoadSingleRow3(IDataReader reader) { var obj = new GambleHostEntity(); obj.Idx = (System.Int32)reader["Idx"]; obj.ManagerId = (System.Guid)reader["ManagerId"]; obj.ManagerName = (System.String)reader["ManagerName"]; obj.TitleId = (System.Guid)reader["TitleId"]; obj.HostMoney = (System.Int32)reader["HostMoney"]; obj.TotalMoney = (System.Int32)reader["TotalMoney"]; obj.AttendPeopleCount = (System.Int32)reader["AttendPeopleCount"]; obj.Status = (System.Int32)reader["Status"]; obj.RowTime = (System.DateTime)reader["RowTime"]; obj.RowVersion = (System.Byte[])reader["RowVersion"]; obj.Title = (System.String)reader["Title"]; obj.RightOption = (System.String)reader["RightOption"]; DateTime startTime = (System.DateTime)reader["StartTime"]; DateTime BaseTime = new DateTime(1970, 1, 1, 0, 0, 0, 0); obj.StartedTime = Convert.ToInt64(startTime.Subtract(BaseTime).TotalMilliseconds); DateTime stopTime = (System.DateTime)reader["StopTime"]; obj.StopedTime = Convert.ToInt64(stopTime.Subtract(BaseTime).TotalMilliseconds); return(obj); }
/// <summary> /// 带事务的Update /// </summary> /// <param name="entity"></param> /// <param name="trans">The trans.</param> /// <returns></returns> /// <remarks>2016/6/7 15:33:38</remarks> public bool Update(GambleHostEntity entity, DbTransaction trans = null) { var database = new SqlDatabase(this.ConnectionString); DbCommand commandWrapper = database.GetStoredProcCommand("dbo.P_GambleHost_Update"); database.AddInParameter(commandWrapper, "@Idx", DbType.Int32, entity.Idx); database.AddInParameter(commandWrapper, "@ManagerId", DbType.Guid, entity.ManagerId); database.AddInParameter(commandWrapper, "@ManagerName", DbType.String, entity.ManagerName); database.AddInParameter(commandWrapper, "@TitleId", DbType.Guid, entity.TitleId); database.AddInParameter(commandWrapper, "@HostMoney", DbType.Int32, entity.HostMoney); database.AddInParameter(commandWrapper, "@TotalMoney", DbType.Int32, entity.TotalMoney); database.AddInParameter(commandWrapper, "@AttendPeopleCount", DbType.Int32, entity.AttendPeopleCount); database.AddInParameter(commandWrapper, "@HostWinMoney", DbType.Int32, entity.HostWinMoney); database.AddInParameter(commandWrapper, "@Status", DbType.Int32, entity.Status); database.AddInParameter(commandWrapper, "@RowTime", DbType.DateTime, entity.RowTime); database.AddInParameter(commandWrapper, "@RowVersion", DbType.Binary, entity.RowVersion); int results = 0; if (trans != null) { results = database.ExecuteNonQuery(commandWrapper, trans); } else { results = database.ExecuteNonQuery(commandWrapper); } entity.Idx = (System.Int32)database.GetParameterValue(commandWrapper, "@Idx"); return(Convert.ToBoolean(results)); }
/// <summary> /// InsertOnce /// </summary> /// <param name="managerId">managerId</param> /// <param name="managerName">managerName</param> /// <param name="titleId">titleId</param> /// <param name="totalMoney">totalMoney</param> /// <param name="status">status</param> /// <param name="rowTime">rowTime</param> /// <param name="idx">idx</param> /// <returns>int 影响的数据行数</returns> /// <remarks>2014/6/18 0:59:27</remarks> public bool InsertOnce2(GambleHostEntity e, DbTransaction trans = null) { var database = new SqlDatabase(this.ConnectionString); DbCommand commandWrapper = database.GetStoredProcCommand("C_GambleHost_InsertOnce"); database.AddInParameter(commandWrapper, "@ManagerId", DbType.Guid, e.ManagerId); database.AddInParameter(commandWrapper, "@ManagerName", DbType.String, e.ManagerName); database.AddInParameter(commandWrapper, "@TitleId", DbType.Guid, e.TitleId); database.AddInParameter(commandWrapper, "@HostMoney", DbType.Int32, e.HostMoney); database.AddInParameter(commandWrapper, "@TotalMoney", DbType.Int32, e.TotalMoney); //database.AddInParameter(commandWrapper, "@Status", DbType.Int32, e.Status); database.AddInParameter(commandWrapper, "@RowTime", DbType.DateTime, e.RowTime); database.AddParameter(commandWrapper, "@Idx", DbType.Int32, ParameterDirection.InputOutput, "", DataRowVersion.Current, e.Idx); int rValue = 0; if (trans != null) { rValue = (int)database.ExecuteNonQuery(commandWrapper, trans); } else { rValue = (int)database.ExecuteNonQuery(commandWrapper); } e.Idx = (System.Int32)database.GetParameterValue(commandWrapper, "@Idx"); return(Convert.ToBoolean(e.Idx)); }
/// <summary> /// 将IDataReader的当前记录读取到GambleHostEntity 对象 /// </summary> /// <param name="reader"></param> /// <returns></returns> public GambleHostEntity LoadSingleRow(IDataReader reader) { var obj = new GambleHostEntity(); obj.Idx = (System.Int32)reader["Idx"]; obj.ManagerId = (System.Guid)reader["ManagerId"]; obj.ManagerName = (System.String)reader["ManagerName"]; obj.TitleId = (System.Guid)reader["TitleId"]; obj.HostMoney = (System.Int32)reader["HostMoney"]; obj.TotalMoney = (System.Int32)reader["TotalMoney"]; obj.AttendPeopleCount = (System.Int32)reader["AttendPeopleCount"]; obj.HostWinMoney = (System.Int32)reader["HostWinMoney"]; obj.Status = (System.Int32)reader["Status"]; obj.RowTime = (System.DateTime)reader["RowTime"]; obj.RowVersion = (System.Byte[])reader["RowVersion"]; return(obj); }
/// <summary> /// GetById /// </summary> /// <param name="idx">idx</param> /// <returns>GambleHostEntity</returns> /// <remarks>2016/6/7 15:33:38</remarks> public GambleHostEntity GetById(System.Int32 idx) { var database = new SqlDatabase(this.ConnectionString); DbCommand commandWrapper = database.GetStoredProcCommand("P_GambleHost_GetById"); database.AddInParameter(commandWrapper, "@Idx", DbType.Int32, idx); GambleHostEntity obj = null; using (IDataReader reader = database.ExecuteReader(commandWrapper)) { if (reader.Read()) { obj = LoadSingleRow(reader); } } return(obj); }
/// <summary> /// GetByManagerIdAndTitleId /// </summary> /// <param name="managerId">managerId</param> /// <param name="titleId">titleId</param> /// <returns>GambleHostEntity</returns> /// <remarks>2016/6/7 15:33:38</remarks> public GambleHostEntity GetByManagerIdAndTitleId(System.Guid managerId, System.Guid titleId) { var database = new SqlDatabase(this.ConnectionString); DbCommand commandWrapper = database.GetStoredProcCommand("C_GambleHost_GetByManagerIdAndTitleId"); database.AddInParameter(commandWrapper, "@managerId", DbType.Guid, managerId); database.AddInParameter(commandWrapper, "@titleId", DbType.Guid, titleId); GambleHostEntity obj = null; using (IDataReader reader = database.ExecuteReader(commandWrapper)) { if (reader.Read()) { obj = LoadSingleRow(reader); } } return(obj); }
public static bool Update(GambleHostEntity gambleHostEntity, DbTransaction trans = null, string zoneId = "") { var provider = new GambleHostProvider(zoneId); return(provider.Update(gambleHostEntity, trans)); }
public static bool InsertOnce(GambleHostEntity e, DbTransaction trans = null, string zoneId = "") { GambleHostProvider provider = new GambleHostProvider(zoneId); return(provider.InsertOnce2(e, trans)); }
/// <summary> /// 坐庄 /// </summary> /// <param name="managerId">庄家ID</param> /// <param name="rateStr">赔率字符串(以‘|’分割)</param> /// <param name="gambleTitleId">竞猜的主题ID</param> /// <param name="hostMoney">奖池的奖金</param> public AuctionBuyResponse ToBeHost(Guid managerId, string rateStr, Guid gambleTitleId, int hostMoney, string zoneId = "") { AuctionBuyResponse mc = new AuctionBuyResponse(); //如果赔率是空 默认 2|2|2 if (string.IsNullOrEmpty(rateStr)) { rateStr = "2|2|2"; } try { #region 各种验证 //奖池不得低于5000点券 if (hostMoney < CacheFactory.AppsettingCache.GetAppSettingToInt(EnumAppsetting.MinGamblePoolMoney)) { mc.Code = (int)MessageCode.GambleNotEnoughMoney; return(mc); } //是否存在该题目 GambleTitleEntity gte = GambleTitleMgr.GetById(gambleTitleId, zoneId); if (gte == null) { mc.Code = (int)MessageCode.GambleTitleNoExist; return(mc); } //该题目是否允许玩家坐庄 if (managerId != LeagueConst.GambleNpcId) { if (gte.IsOfficial == 1) { mc.Code = (int)MessageCode.ThisGambleTitleIsOfficial; return(mc); } } //最多三个庄家,检查有没有超过3家 if (gte.CurrentCount >= 3) { mc.Code = (int)MessageCode.GambleHostsIsFull; return(mc); } //竞猜还没有开始 if (gte.StartTime > DateTime.Now) { mc.Code = (int)MessageCode.GambleNotStart; return(mc); } if (gte.StopTime < DateTime.Now) { mc.Code = (int)MessageCode.GambleNotStart; return(mc); } //验证赔率和玩家资金 string[] rateArr = rateStr.Split('|'); List <GambleOptionEntity> optionList = GambleOptionMgr.GetByTitleId(gambleTitleId, zoneId); if (optionList == null || optionList.Count == 0 || optionList.Count != rateArr.Length) { mc.Code = (int)MessageCode.GambleParamError; return(mc); } decimal[] rateArrM = new decimal[rateArr.Length]; for (int i = 0, count = optionList.Count; i < count; i++) { rateArrM[i] = decimal.Round(Convert.ToDecimal(rateArr[i]), 2); } #endregion //支付奖金 string billingId = "Gamble" + ShareUtil.GenerateComb(); GambleHostEntity ghe = new GambleHostEntity(); ghe.ManagerId = managerId; if (managerId == LeagueConst.GambleNpcId) { ghe.ManagerName = "Official_Manager"; } else { ghe.ManagerName = ManagerCore.Instance.GetManager(managerId).Name; } ghe.TitleId = gambleTitleId; ghe.Status = 0; ghe.RowTime = DateTime.Now; ghe.TotalMoney = hostMoney; ghe.HostMoney = hostMoney; string conn = ConnectionFactory.Instance.GetConnectionString(zoneId, EnumDbType.Main); using (var transactionManager = new TransactionManager(conn)) { transactionManager.BeginTransaction(); if (managerId != LeagueConst.GambleNpcId) { MessageCode code = PayCore.Instance.GambleTrueMatch(managerId, hostMoney, billingId, transactionManager.TransactionObject); if (code != MessageCode.Success) { transactionManager.Rollback(); mc.Code = (int)code; return(mc); } } bool addResult = GambleTitleMgr.AddCount(gambleTitleId, transactionManager.TransactionObject, zoneId); if (!addResult) { transactionManager.Rollback(); mc.Code = (int)MessageCode.GambleHostsIsFull; return(mc); } int idxx = 0; if (!GambleHostMgr.InsertOnce(managerId, ghe.ManagerName, ghe.TitleId, ghe.HostMoney, ghe.TotalMoney, ghe.RowTime, ref idxx, transactionManager.TransactionObject)) { transactionManager.Rollback(); mc.Code = (int)MessageCode.GambleOnlyOnce; return(mc); } ghe.Idx = idxx; GambleHostoptionrateEntity ghoe = new GambleHostoptionrateEntity(); ghoe.HostId = ghe.Idx; ghoe.Status = 0; ghoe.RowTime = DateTime.Now; for (int i = 0, count = optionList.Count; i < count; i++) { ghoe.OptionId = optionList[i].Idx; ghoe.WinRate = rateArrM[i]; if (!GambleHostoptionrateMgr.Insert(ghoe, transactionManager.TransactionObject, zoneId)) { transactionManager.Rollback(); mc.Code = (int)MessageCode.GambleHostRateInsertError; return(mc); } } transactionManager.Commit(); } } catch (Exception ex) { SystemlogMgr.Error("Gamble.ToBeHost", ex); mc.Code = (int)MessageCode.Exception; return(mc); } mc.Data = new AuctionBuyEntity(); if (managerId != LeagueConst.GambleNpcId) { mc.Data.ManagerPoint = PayCore.Instance.GetPoint(managerId); } mc.Code = (int)MessageCode.Success; return(mc); }
/// <summary> /// 玩家参与竞猜 /// </summary> /// <param name="managerId">经理ID</param> /// <param name="gambleMoney">下注金额</param> /// <param name="optionRateId">庄家的哪个选项的竞猜</param> /// <returns>是否参与成功</returns> public AuctionBuyResponse AttendGamble(Guid managerId, int gambleMoney, int optionRateId) { #region 各种验证 NbManagerEntity manager = ManagerCore.Instance.GetManager(managerId); AuctionBuyResponse mc = new AuctionBuyResponse(); if (gambleMoney < 1) { mc.Code = (int)MessageCode.GambleTooPoor; return(mc); } if (manager == null) { mc.Code = (int)MessageCode.LoginNoUser; return(mc); } //是否存在该题目 GambleTitleEntity gte = GambleTitleMgr.GetByOptionRateId(optionRateId); if (gte == null) { mc.Code = (int)MessageCode.GambleTitleNoExist; return(mc); } //竞猜还没有开始 if (gte.StartTime > DateTime.Now) { mc.Code = (int)MessageCode.GambleNotStart; return(mc); } if (gte.StopTime < DateTime.Now) { mc.Code = (int)MessageCode.GambleNotStart; return(mc); } //检查奖金是否够支付 GambleHostoptionrateEntity ore = GambleHostoptionrateMgr.GetById(optionRateId); if (ore == null || ore.Idx == 0) { mc.Code = (int)MessageCode.Exception; return(mc); } GambleHostEntity he = GambleHostMgr.GetById(ore.HostId); if (he == null || he.Idx == 0) { mc.Code = (int)MessageCode.Exception; return(mc); } decimal needMoney = (decimal)(ore.GambleMoney + gambleMoney) * ore.WinRate; if (needMoney > he.TotalMoney) { mc.Code = (int)MessageCode.GambleNeedMoreTotalMoney; return(mc); } //不能竞猜自己发起的主题 if (managerId == he.ManagerId) { mc.Code = (int)MessageCode.GambleCannotGambleSelf; return(mc); } //压住金额20钻石:任意等级 100钻石:需VIP3 300钻石:需VIP5 mc.Code = (int)MessageCode.NbFunctionNotOpen; switch (manager.Level) { case 0: case 1: case 2: if (gambleMoney != 20) { return(mc); } break; case 3: case 4: if (gambleMoney != 20 || gambleMoney != 100) { return(mc); } break; default: if (gambleMoney != 20 || gambleMoney != 100 || gambleMoney != 300) { return(mc); } break; } //支付金额 string billingId = "Gamble_" + ShareUtil.GenerateComb().ToString(); GambleDetailEntity de = new GambleDetailEntity(); de.ManagerId = managerId; de.ManagerName = manager.Name; de.GambleMoney = gambleMoney; de.HostOptionId = ore.Idx; de.ResultMoney = 0; de.Status = 0; de.RowTime = DateTime.Now; try { using (var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetDefault())) { transactionManager.BeginTransaction(); ore.GambleMoney += gambleMoney; ore.AttendPeopleCount += 1; he.TotalMoney += gambleMoney; he.AttendPeopleCount += 1; if (!GambleHostMgr.Update(he, transactionManager.TransactionObject)) { transactionManager.Rollback(); mc.Code = (int)MessageCode.GambleTooManyPeopleIsGambling; return(mc); } if (!GambleHostoptionrateMgr.Update(ore, transactionManager.TransactionObject)) { transactionManager.Rollback(); mc.Code = (int)MessageCode.GambleTooManyPeopleIsGambling; return(mc); } if (!GambleDetailMgr.Insert(de, transactionManager.TransactionObject)) { transactionManager.Rollback(); mc.Code = (int)MessageCode.GambleTooManyPeopleIsGambling; return(mc); } MessageCode code = PayCore.Instance.GambleTrueMatch(managerId, gambleMoney, billingId, transactionManager.TransactionObject); if (code != MessageCode.Success) { transactionManager.Rollback(); mc.Code = (int)MessageCode.GamblePayError; return(mc); } transactionManager.Commit(); } } catch (Exception ex) { SystemlogMgr.Error("Gamble.AttendGamble", ex); mc.Code = (int)MessageCode.Exception; } #endregion mc.Data = new AuctionBuyEntity(); mc.Data.ManagerPoint = PayCore.Instance.GetPoint(managerId); return(mc); }
/// <summary> /// 增加奖池奖金 /// </summary> /// <param name="managerId">经理ID</param> /// <param name="gambleTitleId">竞猜主题ID</param> /// <param name="addMoney">需要增加的金额</param> /// <returns>是否增加奖金成功</returns> public AuctionBuyResponse AddMoney(Guid managerId, Guid gambleTitleId, int addMoney) { #region 各种验证 AuctionBuyResponse mc = new AuctionBuyResponse(); GambleHostEntity he = GambleHostMgr.GetByManagerIdAndTitleId(managerId, gambleTitleId); if (he == null) { mc.Code = (int)MessageCode.GambleTitleNoExist; return(mc); } //是否存在该题目 GambleTitleEntity gte = GambleTitleMgr.GetById(he.TitleId); if (gte == null) { mc.Code = (int)MessageCode.GambleTitleNoExist; return(mc); } //该题目是否允许玩家坐庄 if (gte.IsOfficial == 1) { mc.Code = (int)MessageCode.ThisGambleTitleIsOfficial; return(mc); } //竞猜还没有开始 if (gte.StartTime > DateTime.Now) { mc.Code = (int)MessageCode.GambleNotStart; return(mc); } if (gte.StopTime < DateTime.Now) { mc.Code = (int)MessageCode.GambleNotStart; return(mc); } //GambleHostEntity he = GambleHostMgr.GetByManagerIdAndTitleId(managerId, gambleTitleId); if (he == null || he.Idx == 0) { mc.Code = (int)MessageCode.GambleUareNotHost; return(mc); } #endregion //支付奖金 string billingId = "Gamble_" + ShareUtil.GenerateComb().ToString(); try { using (var transactionManager = new TransactionManager(Dal.ConnectionFactory.Instance.GetDefault())) { transactionManager.BeginTransaction(); MessageCode code = PayCore.Instance.GambleTrueMatch(managerId, addMoney, billingId, transactionManager.TransactionObject); if (code != MessageCode.Success) { transactionManager.Rollback(); mc.Code = (int)MessageCode.GamblePayError; return(mc); } he.TotalMoney += addMoney; he.HostMoney += addMoney; bool updateResult = GambleHostMgr.Update(he, transactionManager.TransactionObject); if (!updateResult) { transactionManager.Rollback(); mc.Code = (int)MessageCode.GambleAddMoneyError; return(mc); } transactionManager.Commit(); } } catch (Exception ex) { SystemlogMgr.Error("Gamble.AddMoney", ex); mc.Code = (int)MessageCode.Exception; } mc.Data = new AuctionBuyEntity(); mc.Data.ManagerPoint = PayCore.Instance.GetPoint(managerId); return(mc); }