|
@@ -0,0 +1,110 @@
|
|
|
+
|
|
|
+using Hotline.Settings.TimeLimits;
|
|
|
+using Hotline.Share.Dtos.Settings;
|
|
|
+using Hotline.Share.Enums.Settings;
|
|
|
+using XF.Domain.Dependency;
|
|
|
+
|
|
|
+namespace Hotline.Application.TimeLimits
|
|
|
+{
|
|
|
+ public class TimeLimitApplication:ITimeLimitApplication, IScopeDependency
|
|
|
+ {
|
|
|
+ private readonly ITimeLimitRepository _timeLimitRepository;
|
|
|
+ private readonly IDaySettingRepository _daySettingRepository;
|
|
|
+
|
|
|
+ public TimeLimitApplication(ITimeLimitRepository timeLimitRepository, IDaySettingRepository daySettingRepository)
|
|
|
+ {
|
|
|
+ _timeLimitRepository = timeLimitRepository;
|
|
|
+ _daySettingRepository = daySettingRepository;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 计算结束时间
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="beginTime"></param>
|
|
|
+ /// <param name="timeType"></param>
|
|
|
+ /// <param name="timeValue"></param>
|
|
|
+ public TimeResult CalcEndTime(DateTime beginTime, ETimeType timeType, int timeValue)
|
|
|
+ {
|
|
|
+ switch (timeType)
|
|
|
+ {
|
|
|
+ //新增对应小时
|
|
|
+ case ETimeType.Hour:
|
|
|
+ return new TimeResult { EndTime = beginTime.AddHours(timeValue), RuleStr = timeValue + "小时" };
|
|
|
+ //新增工作日
|
|
|
+ case ETimeType.WorkDay:
|
|
|
+ //检查时间段内是否存在休息日或者工作日
|
|
|
+ for (int i = 1; i < timeValue+1; i++)
|
|
|
+ {
|
|
|
+ if(IsWorkDay(beginTime.AddDays(1)))
|
|
|
+ {
|
|
|
+ beginTime = beginTime.AddDays(1);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ i--;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return new TimeResult { EndTime = beginTime, RuleStr = timeValue + "个工作日" };
|
|
|
+ //新增自然日
|
|
|
+ case ETimeType.Day:
|
|
|
+ return new TimeResult { EndTime = beginTime.AddDays(timeValue), RuleStr = timeValue + "个自然日" };
|
|
|
+ default:
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private bool IsWorkDay(DateTime date)
|
|
|
+ {
|
|
|
+ return _daySettingRepository.IsWorkDay(date).GetAwaiter().GetResult();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //public async Task Get(string WorkflowCode, DateTime BeginTime, Dictionary<string, string> param)
|
|
|
+ //{
|
|
|
+ // //1>> 取出对应已启用的配置
|
|
|
+ // var model = await _timeLimitRepository.GetAsync(x => x.WorkflowCode == WorkflowCode && x.TimeLimitState == Share.Enums.Settings.ETimeLimitState.Enable);
|
|
|
+ // if (model != null)
|
|
|
+ // {
|
|
|
+ // #region 组合优先级
|
|
|
+ // //2>> 优先级 组合逻辑判定 (组合重复取最短时间)
|
|
|
+ // //if (model.Combination?.Count > 0)
|
|
|
+ // //{
|
|
|
+ // // foreach (var item in model.Combination)
|
|
|
+ // // {
|
|
|
+ // // int countx = item.CombinationParam.Count(x=> param.Any(d=>d.Key == x.Code && d.Value == x.ParamValue));
|
|
|
+
|
|
|
+ // // if (countx== item.CombinationParam.Count)
|
|
|
+ // // {
|
|
|
+
|
|
|
+ // // }
|
|
|
+ // // }
|
|
|
+ // //}
|
|
|
+ // #endregion
|
|
|
+
|
|
|
+ // #region 排序优先级
|
|
|
+ // //3>> 优先级 排序逻辑判定
|
|
|
+ // if (model.Priority?.Count > 0)
|
|
|
+ // {
|
|
|
+ // var firstModel = model.Priority.OrderBy(x => x.Sort).FirstOrDefault(x => param.Any(d => d.Key == x.Code && d.Value == x.ParamTypeValue));
|
|
|
+ // #region 计算结束时间
|
|
|
+
|
|
|
+
|
|
|
+ // #endregion
|
|
|
+ // }
|
|
|
+ // #endregion
|
|
|
+
|
|
|
+ // #region 配置优先级
|
|
|
+
|
|
|
+
|
|
|
+ // #endregion
|
|
|
+
|
|
|
+ // }
|
|
|
+ //}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+}
|