admin 2 年之前
父节点
当前提交
befb64b3ee

+ 23 - 6
src/CallCenter.Api/Controllers/TelController.cs

@@ -322,9 +322,17 @@ namespace CallCenter.Api.Controllers
             var toWork = _userCacheManager.GetWorkByTel(dto.TelNo);
             if (toWork is null)
                 throw new UserFriendlyException("转接分机未进行工作");
-            var tel = await _deviceManager.QueryTelAsync(dto.TelNo, HttpContext.RequestAborted);
-            if (tel.TelStatus != Share.Enums.ETelStatus.Ready)
+
+
+            var telState = await _deviceManager.QueryTelState(dto.TelNo, HttpContext.RequestAborted);
+            if (telState != Share.Enums.ETelStatus.Ready)
                 throw new UserFriendlyException("被叫分机不在线或正在通话中");
+
+            bool isRest = await _telRepository.IsRestingAsync(dto.TelNo, HttpContext.RequestAborted);
+            if (isRest)
+                throw new UserFriendlyException("被叫分机正在休息不能转接");
+
+
             await _deviceManager.ExtToExtAsync(work.TelNo, dto.TelNo, HttpContext.RequestAborted);
         }
 
@@ -358,10 +366,15 @@ namespace CallCenter.Api.Controllers
             if (toWork is null)
                 throw new UserFriendlyException("转接分机未进行工作");
 
-            var totel = await _deviceManager.QueryTelAsync(dto.TelNo, HttpContext.RequestAborted);
-            if (totel.TelStatus != Share.Enums.ETelStatus.Ready)
+            var telState = await _deviceManager.QueryTelState(dto.TelNo, HttpContext.RequestAborted);
+            if (telState != Share.Enums.ETelStatus.Ready)
                 throw new UserFriendlyException("被叫分机不在线或正在通话中");
 
+
+            bool isRest = await _telRepository.IsRestingAsync(dto.TelNo,HttpContext.RequestAborted);
+            if (isRest)
+                throw new UserFriendlyException("被叫分机正在休息不能转接");
+
             var tel = await _deviceManager.QueryTelAsync(work.TelNo, HttpContext.RequestAborted);
             if (!string.IsNullOrEmpty(tel.ConversationId))
                 await _deviceManager.VisitorToExtAsync(tel.ConversationId, dto.TelNo, HttpContext.RequestAborted);
@@ -442,10 +455,14 @@ namespace CallCenter.Api.Controllers
             if (toWork is null)
                 throw new UserFriendlyException("转接分机未进行工作");
 
-            var totel = await _deviceManager.QueryTelAsync(dto.TelNo, HttpContext.RequestAborted);
-            if (totel.TelStatus != Share.Enums.ETelStatus.Ready)
+            var telState = await _deviceManager.QueryTelState(dto.TelNo, HttpContext.RequestAborted);
+            if (telState != Share.Enums.ETelStatus.Ready)
                 throw new UserFriendlyException("被叫分机不在线或正在通话中");
 
+            bool isRest = await _telRepository.IsRestingAsync(dto.TelNo, HttpContext.RequestAborted);
+            if (isRest)
+                throw new UserFriendlyException("被叫分机正在休息不能转接");
+
             var tel = await _deviceManager.QueryTelAsync(work.TelNo, HttpContext.RequestAborted);
             if (!string.IsNullOrEmpty(tel.ConversationId))
                 await _deviceManager.OuterToExtAsync(tel.ConversationId, dto.TelNo, HttpContext.RequestAborted);

+ 25 - 0
src/CallCenter.NewRock/DeviceManager.cs

@@ -115,6 +115,31 @@ namespace CallCenter.NewRock
         }
 
 
+        public async Task<Share.Enums.ETelStatus> QueryTelState(string TelNo, CancellationToken cancellationToken)
+        {
+            var result = await _newRockClient.QueryExt(
+                new QueryExtRequest() { Attribute = "Query", Ext = new Ext { Id = TelNo } },
+                _options.Value.ReceiveKey, _options.Value.Expired, cancellationToken);
+
+            switch (result.Ext.State)
+            {
+                case "ready":
+                    return Share.Enums.ETelStatus.Ready;
+                case "active":
+                    return Share.Enums.ETelStatus.Active;
+                case "progress":
+                    return Share.Enums.ETelStatus.Progress;
+                case "offline":
+                    return Share.Enums.ETelStatus.Offline;
+                case "offhook":
+                    return Share.Enums.ETelStatus.Offhook;
+                default:
+                    break;
+            }
+
+            return Share.Enums.ETelStatus.Offline;
+        }
+
         /// <summary>
         /// 查询所有分机
         /// </summary>

+ 3 - 0
src/CallCenter/Devices/IDeviceManager.cs

@@ -23,6 +23,9 @@ namespace CallCenter.Devices
         /// <returns></returns>
         Task<TelDto> QueryTelAsync(string TelNo,CancellationToken cancellationToken);
 
+
+        Task<Share.Enums.ETelStatus> QueryTelState(string TelNo, CancellationToken cancellationToken);
+
         /// <summary>
         /// 查询所有分机
         /// </summary>