using GameData;
using ObjectModel.Club;
using Server.DB.Redis;
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using GameData.Club;
namespace GameDAL.Club
{
///
/// 俱乐部联赛数据逻辑
///
public static class ClubLeagueMatchDal
{
public static readonly string clubMatchKeyPrefix = "ClubLeagueMatch";
public static readonly DbStyle redisdb = DbStyle.main;
public static readonly int dbidx = 7;
static TimeSpan expiry = TimeSpan.FromDays(1);
///
/// 获取俱乐部权限
///
///
///
public static ClubLeaguePower GetClubLeaguePower(int clubId)
{
if (clubId <= 0) return null;
return ClubLeagueMatchAdo.GetClubLeaguePower(clubId);
}
///
/// 获取俱乐部权限
///
///
///
public static Task GetClubLeaguePowerAsync(int clubId)
{
return ClubLeagueMatchAdo.GetClubLeaguePowerAsync(clubId);
}
public static async Task SaveClubLeaguePowerAsync(ClubLeaguePower leaguePower)
{
return await Task.Run(()=>ClubLeagueMatchAdo.SaveClubLeaguePower(leaguePower));
}
public static Task SaveBanDesksAsync(List list,int matchId)
{
return Task.Run(() => SaveBanDesks(list, matchId));
}
///
/// 保存联赛禁桌数据,每次删除数据在保存。根据ClubMatchId 删除
///
///
public static void SaveBanDesks(List list,int matchId)
{
if (list == null || list.Count < 1) return;
ClubLeagueMatchAdo.SaveBanDesks(list,matchId);
}
///
/// 获取联赛禁桌数据
///
///
///
public static List GetLeagueMatchBanDesks(int clubMatchId)
{
if (clubMatchId <= 0) return null;
return ClubLeagueMatchAdo.GetLeagueMatchBanDesks(clubMatchId);
}
public static Task SaveLeagueMatchClubScoreAsync(List list,int matchId)
{
return Task.Run(() => SaveLeagueMatchClubScore(list, matchId));
}
///
/// 保存联赛俱乐部统计数据,每次删除数据在保存。根据ClubMatchId 删除
///
///
public static void SaveLeagueMatchClubScore(List list,int matchId)
{
if (list == null || list.Count < 1) return;
ClubLeagueMatchAdo.SaveLeagueMatchClubScore(list,matchId);
}
///
/// 获取联赛俱乐部统计数据
///
///
///
public static List GetLeagueMatchClubScores(int clubMatchId)
{
if (clubMatchId <= 0) return null;
return ClubLeagueMatchAdo.GetLeagueMatchClubScores(clubMatchId);
}
///
/// 保存联赛颁奖记录,清空对应clubMatchId比赛的缓存(每次都是新的数据,不用做删除操作)
///
public static async Task SaveAwardRecord(long awardId, int leagueClubId, int leagueMatchId, List list)
{
if (list == null || list.Count < 1) return false;
var b = await ClubDBUtil.DoLeagueAwardRecord(awardId, leagueClubId, leagueMatchId, list);
if (b)
{
var clubMatchIds = list.Select(p => p.ClubMatchId).Distinct().ToArray();
var keys1 = clubMatchIds.Select(p => GetAwardRecordListKey(p));
var keys2 = clubMatchIds.Select(p => GetAwardRecordKey(p));
var keys3 = clubMatchIds.Select(p => GetAwardRecordListByDateKey(p));
_ = redisdb.DeleteAsync(dbidx, keys1.Concat(keys2).Concat(keys3).ToArray());
}
return b;
}
// ///
// /// 获取联赛颁奖记录 近几条
// ///
// ///
// ///
// ///
// public static AwardRecord GetAwardByTop(int clubMatchId, int topNum = 1)
// {
// if (clubMatchId <= 0) return null;
// var result = redisdb.GetOrAdd(RedisType.String, GetAwardRecordKey(clubMatchId), () =>
// {
// return ClubLeagueMatchAdo.GetAwardByTop(clubMatchId, topNum) ?? new AwardRecord();
// }, dbidx, expiry);
// return result.AwardRecordId != 0 ? result : null;
// }
#if Server
///
/// 获取联赛颁奖记录。根据主键id倒序
///
/// 比赛Id
/// CreateTime>dateTime
///
public static List GetAwardRecords(int clubMatchId, DateTime dateTime)
{
if (clubMatchId <= 0) return null;
return redisdb.GetOrAdd(GetAwardRecordListByDateKey(clubMatchId), dateTime.ToString("yyyyMMddHHmmss"), () =>
ClubLeagueMatchAdo.GetAwardRecords(clubMatchId, dateTime)
, dbidx, expiry);
}
public static FightScore GetFightScorebyId(int id)
{
return DbStyle.bisai.GetOrAdd(RedisType.String, GetFightScoreByIdKey(id), () =>
ClubDataManager.GetFightScoreById(id)
, dbidx, TimeSpan.FromMinutes(30));
}
#endif
static RedisKey GetFightScoreByIdKey(int id)
{
return $"GetFightScores:id:{id}";
}
static RedisKey GetAwardRecordListByDateKey(int clubMatchId)
{
return $"{clubMatchKeyPrefix}:AwardRecordListBydate:{clubMatchId}";
}
///
/// 获取联赛颁奖记录。根据主键id倒序,根据比赛:clubMatchId缓存 时间1天
///
///
///
public static List GetAwardRecords(int clubMatchId)
{
if (clubMatchId <= 0) return null;
return redisdb.GetOrAdd(RedisType.String, GetAwardRecordListKey(clubMatchId),
() => ClubLeagueMatchAdo.GetAwardRecords(clubMatchId)
, dbidx, expiry);
}
static RedisKey GetAwardRecordListKey(int clubMatchId)
{
return $"{clubMatchKeyPrefix}:AwardRecordList:{clubMatchId}";
}
static RedisKey GetAwardRecordKey(int clubMatchId)
{
return $"{clubMatchKeyPrefix}:AwardRecord:{clubMatchId}";
}
public static Task SaveLeagueClubLiveTasksAsync(List list,int matchId)
{
return Task.Run(() => SaveLeagueClubLiveTasks(list, matchId));
}
///
/// 保存生存任务,先删除再保存
///
///
public static void SaveLeagueClubLiveTasks(List list,int matchId)
{
if (list == null || list.Count < 1) return;
ClubLeagueMatchAdo.SaveLeagueClubLiveTasks(list,matchId);
}
///
/// 保存加入到联赛的俱乐部集合
///
///
public static void SaveJoinInClubLeagueMatch(JoinInClubLeagueMatch model)
{
if (model == null) return;
ClubLeagueMatchAdo.SaveJoinInClubLeagueMatch(model);
}
// ///
// /// 获取 保存加入到联赛的俱乐部集合 对象
// ///
// ///
// ///
// public static JoinInClubLeagueMatch GetJoinInClubLeagueMatch(int clubMatchId)
// {
// if (clubMatchId <= 0) return null;
// return ClubLeagueMatchAdo.GetJoinInClubLeagueMatch(clubMatchId);
// }
static string GetLeagueAdminClubsKey(int clubId)
{
return $"GetLeagueAdminClubsKey:{clubId}";
}
#if Server
///
/// 保存联赛俱乐部管理员
///
public static void SaveLeagueAdminClubs(int clubId, List data)
{
if (clubId <= 0 || data == null) return;
var key = GetLeagueAdminClubsKey(clubId);
var str = JsonPack.GetJson(data);
redisManager.GetBiSaidb(6).StringSet(key, str, TimeSpan.FromDays(365)); //数据缓存一年
}
///
/// 获取联赛管理员列表
///
///
///
public static List GetLeagueAdminClubs(int clubId)
{
var result = new List();
if (clubId <= 0) return result;
var key = GetLeagueAdminClubsKey(clubId);
string str = redisManager.GetBiSaidb(6).StringGet(key);
if (!string.IsNullOrWhiteSpace(str) && str.Length > 2)
{
return JsonPack.GetData>(str);
}
return result;
}
#endif
}
}