/// <summary> /// 关闭对话信息 /// </summary> /// <param name="chatId"></param> /// <param name="userName"></param> public static bool CloseChat(string chatId, string closeBy) { Trace.WriteLine(string.Format("ChatService.CloseChat(ChatId = {0},CloseBy={1})", chatId, closeBy)); Chat chat = GetChatById(chatId); if (chat == null) { Trace.WriteLine("Waring: ChatService.CloseChat() error ,ChatId " + chatId + " not found"); return(false); } if (chat.Status == ChatStatus.Closed) { Trace.WriteLine("Waring: ChatService.CloseChat() is closed aleady ,ChatId " + chatId); try { Directory.Delete(ChatTempDataDir + chatId, true); } catch (Exception) { } return(true); } if (ChatStatusChanged != null) { ChatStatusChanged(null, new ChatStatusChangedEventArgs(chatId, ChatStatus.Closed)); } Message m = new Message(); m.ChatId = chatId; m.SentDate = DateTime.Now; m.Type = MessageType.SystemMessage_ToBoth; m.Text = string.Format("{0}已关闭对话", closeBy); SendMessage(m); chat.Status = ChatStatus.Closed; chat.CloseTime = DateTime.Now; chat.CloseBy = closeBy; if (chat.OperatorId == null || chat.OperatorId == "") { chat.OperatorId = null; } Provider.CloseChat(chat); VisitSessionService.SetSessionStatus(VisitorService.GetVisitorById(chat.VisitorId).CurrentSessionId, VisitSessionStatus.Visiting); // 注意: IsOperatorHasActiveChat需要在更改chat status后调用 if (!string.IsNullOrEmpty(chat.OperatorId) && !IsOperatorHasActiveChat(chat.OperatorId) && OperatorService.IsOperatorOnline(chat.OperatorId)) { OperatorService.SetOperatorStatus(chat.OperatorId, OperatorStatus.Idle);//关闭时改变客服状态 } return(true); }