Example #1
0
        /// <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));
        }
Example #3
0
        /// <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);
        }
Example #7
0
        public static bool Update(GambleHostEntity gambleHostEntity, DbTransaction trans = null, string zoneId = "")
        {
            var provider = new GambleHostProvider(zoneId);

            return(provider.Update(gambleHostEntity, trans));
        }
Example #8
0
        public static bool InsertOnce(GambleHostEntity e, DbTransaction trans = null, string zoneId = "")
        {
            GambleHostProvider provider = new GambleHostProvider(zoneId);

            return(provider.InsertOnce2(e, trans));
        }
Example #9
0
        /// <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);
        }
Example #10
0
        /// <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);
        }
Example #11
0
        /// <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);
        }