/// <summary> /// 带事务的Update /// </summary> /// <param name="entity"></param> /// <param name="trans">The trans.</param> /// <returns></returns> /// <remarks>2016/7/12 19:42:45</remarks> public bool Update(ConfigTurntableprizeEntity entity, DbTransaction trans) { var database = new SqlDatabase(this.ConnectionString); DbCommand commandWrapper = database.GetStoredProcCommand("dbo.P_ConfigTurntableprize_Update"); database.AddInParameter(commandWrapper, "@Idx", DbType.Int32, entity.Idx); database.AddInParameter(commandWrapper, "@TurntableId", DbType.Int32, entity.TurntableId); database.AddInParameter(commandWrapper, "@TurntableType", DbType.Int32, entity.TurntableType); database.AddInParameter(commandWrapper, "@PrizeType", DbType.Int32, entity.PrizeType); database.AddInParameter(commandWrapper, "@SubType", DbType.Int32, entity.SubType); database.AddInParameter(commandWrapper, "@ItemCount", DbType.Int32, entity.ItemCount); database.AddInParameter(commandWrapper, "@SpecialString", DbType.AnsiString, entity.SpecialString); database.AddInParameter(commandWrapper, "@InitialRate", DbType.Int32, entity.InitialRate); int results = 0; if (trans != null) { results = database.ExecuteNonQuery(commandWrapper, trans); } else { results = database.ExecuteNonQuery(commandWrapper); } return(Convert.ToBoolean(results)); }
/// <summary> /// 将IDataReader的当前记录读取到ConfigTurntableprizeEntity 对象 /// </summary> /// <param name="reader"></param> /// <returns></returns> public ConfigTurntableprizeEntity LoadSingleRow(IDataReader reader) { var obj = new ConfigTurntableprizeEntity(); obj.Idx = (System.Int32)reader["Idx"]; obj.TurntableId = (System.Int32)reader["TurntableId"]; obj.TurntableType = (System.Int32)reader["TurntableType"]; obj.PrizeType = (System.Int32)reader["PrizeType"]; obj.SubType = (System.Int32)reader["SubType"]; obj.ItemCount = (System.Int32)reader["ItemCount"]; obj.SpecialString = (System.String)reader["SpecialString"]; obj.InitialRate = (System.Int32)reader["InitialRate"]; return(obj); }
/// <summary> /// 解析特殊物品 /// </summary> /// <param name="prizeEntity"></param> /// <returns></returns> public int AnalysisSpecial(ConfigTurntableprizeEntity prizeEntity) { if (prizeEntity.SpecialString.Length <= 0) { return(0); } var prizeList = prizeEntity.SpecialString.Split(','); int index = RandomHelper.GetInt32WithoutMax(0, prizeList.Length); int prizeCode = ConvertHelper.ConvertToInt(prizeList[index]); if (prizeCode == 0) { return(0); } return(prizeCode); }
/// <summary> /// GetById /// </summary> /// <param name="idx">idx</param> /// <returns>ConfigTurntableprizeEntity</returns> /// <remarks>2016/7/12 19:42:45</remarks> public ConfigTurntableprizeEntity GetById(System.Int32 idx) { var database = new SqlDatabase(this.ConnectionString); DbCommand commandWrapper = database.GetStoredProcCommand("P_ConfigTurntableprize_GetById"); database.AddInParameter(commandWrapper, "@Idx", DbType.Int32, idx); ConfigTurntableprizeEntity obj = null; using (IDataReader reader = database.ExecuteReader(commandWrapper)) { if (reader.Read()) { obj = LoadSingleRow(reader); } } return(obj); }
/// <summary> /// Update /// </summary> /// <param name="entity"></param> /// <returns></returns> /// <remarks>2016/7/12 19:42:45</remarks> public bool Update(ConfigTurntableprizeEntity entity) { return(Update(entity, null)); }
/// <summary> /// Insert /// </summary> /// <param name="entity"></param> /// <param name="trans">The trans.</param> /// <returns></returns> /// <remarks>2016/7/12 19:42:45</remarks> public bool Insert(ConfigTurntableprizeEntity entity) { return(Insert(entity, null)); }
public static bool Update(ConfigTurntableprizeEntity configTurntableprizeEntity, DbTransaction trans = null, string zoneId = "") { var provider = new ConfigTurntableprizeProvider(zoneId); return(provider.Update(configTurntableprizeEntity, trans)); }
/// <summary> /// 发奖 /// </summary> /// <param name="managerId"></param> /// <param name="prizeEntity"></param> /// <param name="specialItem"></param> /// <param name="addpoint"></param> /// <param name="addcoin"></param> /// <param name="isAddPackage"></param> /// <param name="package"></param> /// <param name="response"></param> /// <param name="record"></param> /// <returns></returns> MessageCode SendPrize(Guid managerId, ConfigTurntableprizeEntity prizeEntity, int specialItem, ref int addpoint, ref int addcoin, ref bool isAddPackage, ref ItemPackageFrame package, TurntableLuckDrawResponse response, TurntableLuckyrecordEntity record) { var messCode = MessageCode.Success; response.Data.PrizeCount = prizeEntity.ItemCount; switch (prizeEntity.PrizeType) { case (int)EnumTurntablePrizeType.Point: addpoint = prizeEntity.ItemCount; response.Data.PrizeCode = 0; response.Data.PrizeType = (int)EnumTurntablePrizeType.Point; record.LuckDrawString = (int)prizeEntity.PrizeType + "," + prizeEntity.SubType + "," + prizeEntity.ItemCount; break; case (int)EnumTurntablePrizeType.Coin: addcoin = prizeEntity.ItemCount; response.Data.PrizeCode = 0; response.Data.PrizeType = (int)EnumTurntablePrizeType.Coin; record.LuckDrawString = (int)prizeEntity.PrizeType + "," + prizeEntity.SubType + "," + prizeEntity.ItemCount; break; case (int)EnumTurntablePrizeType.Item: isAddPackage = true; messCode = package.AddItems(prizeEntity.SubType, prizeEntity.ItemCount); if (messCode != MessageCode.Success) { return(messCode); } response.Data.PrizeCode = prizeEntity.SubType; response.Data.PrizeType = (int)EnumTurntablePrizeType.Item; record.LuckDrawString = (int)prizeEntity.PrizeType + "," + prizeEntity.SubType + "," + prizeEntity.ItemCount; break; case (int)EnumTurntablePrizeType.Random: isAddPackage = true; var itemCode = CacheFactory.LotteryCache.LotteryByLib(prizeEntity.SubType); var itemCache = CacheFactory.ItemsdicCache.GetItem(itemCode); if (itemCache == null) { return(MessageCode.ItemNotExists); } if (itemCache.ItemType == (int)EnumItemType.PlayerCard) { messCode = package.AddPlayerCard(itemCode, 1, false, 1, false); } else { messCode = package.AddItems(itemCode, prizeEntity.ItemCount); } if (messCode != MessageCode.Success) { return(messCode); } response.Data.PrizeCode = itemCode; response.Data.PrizeType = (int)EnumTurntablePrizeType.Item; record.LuckDrawString = (int)prizeEntity.PrizeType + "," + itemCode + "," + prizeEntity.ItemCount; break; case (int)EnumTurntablePrizeType.Turntable: record.LuckDrawString = (int)prizeEntity.PrizeType + "," + prizeEntity.SubType + "," + prizeEntity.ItemCount; break; case (int)EnumTurntablePrizeType.Special: isAddPackage = true; if (specialItem == 0) { return(MessageCode.NbParameterError); } messCode = package.AddItems(specialItem, prizeEntity.ItemCount); if (messCode != MessageCode.Success) { return(messCode); } response.Data.PrizeCode = specialItem; response.Data.PrizeType = (int)EnumTurntablePrizeType.Item; record.LuckDrawString = (int)prizeEntity.PrizeType + "," + specialItem + "," + prizeEntity.ItemCount; break; default: break; } return(MessageCode.Success); }
/// <summary> /// 抽奖 /// </summary> /// <param name="specialItem">特殊物品code</param> /// <returns></returns> public ConfigTurntableprizeEntity LuckDraw(ref int specialItem) { if (_turntableManagerEntity.GiveLuckyCoin > 0) { _turntableManagerEntity.GiveLuckyCoin--; } else if (_turntableManagerEntity.LuckyCoin > 0) { _turntableManagerEntity.LuckyCoin--; } ConfigTurntableprizeEntity resultPrize = null; int rateNumber = RandomHelper.GetInt32(0, 10000); int startRate = 0; //初始概率 int distributionRate = 0; //抽奖后可分配概率 int distributionItemNumber = 0; //剩余分配概率的项 bool isWinAlottert = false; //是否抽奖完成 var isFirst = false; if (TurnTableDic.IsFirst) { isFirst = true; TurnTableDic.IsFirst = false; } foreach (var item in TurnTableDic.ItemList) { if (!item.IsEffective) { continue; } if (!isWinAlottert) { startRate += item.Rate; if (startRate >= rateNumber && rateNumber >= startRate - item.Rate) { resultPrize = CacheFactory.TurntableCache.GetTurntablePrize(_turntableManagerEntity.TurntableType, item.Idx); if (resultPrize == null) { return(null); } //抽到转盘 直接刷新 if (item.IsTurntable) { if (isFirst)//首次不能抽到转盘 { resultPrize = null; distributionItemNumber++; startRate = startRate - item.Rate; continue; } if (resultPrize.PrizeType == (int)EnumTurntablePrizeType.Turntable) { GoToTurntable(resultPrize.SubType, true); return(resultPrize); } } if (resultPrize.PrizeType == (int)EnumTurntablePrizeType.Special) { specialItem = item.SpecialItem; } item.IsEffective = false; distributionRate = item.Rate; item.Rate = 0; isWinAlottert = true; continue; } } distributionItemNumber++; } //distributionItemNumber = distributionItemNumber - 2;//减去两个转盘,转盘概率不变 if (distributionItemNumber - 2 <= 0) //自动重置转盘 { Initialization(_turntableManagerEntity.TurntableType); } else { bool isadd1 = false;//是否能除净 if (distributionRate % distributionItemNumber != 0) { isadd1 = true; } int averageDistributionRate = distributionRate / distributionItemNumber; if (isadd1) { averageDistributionRate++; } //重新计算概率 foreach (var item in TurnTableDic.ItemList) { //if (item.IsTurntable || !item.IsEffective) if (!item.IsEffective) { continue; } item.Rate += averageDistributionRate; } } isUpdate = true; return(resultPrize); }