MailBuilder CalPrize(DailycupCompetitorsEntity competitors) { //S1(报名奖励物品)|S1C(报名奖励物品数量)|W(获胜场次)|S2(获胜奖励物品)|S2C(获胜奖励物品数量)|C1(获胜金币)|R(名次)|O(冠军杯积分)|S3(排名阅历)|C2(排名金币)|AT(货币类型) //报名奖励物品 string[] attendPrizeItem = _dailycupAttendPrizeItem.Split(','); string prizeItem1Code = attendPrizeItem[0]; int prizeItem1Count = Convert.ToInt32(attendPrizeItem[1]); string prizeItem1Str = _dailycupAttendPrizeItem; //胜场奖励物品 string[] winPrizeItem = _dailycupWinPrizeItem.Split(','); string prizeItem2Code = winPrizeItem[0]; int prizeItem2Count = Convert.ToInt32(winPrizeItem[1]) * competitors.WinCount; string prizeItem2Str = ""; if (prizeItem2Count > 0) { prizeItem2Str = prizeItem2Code + "," + prizeItem2Count; } //获胜金币 int coin1 = _dailycupWinPrizeCoin * competitors.WinCount; int score = 0; string prizeItem3Str = ""; int coin2 = 0; var prize = CacheFactory.DailycupCache.GetEntity(competitors.Rank); if (prize != null) { score = prize.WorldScore; prizeItem3Str = prize.PrizeItems; coin2 = prize.Coin; } competitors.PrizeItems = prizeItem1Str + "|" + prizeItem2Str + "|" + prizeItem3Str; competitors.PrizeItems = competitors.PrizeItems.TrimEnd('|'); competitors.PrizeCoin = coin1 + coin2; competitors.PrizeScore = score; MailBuilder mailBuilder = null; if (prize != null) { mailBuilder = new MailBuilder(competitors, prizeItem1Code, prizeItem1Count, prizeItem2Code, prizeItem2Count, prizeItem3Str, coin1, coin2); } else { mailBuilder = new MailBuilder(competitors, prizeItem1Code, prizeItem1Count, prizeItem2Code, prizeItem2Count, coin1); } //记录成就相关数据 AchievementTaskCore.Instance.UpdateDailyCupRank(competitors.ManagerId, competitors.Rank); TaskHandler.Instance.DailyCupRank(competitors.ManagerId); return(mailBuilder); }
/// <summary> /// 杯赛排名奖励 /// </summary> /// <param name="competitors"></param> /// <param name="s1"></param> /// <param name="s1c"></param> /// <param name="s2"></param> /// <param name="s2c"></param> /// <param name="c1"></param> public MailBuilder(DailycupCompetitorsEntity competitors, string s1, int s1c, string s2, int s2c, int c1) : this() { //S1(报名奖励物品)|S1C(报名奖励物品数量)|W(获胜场次)|S2(获胜奖励物品)|S2C(获胜奖励物品数量)|C1(获胜金币)|AT(货币类型) string content = string.Format("S1,{0}|S1C,{1}|W,{2}|S2,{3}|S2C,{4}|C1,{5}|AT,{6}", s1, s1c, competitors.WinCount, s2, s2c, c1, (int)EnumCurrencyType.Coin); if (competitors.PrizeCoin > 0) { AddAttachment(EnumCurrencyType.Coin, competitors.PrizeCoin); } var allPrize = competitors.PrizeItems.Split('|'); var prizeList = new Dictionary <int, int>(); foreach (var prize in allPrize) { if (!string.IsNullOrEmpty(prize)) { var prizeInfo = prize.Split(','); var prizeCode = Convert.ToInt32(prizeInfo[0]); var prizeCount = Convert.ToInt32(prizeInfo[1]); if (prizeCount > 0) { if (prizeList.ContainsKey(prizeCode)) { prizeList[prizeCode] += prizeCount; } else { prizeList.Add(prizeCode, prizeCount); } } } } foreach (var item in prizeList) { AddAttachment(item.Value, item.Key, false, 0); } Builder(competitors.ManagerId, EnumMailType.DailycupPrizeBase, content); }
/// <summary> /// Creates the first round. /// </summary> /// <param name="competitors">The competitors.</param> /// <returns></returns> private List <DailycupMatchEntity> CreateFirstRound(List <DailycupCompetitorsEntity> competitors) { //_MaxRound = int count = competitors.Count; int matchCount = (int)Math.Pow(2, _dailycup.Round - 1); List <DailycupMatchEntity> firstRound = new List <DailycupMatchEntity>(); for (int i = 0; i < matchCount; i++) { DailycupCompetitorsEntity away = null; if (matchCount * 2 - i <= count) //非轮空选手 { away = competitors[matchCount * 2 - i - 1]; } DailycupMatchEntity match = Fight(competitors[i], away, 1); firstRound.Add(match); } return(firstRound); }
/// <summary> /// GetById /// </summary> /// <param name="idx">idx</param> /// <returns>DailycupCompetitorsEntity</returns> /// <remarks>2016/1/14 15:50:51</remarks> public DailycupCompetitorsEntity GetById(System.Int32 idx) { var database = new SqlDatabase(this.ConnectionString); DbCommand commandWrapper = database.GetStoredProcCommand("P_DailycupCompetitors_GetById"); database.AddInParameter(commandWrapper, "@Idx", DbType.Int32, idx); DailycupCompetitorsEntity obj = null; using (IDataReader reader = database.ExecuteReader(commandWrapper)) { if (reader.Read()) { obj = LoadSingleRow(reader); } } return(obj); }
/// <summary> /// 将IDataReader的当前记录读取到DailycupCompetitorsEntity 对象 /// </summary> /// <param name="reader"></param> /// <returns></returns> public DailycupCompetitorsEntity LoadSingleRow(IDataReader reader) { var obj = new DailycupCompetitorsEntity(); obj.Idx = (System.Int32)reader["Idx"]; obj.DailyCupId = (System.Int32)reader["DailyCupId"]; obj.ManagerId = (System.Guid)reader["ManagerId"]; obj.ManagerName = (System.String)reader["ManagerName"]; obj.Logo = (System.String)reader["Logo"]; obj.MaxRound = (System.Int32)reader["MaxRound"]; obj.WinCount = (System.Int32)reader["WinCount"]; obj.Rank = (System.Int32)reader["Rank"]; obj.PrizeScore = (System.Int32)reader["PrizeScore"]; obj.PrizeSophisticate = (System.Int32)reader["PrizeSophisticate"]; obj.PrizeCoin = (System.Int32)reader["PrizeCoin"]; obj.PrizeItems = (System.String)reader["PrizeItems"]; obj.Status = (System.Int32)reader["Status"]; obj.RowTime = (System.DateTime)reader["RowTime"]; return(obj); }
/// <summary> /// 带事务的Update /// </summary> /// <param name="entity"></param> /// <param name="trans">The trans.</param> /// <returns></returns> /// <remarks>2016/1/14 15:50:51</remarks> public bool Update(DailycupCompetitorsEntity entity, DbTransaction trans = null) { var database = new SqlDatabase(this.ConnectionString); DbCommand commandWrapper = database.GetStoredProcCommand("dbo.P_DailycupCompetitors_Update"); database.AddInParameter(commandWrapper, "@Idx", DbType.Int32, entity.Idx); database.AddInParameter(commandWrapper, "@DailyCupId", DbType.Int32, entity.DailyCupId); database.AddInParameter(commandWrapper, "@ManagerId", DbType.Guid, entity.ManagerId); database.AddInParameter(commandWrapper, "@ManagerName", DbType.String, entity.ManagerName); database.AddInParameter(commandWrapper, "@Logo", DbType.AnsiString, entity.Logo); database.AddInParameter(commandWrapper, "@MaxRound", DbType.Int32, entity.MaxRound); database.AddInParameter(commandWrapper, "@WinCount", DbType.Int32, entity.WinCount); database.AddInParameter(commandWrapper, "@Rank", DbType.Int32, entity.Rank); database.AddInParameter(commandWrapper, "@PrizeScore", DbType.Int32, entity.PrizeScore); database.AddInParameter(commandWrapper, "@PrizeSophisticate", DbType.Int32, entity.PrizeSophisticate); database.AddInParameter(commandWrapper, "@PrizeCoin", DbType.Int32, entity.PrizeCoin); database.AddInParameter(commandWrapper, "@PrizeItems", DbType.AnsiString, entity.PrizeItems); database.AddInParameter(commandWrapper, "@Status", DbType.Int32, entity.Status); database.AddInParameter(commandWrapper, "@RowTime", DbType.DateTime, entity.RowTime); 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)); }
public static bool Update(DailycupCompetitorsEntity dailycupCompetitorsEntity, DbTransaction trans = null, string zoneId = "") { var provider = new DailycupCompetitorsProvider(zoneId); return(provider.Update(dailycupCompetitorsEntity, trans)); }
DailycupMatchEntity Fight(DailycupCompetitorsEntity home, DailycupCompetitorsEntity away, int round) { DailycupMatchEntity dailycupMatch = new DailycupMatchEntity(); dailycupMatch.DailyCupId = _dailycup.Idx; dailycupMatch.HomeManager = home.ManagerId; dailycupMatch.HomeName = home.ManagerName; dailycupMatch.HomeLogo = home.Logo; dailycupMatch.Idx = ShareUtil.GenerateComb(); dailycupMatch.Round = round; dailycupMatch.ChipInCount = 0; dailycupMatch.RowTime = DateTime.Now; dailycupMatch.Status = 0; dailycupMatch.HomeLevel = home.Level; dailycupMatch.HomePower = home.kpi; dailycupMatch.HomeWorldScore = home.WorldScore; if (away == null) //轮空 { dailycupMatch.AwayManager = Guid.Empty; dailycupMatch.AwayName = ""; dailycupMatch.AwayScore = 0; dailycupMatch.HomeScore = 0; dailycupMatch.AwayLogo = ""; } else { try { home.MaxRound = round; away.MaxRound = round; home.Rank = _dailycup.Round - round + 1; away.Rank = _dailycup.Round - round + 1; var matchHome = new MatchManagerInfo(home.ManagerId, false, false); var matchAway = new MatchManagerInfo(away.ManagerId, false, false); var matchData = new BaseMatchData((int)EnumMatchType.Dailycup, dailycupMatch.Idx, matchHome, matchAway); matchData.ErrorCode = (int)MessageCode.MatchWait; matchData.NoDraw = true; MemcachedFactory.MatchClient.Set(matchData.MatchId, matchData); MatchCore.CreateMatch(matchData); ////测试用 ------------ //matchData.ErrorCode = (int)MessageCode.Success; //matchData.Home.Score = 5; //matchData.Away.Score = 2; if (matchData.ErrorCode == (int)MessageCode.Success) { dailycupMatch.AwayManager = away.ManagerId; dailycupMatch.AwayName = away.ManagerName; dailycupMatch.AwayLevel = away.Level; dailycupMatch.AwayLogo = away.Logo; dailycupMatch.AwayPower = away.kpi; dailycupMatch.AwayWorldScore = away.WorldScore; dailycupMatch.HomeScore = matchData.Home.Score; dailycupMatch.AwayScore = matchData.Away.Score; if (matchData.Away.Score > matchData.Home.Score) { away.WinCount++; if (round == _dailycup.Round) { away.Rank = -1; } } else { home.WinCount++; if (round == _dailycup.Round) { home.Rank = -1; } } AddMatchStat(dailycupMatch); } else { dailycupMatch.AwayManager = Guid.Empty; dailycupMatch.AwayName = ""; dailycupMatch.AwayScore = 0; dailycupMatch.HomeScore = 0; dailycupMatch.AwayLogo = ""; SystemlogMgr.Error("Create Dailycup", string.Format("round:{0},homeId:{1},awayId:{2},code:{3}", round, home.Idx, away.Idx, matchData.ErrorCode)); return(dailycupMatch); } } catch (Exception ex) { SystemlogMgr.Error("Create Dailycup", string.Format("round:{0},homeId:{1},awayId:{2}", round, home.Idx, away.Idx)); throw ex; } } return(dailycupMatch); }