|
@@ -27,13 +27,18 @@ namespace Hotline.Application.Handlers.CallCenter.FlowControl
|
|
|
private readonly ITypedCache<WorkTimeSettings> _worktimeCache;
|
|
|
private readonly IOptionsSnapshot<WorkTimeSettings> _worktimeOptions;
|
|
|
private readonly ILogger<IncomingNotificationHandler> _logger;
|
|
|
+ private readonly ISystemSettingGroupRepository _systemSettingGroupRepository;
|
|
|
+ private readonly ISystemSettingRepository _systemSettingRepository;
|
|
|
+
|
|
|
|
|
|
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,
|
|
|
+ ISystemSettingGroupRepository systemSettingGroupRepository,
|
|
|
+ ISystemSettingRepository systemSettingRepository)
|
|
|
{
|
|
|
_callRepository = callRepository;
|
|
|
_callDetailRepository = callDetailRepository;
|
|
@@ -44,6 +49,8 @@ namespace Hotline.Application.Handlers.CallCenter.FlowControl
|
|
|
_worktimeCache = worktimeCache;
|
|
|
_worktimeOptions = worktimeOptions;
|
|
|
_logger = logger;
|
|
|
+ _systemSettingGroupRepository = systemSettingGroupRepository;
|
|
|
+ _systemSettingRepository = systemSettingRepository;
|
|
|
}
|
|
|
|
|
|
public async Task Handle(IncomingNotification notification, CancellationToken cancellationToken)
|
|
@@ -109,7 +116,32 @@ namespace Hotline.Application.Handlers.CallCenter.FlowControl
|
|
|
|
|
|
private Ivr GetCorrectIvr()
|
|
|
{
|
|
|
- var worktimeSettings = _worktimeCache.GetOrAdd("worktimesettings", d => _worktimeOptions.Value, ExpireMode.Absolute, TimeSpan.FromDays(1));
|
|
|
+ //TODO 从数据库或缓存中获取配置信息
|
|
|
+
|
|
|
+ //var worktimeSettings = _worktimeCache.GetOrAdd("worktimesettings", d => _worktimeOptions.Value, ExpireMode.Absolute, TimeSpan.FromDays(1));
|
|
|
+ var worktimeSettings = _worktimeCache.GetOrAdd("worktimesettings", d =>
|
|
|
+ {
|
|
|
+ WorkTimeSettings model = new WorkTimeSettings();
|
|
|
+ var settingslist = _systemSettingGroupRepository.GetAsync(x => x.GroupCode == "WorkTimeSetting").GetAwaiter().GetResult().SystemSettings;
|
|
|
+ if (settingslist !=null)
|
|
|
+ {
|
|
|
+ //上午开始时间
|
|
|
+ model.MorningBegin = settingslist.First(x => x.Code == SettingConstants.MorningBegin).SettingValue;
|
|
|
+ //上午结束时间
|
|
|
+ model.MorningEnd = settingslist.First(x => x.Code == SettingConstants.MorningEnd).SettingValue;
|
|
|
+ //下午开始时间
|
|
|
+ model.AfterBegin = settingslist.First(x => x.Code == SettingConstants.AfterBegin).SettingValue;
|
|
|
+ //下午结束时间
|
|
|
+ model.AfterEnd = settingslist.First(x=>x.Code == SettingConstants.AfterEnd).SettingValue;
|
|
|
+ //工作日
|
|
|
+ model.WorkDay = settingslist.First(x => x.Code == SettingConstants.WorkTimeSetting).SettingValue;
|
|
|
+ //工作时间IVR
|
|
|
+ model.WorkCategory = _systemSettingRepository.GetAsync(x => x.Code == SettingConstants.WorkCategory).GetAwaiter().GetResult().SettingValue;
|
|
|
+ //休息时间IVR
|
|
|
+ model.RestCategory = _systemSettingRepository.GetAsync(x => x.Code == SettingConstants.RestCategory).GetAwaiter().GetResult().SettingValue;
|
|
|
+ }
|
|
|
+ return model;
|
|
|
+ }, ExpireMode.Absolute);
|
|
|
var categoryId = GetCorrectCategory(worktimeSettings);
|
|
|
var ivrList = _ivrCacheManager.GetIvrs();
|
|
|
var ivr = ivrList.First(x => x.IvrCategoryId == categoryId && x.IsRoot);
|
|
@@ -118,7 +150,7 @@ namespace Hotline.Application.Handlers.CallCenter.FlowControl
|
|
|
|
|
|
private string GetCorrectCategory(WorkTimeSettings settings)
|
|
|
{
|
|
|
- if (!settings.WorkDay.Contains((int)DateTime.Now.DayOfWeek))
|
|
|
+ if (!settings.WorkDay.Contains(((int)DateTime.Now.DayOfWeek).ToString()))
|
|
|
return settings.RestCategory;
|
|
|
var time = TimeOnly.FromDateTime(DateTime.Now);
|
|
|
if ((time >= TimeOnly.Parse(settings.MorningBegin) && time <= TimeOnly.Parse(settings.MorningEnd))
|