public void UpdateTianTiRankData(DateTime now, bool monthRank = false, bool force = false) { if (Monitor.TryEnter(MutexPaiHang)) { try { if (!force) { lock (Mutex) { if (RankData.ModifyTime.DayOfYear == now.DayOfYear) { return; } } } if (!monthRank) { if (now.Day == 1) { monthRank = true; } } List <TianTiRoleInfoData> tianTiRoleInfoDataList = new List <TianTiRoleInfoData>(); string strSql = ""; MySqlDataReader sdr = null; try { ReloadTianTiRankDayList(tianTiRoleInfoDataList); } catch (System.Exception ex) { LogManager.WriteExceptionUseCache(ex.ToString()); return; } finally { if (null != sdr) { sdr.Close(); } } int ret = 0; try { if (tianTiRoleInfoDataList.Count > 0) { ret = DbHelperMySQL.ExecuteSql(string.Format("UPDATE t_tianti_roles SET `duanweirank`={0}", RankData.MaxPaiMingRank + 1)); if (ret >= 0) { ret = DbHelperMySQL.ExecuteSql("DELETE FROM t_tianti_day_paihang;"); } if (ret >= 0) { int c = tianTiRoleInfoDataList.Count; int numPerExec = 50; for (int i = 0; i < c; i++) { if (i % numPerExec == 0) { strSql = "INSERT INTO t_tianti_day_paihang(rid,rank) VALUES"; } strSql += string.Format("({0},{1})", tianTiRoleInfoDataList[i].RoleId, tianTiRoleInfoDataList[i].DuanWeiRank); if ((i % numPerExec) == (numPerExec - 1) || i == (c - 1)) { DbHelperMySQL.ExecuteSql(strSql); } else { strSql += ','; } } DbHelperMySQL.ExecuteSql("UPDATE t_tianti_roles r, t_tianti_day_paihang d SET r.`duanweirank` = d.`rank` WHERE r.`rid` = d.`rid`;"); if (monthRank) { DbHelperMySQL.ExecuteSql("DELETE FROM t_tianti_month_paihang;"); strSql = "INSERT INTO t_tianti_month_paihang SELECT * FROM t_tianti_roles WHERE rid IN (SELECT rid FROM t_tianti_day_paihang) ORDER BY `duanweirank` ASC;"; DbHelperMySQL.ExecuteSql(strSql); DbHelperMySQL.ExecuteSql("DELETE FROM t_tianti_day_paihang;"); DbHelperMySQL.ExecuteSql("UPDATE t_tianti_roles SET `duanweirank`=0,`duanweijifen`=0,`duanweiid`=0;"); } } if (ret >= 0) { strSql = string.Format("UPDATE t_async SET `value`={1} WHERE `id`={0};", AsyncTypes.TianTiPaiHangModifyOffsetDay, DataHelper2.GetOffsetDay(now)); ExecuteSqlNoQuery(strSql); } } lock (Mutex) { RankData.ModifyTime = now; if (monthRank) { RankData.TianTiRoleInfoDataList = new List <TianTiRoleInfoData>(); RankData.TianTiMonthRoleInfoDataList = tianTiRoleInfoDataList; } else { RankData.TianTiRoleInfoDataList = tianTiRoleInfoDataList; } } if (monthRank) { try { // 这里是为了保证跨服中心月初跨天的时候,更新 ZhengBaManagerK.Instance().ReloadSyncData(now); } catch (Exception ex) { LogManager.WriteLog(LogTypes.Error, "UpdateTianTiRankData -> zhengba reload execption", ex); } } } catch (System.Exception ex) { ret = -1; LogManager.WriteException(ex.ToString()); } } finally { Monitor.Exit(MutexPaiHang); } } }
public void LoadTianTiRankData(DateTime now) { try { ExecuteSqlNoQuery("INSERT IGNORE INTO t_async(`id`,`value`) VALUES(4,1);"); object ageObj = DbHelperMySQL.GetSingle("select value from t_async where id = " + AsyncTypes.TianTiPaiHangModifyOffsetDay); if (null != ageObj) { int dayId = (int)ageObj; DateTime modifyDate = DataHelper2.GetRealDate(dayId); List <TianTiRoleInfoData> tianTiRoleInfoDataList = new List <TianTiRoleInfoData>(); List <TianTiRoleInfoData> tianTiMonthRoleInfoDataList = new List <TianTiRoleInfoData>(); MySqlDataReader sdr = null; try { LoadTianTiRankDayList(tianTiRoleInfoDataList); //ReloadTianTiRankDayList(tianTiRoleInfoDataList); sdr = DbHelperMySQL.ExecuteReader(string.Format("SELECT rid,rname,zoneid,duanweiid,duanweijifen,duanweirank,zhanli,data1,data2 FROM t_tianti_month_paihang ORDER BY `duanweirank` ASC LIMIT {0};", RankData.MaxPaiMingRank)); for (int index = 1; sdr.Read(); index++) { TianTiRoleInfoData tianTiRoleInfoData = new TianTiRoleInfoData(); tianTiRoleInfoData.RoleId = (int)Convert.ToInt32(sdr["rid"]); if (index <= MaxSendDetailDataCount) { tianTiRoleInfoData.ZoneId = (int)Convert.ToInt32(sdr["zoneid"]); tianTiRoleInfoData.DuanWeiId = (int)Convert.ToInt32(sdr["duanweiid"]); tianTiRoleInfoData.DuanWeiJiFen = (int)Convert.ToInt32(sdr["duanweijifen"]); //tianTiRoleInfoData.DuanWeiRank = (int)Convert.ToInt32(sdr["duanweirank"]); tianTiRoleInfoData.ZhanLi = (int)Convert.ToInt32(sdr["zhanli"]); tianTiRoleInfoData.RoleName = sdr["rname"].ToString(); if (!sdr.IsDBNull(sdr.GetOrdinal("data1"))) { tianTiRoleInfoData.TianTiPaiHangRoleData = (byte[])(sdr["data1"]); } // if (!sdr.IsDBNull(sdr.GetOrdinal("data2"))) tianTiRoleInfoData.PlayerJingJiMirrorData = (byte[])(sdr["data2"]); } tianTiRoleInfoData.DuanWeiRank = index; tianTiMonthRoleInfoDataList.Add(tianTiRoleInfoData); } } catch (System.Exception ex) { LogManager.WriteExceptionUseCache(ex.ToString()); } finally { if (null != sdr) { sdr.Close(); } } lock (Mutex) { RankData.ModifyTime = modifyDate; RankData.TianTiRoleInfoDataList = tianTiRoleInfoDataList; RankData.TianTiMonthRoleInfoDataList = tianTiMonthRoleInfoDataList; } if (DataHelper2.GetOffsetDay(now) != dayId) { UpdateTianTiRankData(now, modifyDate.Month != now.Month, true); } } } catch (System.Exception ex) { LogManager.WriteException(ex.ToString()); } }