196 lines
7.1 KiB
C#
196 lines
7.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace ChatRoomServer.Db
|
|
{
|
|
using System.Data;
|
|
using System.Data.Entity;
|
|
using System.Data.SqlClient;
|
|
using ChatRoomServer.Db.Entities;
|
|
|
|
public class ChatDb : DbContext
|
|
{
|
|
static ChatDb()
|
|
{
|
|
System.Data.Entity.Database.SetInitializer<ChatDb>(null);
|
|
}
|
|
|
|
public ChatDb() :
|
|
base(System.Configuration.ConfigurationManager.ConnectionStrings["12306.chat"].ConnectionString)
|
|
{
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// This method is called when the model for a derived context has been initialized, but
|
|
/// before the model has been locked down and used to initialize the context. The default
|
|
/// implementation of this method does nothing, but it can be overridden in a derived class
|
|
/// such that the model can be further configured before it is locked down.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Typically, this method is called only once when the first instance of a derived context
|
|
/// is created. The model for that context is then cached and is for all further instances of
|
|
/// the context in the app domain. This caching can be disabled by setting the ModelCaching
|
|
/// property on the given ModelBuidler, but note that this can seriously degrade performance.
|
|
/// More control over caching is provided through use of the DbModelBuilder and DbContextFactory
|
|
/// classes directly.
|
|
/// </remarks>
|
|
/// <param name="modelBuilder">The builder that defines the model for the context being created. </param>
|
|
protected override void OnModelCreating(DbModelBuilder modelBuilder)
|
|
{
|
|
base.OnModelCreating(modelBuilder);
|
|
|
|
var cfg = modelBuilder.Configurations;
|
|
cfg.AddFromAssembly(System.Reflection.Assembly.GetExecutingAssembly());
|
|
}
|
|
|
|
public virtual DbSet<User> Users { get; set; }
|
|
|
|
public virtual DbSet<Room> Rooms { get; set; }
|
|
|
|
public virtual DbSet<ServerGroup> ServerGroups { get; set; }
|
|
|
|
public virtual DbSet<MsgLog> MsgLogs { get; set; }
|
|
|
|
public virtual DbSet<Announcement> Announcements { get; set; }
|
|
|
|
|
|
public virtual DbSet<OnlineHistory> OnlineHistories { get; set; }
|
|
|
|
public virtual DbSet<AbuseReport> AbuseReports { get; set; }
|
|
|
|
public virtual DbSet<UserConnectLog> UserConnectLogs { get; set; }
|
|
|
|
public virtual DbSet<BlockUser> BlockUsers { get; set; }
|
|
|
|
/// <summary>
|
|
/// 异步获得指定用户的屏蔽列表
|
|
/// </summary>
|
|
/// <param name="username"></param>
|
|
/// <returns></returns>
|
|
public Task<BlockUser[]> GetBlockRuleForUserAsync(string username)
|
|
{
|
|
return BlockUsers.SqlQuery("exec usp_BlockUser_GetUserBlockRule {0}", username).ToArrayAsync();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 异步获得指定用户的屏蔽列表
|
|
/// </summary>
|
|
/// <param name="username"></param>
|
|
/// <returns></returns>
|
|
public BlockUser[] GetBlockRuleForUser(string username)
|
|
{
|
|
return BlockUsers.SqlQuery("exec usp_BlockUser_GetUserBlockRule {0}", username).ToArray();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 查询指定用户在单位时间内被举报的人数
|
|
/// </summary>
|
|
/// <param name="username"></param>
|
|
/// <param name="minutes"></param>
|
|
/// <returns></returns>
|
|
public int GetUserAbuseReportCountInTime(string username, int minutes)
|
|
{
|
|
return Database.SqlQuery<int>("exec usp_BlockUser_GetUserReportCount {0}, {1}", username, minutes).First();
|
|
}
|
|
|
|
public async Task<PagedData<AbuseReport>> GetAbuseReportPagedList(int filter, int pageindex, int pagesize)
|
|
{
|
|
var totalCountParameter = new SqlParameter("totalCount", SqlDbType.BigInt) { Direction = ParameterDirection.Output, Value = 0 };
|
|
|
|
var list = await Database.SqlQuery<AbuseReport>(
|
|
"exec usp_AbuseReport_GetList @filter,@pagesize,@pageindex,@totalcount out",
|
|
new SqlParameter("filter", SqlDbType.Int) { Value = filter },
|
|
new SqlParameter("pagesize", SqlDbType.Int) { Value = pagesize },
|
|
new SqlParameter("pageindex", SqlDbType.Int) { Value = pageindex },
|
|
totalCountParameter
|
|
).ToListAsync();
|
|
|
|
return new PagedData<AbuseReport>()
|
|
{
|
|
Data = list,
|
|
TotalCount = (long)totalCountParameter.Value
|
|
};
|
|
}
|
|
|
|
public async Task<PagedData<MsgLog>> GetMsgLogList(string username, int pagesize, int pageindex)
|
|
{
|
|
var sp = "exec usp_MsgLog_GetList @pageindex, @pagesize, @user, @count output";
|
|
var totalCountParameter = new SqlParameter("count", SqlDbType.BigInt) { Direction = ParameterDirection.Output, Value = 0 };
|
|
var list = await Database.SqlQuery<MsgLog>(
|
|
sp,
|
|
new SqlParameter("pageindex", SqlDbType.Int) { Value = pageindex },
|
|
new SqlParameter("pagesize", SqlDbType.Int) { Value = pagesize },
|
|
new SqlParameter("user", SqlDbType.VarChar, 100) { Value = username },
|
|
totalCountParameter
|
|
).ToListAsync();
|
|
|
|
return new PagedData<MsgLog>()
|
|
{
|
|
Data = list,
|
|
TotalCount = (long)totalCountParameter.Value
|
|
};
|
|
}
|
|
|
|
public async Task<PagedData<BlockUser>> GetBlockUserList(string username, int pagesize, int pageindex)
|
|
{
|
|
var sp = "exec usp_Block_GetList @pageindex, @pagesize, @user, @count output";
|
|
var totalCountParameter = new SqlParameter("count", SqlDbType.BigInt) { Direction = ParameterDirection.Output, Value = 0 };
|
|
var list = await Database.SqlQuery<BlockUser>(
|
|
sp,
|
|
new SqlParameter("pageindex", SqlDbType.Int) { Value = pageindex },
|
|
new SqlParameter("pagesize", SqlDbType.Int) { Value = pagesize },
|
|
new SqlParameter("user", SqlDbType.VarChar, 100) { Value = username },
|
|
totalCountParameter
|
|
).ToListAsync();
|
|
|
|
return new PagedData<BlockUser>()
|
|
{
|
|
Data = list,
|
|
TotalCount = (long)totalCountParameter.Value
|
|
};
|
|
}
|
|
|
|
public async Task<PagedData<User>> GetUserList(string username, int pagesize, int pageindex)
|
|
{
|
|
var sp = "exec usp_User_GetList @pageindex, @pagesize, @user, @count output";
|
|
var totalCountParameter = new SqlParameter("count", SqlDbType.BigInt) { Direction = ParameterDirection.Output, Value = 0 };
|
|
var list = await Database.SqlQuery<User>(
|
|
sp,
|
|
new SqlParameter("pageindex", SqlDbType.Int) { Value = pageindex },
|
|
new SqlParameter("pagesize", SqlDbType.Int) { Value = pagesize },
|
|
new SqlParameter("user", SqlDbType.VarChar, 100) { Value = username ?? "" },
|
|
totalCountParameter
|
|
).ToListAsync();
|
|
|
|
return new PagedData<User>()
|
|
{
|
|
Data = list,
|
|
TotalCount = (long)totalCountParameter.Value
|
|
};
|
|
}
|
|
|
|
public async Task<PagedData<UserConnectLog>> GetConnectionLogList(string username, int pagesize, int pageindex)
|
|
{
|
|
var sp = "exec usp_ConnectionLog_GetList @pageindex, @pagesize, @user, @count output";
|
|
var totalCountParameter = new SqlParameter("count", SqlDbType.BigInt) { Direction = ParameterDirection.Output, Value = 0 };
|
|
var list = await Database.SqlQuery<UserConnectLog>(
|
|
sp,
|
|
new SqlParameter("pageindex", SqlDbType.Int) { Value = pageindex },
|
|
new SqlParameter("pagesize", SqlDbType.Int) { Value = pagesize },
|
|
new SqlParameter("user", SqlDbType.VarChar, 100) { Value = username },
|
|
totalCountParameter
|
|
).ToListAsync();
|
|
|
|
return new PagedData<UserConnectLog>()
|
|
{
|
|
Data = list,
|
|
TotalCount = (long)totalCountParameter.Value
|
|
};
|
|
}
|
|
}
|
|
}
|