Explorar o código

处理消息通道推送问题

dss %!s(int64=2) %!d(string=hai) anos
pai
achega
0dccc8ec7c

+ 4 - 2
src/CallCenter.Api/Realtimes/CallCenterHub.cs

@@ -12,11 +12,13 @@ public class CallCenterHub : Hub
 {
     private readonly ISessionContext _sessionContext;
     private readonly IWorkRepository _workRepository;
+    private readonly IUserCacheManager _userCacheManager;
 
-    public CallCenterHub(ISessionContext sessionContext, IWorkRepository workRepository)
+    public CallCenterHub(ISessionContext sessionContext, IWorkRepository workRepository, IUserCacheManager userCacheManager)
     {
         _sessionContext = sessionContext;
         _workRepository = workRepository;
+        _userCacheManager = userCacheManager;
     }
 
     /// <summary>
@@ -31,7 +33,7 @@ public class CallCenterHub : Hub
             throw new UserFriendlyException($"未查询到上班记录, userId: {userId}");
         work.SignalRId = Context.ConnectionId;
         await _workRepository.UpdateAsync(work, Context.ConnectionAborted);
-        //todo 清理对应work cache
+        _userCacheManager.UpdateWorkByUser(work);
         await base.OnConnectedAsync();
     }
 

+ 8 - 0
src/CallCenter/Caches/IUserCacheManager.cs

@@ -37,5 +37,13 @@ namespace CallCenter.Caches
         /// <param name="cancellationToken"></param>
         /// <returns></returns>
         Task<bool> IsWorkingByUserAsync(string userId, CancellationToken cancellationToken);
+
+
+        /// <summary>
+        /// 根据用户更新工作记录
+        /// </summary>
+        /// <param name="work"></param>
+        /// <returns></returns>
+        void UpdateWorkByUser(Work work);
     }
 }

+ 10 - 0
src/CallCenter/Caches/UserCacheManager.cs

@@ -98,4 +98,14 @@ public class UserCacheManager : IUserCacheManager, IScopeDependency
 
         return true;
     }
+
+    /// <summary>
+    /// 根据用户更新工作记录
+    /// </summary>
+    /// <param name="work"></param>
+    /// <returns></returns>
+    public void UpdateWorkByUser(Work work)
+    {
+        _cacheWork.Update(Work.GetKey(KeyMode.UserId, work.UserId), d => work);
+    }
 }