refactor: streamline conversation ID usage in message service methods

This commit is contained in:
mlogclub
2026-05-08 21:54:08 +08:00
parent 33b4caab03
commit 1a2550a089
2 changed files with 13 additions and 13 deletions
@@ -68,8 +68,7 @@ func (s *conversationEventLogService) Delete(id int64) {
repositories.ConversationEventLogRepository.Delete(sqls.DB(), id) repositories.ConversationEventLogRepository.Delete(sqls.DB(), id)
} }
func (s *conversationEventLogService) CreateEvent(ctx *sqls.TxContext, conversationID int64, eventType enums.IMEventType, func (s *conversationEventLogService) CreateEvent(ctx *sqls.TxContext, conversationID int64, eventType enums.IMEventType, operatorType enums.IMSenderType, operatorID int64, content, payload string) error {
operatorType enums.IMSenderType, operatorID int64, content, payload string) error {
return repositories.ConversationEventLogRepository.Create(ctx.Tx, &models.ConversationEventLog{ return repositories.ConversationEventLogRepository.Create(ctx.Tx, &models.ConversationEventLog{
ConversationID: conversationID, ConversationID: conversationID,
EventType: eventType, EventType: eventType,
+12 -11
View File
@@ -251,7 +251,7 @@ func (s *messageService) SendAIServiceNotice(conversationID int64, aiAgentID int
if conversation.Status == enums.IMConversationStatusClosed { if conversation.Status == enums.IMConversationStatusClosed {
return nil, errorsx.InvalidParam("会话已关闭") return nil, errorsx.InvalidParam("会话已关闭")
} }
return s.sendValidatedMessage(conversation, enums.IMSenderTypeAI, aiAgentID, "", enums.IMMessageTypeText, content, "", &dto.AuthPrincipal{ return s.sendValidatedMessage(conversation, enums.IMSenderTypeAI, aiAgentID, strs.UUID(), enums.IMMessageTypeText, content, "", &dto.AuthPrincipal{
UserID: 0, UserID: 0,
Username: "system", Username: "system",
Nickname: "system", Nickname: "system",
@@ -278,6 +278,7 @@ func (s *messageService) CreateAIWelcomeMessageTx(ctx *sqls.TxContext, conversat
} }
message := &models.Message{ message := &models.Message{
ConversationID: conversation.ID, ConversationID: conversation.ID,
ClientMsgID: strs.UUID(),
SenderType: enums.IMSenderTypeAI, SenderType: enums.IMSenderTypeAI,
SenderID: aiAgent.ID, SenderID: aiAgent.ID,
MessageType: enums.IMMessageTypeText, MessageType: enums.IMMessageTypeText,
@@ -377,10 +378,10 @@ func (s *messageService) sendMessage(conversationID int64, senderType enums.IMSe
func (s *messageService) sendValidatedMessage(conversation *models.Conversation, senderType enums.IMSenderType, reqSenderID int64, clientMsgID string, func (s *messageService) sendValidatedMessage(conversation *models.Conversation, senderType enums.IMSenderType, reqSenderID int64, clientMsgID string,
messageType enums.IMMessageType, content, payload string, operator *dto.AuthPrincipal, external *openidentity.ExternalUser) (*models.Message, error) { messageType enums.IMMessageType, content, payload string, operator *dto.AuthPrincipal, external *openidentity.ExternalUser) (*models.Message, error) {
conversationID := conversation.ID
var err error var err error
var summary string var summary string
content, payload, summary, err = s.normalizeMessageContent(conversationID, messageType, content, payload) content, payload, summary, err = s.normalizeMessageContent(conversation.ID, messageType, content, payload)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -390,7 +391,7 @@ func (s *messageService) sendValidatedMessage(conversation *models.Conversation,
// 防抖,消息存在就不再发送了 // 防抖,消息存在就不再发送了
if strs.IsNotBlank(clientMsgID) { if strs.IsNotBlank(clientMsgID) {
if existing := repositories.MessageRepository.GetByClientMsgID(sqls.DB(), conversationID, clientMsgID); existing != nil { if existing := repositories.MessageRepository.GetByClientMsgID(sqls.DB(), conversation.ID, clientMsgID); existing != nil {
return existing, nil return existing, nil
} }
} }
@@ -399,7 +400,7 @@ func (s *messageService) sendValidatedMessage(conversation *models.Conversation,
now = time.Now() now = time.Now()
auditUserID = int64(0) auditUserID = int64(0)
auditUserName = "" auditUserName = ""
nextSeq = repositories.MessageRepository.NextSeqNo(sqls.DB(), conversationID) nextSeq = repositories.MessageRepository.NextSeqNo(sqls.DB(), conversation.ID)
) )
if operator != nil { if operator != nil {
auditUserID = operator.UserID auditUserID = operator.UserID
@@ -410,7 +411,7 @@ func (s *messageService) sendValidatedMessage(conversation *models.Conversation,
auditUserName = displayExternalName(external) auditUserName = displayExternalName(external)
} }
message := &models.Message{ message := &models.Message{
ConversationID: conversationID, ConversationID: conversation.ID,
ClientMsgID: clientMsgID, ClientMsgID: clientMsgID,
SenderType: senderType, SenderType: senderType,
SenderID: reqSenderID, SenderID: reqSenderID,
@@ -462,12 +463,12 @@ func (s *messageService) sendValidatedMessage(conversation *models.Conversation,
return err return err
} }
} }
agentReadState, customerReadState := ConversationReadStateService.getConversationReadStates(ctx.Tx, conversationID) agentReadState, customerReadState := ConversationReadStateService.getConversationReadStates(ctx.Tx, conversation.ID)
agentUnreadCount, err := ConversationReadStateService.CountUnreadMessages(ctx, conversationID, s.readSeqNo(agentReadState), enums.IMSenderTypeCustomer) agentUnreadCount, err := ConversationReadStateService.CountUnreadMessages(ctx, conversation.ID, s.readSeqNo(agentReadState), enums.IMSenderTypeCustomer)
if err != nil { if err != nil {
return err return err
} }
customerUnreadCount, err := ConversationReadStateService.CountUnreadMessages(ctx, conversationID, s.readSeqNo(customerReadState), enums.IMSenderTypeAgent, enums.IMSenderTypeAI) customerUnreadCount, err := ConversationReadStateService.CountUnreadMessages(ctx, conversation.ID, s.readSeqNo(customerReadState), enums.IMSenderTypeAgent, enums.IMSenderTypeAI)
if err != nil { if err != nil {
return err return err
} }
@@ -482,7 +483,7 @@ func (s *messageService) sendValidatedMessage(conversation *models.Conversation,
updateUserID = 0 updateUserID = 0
updateUserName = displayExternalName(external) updateUserName = displayExternalName(external)
} }
if err := repositories.ConversationRepository.Updates(ctx.Tx, conversationID, map[string]any{ if err := repositories.ConversationRepository.Updates(ctx.Tx, conversation.ID, map[string]any{
"last_message_id": message.ID, "last_message_id": message.ID,
"last_message_at": now, "last_message_at": now,
"last_active_at": now, "last_active_at": now,
@@ -496,7 +497,7 @@ func (s *messageService) sendValidatedMessage(conversation *models.Conversation,
return err return err
} }
if err := ConversationEventLogService.CreateEvent(ctx, if err := ConversationEventLogService.CreateEvent(ctx,
conversationID, conversation.ID,
enums.IMEventTypeMessageSend, enums.IMEventTypeMessageSend,
senderType, senderType,
func() int64 { func() int64 {