admin 1 жил өмнө
parent
commit
40c5d9bcae

+ 1 - 1
src/CallCenter.Api/Controllers/HomeController.cs

@@ -44,7 +44,7 @@ public class HomeController : BaseController
     {
         var db = _uow.Db;
         db.DbMaintenance.CreateDatabase();
-        db.CodeFirst.InitTables<Blacklist>();
+        db.CodeFirst.InitTables<DaySetting>();
         return Task.CompletedTask;
     }
 }

+ 1 - 1
src/CallCenter.Api/appsettings.Development.json

@@ -44,7 +44,7 @@
     "Expired": 86400 //认证过期时间(秒)
   },
   "ConnectionStrings": {
-    "CallCenter": "server=db.fengwo.com;Database=callcenter;Uid=dev;Pwd=fengwo11!!;SslMode=none;",
+    "CallCenter": "server=192.168.100.121;Database=callcenter;Uid=dev;Pwd=fengwo11!!;SslMode=none;",
     "Redis": "192.168.100.223:6379"
   },
   "Swagger": true,

+ 7 - 2
src/CallCenter.Application/Handlers/FlowControl/IncomingNotificationHandler.cs

@@ -27,13 +27,15 @@ namespace CallCenter.Application.Handlers
         private readonly ITypedCache<WorkTimeSettings> _worktimeCache;
         private readonly IOptionsSnapshot<WorkTimeSettings> _worktimeOptions;
         private readonly ILogger<IncomingNotificationHandler> _logger;
+        private readonly IDaySettingRepository _daySettingRepository;
+        private readonly IDaySettingCacheManager _daySettingCacheManager;
 
         public IncomingNotificationHandler(
             ICallRepository callRepository, ICallDetailRepository callDetailRepository,
             ISystemSettingCacheManager systemSettingCacheManager, IIvrCacheManager ivrCacheManager,
             INewRockClient newRockClient, IOptionsSnapshot<DeviceConfigs> options,
             ITypedCache<WorkTimeSettings> worktimeCache, IOptionsSnapshot<WorkTimeSettings> worktimeOptions,
-            ILogger<IncomingNotificationHandler> logger)
+            ILogger<IncomingNotificationHandler> logger, IDaySettingRepository daySettingRepository, IDaySettingCacheManager daySettingCacheManager)
         {
             _callRepository = callRepository;
             _callDetailRepository = callDetailRepository;
@@ -44,6 +46,8 @@ namespace CallCenter.Application.Handlers
             _worktimeCache = worktimeCache;
             _worktimeOptions = worktimeOptions;
             _logger = logger;
+            _daySettingRepository = daySettingRepository;
+            _daySettingCacheManager = daySettingCacheManager;
         }
 
         public async Task Handle(IncomingNotification notification, CancellationToken cancellationToken)
@@ -114,7 +118,8 @@ namespace CallCenter.Application.Handlers
 
         private (string,bool) GetCorrectCategory(WorkTimeSettings settings)
         {
-            if (!settings.WorkDay.Contains((int)DateTime.Now.DayOfWeek))
+            var list = _daySettingCacheManager.GetDaySettings();
+            if (!_daySettingRepository.IsWorkDay(list,DateTime.Now))
                 return (settings.RestCategory,true);
             var time = TimeOnly.FromDateTime(DateTime.Now);
             if ((time >= TimeOnly.Parse(settings.MorningBegin) && time <= TimeOnly.Parse(settings.MorningEnd))

+ 31 - 0
src/CallCenter.Repository.SqlSugar/DaySettingRepository.cs

@@ -0,0 +1,31 @@
+
+
+using CallCenter.Caches;
+using CallCenter.Settings;
+using CallCenter.Tools;
+using SqlSugar;
+using XF.Domain.Dependency;
+
+namespace CallCenter.Repository.SqlSugar
+{
+    public class DaySettingRepository : BaseRepository<DaySetting>, IDaySettingRepository, IScopeDependency
+    {
+        
+
+
+        public DaySettingRepository(ISugarUnitOfWork<CallCenterDbContext> uow) : base(uow)
+        {
+        }
+
+        public bool IsWorkDay(IReadOnlyList<DaySetting> list,DateTime date)
+        {
+            var model = list.FirstOrDefault(x => x.Day.Date == date.Date);
+
+            if (model!=null)
+            {
+                return model.IsWorkDay;
+            }
+            return WeekTool.IsWorkDay(date);
+        }
+    }
+}

+ 23 - 0
src/CallCenter/Caches/DaySettingCacheManager.cs

@@ -0,0 +1,23 @@
+
+using CallCenter.Settings;
+using XF.Domain.Cache;
+using XF.Domain.Dependency;
+
+namespace CallCenter.Caches
+{
+    public class DaySettingCacheManager : IDaySettingCacheManager, IScopeDependency
+    {
+        private readonly ITypedCache<IReadOnlyList<DaySetting>> _daySettingCache;
+        private readonly IDaySettingRepository _daySettingRepository;
+        public DaySettingCacheManager(ITypedCache<IReadOnlyList<DaySetting>> daySettingCache,IDaySettingRepository daySettingRepository)
+        {
+            _daySettingCache = daySettingCache;
+            _daySettingRepository = daySettingRepository;
+
+        }
+        public IReadOnlyList<DaySetting> GetDaySettings()
+        {
+            return _daySettingCache.GetOrAdd(DaySetting.Key, _daySettingRepository.QueryAsync().GetAwaiter().GetResult());
+        }
+    }
+}

+ 9 - 0
src/CallCenter/Caches/IDaySettingCacheManager.cs

@@ -0,0 +1,9 @@
+using CallCenter.Settings;
+
+namespace CallCenter.Caches
+{
+    public interface IDaySettingCacheManager
+    {
+        IReadOnlyList<DaySetting> GetDaySettings();
+    }
+}

+ 16 - 0
src/CallCenter/Settings/DaySetting.cs

@@ -0,0 +1,16 @@
+using Org.BouncyCastle.Crypto;
+using SqlSugar;
+using XF.Domain;
+
+namespace CallCenter.Settings
+{
+    public class DaySetting:CreationEntity
+    {
+        public DateTime Day { get; set; }
+
+        public bool IsWorkDay { get; set; }
+
+        [SugarColumn(IsIgnore = true)]
+        public static string Key => $"DaySetting";
+    }
+}

+ 9 - 0
src/CallCenter/Settings/IDaySettingRepository.cs

@@ -0,0 +1,9 @@
+using XF.Domain.Repository;
+
+namespace CallCenter.Settings
+{
+    public interface IDaySettingRepository : IRepository<DaySetting>
+    {
+        bool IsWorkDay(IReadOnlyList<DaySetting> list,DateTime date);
+    }
+}

+ 19 - 0
src/CallCenter/Tools/WeekTool.cs

@@ -55,5 +55,24 @@ namespace CallCenter.Tools
                     return -1;
             }
         }
+
+
+        /// <summary>
+        /// 是否工作日
+        /// </summary>
+        /// <param name="date"></param>
+        /// <returns></returns>
+        public static bool IsWorkDay(DateTime date)
+        {
+            var DayOfWeek = date.DayOfWeek;
+
+            if ((int)DayOfWeek == 0 || (int)DayOfWeek == 6)
+            {
+                return false;
+            }
+            return true;
+        }
+
+
     }
 }