Browse Source

Merge branch 'master' of http://110.188.24.182:10023/Fengwo/hotline

田爽 1 year ago
parent
commit
f468d1bcaa

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

@@ -94,7 +94,7 @@ namespace Hotline.Api.Controllers
         [HttpPost("on-duty")]
         public async Task<TrOnDutyResponseDto> OnDuty([FromBody] TrOnDutyDto dto)
         {
-            return await _userDomainService.TrOnDutyAsync(_sessionContext.RequiredUserId, dto.TelId, dto.TelNo,dto.TelPwd,dto.Description, HttpContext.RequestAborted);
+            return await _userDomainService.TrOnDutyAsync(_sessionContext.RequiredUserId,dto.TelNo, HttpContext.RequestAborted);
         }
 
         /// <summary>

+ 0 - 5
src/Hotline.Share/Dtos/TrCallCenter/TrTelDao.cs

@@ -11,8 +11,6 @@ namespace Hotline.Share.Dtos.TrCallCenter
         public string TelNo { get; set; }
 
         public string Description { get; set; }
-
-        public string Password { get; set; }
     }
 
     #endregion
@@ -62,10 +60,7 @@ namespace Hotline.Share.Dtos.TrCallCenter
 
     public class TrOnDutyDto
     {
-        public string? TelId { get; set; }
         public string? TelNo { get; set; }
-        public string? TelPwd { get; set; }
-        public string? Description { get; set; }
     }
 
     public class TrOnDutyResponseDto

+ 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>

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

@@ -28,12 +28,10 @@ namespace Hotline.Users
         /// 上班
         /// </summary>
         /// <param name="userId"></param>
-        /// <param name="TelId"></param>
         /// <param name="TelNo"></param>
         /// <param name="cancellationToken"></param>
         /// <returns></returns>
-
-        Task<TrOnDutyResponseDto> TrOnDutyAsync(string userId, string? TelId, string? TelNo,string? TelPwd,string? Description, CancellationToken cancellationToken);
+        Task<TrOnDutyResponseDto> TrOnDutyAsync(string userId,  string TelNo, CancellationToken cancellationToken);
 
         /// <summary>
         /// 下班

+ 36 - 45
src/Hotline/Users/UserDomainService.cs

@@ -1,10 +1,13 @@
 using Hotline.Caching.Interfaces;
 using Hotline.CallCenter.Devices;
 using Hotline.CallCenter.Tels;
+using Hotline.Share.Dtos.CallCenter;
 using Hotline.Share.Dtos.TrCallCenter;
 using Hotline.Share.Dtos.Users;
 using MapsterMapper;
+using System.Security.Cryptography;
 using Tr.Sdk;
+using XF.Domain.Authentications;
 using XF.Domain.Cache;
 using XF.Domain.Constants;
 using XF.Domain.Dependency;
@@ -24,6 +27,7 @@ namespace Hotline.Users
         private readonly IMapper _mapper;
         private readonly ISystemSettingCacheManager _systemSettingCacheManager;
         private readonly ITrClient _trClient;
+        private readonly ISessionContext _sessionContext;
 
         public UserDomainService(
             IRepository<User> userRepository,
@@ -34,7 +38,9 @@ namespace Hotline.Users
             IMapper mapper,
             ITelCacheManager telCacheManager,
             ISystemSettingCacheManager systemSettingCacheManager,
-            ITrClient trClient)
+            ITrClient trClient,
+            ISessionContext sessionContext
+            )
         {
             _userRepository = userRepository;
             _workRepository = workRepository;
@@ -45,6 +51,7 @@ namespace Hotline.Users
             _telCacheManager = telCacheManager;
             _systemSettingCacheManager = systemSettingCacheManager;
             _trClient = trClient;
+            _sessionContext = sessionContext;
         }
 
         /// <summary>
@@ -119,63 +126,48 @@ namespace Hotline.Users
         /// 上班
         /// </summary>
         /// <param name="userId"></param>
-        /// <param name="TelId"></param>
-        /// <param name="TelNo"></param>
+        /// <param name="telNo"></param>
         /// <param name="cancellationToken"></param>
         /// <returns></returns>
-        public async Task<TrOnDutyResponseDto> TrOnDutyAsync(string userId, string? TelId, string? TelNo, string? TelPwd, string? Description, CancellationToken cancellationToken)
+        public async Task<TrOnDutyResponseDto> TrOnDutyAsync(string userId, string telNo, CancellationToken cancellationToken)
         {
-            var workingTel = await _workRepository.GetCurrentWorkByUserAsync(userId, cancellationToken);
-            if (workingTel is not null)
+            var work = _userCacheManager.GetWorkByUserNoExp(userId);
+            if(work is not null)
             {
-                return new TrOnDutyResponseDto() { TelNo = workingTel.TelNo, TelPwd = workingTel.TelPwd, Description = workingTel.Description };
+                if(work.TelNo == telNo)
+                {
+                    return new TrOnDutyResponseDto() { TelNo = work.TelNo, TelPwd = work.TelPwd, Description = work.Description };
+                }
+                else
+                {
+                    throw UserFriendlyException.SameMessage("当前用户已签入其他分机");
+                }
             }
 
-            //检查配置
-            bool IsNeedTelNo = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.IsNeedTelNo).SettingValue[0]);
-            if (IsNeedTelNo && string.IsNullOrEmpty(TelNo))
+            var telWork = _userCacheManager.GetWorkByTelNoExp(telNo);
+            if (telWork is not null)
             {
-                throw UserFriendlyException.SameMessage("当前配置需要选择分机号签入");
+                throw UserFriendlyException.SameMessage("当前分机已被占用");
             }
 
 
-
-
-            var user = await _userRepository.GetAsync(userId, cancellationToken);
-            if (user is null)
-                throw UserFriendlyException.SameMessage("无效的用户编号");
-
             bool IsTelNeedVerify = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.IsTelNeedVerify).SettingValue[0]);
-            var rsp = new TrOnDutyResponseDto();
-            if (!IsNeedTelNo)
-            {
-                TelNo = user.DefaultTelNo;
-                var telModel = await _trClient.QueryTelsAsync(new Tr.Sdk.Tels.QueryTelRequest() { TelNo = TelNo }, cancellationToken);
-                TelId = telModel[0].Id;
-                rsp.TelPwd = telModel[0].Password;
-                rsp.Description = telModel[0].Description;
-            }
 
-
-            rsp.TelNo = TelNo;
-
-
-            var telIsWorking = await _workRepository.AnyAsync(d => d.TelId == TelId && !d.EndTime.HasValue, cancellationToken);
-            if (telIsWorking)
-                throw UserFriendlyException.SameMessage("当前分机已被占用");
-
-            var work = new Work(userId, user.Name, TelId, TelNo, rsp.TelPwd, rsp.Description);
-            await _workRepository.AddAsync(work, cancellationToken);
-
-            if (IsTelNeedVerify)
+            var telModel = await _trClient.QueryTelsAsync(new Tr.Sdk.Tels.QueryTelRequest() { TelNo = telNo }, cancellationToken);
+            if (telModel!=null && telModel.Count>0)
             {
-                rsp.TelPwd = string.Empty;
+                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 };
+                }
             }
-            return rsp;
-        }
-
-        public async Task<TrOnDutyResponseDto> TrOnDutyAsync(string userId, string telNo, CancellationToken cancellationToken)
-        {
+            throw UserFriendlyException.SameMessage("签入异常,未查询到对应分机信息");
             /*
              *var work = 缓存.get(userId);
              * if(work.TelNo == telNo)
@@ -192,7 +184,6 @@ namespace Hotline.Users
              * 根据配置 return new();
              *
              */
-            throw new NotImplementedException();
         }