feat: 完成聊天室领域与用户领域划分通讯
This commit is contained in:
@@ -54,14 +54,14 @@ namespace Yi.Framework.ChatHub.Application.Services
|
||||
//领域调用,群主消息调用bbs领域
|
||||
|
||||
//如果钱钱不足,将自动断言
|
||||
await _localEventBus.PublishAsync<MoneyChangeEventArgs>(new MoneyChangeEventArgs { UserId = CurrentUser.Id.Value, Number = -1 },false);
|
||||
await _localEventBus.PublishAsync<MoneyChangeEventArgs>(new MoneyChangeEventArgs { UserId = CurrentUser.Id.Value, Number = -1 }, false);
|
||||
|
||||
var mesageContext = MessageContext.CreateAll(input.Content, CurrentUser.Id!.Value);
|
||||
UserRoleMenuQueryEventArgs userRoleMenuQuery = new UserRoleMenuQueryEventArgs(CurrentUser.Id!.Value);
|
||||
|
||||
//调用用户领域事件,获取用户信息,第一个发送者用户信息,第二个为接收者用户信息
|
||||
await _localEventBus.PublishAsync(userRoleMenuQuery, false);
|
||||
mesageContext.SetUserInfo(userRoleMenuQuery.Result.First(),null);
|
||||
mesageContext.SetUserInfo(userRoleMenuQuery.Result.First(), null);
|
||||
|
||||
await _userMessageManager.SendMessageAsync(mesageContext);
|
||||
await _userMessageManager.CreateMessageStoreAsync(mesageContext);
|
||||
@@ -110,7 +110,21 @@ namespace Yi.Framework.ChatHub.Application.Services
|
||||
.Where(x => x.CreationTime >= DateTime.Now.AddDays(-30))
|
||||
.OrderBy(x => x.CreationTime)
|
||||
.ToListAsync();
|
||||
|
||||
|
||||
var output = entities.Adapt<List<MessageContext>>();
|
||||
var userIds = output.GetUserIds();
|
||||
|
||||
UserRoleMenuQueryEventArgs userRoleMenuQuery = new UserRoleMenuQueryEventArgs(userIds.ToArray());
|
||||
|
||||
//调用用户领域事件,获取用户信息,第一个发送者用户信息,第二个为接收者用户信息
|
||||
await _localEventBus.PublishAsync(userRoleMenuQuery, false);
|
||||
|
||||
|
||||
|
||||
//映射用户信息
|
||||
output.MapperUserInfo(userRoleMenuQuery.Result);
|
||||
|
||||
return output;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,19 +1,39 @@
|
||||
using Mapster;
|
||||
using Volo.Abp.Application.Services;
|
||||
using Volo.Abp.EventBus.Local;
|
||||
using Yi.Framework.ChatHub.Domain.Managers;
|
||||
using Yi.Framework.ChatHub.Domain.Shared.Model;
|
||||
using Yi.Framework.Rbac.Domain.Shared.Etos;
|
||||
|
||||
namespace Yi.Framework.ChatHub.Application.Services
|
||||
{
|
||||
public class ChatUserService : ApplicationService
|
||||
{
|
||||
private UserMessageManager _messageManager;
|
||||
public ChatUserService(UserMessageManager messageManager) { _messageManager = messageManager; }
|
||||
private ILocalEventBus _localEventBus;
|
||||
public ChatUserService(UserMessageManager messageManager, ILocalEventBus localEventBus)
|
||||
{ _messageManager = messageManager; _localEventBus = localEventBus; }
|
||||
|
||||
public async Task<List<ChatUserModel>> GetListAsync()
|
||||
{
|
||||
//映射用户信息
|
||||
var userList = await _messageManager.GetAllUserAsync();
|
||||
|
||||
var userIds = userList.Select(x => x.UserId).Distinct().ToList();
|
||||
UserRoleMenuQueryEventArgs userRoleMenuQuery = new UserRoleMenuQueryEventArgs(userIds.ToArray());
|
||||
|
||||
//调用用户领域事件,获取用户信息,第一个发送者用户信息,第二个为接收者用户信息
|
||||
await _localEventBus.PublishAsync(userRoleMenuQuery, false);
|
||||
|
||||
var userInfoDic = userRoleMenuQuery.Result.ToDictionary(x => x.User.Id);
|
||||
var output = userList.Adapt<List<ChatUserModel>>();
|
||||
|
||||
foreach (var chatUser in output)
|
||||
{
|
||||
var currentUserInfo = userInfoDic[chatUser.UserId];
|
||||
chatUser.UserName= currentUserInfo.User.UserName;
|
||||
chatUser.UserIcon = currentUserInfo.User.Icon;
|
||||
}
|
||||
return output;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace Yi.Framework.ChatHub.Domain.Shared.Model
|
||||
/// <summary>
|
||||
/// 用户头像
|
||||
/// </summary>
|
||||
public string UserIcon { get; set; }
|
||||
public string? UserIcon { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,8 +9,33 @@ using Yi.Framework.Rbac.Domain.Shared.Dtos;
|
||||
|
||||
namespace Yi.Framework.ChatHub.Domain.Shared.Model
|
||||
{
|
||||
|
||||
public static class MessageContextExtensions
|
||||
{
|
||||
public static List<Guid> GetUserIds(this List<MessageContext> context)
|
||||
{
|
||||
return context.Where(x => x.ReceiveId is not null).Select(x => x.ReceiveId!.Value).Union(context.Select(x => x.SendUserId)).ToList();
|
||||
}
|
||||
public static List<MessageContext> MapperUserInfo(this List<MessageContext> messageContexts,List<UserRoleMenuDto> userRoleMenuDtos)
|
||||
{
|
||||
var userInfoDic = userRoleMenuDtos.ToDictionary(x => x.User.Id);
|
||||
foreach (var context in messageContexts)
|
||||
{
|
||||
if (context.ReceiveId is not null)
|
||||
{
|
||||
context.ReceiveInfo = userInfoDic[context.ReceiveId.Value];
|
||||
}
|
||||
context.SendUserInfo = userInfoDic[context.SendUserId];
|
||||
}
|
||||
return messageContexts;
|
||||
}
|
||||
}
|
||||
public class MessageContext
|
||||
{
|
||||
/// <summary>
|
||||
/// 映射用户信息
|
||||
/// </summary>
|
||||
|
||||
public static MessageContext CreatePersonal(string content, Guid userId, Guid sendUserId)
|
||||
{
|
||||
return new MessageContext() { MessageType = MessageTypeEnum.Personal, Content = content, ReceiveId = userId, SendUserId = sendUserId };
|
||||
|
||||
Reference in New Issue
Block a user