diff --git a/miniapp/config/index.js b/miniapp/config/index.js index 7794e45..6bdbd8d 100644 --- a/miniapp/config/index.js +++ b/miniapp/config/index.js @@ -23,7 +23,7 @@ const ENV = { } // 当前环境 - 开发时使用 development,打包时改为 production -const CURRENT_ENV = 'development' +const CURRENT_ENV = 'production' // 导出配置 export const config = { diff --git a/miniapp/pages/chat/index.vue b/miniapp/pages/chat/index.vue index 857118b..7f8fc4c 100644 --- a/miniapp/pages/chat/index.vue +++ b/miniapp/pages/chat/index.vue @@ -1102,13 +1102,52 @@ onMounted(async () => { const handleReceiveMessage = (message) => { console.log('[Chat] 收到新消息:', message) - // 过滤掉结果类型的消息(5=交换微信结果,7=交换照片结果) - if (message.messageType === MessageType.EXCHANGE_WECHAT_RESULT || message.messageType === MessageType.EXCHANGE_PHOTO_RESULT) { + // 检查是否是当前会话的消息 + if (message.sessionId !== sessionId.value) { return } - // 检查是否是当前会话的消息 - if (message.sessionId !== sessionId.value) { + // 处理交换结果消息(5=交换微信结果,7=交换照片结果) + if (message.messageType === MessageType.EXCHANGE_WECHAT_RESULT || message.messageType === MessageType.EXCHANGE_PHOTO_RESULT) { + // 更新原始请求消息的状态 + if (message.extraData) { + try { + const extraData = typeof message.extraData === 'string' ? JSON.parse(message.extraData) : message.extraData + // 根据结果消息类型找到对应的请求消息类型 + const requestType = message.messageType === MessageType.EXCHANGE_WECHAT_RESULT + ? MessageType.EXCHANGE_WECHAT + : MessageType.EXCHANGE_PHOTO + + // 找到原始请求消息(我发起的,状态为待处理) + const requestMsg = messages.value.find(m => + m.messageType === requestType && + m.isMine && + m.status === ExchangeStatus.PENDING + ) + + if (requestMsg) { + // 根据响应内容判断是同意还是拒绝 + const isAgreed = message.content === '已同意交换' + requestMsg.status = isAgreed ? ExchangeStatus.ACCEPTED : ExchangeStatus.REJECTED + + if (isAgreed) { + // 更新交换的数据 + if (requestMsg.messageType === MessageType.EXCHANGE_WECHAT) { + // 我是发起方,获取对方(接收者)的微信号 + requestMsg.exchangedContent = extraData.ReceiverWeChat || extraData.receiverWeChat + } else if (requestMsg.messageType === MessageType.EXCHANGE_PHOTO) { + // 我是发起方,获取对方(接收者)的照片 + const photos = extraData.ReceiverPhotos || extraData.receiverPhotos || [] + requestMsg.photos = photos + requestMsg.photoCount = photos.length + } + } + console.log('[Chat] 已更新交换请求状态:', requestMsg) + } + } catch (e) { + console.error('[Chat] 解析交换结果数据失败:', e) + } + } return } diff --git a/server/src/XiangYi.AppApi/Controllers/ChatController.cs b/server/src/XiangYi.AppApi/Controllers/ChatController.cs index a375215..fe8991c 100644 --- a/server/src/XiangYi.AppApi/Controllers/ChatController.cs +++ b/server/src/XiangYi.AppApi/Controllers/ChatController.cs @@ -255,8 +255,25 @@ public class ChatController : ControllerBase var userId = GetCurrentUserId(); var result = await _chatService.RespondExchangeAsync(userId, request); - _logger.LogInformation("交换响应已处理: ResultMessageId={ResultMessageId}, IsAgreed={IsAgreed}", - result.ResultMessageId, request.IsAgreed); + // 通过 SignalR 推送交换响应结果给会话组(双方都能收到) + var resultMessageType = result.RequestMessageType == 4 ? 5 : 7; // 4=ExchangeWeChatRequest->5=Result, 6=ExchangePhotoRequest->7=Result + var messageResponse = new ChatMessageResponse + { + MessageId = result.ResultMessageId, + SessionId = result.SessionId, + SenderId = userId, + ReceiverId = result.RequesterId, + MessageType = resultMessageType, + Content = result.IsAgreed ? "已同意交换" : "已拒绝交换", + ExtraData = result.ExchangedData, + IsRead = false, + CreateTime = DateTime.Now, + IsSelf = false + }; + + await _hubContext.SendMessageToSessionAsync(result.SessionId, messageResponse); + _logger.LogInformation("交换响应已通过SignalR推送到会话组: ResultMessageId={ResultMessageId}, SessionId={SessionId}, IsAgreed={IsAgreed}", + result.ResultMessageId, result.SessionId, result.IsAgreed); return ApiResponse.Success(result); } diff --git a/server/src/XiangYi.Application/DTOs/Responses/ChatResponses.cs b/server/src/XiangYi.Application/DTOs/Responses/ChatResponses.cs index 4304a4b..c31d4f2 100644 --- a/server/src/XiangYi.Application/DTOs/Responses/ChatResponses.cs +++ b/server/src/XiangYi.Application/DTOs/Responses/ChatResponses.cs @@ -163,6 +163,26 @@ public class ExchangeRespondResponse /// 交换的数据(微信号或照片列表JSON) /// public string? ExchangedData { get; set; } + + /// + /// 会话ID + /// + public long SessionId { get; set; } + + /// + /// 原始请求发送者ID + /// + public long RequesterId { get; set; } + + /// + /// 原始请求消息类型 + /// + public int RequestMessageType { get; set; } + + /// + /// 原始请求消息ID + /// + public long RequestMessageId { get; set; } } /// diff --git a/server/src/XiangYi.Application/Services/ChatService.cs b/server/src/XiangYi.Application/Services/ChatService.cs index efad474..ef19eb0 100644 --- a/server/src/XiangYi.Application/Services/ChatService.cs +++ b/server/src/XiangYi.Application/Services/ChatService.cs @@ -586,7 +586,11 @@ public class ChatService : IChatService { ResultMessageId = createdResultMessage.Id, IsAgreed = request.IsAgreed, - ExchangedData = exchangedData + ExchangedData = exchangedData, + SessionId = requestMessage.SessionId, + RequesterId = requestMessage.SenderId, + RequestMessageType = requestMessage.MessageType, + RequestMessageId = request.RequestMessageId }; }