tangjiang il y a 1 jour
Parent
commit
5fedab8147

+ 40 - 42
src/Hotline.Api/Controllers/CallController.cs

@@ -38,7 +38,7 @@ namespace Hotline.Api.Controllers
         private readonly IMapper _mapper;
         private readonly IOptionsSnapshot<CallCenterConfiguration> _callcenterOptions;
         private readonly ISystemSettingCacheManager _systemSettingCacheManager;
-        private readonly IRepository<TelOperationXthx> _telOperationXthxRepository; 
+        private readonly IRepository<TelOperationXthx> _telOperationXthxRepository;
         private readonly IUserCacheManager _userCacheManager;
         private readonly ISessionContext _sessionContext;
         private readonly IRepository<TelActionRecord> _telActionRecordRepository;
@@ -140,9 +140,7 @@ namespace Hotline.Api.Controllers
             if (actionType == 0)//小休
             {
                 var isResting = await _telActionRecordRepository.AnyAsync(x => x.TelNo == work.TelNo && x.ActionType == EActionType.TelRest && !x.EndTime.HasValue, HttpContext.RequestAborted);
-                if (isResting)
-                    throw UserFriendlyException.SameMessage("当前坐席正在休息");
-                else
+                if (!isResting)
                 {
                     var telAction = new TelActionRecord(work.UserId, work.UserName, work.TelNo, work.QueueId, EActionType.TelRest);
                     await _telActionRecordRepository.AddAsync(telAction, HttpContext.RequestAborted);
@@ -251,44 +249,44 @@ namespace Hotline.Api.Controllers
         public async Task<int> QueryCallsFixedCount([FromQuery] QueryCallsFixedDto dto)
             => await _callApplication.QueryCallsFixedAsync(dto, HttpContext.RequestAborted).CountAsync(HttpContext.RequestAborted);
 
-		/// <summary>
-		/// 导出通话记录
-		/// </summary>
-		/// <param name="dto"></param>
-		/// <returns></returns>
-		[HttpPost("calls-fixed/export")]
-		[LogFilterAlpha("导出日志")]
-		public async Task<FileStreamResult> ExportOrders([FromBody] ExportExcelDto<QueryCallsFixedDto> dto)
-		{
-			var query = _callApplication.QueryCallsFixedAsync(dto.QueryDto, HttpContext.RequestAborted);
-			List<CallNativeDto> callls;
-			if (dto.IsExportAll)
-			{
-				callls = await query.ToListAsync(HttpContext.RequestAborted);
-			}
-			else
-			{
-				var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
-				callls = items;
-			}
-			dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass<CallNativeDto>(dto.ColumnInfos);
-
-			var dtos = callls
-				.Select(stu => _mapper.Map(stu, typeof(CallNativeDto), dynamicClass))
-				.Cast<object>()
-				.ToList();
-
-			var stream = ExcelHelper.CreateStream(dtos);
-
-			return ExcelStreamResult(stream, "通话记录");
-		}
-
-		/// <summary>
-		/// 查询通话记录
-		/// </summary>
-		/// <param name="callId"></param>
-		/// <returns></returns>
-		[HttpGet("{callId}")]
+        /// <summary>
+        /// 导出通话记录
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("calls-fixed/export")]
+        [LogFilterAlpha("导出日志")]
+        public async Task<FileStreamResult> ExportOrders([FromBody] ExportExcelDto<QueryCallsFixedDto> dto)
+        {
+            var query = _callApplication.QueryCallsFixedAsync(dto.QueryDto, HttpContext.RequestAborted);
+            List<CallNativeDto> callls;
+            if (dto.IsExportAll)
+            {
+                callls = await query.ToListAsync(HttpContext.RequestAborted);
+            }
+            else
+            {
+                var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+                callls = items;
+            }
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass<CallNativeDto>(dto.ColumnInfos);
+
+            var dtos = callls
+                .Select(stu => _mapper.Map(stu, typeof(CallNativeDto), dynamicClass))
+                .Cast<object>()
+                .ToList();
+
+            var stream = ExcelHelper.CreateStream(dtos);
+
+            return ExcelStreamResult(stream, "通话记录");
+        }
+
+        /// <summary>
+        /// 查询通话记录
+        /// </summary>
+        /// <param name="callId"></param>
+        /// <returns></returns>
+        [HttpGet("{callId}")]
         public Task<List<CallNative>> GetCall(string callId)
         {
             //为兼容天润通话记录返回集合

+ 98 - 0
src/Hotline.Share/Enums/CallCenter/EExtensionStatus.cs

@@ -0,0 +1,98 @@
+using System.ComponentModel;
+
+namespace Hotline.Share.Enums.CallCenter
+{
+    public enum EExtensionStatus
+    {
+        /// <summary>
+        /// 签出
+        /// </summary>
+        [Description("签出")]
+        SignOut = 0,
+
+        /// <summary>
+        /// 签入
+        /// </summary>
+        [Description("签入")]
+        SignIn = 100,
+
+        /// <summary>
+        /// 空闲
+        /// </summary>
+        [Description("空闲")]
+        Ready = 200,
+
+        /// <summary>
+        /// 小休
+        /// </summary>
+        [Description("小休")]
+        TelRest = 201,
+
+        /// <summary>
+        /// 繁忙
+        /// </summary>
+        [Description("繁忙")]
+        Active = 202,
+
+        /// <summary>
+        /// 呼入振铃
+        /// </summary>
+        [Description("呼入振铃")]
+        InRing = 300,
+
+        /// <summary>
+        /// 呼入通话
+        /// </summary>
+        [Description("呼入通话")]
+        InTalk = 301,
+
+        /// <summary>
+        /// 呼出振铃
+        /// </summary>
+        [Description("呼出振铃")]
+        OutRing = 302,
+
+        /// <summary>
+        /// 呼出通话
+        /// </summary>
+        [Description("呼出通话")]
+        OutTalk = 303,
+
+        /// <summary>
+        /// 通话保持
+        /// </summary>
+        [Description("通话保持")]
+        Hold = 310,
+
+        /// <summary>
+        /// 会议
+        /// </summary>
+        [Description("会议")]
+        Meeting = 320,
+
+        /// <summary>
+        /// 咨询
+        /// </summary>
+        [Description("咨询")]
+        Consult = 330,
+
+        /// <summary>
+        /// 整理
+        /// </summary>
+        [Description("整理")]
+        Arrange = 400,
+
+        /// <summary>
+        /// 注册
+        /// </summary>
+        [Description("注册")]
+        Register = 900,
+
+        /// <summary>
+        /// 注销
+        /// </summary>
+        [Description("注销")]
+        LogOff = 901,
+
+    }
+}

+ 7 - 0
src/Hotline/Caching/Interfaces/IUserCacheManager.cs

@@ -11,6 +11,13 @@ namespace Hotline.Caching.Interfaces
         /// <returns></returns>
         Task<Work> GetWorkByTelNoLast(string telNo);
 
+        /// <summary>
+        /// 设置用户当前工作记录
+        /// </summary>
+        /// <param name="userId"></param>
+        /// <returns></returns>
+        void SetWorkByUser(Work work);
+
         /// <summary>
         /// 查询用户当前工作记录
         /// </summary>

+ 10 - 0
src/Hotline/Caching/Services/UserCacheManager.cs

@@ -30,6 +30,16 @@ public class UserCacheManager : IUserCacheManager, IScopeDependency
         return await _workRepository.Queryable().OrderByDescending(x => x.CreationTime).FirstAsync(x => x.TelNo == telNo);
     }
 
+    /// <summary>
+    /// 设置用户当前工作记录
+    /// </summary>
+    /// <param name="userId"></param>
+    /// <returns></returns>
+    public void SetWorkByUser(Work work)
+    {
+        _cacheWork.Set(Work.GetKey(KeyMode.UserId, work.UserId), work);
+    }
+
     /// <summary>
     /// 查询用户当前工作记录
     /// </summary>

+ 10 - 0
src/Hotline/Users/Work.cs

@@ -53,6 +53,16 @@ public class Work : CreationModificationEntity
 
     public ETelModel? TelModel { get; set; }
 
+    /// <summary>
+    ///话机状态
+    /// </summary>
+    public EExtensionStatus? OldExtensionStatus { get; set; }
+
+    /// <summary>
+    ///话机状态
+    /// </summary>
+    public EExtensionStatus ExtensionStatus { get; set; }
+
     ///// <summary>
     ///// SignalR.ConnectionId
     ///// </summary>