Browse Source

off-duty-manage

Dun.Jason 1 year ago
parent
commit
221826bdec

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

@@ -182,6 +182,22 @@ namespace Hotline.Api.Controllers
             await _telApplication.SignOutAsync(_sessionContext.RequiredUserId, HttpContext.RequestAborted);
         }
 
+        /// <summary>
+        /// 下班-管理手动操作
+        /// </summary>
+        /// <param name="telNo"></param>
+        /// <returns></returns>
+        [HttpPost("off-duty-manage")]
+        public async Task OffDuty([FromBody]string telNo)
+        {
+             var work = _userCacheManager.GetWorkByTel(telNo);
+            if (work != null)
+            {
+                await _telApplication.SignOutAsync(work.UserId, HttpContext.RequestAborted);
+            }
+            
+        }
+
         //提供关闭浏览器事件触发调用
         [HttpPost("off-duty-no-auth")]
         [AllowAnonymous]
@@ -189,7 +205,7 @@ namespace Hotline.Api.Controllers
         {
             if (string.IsNullOrEmpty(userId))
                 throw new UserFriendlyException("无效用户编号");
-            await _telApplication.SignOutAsync(userId, HttpContext.RequestAborted);
+            await _telApplication.SignOutByTelNoAsync(userId, HttpContext.RequestAborted);
         }
 
         #endregion

+ 3 - 0
src/Hotline.Application/Tels/ITelApplication.cs

@@ -13,5 +13,8 @@ namespace Hotline.Application.Tels
         /// 用户签出分机
         /// </summary>
         Task SignOutAsync(string userId, CancellationToken cancellationToken);
+
+
+        Task SignOutByTelNoAsync(string telNo, CancellationToken cancellationToken);
     }
 }

+ 18 - 0
src/Hotline.Application/Tels/TelApplication.cs

@@ -46,4 +46,22 @@ public class TelApplication : ITelApplication, IScopeDependency
         _cacheWork.Remove(work.GetKey(KeyMode.UserId));
         _cacheWork.Remove(work.GetKey(KeyMode.TelNo));
     }
+
+    public async Task SignOutByTelNoAsync(string telNo,CancellationToken cancellationToken)
+    {
+        var work = _userCacheManager.GetWorkByTel(telNo);
+        if (work is null) return;
+
+        var telRest = await _telRestRepository.GetAsync(x => x.TelNo == work.TelNo && !x.EndTime.HasValue, cancellationToken);
+        if (telRest is not null)
+        {
+            telRest.EndRest();
+            await _telRestRepository.UpdateAsync(telRest, cancellationToken);
+        }
+
+        work.OffDuty();
+        await _workRepository.UpdateAsync(work, cancellationToken);
+        _cacheWork.Remove(work.GetKey(KeyMode.UserId));
+        _cacheWork.Remove(work.GetKey(KeyMode.TelNo));
+    }
 }