/// <summary> /// 获取聊天记录 /// </summary> /// <param name="historyChatRecordsInput"></param> /// <returns></returns> public BaseDataOutput <List <HistoryChatRecordsOutput> > HistoryChatRecords(HistoryChatRecordsInput historyChatRecordsInput) { BaseDataOutput <List <HistoryChatRecordsOutput> > output = new BaseDataOutput <List <HistoryChatRecordsOutput> >(); List <HistoryChatRecordsOutput> list = _chatRecords.GetAll().WhereIf(!string.IsNullOrEmpty(historyChatRecordsInput.CustomerId), e => e.CustomerId == historyChatRecordsInput.CustomerId) .WhereIf(!string.IsNullOrEmpty(historyChatRecordsInput.CustomerDeviceId), e => e.CustomerDeviceId == historyChatRecordsInput.CustomerDeviceId) .WhereIf(!string.IsNullOrEmpty(historyChatRecordsInput.ServiceId), e => e.ServiceId == historyChatRecordsInput.ServiceId). OrderBy(historyChatRecordsInput.sort + historyChatRecordsInput.order) .Skip(historyChatRecordsInput.SkipCount).Take(historyChatRecordsInput.rows) .Select(e => new HistoryChatRecordsOutput { CustomerId = e.CustomerId, CustomerDeviceId = e.CustomerDeviceId, CustomerCode = e.CustomerCode, CustomerNickName = e.CustomerNickName, CustomerFaceImg = e.CustomerFaceImg, ServiceId = e.ServiceId, ServiceCode = e.ServiceCode, ServiceNickName = e.ServiceNickName, ServiceFaceImg = e.ServiceFaceImg, SendDateTime = e.SendDateTime, SendInfoType = e.SendInfoType, SendContent = e.SendContent, SendSource = e.SendSource }).ToList(); output.Data = list; return(output); }
/// <summary> /// 获取历史聊天记录 /// </summary> /// <param name="Model"></param> /// <returns></returns> public CommandResult HistoryChatRecordsList(string paras) { var Model = JsonConvert.DeserializeObject <Command <CommandHistoryChatRecordsList> >(paras); CommandResult CommandResultModel = new CommandResult(); CommandResultModel.code = 1; CommandResultModel.msg = ""; BaseDataOutput <List <HistoryChatRecordsListOutput> > Output = _ChatRecordsService.HistoryChatRecordsList(new HistoryChatRecordsListInput { ServiceId = Model.data.ServiceId, page = Model.data.Page, rows = Model.data.Rows, sort = "CustomerContentDate", order = "desc" }); if (Output.Code == 0) { CommandResultModel.data = Output.Data; CommandResultModel.code = 0; } else { CommandResultModel.msg = Output.Message; } return(CommandResultModel); }
/// <summary> /// 根据AccessToken获取用户信息 /// </summary> /// <param name="Model"></param> /// <returns></returns> public async Task <CommandResult> AuthorizationAccessToken(string paras) { var Model = JsonConvert.DeserializeObject <Command <CommandAuthorizationAccessToken> >(paras); CommandResult CommandResultModel = new CommandResult(); CommandResultModel.code = 1; CommandResultModel.msg = ""; BaseDataOutput <string> Output = await _OAuthAccountService.AuthorizationAccessToken(new OAuthUserService.OAuthCRMService.Dto.AuthorizationAccessTokenlInput { ThirdPlatCode = Model.data.ThirdPlatCode, DeviceId = Model.data.DeviceId, OAuthCode = Model.data.OAuthCode, }); if (Output.Code == 0) { CommandResultModel.data = new { terminalId = Output.Data, }; CommandResultModel.code = 0; } else { CommandResultModel.msg = Output.Message; } return(CommandResultModel); }
/// <summary> /// 获取授权登录地址 /// </summary> /// <param name="authorizationLoginUrlInput"></param> /// <returns></returns> public BaseDataOutput <string> AuthorizationLoginUrl(AuthorizationLoginUrlInput authorizationLoginUrlInput) { if (string.IsNullOrEmpty(authorizationLoginUrlInput.ThirdPlatCode)) { authorizationLoginUrlInput.ThirdPlatCode = "CRM"; } BaseDataOutput <string> Output = new BaseDataOutput <string>(); OauthSetting OauthSettingModel = _oauthSetting.FirstOrDefault(e => e.ThirdPlatCode == authorizationLoginUrlInput.ThirdPlatCode); Output.Data = OauthSettingModel.AuthorizationLoginUrl + "?AppId=" + OauthSettingModel.AppId + "&Type=OAuth2" + "&redirect_uri=" + authorizationLoginUrlInput.RedirectUri; return(Output); }
/// <summary> /// 获取聊天人列表 /// </summary> /// <param name="historyChatRecordsInput"></param> /// <returns></returns> public BaseDataOutput <List <HistoryChatRecordsListOutput> > HistoryChatRecordsList(HistoryChatRecordsListInput historyChatRecordsInput) { BaseDataOutput <List <HistoryChatRecordsListOutput> > output = new BaseDataOutput <List <HistoryChatRecordsListOutput> >(); var list = _serviceRecords.GetAll() .WhereIf(!string.IsNullOrEmpty(historyChatRecordsInput.ServiceId), e => e.ServiceId == historyChatRecordsInput.ServiceId) .WhereIf(!string.IsNullOrEmpty(historyChatRecordsInput.SearchText), e => e.CustomerNickName.Contains(historyChatRecordsInput.SearchText)) .WhereIf(historyChatRecordsInput.LoginState != null, e => e.CustomerState == historyChatRecordsInput.LoginState); var CustomerList = _customerConnectRecords.GetAll(); var AllotQuery = from item in ( from ServiceRecordsResult in list join CustomerInfo in CustomerList on ServiceRecordsResult.CustomerDeviceId equals CustomerInfo.DeviceId select new { ServiceRecordsResult.CustomerDeviceId, CustomerInfo.CustomerId, CustomerInfo.CustomerNickName, CustomerInfo.CustomerFaceImg, CustomerInfo.CustomerCode, ServiceRecordsResult.CustomerContentDate } ) group item by new { item.CustomerDeviceId, item.CustomerId, item.CustomerNickName, item.CustomerFaceImg, item.CustomerCode, } into groupChild select new HistoryChatRecordsListOutput() { CustomerDeviceId = groupChild.Key.CustomerDeviceId, CustomerId = groupChild.Key.CustomerId, CustomerNickName = groupChild.Key.CustomerNickName, CustomerFaceImg = groupChild.Key.CustomerFaceImg, CustomerCode = groupChild.Key.CustomerCode, CustomerContentDate = groupChild.Max(e => e.CustomerContentDate) }; var Result = AllotQuery.OrderBy(historyChatRecordsInput.sort + historyChatRecordsInput.order) .Skip(historyChatRecordsInput.SkipCount).Take(historyChatRecordsInput.rows) .ToList(); output.Data = Result; return(output); }
public BaseDataOutput <ServiceConnectRecordsInfoOutput> ServiceConnectRecordsInfo(ServiceConnectRecordsInfoInput serviceConnectRecordsInfoInput) { BaseDataOutput <ServiceConnectRecordsInfoOutput> output = new BaseDataOutput <ServiceConnectRecordsInfoOutput>(); ServiceConnectRecordsInfoOutput Model = new ServiceConnectRecordsInfoOutput(); ServiceConnectRecords ServiceConnectRecordsModel = _ServiceConnectRecords.FirstOrDefault(e => e.ServiceId == serviceConnectRecordsInfoInput.ServicerId); if (ServiceConnectRecordsModel != null) { Model.DeviceId = ServiceConnectRecordsModel.DeviceId; Model.ServiceId = ServiceConnectRecordsModel.ServiceId; Model.ServiceCode = ServiceConnectRecordsModel.ServiceCode; Model.ServiceNickName = ServiceConnectRecordsModel.ServiceNickName; Model.ServiceFaceImg = ServiceConnectRecordsModel.ServiceFaceImg; } output.Data = Model; return(output); }
/// <summary> /// 获取第三方登录地址 /// </summary> /// <param name="Model"></param> /// <returns></returns> public CommandResult AuthorizationLogin(string paras) { var Model = JsonConvert.DeserializeObject <Command <CommandAuthorizationLogin> >(paras); BaseDataOutput <string> output = _OAuthAccountService.AuthorizationLoginUrl(new OAuthUserService.OAuthCRMService.Dto.AuthorizationLoginUrlInput { ThirdPlatCode = Model.data.ThirdPlatCode, RedirectUri = Model.data.RedirectUri }); CommandResult CommandResultModel = new CommandResult(); CommandResultModel.code = 0; CommandResultModel.msg = ""; CommandResultModel.data = new { AuthorizationLoginUrl = output.Data, }; return(CommandResultModel); }
/// <summary> /// 用户链接 /// </summary> /// <param name="Model"></param> /// <returns></returns> public async Task <CommandResult> UserConnection(string paras) { var Model = JsonConvert.DeserializeObject <Command <CommandUserConnection> >(paras); //查找当前负责客户最少的客服 var CustomerServiceModel = CustomerServiceList.OrderBy(e => e.ConnectionCount).FirstOrDefault() ?? new OnlineCustomerService(); string terminalId = Model.data.deviceId; CommandResult CommandResultModel = new CommandResult(); CommandResultModel.code = 1; CommandResultModel.msg = ""; CommandResultModel.data = new { terminalId = terminalId, imgService = "http://hmspimg.afarsoft.com/" }; #region 数据库处理 BaseDataOutput <int> Output = _CustomerConnectService.AddServiceConnectRecords(new CRMCustomerService.CRMCustomerConnect.Dto.AddCustomerConnectRecordsDto { DeviceId = Model.data.deviceId, CustomerId = Guid.NewGuid().ToString(), OpenId = "", UnionId = "", CustomerCode = "", CustomerNickName = Model.data.nickName, CustomerFaceImg = Model.data.faceImg, ServiceId = string.IsNullOrEmpty(CustomerServiceModel.servicerId) ? string.Empty : CustomerServiceModel.servicerId, }); #endregion if (Output.Code == 0) { #region 在线客户处理 //处理在线客户 var SameModel = CustomerList.Where(e => e.deviceId == terminalId).FirstOrDefault(); if (SameModel == null) { CustomerList.Add(new OnlineCustomer { nickName = Model.data.nickName, faceimg = Model.data.faceImg, userId = Model.data.userId, deviceId = Model.data.deviceId, ConnectionId = Context.ConnectionId, servicerTerminalId = CustomerServiceModel.servicerId, ServiceRecordId = Output.Data }); } else { CustomerList.Remove(SameModel); SameModel.servicerTerminalId = CustomerServiceModel.servicerId; SameModel.ConnectionId = Context.ConnectionId; SameModel.ServiceRecordId = Output.Data; CustomerList.Add(SameModel); } #endregion #region 客服消息及客服连接数量处理 if (!string.IsNullOrEmpty(CustomerServiceModel.ConnectionId)) { CustomerServiceList.Remove(CustomerServiceModel); CustomerServiceModel.ConnectionCount += 1; CustomerServiceList.Add(CustomerServiceModel); //发送连接消息 await Clients.Client(CustomerServiceModel.ConnectionId).SendAsync("command", new { command = "userDistributeMessage", time = DateTime.Now, data = new { servicerTerminalId = CustomerServiceModel.servicerId, userTerminalId = Model.data.deviceId, content = new { servicerId = CustomerServiceModel.servicerId, deviceId = Model.data.deviceId, nickName = Model.data.nickName, faceImg = Model.data.faceImg, } } }); } else { //没分配到有效客服 await Clients.Client(Context.ConnectionId).SendAsync("command", new { command = "noServicerMessage", time = DateTime.Now, data = new { servicerTerminalId = "", userTerminalId = Model.data.deviceId, fromTerminal = "server" } }); } #endregion #region 客户消息处理 await Clients.Client(Context.ConnectionId).SendAsync("command", new { command = "servicerDistributeMessage", time = DateTime.Now, data = new { userTerminalId = Model.data.deviceId, servicerTerminalId = CustomerServiceModel.servicerId, content = new { nickName = CustomerServiceModel.nickName, faceImg = CustomerServiceModel.faceImg, deviceId = CustomerServiceModel.deviceId, userId = Model.data.userId, } } }); #endregion CommandResultModel.code = 0; } return(CommandResultModel); }
/// <summary> /// 客服链接 /// </summary> /// <param name="Model"></param> /// <returns></returns> public CommandResult ServicerConnection(string paras) { var Model = JsonConvert.DeserializeObject <Command <CommandServicerConnection> >(paras); CommandResult CommandResultModel = new CommandResult(); CommandResultModel.code = 1; CommandResultModel.msg = ""; CommandResultModel.data = new { terminalId = Model.data.servicerId, imgService = "http://hmspimg.afarsoft.com/" }; #region 数据库操作 //BaseOutput Output = _ServiceConnectService.AddServiceConnectRecords(new CRMCustomerService.CRMServiceConnect.Dto.AddServiceConnectRecordsDto //{ // DeviceId = Model.data.deviceId, // ServiceId = Model.data.servicerId, // ServiceCode = "", // ServiceNickName = Model.data.nickName, // ServiceFaceImg = Model.data.faceimg //}); BaseDataOutput <ServiceConnectRecordsInfoOutput> Output = _ServiceConnectService.ServiceConnectRecordsInfo(new CRMCustomerService.CRMServiceConnect.Dto.ServiceConnectRecordsInfoInput { ServicerId = Model.data.servicerId }); #endregion if (Output.Code == 0) { #region 处理在线客服信息 var SameModel = CustomerServiceList.Where(e => e.servicerId == Model.data.servicerId).FirstOrDefault(); if (SameModel == null) { CustomerServiceList.Add(new OnlineCustomerService { nickName = Output.Data.ServiceNickName, faceImg = Output.Data.ServiceFaceImg, servicerId = Model.data.servicerId, deviceId = Output.Data.DeviceId, ConnectionId = Context.ConnectionId, ConnectionCount = 0, }); } else { CustomerServiceList.Remove(SameModel); SameModel.ConnectionId = Context.ConnectionId; CustomerServiceList.Add(SameModel); } #endregion CommandResultModel.code = 0; CommandResultModel.data = new { terminalId = Model.data.servicerId, nickName = Output.Data.ServiceNickName, faceImg = Output.Data.ServiceFaceImg, Code = Output.Data.ServiceCode, imgService = "http://hmspimg.afarsoft.com/" }; } return(CommandResultModel); }
/// <summary> /// 添加客户,并建立连接 /// </summary> /// <param name="addCustomerConnectRecordsDto"></param> public BaseDataOutput <int> AddServiceConnectRecords(AddCustomerConnectRecordsDto addCustomerConnectRecordsDto) { BaseDataOutput <int> output = new BaseDataOutput <int>(); int CustomerConnectRecordsId = 0; int ServiceRecordsId = 0; ChatRecords ChatRecordsModel = new ChatRecords(); //处理客户记录表 CustomerConnectRecords CustomerConnectRecordsModel = _CustomerConnectRecords.FirstOrDefault(e => e.DeviceId == addCustomerConnectRecordsDto.DeviceId); if (CustomerConnectRecordsModel == null) { CustomerConnectRecords NewCustomerConnectRecordsModel = new CustomerConnectRecords(); NewCustomerConnectRecordsModel = EntityHelper.CopyValue(addCustomerConnectRecordsDto, NewCustomerConnectRecordsModel); NewCustomerConnectRecordsModel.CustomerState = OrderInfo.LoginState.Online; CustomerConnectRecordsId = _CustomerConnectRecords.InsertAndGetId(NewCustomerConnectRecordsModel); } else { CustomerConnectRecordsModel.CustomerState = OrderInfo.LoginState.Online; _CustomerConnectRecords.Update(CustomerConnectRecordsModel); CustomerConnectRecordsId = CustomerConnectRecordsModel.Id; } //处理连接记录表 ServiceRecords ServiceRecordsModel = new ServiceRecords(); ServiceRecordsModel = EntityHelper.CopyValue(addCustomerConnectRecordsDto, ServiceRecordsModel); ServiceRecordsModel.CustomerDeviceId = addCustomerConnectRecordsDto.DeviceId; //连接记录表-处理客户信息 ServiceRecordsModel.CustomerConnectRecordsId = CustomerConnectRecordsId; ServiceRecordsModel.CustomerContentDate = DateTime.Now; ServiceRecordsModel.CustomerState = OrderInfo.LoginState.Online; //连接记录表-如果匹配到客服,则处理客服信息 if (addCustomerConnectRecordsDto.ServiceId != null) { ServiceConnectRecords ServiceConnectRecordsModel = _ServiceConnectRecords.FirstOrDefault(e => e.ServiceId == addCustomerConnectRecordsDto.ServiceId); if (ServiceConnectRecordsModel != null) { //连接记录表-处理客服信息 ServiceRecordsModel = EntityHelper.CopyValue(ServiceConnectRecordsModel, ServiceRecordsModel); ServiceRecordsModel.Id = 0; ServiceRecordsModel.ServiceConnectRecordsId = ServiceConnectRecordsModel.Id; ServiceRecordsModel.ServiceId = addCustomerConnectRecordsDto.ServiceId; ServiceRecordsModel.ServiceContentDate = DateTime.Now; ServiceRecordsModel.ServiceState = OrderInfo.LoginState.Online; ServiceConnectRecordsModel.ServiceCount += 1; _ServiceConnectRecords.Update(ServiceConnectRecordsModel); //聊天记录表-处理客服信息 ChatRecordsModel = EntityHelper.CopyValue(ServiceConnectRecordsModel, ChatRecordsModel); ChatRecordsModel.ServiceId = addCustomerConnectRecordsDto.ServiceId; } } ServiceRecordsId = _ServiceRecords.InsertAndGetId(ServiceRecordsModel); //聊天记录表-处理客户信息 ChatRecordsModel = EntityHelper.CopyValue(addCustomerConnectRecordsDto, ChatRecordsModel); ChatRecordsModel.Id = 0; ChatRecordsModel.CustomerDeviceId = addCustomerConnectRecordsDto.DeviceId; //聊天记录表-处理聊天信息 ChatRecordsModel.ServiceRecordsId = ServiceRecordsId; ChatRecordsModel.SendInfoType = OrderInfo.SendInfoType.TextInfo; ChatRecordsModel.SendSource = OrderInfo.TerminalRefer.system; ChatRecordsModel.SendContent = "客服[" + ChatRecordsModel.ServiceNickName + "]为您服务"; ChatRecordsModel.SendDateTime = DateTime.Now; ChatRecordsModel.ReceiveState = OrderInfo.ReceiveState.Received; _ChatRecords.Insert(ChatRecordsModel); output.Data = ServiceRecordsId; return(output); }
/// <summary> /// 根据AccessToken获取用户信息 /// </summary> /// <param name="authorizationAccessTokenlInput"></param> /// <returns></returns> public async Task <BaseDataOutput <string> > AuthorizationAccessToken(AuthorizationAccessTokenlInput authorizationAccessTokenlInput) { BaseDataOutput <string> Output = new BaseDataOutput <string>(); if (!string.IsNullOrEmpty(authorizationAccessTokenlInput.OAuthCode) && !string.IsNullOrEmpty(authorizationAccessTokenlInput.ThirdPlatCode)) { BaseDataOutput <string> AccessTokenOutput = new BaseDataOutput <string>(); BaseDataOutput <AuthorizationUserInfoDto> ThirdOutput = new BaseDataOutput <AuthorizationUserInfoDto>(); OauthSetting OauthSettingModel = _oauthSetting.FirstOrDefault(e => e.ThirdPlatCode == authorizationAccessTokenlInput.ThirdPlatCode); if (OauthSettingModel != null) { var GetAccessTokenObj = new { OAuthCode = authorizationAccessTokenlInput.OAuthCode }; var CodeResult = await _httpClientFactory.CreateClient().PostAsync(OauthSettingModel.GetAccessTokenUrl, new StringContent(JsonConvert.SerializeObject(GetAccessTokenObj), Encoding.UTF8, "application/json")); var ResultStr = await CodeResult.Content.ReadAsStringAsync(); AccessTokenOutput = JsonConvert.DeserializeObject <BaseDataOutput <string> >(ResultStr); if (AccessTokenOutput.Code == 0) { #region 根据AccessToken获取用户信息 var GetUserInfoObj = new { AccessToken = AccessTokenOutput.Data }; var UserInfoResult = await _httpClientFactory.CreateClient().PostAsync(OauthSettingModel.AuthorizationUrl, new StringContent(JsonConvert.SerializeObject(GetUserInfoObj), Encoding.UTF8, "application/json")); var UserInfoResultStr = await UserInfoResult.Content.ReadAsStringAsync(); ThirdOutput = JsonConvert.DeserializeObject <BaseDataOutput <AuthorizationUserInfoDto> >(UserInfoResultStr); if (ThirdOutput.Code == 0) { if (ThirdOutput.Data.UserType == OrderInfo.TerminalRefer.servicer) { ServiceConnectRecords ServiceConnectRecordsModel = _serviceConnectRecords.FirstOrDefault(e => e.ServiceId == ThirdOutput.Data.UserId); if (ServiceConnectRecordsModel == null) { int UserId = _serviceConnectRecords.InsertAndGetId(new ServiceConnectRecords { ServiceId = ThirdOutput.Data.UserId, ServiceCode = ThirdOutput.Data.UserCode, ServiceNickName = ThirdOutput.Data.UserNickName, ServiceCount = 0, ServiceFaceImg = ThirdOutput.Data.UserFaceImg, ServiceState = OrderInfo.LoginState.OffLine, DeviceId = authorizationAccessTokenlInput.DeviceId }); Output.Data = ThirdOutput.Data.UserId; } else { Output.Data = ServiceConnectRecordsModel.ServiceId.ToString(); } } if (ThirdOutput.Data.UserType == OrderInfo.TerminalRefer.user) { CustomerConnectRecords CustomerConnectRecordsModel = _customerConnectRecords.FirstOrDefault(e => e.CustomerId == ThirdOutput.Data.UserId); if (CustomerConnectRecordsModel == null) { int CustomerId = _customerConnectRecords.InsertAndGetId(new CustomerConnectRecords { CustomerId = ThirdOutput.Data.UserId, CustomerCode = ThirdOutput.Data.UserCode, CustomerNickName = ThirdOutput.Data.UserNickName, CustomerFaceImg = ThirdOutput.Data.UserFaceImg, CustomerState = OrderInfo.LoginState.OffLine, DeviceId = authorizationAccessTokenlInput.DeviceId }); Output.Data = ThirdOutput.Data.UserId; } else { Output.Data = CustomerConnectRecordsModel.CustomerId.ToString(); } } } else { Output.Code = 1; Output.Message = ThirdOutput.Message; } #endregion } else { Output.Code = 1; Output.Message = "获取AccessToken失败:" + AccessTokenOutput.Message; } } else { Output.Code = 1; Output.Message = "未获取到授权设置信息"; } } else { Output.Code = 1; Output.Message = "未获取AccessToken或第三方平台编号"; } return(Output); }