群聊接口

This commit is contained in:
2025-12-05 15:48:31 +08:00
parent faf8bb82f3
commit 3dfc468f50

View File

@@ -9,6 +9,7 @@ import (
"fmt"
"log"
"strconv"
"strings"
"xk-websocket-v2/internal/model"
"xk-websocket-v2/internal/service"
"xk-websocket-v2/internal/utils"
@@ -351,6 +352,110 @@ func AddGroupMembersHandler(c *gin.Context) {
return
}
// 发送群通知和系统消息
if service.ChatSvc != nil && service.UserSvc != nil {
// 获取操作者信息
operator, opErr := service.UserSvc.GetUserByID(userID.(string))
if opErr == nil {
// 获取被邀请成员信息
invitedNames := make([]string, 0)
for _, memberID := range req.MemberIDs {
member, memErr := service.UserSvc.GetUserByID(memberID)
if memErr == nil {
invitedNames = append(invitedNames, member.Name)
}
}
if len(invitedNames) > 0 {
// 获取群成员列表(包括新加入的成员)
memberIDs, mErr := service.RoomSvc.GetRoomMembers(roomID)
if mErr == nil {
// 构建群通知消息内容
var notifContent string
if len(invitedNames) == 1 {
notifContent = fmt.Sprintf("%s 邀请了 %s 加入群聊", operator.Name, invitedNames[0])
} else {
notifContent = fmt.Sprintf("%s 邀请了 %s 加入群聊", operator.Name, strings.Join(invitedNames, "、"))
}
notifExtra := map[string]interface{}{
"type": "member_invite",
"room_id": roomID,
"operator": userID.(string),
"operator_name": operator.Name,
"targets": req.MemberIDs,
"target_names": invitedNames,
}
notifExtraJSON, _ := json.Marshal(notifExtra)
// 为所有成员发送群通知(包括新加入的成员)
for _, uid := range memberIDs {
// 群通知消息
notifMsg := model.ChatMessage{
RoomID: roomID,
SenderUserID: userID.(string),
ReceiverUserID: roomID,
MessageType: model.MessageTypeGroupNotif,
Content: notifContent,
Extra: string(notifExtraJSON),
}
if err := service.ChatSvc.DB.Create(&notifMsg).Error; err == nil {
// 更新会话
if service.ConversationSvc != nil {
_ = service.ConversationSvc.UpsertConversationOnMessage(uid, roomID, roomID, notifMsg, false)
}
// 推送消息
pushMsg := model.WsPayload{
RequestType: "receive_message",
Data: notifMsg,
}
msgBytes, _ := json.Marshal(pushMsg)
service.ChatSvc.DispatchMessage(uid, msgBytes)
}
}
// 为新加入的成员发送系统消息
for _, memberID := range req.MemberIDs {
systemContent := fmt.Sprintf("你被 %s 邀请加入群聊", operator.Name)
systemExtra := map[string]interface{}{
"type": "member_invited",
"room_id": roomID,
"operator": userID.(string),
"operator_name": operator.Name,
}
systemExtraJSON, _ := json.Marshal(systemExtra)
systemMsg := model.ChatMessage{
RoomID: roomID,
SenderUserID: userID.(string),
ReceiverUserID: roomID,
MessageType: model.MessageTypeSystem,
Content: systemContent,
Extra: string(systemExtraJSON),
}
if err := service.ChatSvc.DB.Create(&systemMsg).Error; err == nil {
// 更新会话
if service.ConversationSvc != nil {
_ = service.ConversationSvc.UpsertConversationOnMessage(memberID, roomID, roomID, systemMsg, false)
}
// 推送消息
pushMsg := model.WsPayload{
RequestType: "receive_message",
Data: systemMsg,
}
msgBytes, _ := json.Marshal(pushMsg)
service.ChatSvc.DispatchMessage(memberID, msgBytes)
}
}
}
}
}
}
utils.Success(c, "添加成员成功")
}