Dun.Jason 1 anno fa
parent
commit
8b21053ed2

+ 28 - 1
src/Hotline.Api/Controllers/Bi/BiCallController.cs

@@ -1,4 +1,5 @@
 using Hotline.CallCenter.Calls;
+using Hotline.CallCenter.Tels;
 using Hotline.Share.Dtos.CallCenter;
 using Hotline.Share.Enums.CallCenter;
 using Hotline.Share.Enums.User;
@@ -18,13 +19,16 @@ public class BiCallController : BaseController
 {
     private readonly IRepository<TrCallRecord> _trCallRecordRepository;
     private readonly IRepository<User> _userRepository;
+    private readonly IRepository<TelRest> _telRestRepository;
 
     public BiCallController(
         IRepository<TrCallRecord> trCallRecordRepository,
-        IRepository<User> userRepository)
+        IRepository<User> userRepository,
+        IRepository<TelRest> telRestRepository)
     {
         _trCallRecordRepository = trCallRecordRepository;
         _userRepository = userRepository;
+        _telRestRepository = telRestRepository;
     }
 
     [HttpGet("calls")]
@@ -111,4 +115,27 @@ public class BiCallController : BaseController
               .MergeTable()
               .ToListAsync(HttpContext.RequestAborted);
     }
+
+    
+    [HttpGet("rests")]
+    [AllowAnonymous]
+    public async Task<IReadOnlyList<BiSeatRestDto>> QuerySeatRestAsync([FromQuery]QuerySeatRestRequest dto)
+    {
+        return await _telRestRepository.Queryable()
+            .WhereIF(!string.IsNullOrEmpty(dto.UserName), x => x.UserName.Contains(dto.UserName))
+            .WhereIF(!string.IsNullOrEmpty(dto.StaffNo), x => x.StaffNo.Contains(dto.StaffNo))
+            .WhereIF(dto.StartTime.HasValue,x => x.CreationTime >= dto.StartTime.Value)
+            .WhereIF(dto.EndTime.HasValue,x => x.CreationTime <= dto.EndTime.Value)
+            .GroupBy(x=> new { x.UserId ,x.StaffNo,x.UserName})
+            .Select(x => new BiSeatRestDto
+            { 
+                 UserId = x.UserId,
+                 StaffNo  = x.StaffNo,
+                 UserName = x.UserName,
+                 RestCount = SqlFunc.AggregateCount(x.Id),
+                 RestDuration = SqlFunc.AggregateSum(x.RestDuration/60)
+            }).OrderByDescending(a=>a.RestDuration)
+            .MergeTable()
+            .ToListAsync(HttpContext.RequestAborted);
+    }
 }

+ 1 - 1
src/Hotline.Api/Controllers/IPPbxController.cs

@@ -179,7 +179,7 @@ namespace Hotline.Api.Controllers
         /// </summary>
         /// <returns></returns>
         [HttpPost("rest")]
-        public async Task Rest([FromBody]RestDto dto)
+        public async Task Rest([FromBody] TrRestDto dto)
         {
             var work = _userCacheManager.GetWorkByUser(_sessionContext.RequiredUserId);
             if(work == null)

+ 7 - 2
src/Hotline.Application/CallCenter/Calls/TrApplication.cs

@@ -1,4 +1,5 @@
 using Hotline.Caching.Interfaces;
+using Hotline.CallCenter.Tels;
 using Hotline.Share.Dtos.TrCallCenter;
 using Hotline.Users;
 using Tr.Sdk;
@@ -6,6 +7,7 @@ using XF.Domain.Authentications;
 using XF.Domain.Constants;
 using XF.Domain.Dependency;
 using XF.Domain.Exceptions;
+using XF.Domain.Repository;
 
 namespace Hotline.Application.CallCenter.Calls
 {
@@ -16,13 +18,15 @@ namespace Hotline.Application.CallCenter.Calls
         private readonly IWorkRepository _workRepository;
         private readonly ISystemSettingCacheManager _systemSettingCacheManager;
         private readonly IUserCacheManager _userCacheManager;
-        public TrApplication(ITrClient trClient, ISessionContext sessionContext,IWorkRepository workRepository,ISystemSettingCacheManager systemSettingCacheManager,IUserCacheManager userCacheManager)
+        private readonly ITelRestRepository _telRestRepository;
+        public TrApplication(ITrClient trClient, ISessionContext sessionContext,IWorkRepository workRepository,ISystemSettingCacheManager systemSettingCacheManager,IUserCacheManager userCacheManager, ITelRestRepository telRestRepository)
         {
             _trClient = trClient;
             _sessionContext = sessionContext;
             _workRepository = workRepository;
             _systemSettingCacheManager = systemSettingCacheManager;
             _userCacheManager = userCacheManager;
+            _telRestRepository = telRestRepository;
         }
 
         /// <summary>
@@ -37,6 +41,7 @@ namespace Hotline.Application.CallCenter.Calls
             var work = _userCacheManager.GetWorkByUserNoExp(userId);
             if (work is not null)
             {
+                
                 if (work.TelNo == telNo)
                 {
                     return new TrOnDutyResponseDto() { TelNo = work.TelNo, TelPwd = work.TelPwd, Description = work.Description, QueueId = work.QueueId,StartTime = work.StartTime };
@@ -61,7 +66,7 @@ namespace Hotline.Application.CallCenter.Calls
                 bool IsTelNeedVerify = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.IsTelNeedVerify).SettingValue[0]);
                 if (IsTelNeedVerify)
                 {
-                    return new TrOnDutyResponseDto() { TelNo = telNo, TelPwd = "", Description = telModel[0].Description, QueueId = telModel[0].QueueId,StartTime = work.StartTime };
+                    return new TrOnDutyResponseDto() { TelNo = telNo, TelPwd = "", Description = telModel[0].Description, QueueId = telModel[0].QueueId,StartTime = work.StartTime};
                 }
                 else
                 {

+ 13 - 0
src/Hotline.Share/Dtos/CallCenter/BiSeatCallsDto.cs

@@ -99,4 +99,17 @@ public class BiSeatCallsDto
     /// 工作效率
     /// </summary>
     public double WorkRate => LoginDuration > 0 ? Math.Round(1 - RestDuration / LoginDuration, digits: 4) : 0;
+}
+
+
+public class BiSeatRestDto
+{
+    public string UserId { get; set; }
+    public string? StaffNo { get; set; }
+
+    public string UserName { get; set; }
+
+    public int RestCount { get; set; }
+
+    public double RestDuration { get; set; }
 }

+ 1 - 1
src/Hotline.Share/Dtos/TrCallCenter/TrTelDao.cs

@@ -184,7 +184,7 @@ namespace Hotline.Share.Dtos.TrCallCenter
 
     #region 小休
 
-    public class RestDto
+    public class TrRestDto
     {
         public string Reason { get; set; }
     }

+ 9 - 0
src/Hotline.Share/Requests/PagedKeywordRequest.cs

@@ -33,4 +33,13 @@ public record ReportPagedRequest : PagedKeywordRequest
 public record HotspotReportPagedRequest : ReportPagedRequest { 
 
 	public string Id { get; set; }
+}
+
+
+public record QuerySeatRestRequest:ReportPagedRequest
+{
+	public string? UserName { get; set; }
+
+	public string? StaffNo { get; set; }
+
 }

+ 1 - 9
src/Hotline/Users/IUserDomainService.cs

@@ -24,15 +24,7 @@ namespace Hotline.Users
         Task<WorkDto?> OffDutyAsync(string userId, CancellationToken cancellationToken);
 
         #region 添添呼
-        /// <summary>
-        /// 上班
-        /// </summary>
-        /// <param name="userId"></param>
-        /// <param name="TelNo"></param>
-        /// <param name="cancellationToken"></param>
-        /// <returns></returns>
-        Task<TrOnDutyResponseDto> TrOnDutyAsync(string userId,  string TelNo, CancellationToken cancellationToken);
-
+        
         /// <summary>
         /// 下班
         /// </summary>

+ 0 - 65
src/Hotline/Users/UserDomainService.cs

@@ -119,71 +119,6 @@ namespace Hotline.Users
 
         #region 添添呼
 
-        /// <summary>
-        /// 上班
-        /// </summary>
-        /// <param name="userId"></param>
-        /// <param name="telNo"></param>
-        /// <param name="cancellationToken"></param>
-        /// <returns></returns>
-        public async Task<TrOnDutyResponseDto> TrOnDutyAsync(string userId, string telNo, CancellationToken cancellationToken)
-        {
-            var work = _userCacheManager.GetWorkByUserNoExp(userId);
-            if(work is not null)
-            {
-                if(work.TelNo == telNo)
-                {
-                    return new TrOnDutyResponseDto() { TelNo = work.TelNo, TelPwd = work.TelPwd, Description = work.Description };
-                }
-                else
-                {
-                    throw UserFriendlyException.SameMessage("当前用户已签入其他分机");
-                }
-            }
-
-            var telWork = _userCacheManager.GetWorkByTelNoExp(telNo);
-            if (telWork is not null)
-            {
-                throw UserFriendlyException.SameMessage("当前分机已被占用");
-            }
-
-
-            bool IsTelNeedVerify = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.IsTelNeedVerify).SettingValue[0]);
-
-            //var telModel = await _trClient.QueryTelsAsync(new Tr.Sdk.Tels.QueryTelRequest() { TelNo = telNo }, cancellationToken);
-            //if (telModel != null && telModel.Count > 0)
-            //{
-            //    work = new Work(userId, _sessionContext.UserName, telModel[0].Id, telNo, telModel[0].Password, telModel[0].Description);
-            //    await _workRepository.AddAsync(work, cancellationToken);
-            //    if (IsTelNeedVerify)
-            //    {
-            //        return new TrOnDutyResponseDto() { TelNo = telNo, TelPwd = "", Description = telModel[0].Description };
-            //    }
-            //    else
-            //    {
-            //        return new TrOnDutyResponseDto() { TelNo = telNo, TelPwd = telModel[0].Password, Description = telModel[0].Description };
-            //    }
-            //}
-            throw UserFriendlyException.SameMessage("签入异常,未查询到对应分机信息");
-            /*
-             *var work = 缓存.get(userId);
-             * if(work.TelNo == telNo)
-             * t: return work f: throw 
-             *
-             * 获取配置
-             *IsNeedTelNo
-             * IsTelNeedVerify
-             *
-             * user
-             * tel = trClient.get(telNo);
-             * work
-             *
-             * 根据配置 return new();
-             *
-             */
-        }
-
-
         /// <summary>
         /// 下班
         /// </summary>