170 lines
7.2 KiB
C#
170 lines
7.2 KiB
C#
namespace Application.Domain;
|
|
|
|
public class GameChatService : IGameChatService, ITransient
|
|
{
|
|
private readonly ISqlSugarClient _dbClient;
|
|
private readonly IRedisCache _redisClient;
|
|
|
|
public GameChatService(ISqlSugarClient dbClient, IRedisCache redisClient)
|
|
{
|
|
_dbClient = dbClient;
|
|
_redisClient = redisClient;
|
|
}
|
|
|
|
public async Task<List<GameChatView>> GetChatTop(string userId, int areaId, int top, string teamId, string groupId)
|
|
{
|
|
var db = _dbClient.AsTenant().GetConnectionWithAttr<game_chat>();
|
|
List<string> allCode = new List<string>() { "Public", "Region" };
|
|
var data = await db.Queryable<game_chat>().Where(it => it.state == 1 &&
|
|
(
|
|
(allCode.Contains(it.code) && it.areaId == areaId) ||
|
|
(it.code == "Group" && it.par == groupId) ||
|
|
(it.code == "Team" && it.par == teamId) ||
|
|
(it.code == "Dress") ||
|
|
(it.code == "System" && it.areaId == areaId &&
|
|
(it.userId == "0" || it.userId == userId))
|
|
)
|
|
).Take(top).OrderByDescending(it => it.sort).ToListAsync();
|
|
|
|
var result = new List<GameChatView>();
|
|
foreach (var item in data)
|
|
{
|
|
var userModel = await UserModelTool.GetUserView(item.userId, true);
|
|
result.Add(new GameChatView() { chat = item, user = userModel });
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public async Task<List<GameChatView>> GetChatData(string userId, int type, int areaId, string teamId,
|
|
string groupId, int page,
|
|
int limit,
|
|
RefAsync<int> total)
|
|
{
|
|
List<game_chat> data = new List<game_chat>();
|
|
var db = _dbClient.AsTenant().GetConnectionWithAttr<game_chat>();
|
|
if (type == 0)
|
|
{
|
|
List<string> allCode = new List<string>() { "Public", "Region" };
|
|
data = await db.Queryable<game_chat>().Where(it => it.state == 1 &&
|
|
(
|
|
(allCode.Contains(it.code) && it.areaId == areaId) ||
|
|
(it.code == "Group" && it.par == groupId) ||
|
|
(it.code == "Team" && it.par == teamId) ||
|
|
(it.code == "Dress") ||
|
|
(it.code == "System" && it.areaId == areaId &&
|
|
(it.userId == "0" || it.userId == userId))
|
|
)
|
|
).OrderByDescending(it => it.sort).ToPageListAsync(page, limit, total);
|
|
}
|
|
else if (type == 1) //队伍
|
|
{
|
|
data = await db.Queryable<game_chat>().Where(it => it.state == 1 && it.code == "Team" && it.par == teamId
|
|
).OrderByDescending(it => it.sort).ToPageListAsync(page, limit, total);
|
|
}
|
|
else if (type == 2) //帮派
|
|
{
|
|
data = await db.Queryable<game_chat>().Where(it => it.state == 1 && it.code == "Group" && it.par == groupId
|
|
).OrderByDescending(it => it.sort).ToPageListAsync(page, limit, total);
|
|
}
|
|
else if (type == 3) //全区
|
|
{
|
|
data = await db.Queryable<game_chat>()
|
|
.Where(it => it.state == 1 && it.code == "Region" && it.areaId == areaId
|
|
).OrderByDescending(it => it.sort).ToPageListAsync(page, limit, total);
|
|
}
|
|
else if (type == 4) //全服
|
|
{
|
|
data = await db.Queryable<game_chat>().Where(it => it.state == 1 && it.code == "Dress"
|
|
).OrderByDescending(it => it.sort).ToPageListAsync(page, limit, total);
|
|
}
|
|
else if (type == 5) //系统
|
|
{
|
|
data = await db.Queryable<game_chat>()
|
|
.Where(it =>
|
|
it.state == 1 && it.code == "System" && it.areaId == areaId &&
|
|
(it.userId == "0" || it.userId == userId)
|
|
).OrderByDescending(it => it.sort).ToPageListAsync(page, limit, total);
|
|
}
|
|
else
|
|
{
|
|
data = new List<game_chat>();
|
|
}
|
|
|
|
var result = new List<GameChatView>();
|
|
foreach (var item in data)
|
|
{
|
|
var userModel = await UserModelTool.GetUserView(item.userId, true);
|
|
result.Add(new GameChatView() { chat = item, user = userModel });
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 添加聊天
|
|
/// </summary>
|
|
/// <param name="userId"></param>
|
|
/// <param name="areaId"></param>
|
|
/// <param name="code"></param>
|
|
/// <param name="sign"></param>
|
|
/// <param name="par"></param>
|
|
/// <returns></returns>
|
|
public async Task<bool> SendChat(string userId, int areaId, string code, string sign, string par = "")
|
|
{
|
|
game_chat chat = new game_chat();
|
|
chat.chatId = StringAssist.NewGuid;
|
|
chat.userId = userId;
|
|
chat.areaId = areaId;
|
|
chat.code = code;
|
|
chat.par = par;
|
|
chat.sign = sign;
|
|
chat.state = 1;
|
|
chat.addTime = DateTime.Now;
|
|
chat.sort = TimeExtend.GetTimeStampSeconds;
|
|
chat.delTime = TimeExtend.GetTimeStampBySeconds(DateTime.Now.AddDays(3));
|
|
switch (code)
|
|
{
|
|
case "Region":
|
|
chat.sort += 300; //五分钟
|
|
break;
|
|
|
|
case "Dress":
|
|
chat.sort += 600; //10分钟
|
|
break;
|
|
case "System":
|
|
chat.delTime = TimeExtend.GetTimeStampBySeconds(DateTime.Now.AddHours(6));
|
|
break;
|
|
case "Group":
|
|
chat.delTime = TimeExtend.GetTimeStampBySeconds(DateTime.Now.AddHours(6));
|
|
break;
|
|
case "Team":
|
|
chat.delTime = TimeExtend.GetTimeStampBySeconds(DateTime.Now.AddHours(6));
|
|
break;
|
|
}
|
|
|
|
var db = _dbClient.AsTenant().GetConnectionWithAttr<game_chat>();
|
|
return await db.Insertable(chat).ExecuteCommandAsync() > 0;
|
|
}
|
|
|
|
public async Task<bool> SendChat(string userId, string code, string sign, string par = "")
|
|
{
|
|
var userService = App.GetService<IUnitUserService>();
|
|
var userInfo = await userService.GetUserInfoByUserId(userId);
|
|
if (userInfo == null) return false;
|
|
|
|
return await SendChat(userId, (int)userInfo.areaId, code, sign, par);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除聊天
|
|
/// </summary>
|
|
/// <param name="chatId"></param>
|
|
/// <returns></returns>
|
|
public async Task<bool> DeleteChat(string chatId)
|
|
{
|
|
var db = _dbClient.AsTenant().GetConnectionWithAttr<game_chat>();
|
|
return await db.Updateable<game_chat>().SetColumns(it => it.state == 0).Where(it => it.chatId == chatId)
|
|
.ExecuteCommandAsync() > 0;
|
|
}
|
|
} |