dss vor 2 Jahren
Ursprung
Commit
bb46f0c0b1

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

@@ -88,7 +88,7 @@ namespace Hotline.Api.Controllers
                 SourceChannel = EnumExts.GetDescriptions<EChannel>(),
                 IdentityType = EnumExts.GetDescriptions<EIdentityType>(),
                 OrderType = EnumExts.GetDescriptions<EOrderType>(),
-                CertType = _sysDicDataCacheManager.GetSysDicDataCache(TimeLimitBaseDataConsts.CertType),
+                CertType = _sysDicDataCacheManager.GetSysDicDataCache(TimeLimitBaseDataConsts.LicenceType),
                 EmergencyLevel = EnumExts.GetDescriptions<EEmergencyLevel>()
             };
         }

+ 91 - 19
src/Hotline.Application/TimeLimits/TimeLimitApplication.cs

@@ -35,15 +35,18 @@ namespace Hotline.Application.TimeLimits
                 //新增工作日
                 case ETimeType.WorkDay:
                     //检查时间段内是否存在休息日或者工作日
+                    int day = 1;
                     for (int i = 1; i < timeValue+1; i++)
                     {
-                        if(IsWorkDay(beginTime.AddDays(1)))
+                        if(IsWorkDay(beginTime.AddDays(day)))
                         {
-                            beginTime = beginTime.AddDays(1);
+                            beginTime = beginTime.AddDays(day);
+                            day = 1;
                         }
                         else
                         {
                             i--;
+                            day++;
                         }
                     }
                     return new TimeResult { EndTime = beginTime, RuleStr = timeValue + "个工作日" };
@@ -62,7 +65,7 @@ namespace Hotline.Application.TimeLimits
 
 
 
-        //public async Task Get(string WorkflowCode, DateTime BeginTime, Dictionary<string, string> param)
+        //public async Task<TimeResult> 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);
@@ -70,18 +73,50 @@ namespace Hotline.Application.TimeLimits
         //    {
         //        #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)
-        //        //        {
-
-        //        //        }
-        //        //    }
-        //        //}
+        //        if (model.Combination?.Count > 0)
+        //        {
+        //            //待计算集合
+        //            List<CombinationModel> list = new List<CombinationModel>();
+        //            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)
+        //                {
+        //                    list.Add(item);
+        //                }
+        //            }
+        //            if (list.Count>0)
+        //            {
+        //                //获取符合参数条件的组合最小时间单位
+        //                var comHavMinParam = list.OrderBy(x => x.Hour).FirstOrDefault();
+        //                if (comHavMinParam != null && comHavMinParam?.TimeLimit != ETimeType.WorkDay)
+        //                {
+        //                    return CalcEndTime(BeginTime, comHavMinParam.TimeLimit, comHavMinParam.TimeLimitValue);
+        //                }
+        //                else
+        //                {
+        //                    //获取符合参数条件的组合(工作日)最小单位
+        //                    var comHavMinParamWorkDay = list.OrderBy(x => x.Hour).FirstOrDefault(x => x.TimeLimit == ETimeType.WorkDay);
+                            
+        //                    //如果符合条件的组合和符合条件的组合(工作日)都存在
+        //                    if (comHavMinParam != null && comHavMinParamWorkDay != null)
+        //                    {
+        //                        var comMinParamResult = CalcEndTime(BeginTime, comHavMinParam.TimeLimit, comHavMinParam.TimeLimitValue);
+        //                        var comMinParamWorkDayResult = CalcEndTime(BeginTime, comHavMinParamWorkDay.TimeLimit, comHavMinParamWorkDay.TimeLimitValue);
+        //                        if (comMinParamResult.EndTime != null && comMinParamWorkDayResult.EndTime != null && DateTime.Compare(comMinParamResult.EndTime.Value, comMinParamWorkDayResult.EndTime.Value) <= 0)
+        //                        {
+        //                            return comMinParamResult;
+        //                        }
+        //                        else
+        //                        {
+        //                            return comMinParamWorkDayResult;
+        //                        }
+        //                    }
+        //                }
+        //            }
+        //        }
         //        #endregion
 
         //        #region 排序优先级
@@ -89,15 +124,52 @@ namespace Hotline.Application.TimeLimits
         //        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 计算结束时间
+        //            //如果找到排序条件 走排序逻辑
+        //            if (firstModel!=null)
+        //            {
+        //                var CanUseModel = model.ParamArr?.FirstOrDefault(x => x.ParamType == firstModel.ParamType && x.Id == firstModel.Code);
+        //                if(CanUseModel!=null)
+        //                {
+        //                    #region 计算结束时间
+        //                    return CalcEndTime(BeginTime, CanUseModel.TimeLimitType, CanUseModel.TimeLimitValue);
+        //                    #endregion
+        //                }
+        //            }
 
-
-        //            #endregion
         //        }
         //        #endregion
 
         //        #region 配置优先级
-
+        //        // 4>> 优先级 配置逻辑判定
+        //        if (model.ParamArr?.Count>0)
+        //        {
+        //            //获取符合参数条件的配置最小时间单位
+        //            var havMinParam = model.ParamArr.OrderBy(x=>x.Hour).FirstOrDefault(x => x.TimeLimitType != ETimeType.WorkDay && param.Any(d => d.Key == x.ParamType && d.Value == x.Id));
+        //            //获取符合参数条件的配置(工作日)最小时间单位
+        //            var havMinParamWorkDay = model.ParamArr.OrderBy(x => x.Hour).FirstOrDefault(x => x.TimeLimitType == ETimeType.WorkDay && param.Any(d => d.Key == x.ParamType && d.Value == x.Id));
+        //            //如果符合条件的参数和符合条件的参数(工作日)都存在
+        //            if (havMinParam!=null && havMinParamWorkDay != null)
+        //            {
+        //                var minParamResult = CalcEndTime(BeginTime, havMinParam.TimeLimitType, havMinParam.TimeLimitValue);
+        //                var minParamWorkDayResult = CalcEndTime(BeginTime, havMinParam.TimeLimitType, havMinParam.TimeLimitValue);
+        //                if(minParamResult.EndTime != null && minParamWorkDayResult.EndTime != null && DateTime.Compare(minParamResult.EndTime.Value, minParamWorkDayResult.EndTime.Value) <= 0)
+        //                {
+        //                    return minParamResult;
+        //                }
+        //                else
+        //                {
+        //                    return minParamWorkDayResult;
+        //                }
+        //            }
+        //            else
+        //            {
+        //                return new TimeResult() { EndTime = null, RuleId = "", RuleStr = "" };
+        //            }
+        //        }
+        //        else
+        //        {
+        //            return new TimeResult() { EndTime = null, RuleId = "", RuleStr = "" };
+        //        }
 
         //        #endregion
 

+ 31 - 14
src/Hotline.Share/Dtos/Settings/TimeLimitDto.cs

@@ -24,7 +24,7 @@ namespace Hotline.Share.Dtos.Settings
         /// <summary>
         /// 已配置参数
         /// </summary>
-        public List<ParamTypeModel>? ParamArr { get; set; }
+        public List<ParamValueModel>? ParamArr { get; set; }
 
         /// <summary>
         /// 排序
@@ -39,6 +39,9 @@ namespace Hotline.Share.Dtos.Settings
 
     #region Model
 
+    /// <summary>
+    /// 组合对象
+    /// </summary>
     public class CombinationModel
     {
         /// <summary>
@@ -68,12 +71,14 @@ namespace Hotline.Share.Dtos.Settings
         public ETimeType TimeLimit { get; set; }
 
         /// <summary>
-        /// 换算时间(小时
+        /// 换算小时
         /// </summary>
         public int Hour { get; set; }
     }
 
-
+    /// <summary>
+    /// 组合对象子对象
+    /// </summary>
     public class CombinationParamModel
     {
         /// <summary>
@@ -90,10 +95,19 @@ namespace Hotline.Share.Dtos.Settings
         /// 组合参数值
         /// </summary>
         public string ParamValue { get; set; }
-    }
 
+        /// <summary>
+        /// 类型
+        /// </summary>
+        public string ParamType { get; set; }
+
+       
+    }
 
 
+    /// <summary>
+    /// 排序对象
+    /// </summary>
     public class PriorityModel
     {
         public string Code { get; set; }
@@ -102,20 +116,23 @@ namespace Hotline.Share.Dtos.Settings
 
         public string ParamTypeValue { get; set; }
 
-        public int Sort { get; set; }
-    }
-
-
-    public class ParamTypeModel
-    {
         public string ParamType { get; set; }
 
-        public List<ParamValueModel> ParamValue { get; set; }
+        public int Sort { get; set; }
     }
 
+    /// <summary>
+    /// 已配置参数对象
+    /// </summary>
     public class ParamValueModel
     {
         public string Id { get; set; }
+
+        /// <summary>
+        /// 参数类型
+        /// </summary>
+        public string ParamType { get; set; }
+
         /// <summary>
         /// 
         /// </summary>
@@ -127,10 +144,10 @@ namespace Hotline.Share.Dtos.Settings
         /// <summary>
         /// 时限类型
         /// </summary>
-        public ETimeType TimeLimit { get; set; }
+        public ETimeType TimeLimitType { get; set; }
 
         /// <summary>
-        /// 换算时间(小时
+        /// 换算小时
         /// </summary>
         public int Hour { get; set; }
     }
@@ -154,7 +171,7 @@ namespace Hotline.Share.Dtos.Settings
     {
         public string RuleId { get; set; }
 
-        public DateTime EndTime { get; set; }
+        public DateTime? EndTime { get; set; }
 
         public string RuleStr { get; set; }
     }

+ 3 - 3
src/Hotline/Settings/TimeLimits/TimeLimit.cs

@@ -17,7 +17,7 @@ namespace Hotline.Settings.TimeLimits
         public ETimeLimitState TimeLimitState { get; set; }
 
         [SugarColumn(ColumnDataType = "longtext", IsJson = true, IsNullable = true)]
-        public List<ParamTypeModel>? ParamArr { get; set; }
+        public List<ParamValueModel>? ParamArr { get; set; }
 
         /// <summary>
         /// 排序
@@ -69,11 +69,11 @@ namespace Hotline.Settings.TimeLimits
             {
                 new TimeLimitBaseDataModel("82fde961-b1a7-11ed-ad8e-005056a2d053","受理类型", "Order", ETimeLimitType.Enum, TimeLimitBaseDataConsts.AcceptType),
                 new TimeLimitBaseDataModel("33b756f6-b1a9-11ed-ad8e-005056a2d053", "热点分类","Order",ETimeLimitType.HotPots,TimeLimitBaseDataConsts.HotPots),
-                new TimeLimitBaseDataModel("c45da596-b1aa-11ed-ad8e-005056a2d053", "推送分类", "Order", ETimeLimitType.DicData, TimeLimitBaseDataConsts.PushType),
+                //new TimeLimitBaseDataModel("c45da596-b1aa-11ed-ad8e-005056a2d053", "推送分类", "Order", ETimeLimitType.DicData, TimeLimitBaseDataConsts.PushType),
                 new TimeLimitBaseDataModel("ee78d588-b1aa-11ed-ad8e-005056a2d053", "来源渠道", "Order", ETimeLimitType.DicData, TimeLimitBaseDataConsts.SourceChannel),
                 new TimeLimitBaseDataModel("8f9209d1-b1ab-11ed-ad8e-005056a2d053", "来电人身份", "Order", ETimeLimitType.Enum, TimeLimitBaseDataConsts.IdentityType),
                 new TimeLimitBaseDataModel("d6100e08-b1ab-11ed-ad8e-005056a2d053", "工单类型", "Order", ETimeLimitType.DicData, TimeLimitBaseDataConsts.OrderType),
-                new TimeLimitBaseDataModel("f21424ff-b1ab-11ed-ad8e-005056a2d053", "证件类型", "Order", ETimeLimitType.DicData, TimeLimitBaseDataConsts.CertType),
+                new TimeLimitBaseDataModel("f21424ff-b1ab-11ed-ad8e-005056a2d053", "证件类型", "Order", ETimeLimitType.DicData, TimeLimitBaseDataConsts.LicenceType),
                 new TimeLimitBaseDataModel("bda69be9-b1b2-11ed-ad8e-005056a2d053", "紧急程度", "Order", ETimeLimitType.Enum, TimeLimitBaseDataConsts.EmergencyLevel),
                 new TimeLimitBaseDataModel("cd3b29dd-b1bf-11ed-ad8e-005056a2d053","默认参数","ZengBie,KnowledgeAdd",ETimeLimitType.DefaultTime,TimeLimitBaseDataConsts.DefaultTime)
             };

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

@@ -35,7 +35,7 @@ namespace Hotline.Settings.TimeLimits
         /// <summary>
         /// 证件类型
         /// </summary>
-        public const string CertType = "CertType";
+        public const string LicenceType = "LicenceType";
         /// <summary>
         /// 紧急程度
         /// </summary>