Jason 1 yıl önce
ebeveyn
işleme
021b5cf564

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

@@ -11,6 +11,13 @@ namespace Hotline.Caching.Interfaces
         /// <returns></returns>
         Work GetWorkByUser(string userId);
 
+        /// <summary>
+        /// 查询用户当前工作记录(不抛异常)
+        /// </summary>
+        /// <param name="userId"></param>
+        /// <returns></returns>
+        Work? GetWorkByUserNoExp(string userId);
+
         /// <summary>
         /// 查询分机当前工作记录
         /// </summary>
@@ -18,6 +25,13 @@ namespace Hotline.Caching.Interfaces
         /// <returns></returns>
         Work GetWorkByTel(string telNo);
 
+        /// <summary>
+        /// 查询分机当前工作记录
+        /// </summary>
+        /// <param name="telNo"></param>
+        /// <returns></returns>
+        Work? GetWorkByTelNoExp(string telNo);
+
         /// <summary>
         /// 查询分机是否处于工作
         /// </summary>

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

@@ -1,5 +1,6 @@
 using Hotline.Caching.Interfaces;
 using Hotline.Users;
+using System.Drawing.Printing;
 using XF.Domain.Cache;
 using XF.Domain.Dependency;
 using XF.Domain.Exceptions;
@@ -37,6 +38,22 @@ public class UserCacheManager : IUserCacheManager, IScopeDependency
         return work;
     }
 
+    /// <summary>
+    /// 查询用户当前工作记录(不抛异常)
+    /// </summary>
+    /// <param name="userId"></param>
+    /// <returns></returns>
+    public Work? GetWorkByUserNoExp(string userId)
+    {
+        var work = _cacheWork.GetOrSet(Work.GetKey(KeyMode.UserId, userId), k =>
+        {
+            var dbWork = _workRepository.GetCurrentWorkByUserAsync(userId)
+                .GetAwaiter().GetResult();
+            return dbWork;
+        });
+        return work;
+    }
+
     /// <summary>
     /// 查询分机当前工作记录
     /// </summary>
@@ -56,6 +73,22 @@ public class UserCacheManager : IUserCacheManager, IScopeDependency
         return work;
     }
 
+    /// <summary>
+    /// 查询分机当前工作记录
+    /// </summary>
+    /// <param name="telNo"></param>
+    /// <returns></returns>
+    public Work? GetWorkByTelNoExp(string telNo)
+    {
+        var work = _cacheWork.GetOrSet(Work.GetKey(KeyMode.TelNo, telNo), k =>
+        {
+            var dbWork = _workRepository.GetCurrentWorkByTelAsync(telNo)
+                .GetAwaiter().GetResult();
+            return dbWork;
+        });
+        return work;
+    }
+
     /// <summary>
     /// 查询分机是否处于工作
     /// </summary>

+ 2 - 2
src/Hotline/Users/UserDomainService.cs

@@ -131,7 +131,7 @@ namespace Hotline.Users
         /// <returns></returns>
         public async Task<TrOnDutyResponseDto> TrOnDutyAsync(string userId, string telNo, CancellationToken cancellationToken)
         {
-            var work = _userCacheManager.GetWorkByUser(userId);
+            var work = _userCacheManager.GetWorkByUserNoExp(userId);
             if(work is not null)
             {
                 if(work.TelNo == telNo)
@@ -144,7 +144,7 @@ namespace Hotline.Users
                 }
             }
 
-            var telWork = _userCacheManager.GetWorkByTel(telNo);
+            var telWork = _userCacheManager.GetWorkByTelNoExp(telNo);
             if (telWork is not null)
             {
                 throw UserFriendlyException.SameMessage("当前分机已被占用");