using ObjectModel.Club; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; using GameDAL.Game; using MrWu.DB; using MrWu.Debug; using Server.DB.Sql; namespace GameDAL.Club { /// /// 俱乐部联赛数据逻辑 /// public static class ClubLeagueMatchAdo { public static readonly dbbase sqldb = dbbase.game2018; public static readonly string tb_JoinInClubLeagueMatch = "JoinInClubLeagueMatch"; public static readonly string tb_LeagueAwardRecord = "LeagueAwardRecord"; public static readonly string tb_LeagueClubLeaguePower = "LeagueClubLeaguePower"; public static readonly string tb_LeagueClubLiveTask = "LeagueClubLiveTask"; public static readonly string tb_LeagueMatchBanDesk = "LeagueMatchBanDesk"; public static readonly string tb_LeagueMatchClubScore = "LeagueMatchClubScore"; /// /// 获取俱乐部权限 异步的 /// /// /// public static Task GetClubLeaguePowerAsync(int clubId) { return Task.Run(() => GetClubLeaguePower(clubId)); } /// /// 获取俱乐部权限 /// /// /// public static ClubLeaguePower GetClubLeaguePower(int clubId) { var sql = $"select top 1 * from {tb_LeagueClubLeaguePower} where clubId = {clubId}"; return sqldb.ExecuteEntities(sql, p => p.ToObject()).FirstOrDefault(); } public static bool SaveClubLeaguePower(ClubLeaguePower model) { var sql = new StringBuilder(); if (model.ClubLeaguePowerId < 1) { sql.Append( $"insert into {tb_LeagueClubLeaguePower}({nameof(model.ClubId)},{nameof(model.IsCanCreate)},{nameof(model.IsCanJoin)}) "); sql.Append($"values({model.ClubId},{model.IsCanCreate.SQLValue()},{model.IsCanJoin.SQLValue()})"); sql.AppendLine($"if @@rowcount > 0 begin"); sql.AppendLine( $" select top 1 {nameof(model.ClubLeaguePowerId)} from {tb_LeagueClubLeaguePower} where {nameof(model.ClubLeaguePowerId)} = SCOPE_IDENTITY()"); sql.AppendLine("end"); var result = sqldb.ExecuteScalar(sql.ToString()); model.ClubLeaguePowerId = result is int id ? id : throw new Exception("增加记录失败, sql:" + sql); } else { sql.Append($"update {tb_LeagueClubLeaguePower} set "); sql.Append($"{nameof(model.ClubId)} = {model.ClubId},"); sql.Append($"{nameof(model.IsCanCreate)} = {model.IsCanCreate.SQLValue()},"); sql.Append($"{nameof(model.IsCanJoin)} = {model.IsCanJoin.SQLValue()}"); sql.Append($" where {nameof(model.ClubLeaguePowerId)} = {model.ClubLeaguePowerId}"); if (1 != sqldb.ExecuteNonQuery(sql.ToString())) { throw new Exception("更新记录失败,sql: " + sql); } } return true; } /// /// 保存联赛禁桌数据,每次删除数据在保存。根据ClubMatchId 删除 /// /// public static bool SaveBanDesks(List list, int clubMatchId) { return sqldb.ExecuteTransaction(false, t => { //var todeleteItems = list.Select(p => clubMatchId).Distinct().Where(p => p > 0).ToArray(); //if (todeleteItems.Length > 0) { var deleteSql = $"delete {tb_LeagueMatchBanDesk} where ClubMatchId = {clubMatchId}"; var deletedCount = t.ExecuteNonQuery(deleteSql); if (deletedCount > 0) { Console.WriteLine("SaveBanDesks delete count:" + deletedCount); } //} var sql = new StringBuilder(); foreach (var p in list) { sql.Append( $"insert into {tb_LeagueMatchBanDesk}(ClubMatchId,{nameof(p.WayId)},{nameof(p.JSONString)}) "); sql.AppendLine($"values({clubMatchId}, @wayId, @json)"); sql.AppendLine($"if @@rowcount > 0 begin"); sql.AppendLine( $" select top 1 {nameof(p.LeagueMatchBanDeskId)} from {tb_LeagueMatchBanDesk} where {nameof(p.LeagueMatchBanDeskId)} = SCOPE_IDENTITY()"); sql.AppendLine("end"); var result = t.ExecuteScalar(sql.ToString(), new SqlParameter("@wayId", p.WayId), new SqlParameter("@json", p.GetClubsToString())); p.LeagueMatchBanDeskId = result is int id ? id : throw new Exception("增加记录失败, sql:" + sql); sql.Clear(); } return true; }); } /// /// 获取联赛禁桌数据 /// /// /// public static List GetLeagueMatchBanDesks(int clubMatchId) { var sql = $"select * from {tb_LeagueMatchBanDesk} where ClubMatchId = {clubMatchId}"; return sqldb.ExecuteEntities(sql, p => { var model = p.ToObject(); model.ClubIds = model.GetClubIdsByJSON(); return model; }).ToList(); } /// /// 保存联赛俱乐部统计数据,每次删除数据在保存。根据ClubMatchId 删除 /// /// public static bool SaveLeagueMatchClubScore(List list, int matchId) { return sqldb.ExecuteTransaction(false, t => { var deleteSql = $"delete {tb_LeagueMatchClubScore} where ClubMatchId = {matchId}"; var deletedCount = t.ExecuteNonQuery(deleteSql); if (deletedCount > 0) { Console.WriteLine("SaveLeagueMatchClubScore delete count:" + deletedCount); } var sql = new StringBuilder(); foreach (var p in list) { sql.Append( $"insert into {tb_LeagueMatchClubScore}(ClubMatchId,{nameof(p.ClubName)},{nameof(p.ClubId)},{nameof(p.CardScore)},{nameof(p.DeskScore)},{nameof(p.ClubUserSumScore)},{nameof(p.JoinRoom)},[Index],{nameof(p.LeagueScore)}) "); sql.AppendLine( $"values({matchId}, @clubName,{p.ClubId},{p.CardScore},{p.DeskScore},{p.ClubUserSumScore},{p.JoinRoom},0,@score)"); sql.AppendLine($"if @@rowcount > 0 begin"); sql.AppendLine( $" select top 1 {nameof(p.LeagueMatchClubScoreId)} from {tb_LeagueMatchClubScore} where {nameof(p.LeagueMatchClubScoreId)} = SCOPE_IDENTITY()"); sql.AppendLine("end"); var result = t.ExecuteScalar(sql.ToString(), new SqlParameter("@clubName", p.ClubName), new SqlParameter("@score", p.LeagueScore)); p.LeagueMatchClubScoreId = result is int id ? id : throw new Exception("增加记录失败, sql:" + sql); sql.Clear(); } return true; }); } /// /// 获取联赛俱乐部统计数据,过期时间7天 /// /// /// public static List GetLeagueMatchClubScores(int clubMatchId) { var sql = $"select * from {tb_LeagueMatchClubScore} where clubMatchId = {clubMatchId}"; return sqldb.ExecuteEntities(sql, p => p.ToObject()).ToList(); } /// /// 保存联赛颁奖记录,清空对应clubMatchId比赛的缓存(每次都是新的数据,不用做删除操作) /// /// public static bool SaveAwardRecord(List list) { return sqldb.ExecuteTransaction(false, t => { var sql = new StringBuilder(); foreach (var p in list) { sql.Append( $"insert into {tb_LeagueAwardRecord}({nameof(p.ClubMatchId)},{nameof(p.ClubName)},{nameof(p.ClubId)},{nameof(p.CardScore)},{nameof(p.DeskScore)},{nameof(p.ClubUserSumScore)},{nameof(p.JoinRoom)},[{nameof(p.Index)}],{nameof(p.RecordId)},{nameof(p.LeagueScore)}) "); sql.AppendLine( $"values({p.ClubMatchId}, @clubName,{p.ClubId},{p.CardScore},{p.DeskScore},{p.ClubUserSumScore},{p.JoinRoom},{p.Index},{p.RecordId},@score)"); // sql.AppendLine($"if @@rowcount > 0 begin"); // sql.AppendLine( // $" select top 1 {nameof(p.AwardRecordId)} from {tb_LeagueAwardRecord} where {nameof(p.AwardRecordId)} = SCOPE_IDENTITY()"); // sql.AppendLine("end"); var result = t.ExecuteScalar(sql.ToString(), new SqlParameter("@clubName", p.ClubName), new SqlParameter("@score", p.LeagueScore)); //p.AwardRecordId = result is int id ? id : throw new Exception("增加记录失败, sql:" + sql); sql.Clear(); } return true; }); } /// /// 获取联赛颁奖记录 近几条 /// /// /// /// public static AwardRecord GetAwardByTop(int clubMatchId, int topNum = 1) { var sql = $"select top 1 * from {tb_LeagueAwardRecord} where clubMatchId = {clubMatchId}"; return sqldb.ExecuteEntities(sql, p => p.ToObject()).FirstOrDefault(); } /// /// 获取联赛颁奖记录。根据主键id倒序 /// /// 比赛Id /// CreateTime>dateTime /// public static List GetAwardRecords(int clubMatchId, DateTime dateTime) { var sql = $"select * from {tb_LeagueAwardRecord} where clubMatchId = {clubMatchId} and CreateTime > @datetime"; return sqldb.ExecuteEntities(sql, p => p.ToObject(), new SqlParameter("@datetime", dateTime)) .ToList(); } /// /// 获取联赛颁奖记录。根据主键id倒序,根据比赛:clubMatchId缓存 时间1天 /// /// /// public static List GetAwardRecords(int clubMatchId) { var sql = $"select * from {tb_LeagueAwardRecord} where clubMatchId = {clubMatchId}"; return sqldb.ExecuteEntities(sql, p => p.ToObject()).ToList(); } /// /// 保存生存任务,先删除再保存 /// /// public static bool SaveLeagueClubLiveTasks(List list, int clubMatchId) { return sqldb.ExecuteTransaction(false, t => { if (clubMatchId > 0) { var deleteSql = $"delete {tb_LeagueClubLiveTask} where ClubMatchId = {clubMatchId}"; Debug.Info($"执行Sql语句{deleteSql}"); var deletedCount = t.ExecuteNonQuery(deleteSql); if (deletedCount > 0) { Console.WriteLine("SaveLeagueClubLiveTasks delete count:" + deletedCount); } } var sql = new StringBuilder(); foreach (var p in list) { sql.Append( $"insert into {tb_LeagueClubLiveTask}(ClubMatchId,{nameof(p.ClubId)},{nameof(p.TaskScore)},{nameof(p.IsActive)}) "); sql.AppendLine($"values({clubMatchId}, {p.ClubId},{p.TaskScore},{p.IsActive.SQLValue()})"); sql.AppendLine($"if @@rowcount > 0 begin"); sql.AppendLine( $" select top 1 LeagueClubLiveTaskId from {tb_LeagueClubLiveTask} where LeagueClubLiveTaskId = SCOPE_IDENTITY()"); sql.AppendLine("end"); var result = t.ExecuteScalar(sql.ToString()); p.LeagueClubLiveTaskId = result is int id ? id : throw new Exception("增加记录失败, sql:" + sql); sql.Clear(); } return true; }); } /// /// 保存加入到联赛的俱乐部集合 /// /// public static bool SaveJoinInClubLeagueMatch(JoinInClubLeagueMatch model) { Debug.Info($"保存加入联赛的俱乐部集合:{model.ClubMatchId} {model.GetJoinInLeagueMatchClubsToString()}"); var spp = GameDB.Instance.BeginTransaction(dbbase.game2018); string sql = $@"if not exists (select 1 from {tb_JoinInClubLeagueMatch} where ClubMatchId = {model.ClubMatchId}) insert into {tb_JoinInClubLeagueMatch}(ClubMatchId,JoinInLeagueMatchClubs) values ({model.ClubMatchId},@json) else update {tb_JoinInClubLeagueMatch} set JoinInLeagueMatchClubs=@json where ClubMatchId = {model.ClubMatchId}"; List> sqlpms = new List>(); sqlpms.Add(new SqlAloneParameter("@json", model.GetJoinInLeagueMatchClubsToString(),5000, SqlDbType.VarChar)); GameDB.Instance.TransactionAddSql(spp, sql, sqlpms); if (!GameDB.Instance.SubTransaction(spp)) return false; return true; } /// /// 获取 保存加入到联赛的俱乐部集合 对象 /// /// /// public static JoinInClubLeagueMatch GetJoinInClubLeagueMatch(int clubMatchId) { var sql = $"select top 1 * from {tb_JoinInClubLeagueMatch} where clubMatchId = {clubMatchId}"; Debug.Info(sql); return sqldb.ExecuteEntities(sql, p => { var model = p.ToObject(); model.ClubIds = model.GetClubIdsByJSON(); return model; }).FirstOrDefault(); } } }