Ejemplo n.º 1
0
        /// <summary>
        /// 带事务的Update
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="trans">The trans.</param>
        /// <returns></returns>
        /// <remarks>2016/1/13 10:35:41</remarks>
        public bool Update(DailycupInfoEntity entity, DbTransaction trans = null)
        {
            var       database       = new SqlDatabase(this.ConnectionString);
            DbCommand commandWrapper = database.GetStoredProcCommand("dbo.P_DailycupInfo_Update");

            database.AddInParameter(commandWrapper, "@Idx", DbType.Int32, entity.Idx);
            database.AddInParameter(commandWrapper, "@Round", DbType.Int32, entity.Round);
            database.AddInParameter(commandWrapper, "@OpenGambleRound", DbType.Int32, entity.OpenGambleRound);
            database.AddInParameter(commandWrapper, "@AttendDate", DbType.DateTime, entity.AttendDate);
            database.AddInParameter(commandWrapper, "@RunDate", DbType.DateTime, entity.RunDate);
            database.AddInParameter(commandWrapper, "@Status", DbType.Int32, entity.Status);
            database.AddInParameter(commandWrapper, "@RowTime", DbType.DateTime, entity.RowTime);
            database.AddInParameter(commandWrapper, "@UpdateTime", DbType.DateTime, entity.UpdateTime);


            int results = 0;

            if (trans != null)
            {
                results = database.ExecuteNonQuery(commandWrapper, trans);
            }
            else
            {
                results = database.ExecuteNonQuery(commandWrapper);
            }


            return(Convert.ToBoolean(results));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 获取我的杯赛历程.
        /// </summary>
        /// <param name="managerId">The manager.</param>
        /// <returns></returns>
        /// <remarks>
        /// </remarks>
        /// <history>
        /// </history>
        public MyDailycupMatchResponse GetMyDailycupMatch(Guid managerId)
        {
            var response = ResponseHelper.CreateSuccess <MyDailycupMatchResponse>();

            response.Data = new MyDailycupMatchEntity();

            DailycupInfoEntity dailycup = DailycupInfoMgr.GetByDate(DateTime.Today);

            if (dailycup != null && dailycup.Status > (int)EnumDailycupStatus.Close)
            {
                //计算开始回合
                int beginRound = BeginRound(dailycup.Round);
                int endRound   = NowShowRound(beginRound, dailycup.Round, DateTime.Now);
                if (endRound < beginRound)
                {
                    response.Data        = new MyDailycupMatchEntity();
                    response.Data.Matchs = new List <DailycupMatchEntity>(0);
                    return(response);
                }
                //最新轮时间
                DateTime cTime = NowRoundEndTime(dailycup.Round, endRound);
                if (DateTime.Now < cTime)//最新轮是否隐藏
                {
                    endRound--;
                }
                List <DailycupMatchEntity> dailycupmatchs = DailycupMatchMgr.GetMatchByManager(dailycup.Idx, managerId, endRound);
                response.Data.Matchs = dailycupmatchs;
            }
            else
            {
                response.Data.Matchs = new List <DailycupMatchEntity>(0);
            }
            return(response);
        }
Ejemplo n.º 3
0
 /// <summary>
 /// 运行杯赛
 /// </summary>
 /// <param name="dailycup"></param>
 /// <param name="isForce">是否强制执行</param>
 /// <returns></returns>
 public MessageCode RunDailycup(DailycupInfoEntity dailycup, bool isForce = false)
 {
     if (0 == Interlocked.Exchange(ref _syncRunDailycup, 1))
     {
         try
         {
             if (dailycup == null)
             {
                 return(MessageCode.DailycupNotExists);
             }
             if (dailycup.RunDate > DateTime.Today)
             {
                 return(MessageCode.DailycupNottimetoRun);
             }
             if (dailycup.Status == (int)EnumDailycupStatus.Opening)
             {
                 dailycup.Status     = (int)EnumDailycupStatus.Close;
                 dailycup.UpdateTime = DateTime.Now;
                 DailycupInfoMgr.Update(dailycup);
             }
             else
             {
                 if (dailycup.Status == (int)EnumDailycupStatus.End)
                 {
                     return(MessageCode.DailycupStatusNotOpen);
                 }
                 else if (dailycup.Status == (int)EnumDailycupStatus.Close)
                 {
                     if (dailycup.UpdateTime.AddHours(1) > DateTime.Now)
                     {
                         return(MessageCode.DailycupStatusNotOpen);
                     }
                 }
                 else
                 {
                     return(MessageCode.DailycupStatusNotOpen);
                 }
             }
             //查找所有这轮报名
             var competitorList  = DailycupCompetitorsMgr.GetForFight(dailycup.Idx);
             var dailycupProcess = new DailycupProcess(competitorList, dailycup);
             return(dailycupProcess.StartDailycup());
         }
         catch (Exception ex)
         {
             SystemlogMgr.Error("DailycupAssociation RunDailycup", ex);
             return(MessageCode.Exception);
         }
         finally
         {
             Interlocked.Exchange(ref _syncRunDailycup, 0);
         }
     }
     else
     {
         return(MessageCode.SystemBusy);
     }
 }
Ejemplo n.º 4
0
        public MessageCode OpenGamble(DailycupInfoEntity dailycup)
        {
            if (0 == Interlocked.Exchange(ref _syncOpenGamble, 1))
            {
                //不可重入
                try
                {
                    if (dailycup == null)
                    {
                        return(MessageCode.DailycupNotExists);
                    }
                    if (dailycup.Status != (int)EnumDailycupStatus.End)  //只能计算已打完的杯赛
                    {
                        return(MessageCode.DailycupStatusNotEnd);
                    }

                    var beginRound = dailycup.OpenGambleRound; //获取已开奖的轮数
                    var endRound   = DailycupCore.Instance.NowGambleOpenRound(dailycup.Round, DateTime.Now);
                    if (beginRound == endRound)                //该杯赛已全部开过奖了
                    {
                        return(MessageCode.DailycupGambleOpened);
                    }
                    if (beginRound == 0)
                    {
                        beginRound = DailycupCore.Instance.BeginRound(dailycup.Round);
                    }
                    else
                    {
                        beginRound = beginRound + 1;
                    }
                    for (int i = beginRound; i <= endRound; i++)
                    {
                        //SystemlogMgr.Info("DailycupGambleOpen", string.Format("杯赛{0}的第{1}轮开奖启动", dailycup.Idx, i));
                        OpenGamble(dailycup.Idx, i);
                        dailycup.OpenGambleRound = i;
                        dailycup.UpdateTime      = DateTime.Now;
                        DailycupInfoMgr.Update(dailycup);
                        //SystemlogMgr.Info("DailycupGambleOpen", string.Format("杯赛{0}的第{1}轮开奖完成", dailycup.Idx, i));
                    }
                    return(MessageCode.Success);
                }
                catch (Exception ex)
                {
                    SystemlogMgr.Error("Dailycup OpenGamble", ex);
                    return(MessageCode.Exception);
                }
                finally
                {
                    //Release the lock
                    Interlocked.Exchange(ref _syncOpenGamble, 0);
                }
            }
            else
            {
                return(MessageCode.SystemBusy);
            }
        }
Ejemplo n.º 5
0
        DailycupFullDataResponse GetDailycupDataToday(Guid managerId, DailycupInfoEntity dailycup, DateTime curTime)
        {
            DailycupFullDataEntity dailycupData = new DailycupFullDataEntity();

            dailycupData.DailycupId  = dailycup.Idx;
            dailycupData.HasNext     = true;
            dailycupData.AttendState = GetAttendState(managerId) ? 1 : 0;
            if (dailycup.Status > (int)EnumDailycupStatus.Close)
            {
                //计算开始回合
                int beginRound = BeginRound(dailycup.Round);
                int endRound   = NowShowRound(beginRound, dailycup.Round, curTime);
                dailycupData.RoundType = CalRoundType(endRound, beginRound);
                if (endRound >= beginRound)
                {
                    GetDailycupData(dailycupData, managerId, beginRound, endRound);
                    //最新轮时间
                    DateTime cTime = NowRoundEndTime(dailycup.Round, endRound);
                    if (curTime < cTime) //最新轮比分是否隐藏
                    {
                        int  maxCount       = 0;
                        bool hasGambleRight = CheckGambleCount(dailycupData.MyGambleData.Count, managerId, out maxCount);
                        foreach (DailycupMatchEntity match in dailycupData.Matchs)
                        {
                            if (match.Round == endRound)
                            {
                                match.HomeScore = -1;
                                match.AwayScore = -1;
                                if (dailycupData.MyGambleData.Exists(gamble => gamble.MatchId == match.Idx))
                                {
                                    match.Status = (int)EnumDailycupMatchStatus.HasGamble;
                                }
                                else
                                {
                                    if (hasGambleRight)
                                    {
                                        match.Status = (int)EnumDailycupMatchStatus.Gamble;
                                    }
                                    else
                                    {
                                        match.Status = (int)EnumDailycupMatchStatus.NoGambel;
                                    }
                                }
                            }
                        }
                    }
                }
            }

            var response = ResponseHelper.CreateSuccess <DailycupFullDataResponse>();

            response.Data = dailycupData;
            return(response);
        }
Ejemplo n.º 6
0
 /// <summary>
 /// Gets the full dailycup data by day.
 /// </summary>
 /// <param name="managerId">The manager.</param>
 /// <param name="dailycupId">The daily.</param>
 /// <returns></returns>
 /// <remarks>
 /// </remarks>
 /// <history>
 /// </history>
 public DailycupFullDataResponse GetDailycupData(Guid managerId, int dailycupId, DateTime curTime)
 {
     try
     {
         DailycupInfoEntity dailycup = null;
         if (dailycupId == 0)
         {
             dailycup = DailycupInfoMgr.GetByDate(DateTime.Today);
             if (dailycup == null)
             {
                 return(ResponseHelper.Create <DailycupFullDataResponse>(MessageCode.DailycupNotExists));
             }
         }
         else
         {
             dailycup = DailycupInfoMgr.GetById(dailycupId);
         }
         if (dailycup == null)
         {
             return(ResponseHelper.InvalidParameter <DailycupFullDataResponse>());
         }
         if (dailycup.RunDate == DateTime.Today) //判断是否是当日杯赛,今天的杯赛是昨天创建
         {
             return(GetDailycupDataToday(managerId, dailycup, curTime));
         }
         else
         {
             //计算开始回合
             int beginRound = BeginRound(dailycup.Round);
             int endRound   = dailycup.Round;
             DailycupFullDataEntity dailycupData = new DailycupFullDataEntity();
             dailycupData.DailycupId = dailycup.Idx;
             GetDailycupData(dailycupData, managerId, beginRound, endRound);
             foreach (DailycupMatchEntity match in dailycupData.Matchs)
             {
                 match.Status = (int)EnumDailycupMatchStatus.ShowScore;
             }
             dailycupData.RoundType   = CalRoundType(endRound, beginRound);
             dailycupData.HasNext     = dailycup.RunDate < DateTime.Today.AddDays(1);
             dailycupData.AttendState = GetAttendState(managerId) ? 1 : 0;
             var response = ResponseHelper.CreateSuccess <DailycupFullDataResponse>();
             response.Data = dailycupData;
             return(response);
         }
     }
     catch (Exception ex)
     {
         SystemlogMgr.Error("GetDailycupData", ex);
         return(ResponseHelper.Create <DailycupFullDataResponse>(MessageCode.Exception));
     }
 }
Ejemplo n.º 7
0
        /// <summary>
        /// 将IDataReader的当前记录读取到DailycupInfoEntity 对象
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        public DailycupInfoEntity LoadSingleRow(IDataReader reader)
        {
            var obj = new DailycupInfoEntity();

            obj.Idx             = (System.Int32)reader["Idx"];
            obj.Round           = (System.Int32)reader["Round"];
            obj.OpenGambleRound = (System.Int32)reader["OpenGambleRound"];
            obj.AttendDate      = (System.DateTime)reader["AttendDate"];
            obj.RunDate         = (System.DateTime)reader["RunDate"];
            obj.Status          = (System.Int32)reader["Status"];
            obj.RowTime         = (System.DateTime)reader["RowTime"];
            obj.UpdateTime      = (System.DateTime)reader["UpdateTime"];

            return(obj);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 判断投注是否关闭
        /// </summary>
        /// <param name="dailycup">The dailycup.</param>
        /// <param name="match">The match.</param>
        /// <returns>
        ///     <c>true</c> if [is gamble closed] [the specified dailycup id]; otherwise, <c>false</c>.
        /// </returns>
        public bool IsGambleClosed(DailycupInfoEntity dailycup, DailycupMatchEntity match)
        {
            DateTime now             = DateTime.Now;
            DateTime gambleLimitTime = DateTime.Today;

            //第一轮比赛投注截止时间
            gambleLimitTime = gambleLimitTime.AddSeconds(GetDailycupRoundTime(0).GambelCloseTime);
            if (match.Round == BeginRound(dailycup.Round))//当前押注的是第一轮比赛
            {
                if (DateTime.Now < gambleLimitTime)
                {
                    if (DateTime.Now > DateTime.Today.AddSeconds(CacheFactory.AppsettingCache.GetAppSettingToInt(EnumAppsetting.DailycupMyFirstRoundTime)))
                    {
                        return(false);
                    }
                    else
                    {
                        return(true);
                    }
                }
                else
                {
                    return(true);
                }
            }

            int interValround = CacheFactory.AppsettingCache.GetAppSettingToInt(EnumAppsetting.DailycupSemiFinalRoundCount) - (dailycup.Round - match.Round + 1);

            if (interValround < 0 || interValround > 2)
            {
                return(true);
            }

            //投注截止时间
            gambleLimitTime = DateTime.Today.AddSeconds(GetDailycupRoundTime(interValround).GambelCloseTime);

            //投注开始时间
            DateTime preTime = DateTime.Today.AddSeconds(GetDailycupRoundTime(interValround - 1).MatchEndTime);

            if (now >= gambleLimitTime || now < preTime)
            {
                return(true);
            }

            return(false);
        }
Ejemplo n.º 9
0
 /// <summary>
 /// constuctor
 /// </summary>
 /// <param name="competitors">报名人员</param>
 /// <param name="dailycup">The dailycup.</param>
 public DailycupProcess(List <DailycupCompetitorsEntity> competitors, DailycupInfoEntity dailycup)
 {
     _CompetitorIndex = CreateIndex(competitors);
     _dailycup        = dailycup;
     _dailycup.Round  = DailycupRound(competitors.Count);
     _matches         = new List <List <DailycupMatchEntity> >();
     _Competitors     = competitors;
     _matchstatDic    = new Dictionary <Guid, NbMatchstatEntity>(competitors.Count);
     foreach (var entity in competitors)
     {
         if (!_matchstatDic.ContainsKey(entity.ManagerId))
         {
             _matchstatDic.Add(entity.ManagerId, new NbMatchstatEntity()
             {
                 ManagerId = entity.ManagerId, Draw = 0, Lose = 0, Win = 0
             });
         }
     }
 }
Ejemplo n.º 10
0
        /// <summary>
        /// GetById
        /// </summary>
        /// <param name="idx">idx</param>
        /// <returns>DailycupInfoEntity</returns>
        /// <remarks>2016/1/13 10:35:41</remarks>
        public DailycupInfoEntity GetById(System.Int32 idx)
        {
            var database = new SqlDatabase(this.ConnectionString);

            DbCommand commandWrapper = database.GetStoredProcCommand("P_DailycupInfo_GetById");

            database.AddInParameter(commandWrapper, "@Idx", DbType.Int32, idx);


            DailycupInfoEntity obj = null;

            using (IDataReader reader = database.ExecuteReader(commandWrapper))
            {
                if (reader.Read())
                {
                    obj = LoadSingleRow(reader);
                }
            }
            return(obj);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// GetByDate
        /// </summary>
        /// <param name="rundate">rundate</param>
        /// <returns>DailycupInfoEntity</returns>
        /// <remarks>2016/1/13 10:35:41</remarks>
        public DailycupInfoEntity GetByDate(System.DateTime rundate)
        {
            var database = new SqlDatabase(this.ConnectionString);

            DbCommand commandWrapper = database.GetStoredProcCommand("C_DailyCup_GetByDate");

            database.AddInParameter(commandWrapper, "@Rundate", DbType.DateTime, rundate);


            DailycupInfoEntity obj = null;

            using (IDataReader reader = database.ExecuteReader(commandWrapper))
            {
                if (reader.Read())
                {
                    obj = LoadSingleRow(reader);
                }
            }
            return(obj);
        }
Ejemplo n.º 12
0
        public static bool Update(DailycupInfoEntity dailycupInfoEntity, DbTransaction trans = null, string zoneId = "")
        {
            var provider = new DailycupInfoProvider(zoneId);

            return(provider.Update(dailycupInfoEntity, trans));
        }
Ejemplo n.º 13
0
        public MessageCode RunDailycup()
        {
            DailycupInfoEntity dailycup = DailycupInfoMgr.GetByDate(DateTime.Today);

            return(RunDailycup(dailycup));
        }
Ejemplo n.º 14
0
        public MessageCode SendPrize(DailycupInfoEntity dailycup)
        {
            if (0 == Interlocked.Exchange(ref _syncSendPrize, 1))
            {
                try
                {
                    if (dailycup == null)
                    {
                        return(MessageCode.DailycupNotExists);
                    }
                    if (dailycup.Status != (int)EnumDailycupStatus.End)  //只能计算已打完的杯赛
                    {
                        return(MessageCode.DailycupStatusNotEnd);
                    }
                    var beginRound = dailycup.Round; //获取已开奖的轮数
                    var endRound   = DailycupCore.Instance.NowGambleOpenRound(dailycup.Round, DateTime.Now);
                    if (beginRound > endRound)
                    {
                        return(MessageCode.DailycupNotimetoSendPrize);
                    }
                    dailycup.Status     = (int)EnumDailycupStatus.StartSend;
                    dailycup.UpdateTime = DateTime.Now;
                    DailycupInfoMgr.Update(dailycup);

                    var competitorsList = DailycupCompetitorsMgr.GetByDailycupId(dailycup.Idx);
                    if (competitorsList == null)
                    {
                        return(MessageCode.DailycupNoCompetitors);
                    }

                    List <MailBuilder>          mailList  = new List <MailBuilder>(competitorsList.Count);
                    List <NbManagerhonorEntity> honorList = new List <NbManagerhonorEntity>(2);
                    foreach (var entity in competitorsList)
                    {
                        mailList.Add(CalPrize(entity));
                        ManagerCore.Instance.DeleteCache(entity.ManagerId);
                        if (entity.Rank == -1)
                        {
                            honorList.Add(new NbManagerhonorEntity()
                            {
                                ManagerId = entity.ManagerId, MatchType = (int)EnumMatchType.Dailycup, PeriodId = entity.DailyCupId, Rank = 1, SubType = 0, Rowtime = DateTime.Now
                            });
                        }
                        else if (entity.Rank == 1)
                        {
                            honorList.Add(new NbManagerhonorEntity()
                            {
                                ManagerId = entity.ManagerId, MatchType = (int)EnumMatchType.Dailycup, PeriodId = entity.DailyCupId, Rank = 2, SubType = 0, Rowtime = DateTime.Now
                            });
                        }
                    }

                    DailycupSqlHelper.SaveCompetitorsPrize(competitorsList);

                    MailCore.SaveMailBulk(mailList);

                    dailycup.Status     = (int)EnumDailycupStatus.Finish;
                    dailycup.UpdateTime = DateTime.Now;
                    DailycupInfoMgr.Update(dailycup);
                    foreach (var entity in honorList)
                    {
                        NbManagerhonorMgr.Add(entity.ManagerId, entity.MatchType, entity.SubType, entity.PeriodId,
                                              entity.Rank);
                    }
                    return(MessageCode.Success);
                }
                catch (Exception ex)
                {
                    SystemlogMgr.Error("Dailycup SendPrize", ex);
                    return(MessageCode.Exception);
                }
                finally
                {
                    Interlocked.Exchange(ref _syncSendPrize, 0);
                }
            }
            else
            {
                return(MessageCode.SystemBusy);
            }
        }