/// <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)); }
/// <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); }
/// <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); } }
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); } }
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); }
/// <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)); } }
/// <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); }
/// <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); }
/// <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 }); } } }
/// <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); }
/// <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); }
public static bool Update(DailycupInfoEntity dailycupInfoEntity, DbTransaction trans = null, string zoneId = "") { var provider = new DailycupInfoProvider(zoneId); return(provider.Update(dailycupInfoEntity, trans)); }
public MessageCode RunDailycup() { DailycupInfoEntity dailycup = DailycupInfoMgr.GetByDate(DateTime.Today); return(RunDailycup(dailycup)); }
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); } }