ソースを参照

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

xf 1 年間 前
コミット
f3f5940c0e

+ 67 - 0
src/Hotline.Application/CallCenter/Calls/TelsStatusRefreshService.cs

@@ -0,0 +1,67 @@
+using Hotline.CallCenter.Tels;
+using Hotline.Realtimes;
+using Hotline.Users;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using System.Threading;
+using Tr.Sdk;
+using XF.Domain.Cache;
+using XF.Domain.Repository;
+
+namespace Hotline.Application.CallCenter.Calls
+{
+    public class TelsStatusRefreshService : BackgroundService
+    {
+        private readonly IServiceScopeFactory _serviceScopeFactory;
+        public TelsStatusRefreshService(IServiceScopeFactory serviceScopeFactory)
+        {
+            _serviceScopeFactory = serviceScopeFactory;
+        }
+
+
+        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
+        {
+            using var scope = _serviceScopeFactory.CreateScope();
+            var realtimeService = scope.ServiceProvider.GetRequiredService<IRealtimeService>();
+            var _trClient = scope.ServiceProvider.GetRequiredService<ITrClient>();
+            var _workRepository = scope.ServiceProvider.GetRequiredService<IRepository<Work>>();
+            var _telRestRepository = scope.ServiceProvider.GetRequiredService<IRepository<TelRest>>();
+            var _cacheWork = scope.ServiceProvider.GetRequiredService<ITypedCache<Work>>();
+            int times = 300000;
+            while (!stoppingToken.IsCancellationRequested)
+            {
+                try
+                {
+                    var list = await _workRepository.Queryable().Where(x => !x.EndTime.HasValue).ToListAsync();
+                    var tellist = await _trClient.QueryTelStateAsync(new Tr.Sdk.Tels.QueryTelStateRequest { }, stoppingToken);
+                    foreach (var item in list)
+                    {
+                        var telmodel = tellist.AgentList.First(x => x.TelNo == item.TelNo);
+                        if (telmodel != null)
+                        {
+                            if (telmodel.State == "logout")
+                            {
+                                var telRest = await _telRestRepository.GetAsync(x => x.TelNo == item.TelNo && !x.EndTime.HasValue, stoppingToken);
+                                if (telRest is not null)
+                                {
+                                    telRest.EndRest();
+                                    await _telRestRepository.UpdateAsync(telRest, stoppingToken);
+                                }
+
+                                item.OffDuty();
+                                await _workRepository.UpdateAsync(item, stoppingToken);
+                                _cacheWork.Remove(item.GetKey(KeyMode.UserId));
+                                _cacheWork.Remove(item.GetKey(KeyMode.TelNo));
+                            }
+                        }
+                    }
+                }
+                catch
+                {
+
+                }
+                await Task.Delay(times);
+            }
+        }
+    }
+}

+ 11 - 1
src/Hotline.Application/Handlers/FlowEngine/WorkflowNextHandler.cs

@@ -105,8 +105,18 @@ public class WorkflowNextHandler : INotificationHandler<NextStepNotify>
                     //     data.External.TimeLimitUnit.Value,
                     //     data.External.TimeLimit.Value, data.FlowDirection is EFlowDirection.OrgToCenter);
 
-                    var expiredTimeConfig = _timeLimitDomainService.CalcEndTime(DateTime.Now,
+                    var expiredTimeConfig = new ExpiredTimeWithConfig();
+
+                    if (data.FlowDirection is EFlowDirection.CenterToOrg)
+                    {
+                        expiredTimeConfig = _timeLimitDomainService.CalcEndTime(DateTime.Now, order.AcceptTypeCode);
+                    }
+                    else
+                    {
+                        expiredTimeConfig = _timeLimitDomainService.CalcEndTime(DateTime.Now,
                         new TimeConfig(data.External.TimeLimit.Value, data.External.TimeLimitUnit.Value), order.AcceptTypeCode);
+                    }
+                    
 
                     if (data.FlowDirection is EFlowDirection.OrgToCenter)
                     {

+ 3 - 3
src/Hotline/Permissions/EPermission.cs

@@ -1003,18 +1003,18 @@ namespace Hotline.Permissions
         /// 工作时间配置
         /// </summary>
         [Display(GroupName = "系统设置",Name ="工作时间配置",Description ="工作时间配置")]
-        DaySettings = 500700,
+        DaySettings = 501000,
 
         /// <summary>
         /// 节假日设置列表
         /// </summary>
         [Display(GroupName = "系统设置", Name = "节假日设置", Description = "节假日设置")]
-        DaySetingsList = 500701,
+        DaySetingsList = 501001,
         /// <summary>
         /// 设置节假日
         /// </summary>
         [Display(GroupName = "系统设置", Name = "设置节假日", Description = "设置节假日")]
-        SetDaySetting = 500702,
+        SetDaySetting = 501002,
         #endregion
 
         #endregion

+ 1 - 1
src/Hotline/Settings/TimeLimits/ITimeLimitDomainService.cs

@@ -48,7 +48,7 @@ namespace Hotline.Settings.TimeLimits
         /// <param name="beginTime"></param>
         /// <param name="busCode"></param>
         /// <returns></returns>
-        TimeResult? CalcEndTime(DateTime beginTime, string busCode);
+        ExpiredTimeWithConfig? CalcEndTime(DateTime beginTime, string busCode);
 
         /// <summary>
         /// 计算期满时间

+ 10 - 2
src/Hotline/Settings/TimeLimits/TimeLimitDomainService.cs

@@ -8,6 +8,7 @@ using XF.Domain.Constants;
 using XF.Domain.Dependency;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
+using XF.Utility.EnumExtensions;
 
 namespace Hotline.Settings.TimeLimits
 {
@@ -310,12 +311,19 @@ namespace Hotline.Settings.TimeLimits
         /// <param name="busCode"></param>
         /// <param name="isCenter"></param>
         /// <returns></returns>
-        public TimeResult? CalcEndTime(DateTime beginTime, string busCode)
+        public ExpiredTimeWithConfig? CalcEndTime(DateTime beginTime, string busCode)
         {
             var setting = timeSettingList.FirstOrDefault(x => x.BusCode == busCode);
             if (setting != null)
             {
-                return CalcEndTime(beginTime, setting.TimeType, setting.TimeValue, setting.Percentage);
+                var result =  CalcEndTime(beginTime, setting.TimeType, setting.TimeValue, setting.Percentage);
+                var expiredTimeWithConfig = new ExpiredTimeWithConfig();
+                expiredTimeWithConfig.TimeText = setting.TimeValue+"个"+setting.TimeType.GetDescription();
+                expiredTimeWithConfig.TimeType = setting.TimeType;
+                expiredTimeWithConfig.Count = setting.TimeValue;
+                expiredTimeWithConfig.ExpiredTime = result.EndTime;
+                expiredTimeWithConfig.NearlyExpiredTime = result.NearlyExpiredTime;
+                return expiredTimeWithConfig;
             }
             return null;
         }