/// <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);
        }
Exemple #3
0
        /// <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));
 }
Exemple #7
0
        public static bool Update(ConfigTurntableprizeEntity configTurntableprizeEntity, DbTransaction trans = null, string zoneId = "")
        {
            var provider = new ConfigTurntableprizeProvider(zoneId);

            return(provider.Update(configTurntableprizeEntity, trans));
        }
Exemple #8
0
        /// <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);
        }
Exemple #9
0
        /// <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);
        }