Jason 1 éve
szülő
commit
cf48a658e0

+ 5 - 1
src/Hotline.Api/Controllers/OrderController.cs

@@ -53,6 +53,7 @@ public class OrderController : BaseController
     private readonly ICapPublisher _capPublisher;
     private readonly IOrderDelayRepository _orderDelayRepository;
     private readonly ITimeLimitApplication _timeLimitApplication;
+    private readonly ITimeLimitDomainService _timeLimitDomainService;
     private readonly ISystemSettingCacheManager _systemSettingCacheManager;
     private readonly IOrderRedoRepository _orderRedoRepository;
     private readonly IOrderSuperviseRepository _orderSuperviseRepository;
@@ -83,6 +84,8 @@ public class OrderController : BaseController
         IOrderSuperviseRepository orderSuperviseRepository,
         IOrderUrgeRepository orderUrgeRepository
         )
+        IOrderRedoRepository orderRedoRepository,
+        ITimeLimitDomainService timeLimitDomainService)
     {
         _orderDomainService = orderDomainService;
         _orderRepository = orderRepository;
@@ -104,6 +107,7 @@ public class OrderController : BaseController
         _timeLimitApplication = timeLimitApplication;
         _systemSettingCacheManager = systemSettingCacheManager;
         _orderRedoRepository = orderRedoRepository;
+        _timeLimitDomainService = timeLimitDomainService;
         _orderSuperviseRepository = orderSuperviseRepository;
         _orderUrgeRepository = orderUrgeRepository;
     }
@@ -467,7 +471,7 @@ public class OrderController : BaseController
         model.DelayState = EDelayState.Examining;
         if (model.BeforeDelay != null)
         {
-            model.AfterDelay = _timeLimitApplication.CalcEndTime(model.BeforeDelay.Value, dto.DelayUnit, dto.DelayNum)?.EndTime;
+            model.AfterDelay = _timeLimitDomainService.CalcEndTime(model.BeforeDelay.Value, dto.DelayUnit, dto.DelayNum)?.EndTime;
         }
         model.ApplyDelayTime = DateTime.Now;
         model.No = order.No;

+ 10 - 15
src/Hotline.Api/Controllers/TestController.cs

@@ -6,6 +6,7 @@ using Hotline.Identity.Roles;
 using Hotline.Orders;
 using Hotline.Realtimes;
 using Hotline.Repository.SqlSugar;
+using Hotline.Settings.TimeLimits;
 using Hotline.Share.Dtos.Realtime;
 using Hotline.Share.Dtos.Settings;
 using Hotline.Share.Enums.Settings;
@@ -57,6 +58,8 @@ public class TestController : BaseController
     private readonly IOrderUrgeRepository _orderUrgeRepository;
     private readonly IGroupManager _goupManager;
 
+    private readonly ITimeLimitDomainService _timeLimitDomainService;
+
     //private readonly ITypedCache<List<User>> _cache;
     //private readonly ICacheManager<User> _cache;
 
@@ -81,7 +84,8 @@ public class TestController : BaseController
         IDistributedLock distributedLock,
         IWexClient wexClient,
         ISugarUnitOfWork<WexDbContext> uowWex,
-        IOrderUrgeRepository orderUrgeRepository
+        IOrderUrgeRepository orderUrgeRepository,
+        ITimeLimitDomainService timeLimitDomainService
     )
     {
         _logger = logger;
@@ -101,6 +105,7 @@ public class TestController : BaseController
         _wexClient = wexClient;
         _uowWex = uowWex;
         _orderUrgeRepository = orderUrgeRepository;
+        _timeLimitDomainService = timeLimitDomainService;
     }
 
     [HttpGet("time")]
@@ -125,6 +130,9 @@ public class TestController : BaseController
         //var a = _uowWex.Db.Ado.ExecuteCommand("update telinfo set IsSynch=1 where GUID=@CallId", new { CallId = "b1f97f3c-88b6-4f42-b8de-83ed448854b0" });
         //var rsp = await _wexClient.QueryTelsAsync(new QueryTelRequest {  }, HttpContext.RequestAborted);
 
+        int a = _timeLimitDomainService.CalcWorkTime(DateTime.Now, DateTime.Parse("2023-09-11 16:21:00"));
+
+
         return OpenResponse.Ok(DateTime.Now.ToString("F"));
 
         //var rsp = await _daprClient.InvokeMethodAsync<ApiResponse<string>>(HttpMethod.Get, "identity", "api/v1/Test/time", HttpContext.RequestAborted);
@@ -171,20 +179,7 @@ public class TestController : BaseController
         return a;
     }
 
-    [AllowAnonymous]
-    [HttpGet("testtime")]
-    public async Task<TimeResult> TestTime(DateTime beginTime, ETimeType timeType, int timeValue)
-    {
-        return _timeLimitApplication.CalcEndTime(beginTime, timeType, timeValue);
-    }
-
-    [AllowAnonymous]
-    [HttpGet("timeend")]
-    public async Task<DateTime> GetWorkDayEnd(DateTime date, int days)
-    {
-        return _timeLimitApplication.GetEndDateWork(date, days);
-    }
-
+    
 
     //[AllowAnonymous]
     [HttpGet("hash")]

+ 5 - 2
src/Hotline.Application/CallCenter/Calls/CallRecordManager.cs

@@ -61,11 +61,11 @@
 //                        if (wexCallRecord.Direction == Share.Enums.CallCenter.ECallDirection.Out)
 //                        {
 //                            wexCallRecord.CPN = item.TelPhone;
-//                            wexCallRecord.CDPN = item.GongHao;
+//                            wexCallRecord.CDPN = item.FenJi;
 //                        }
 //                        else
 //                        {
-//                            wexCallRecord.CPN = item.GongHao;
+//                            wexCallRecord.CPN = item.FenJi;
 //                            wexCallRecord.CDPN = item.TelPhone;
 //                        }
 //                        wexCallRecord.StaffNo = item.GongHao;
@@ -188,6 +188,9 @@
 //            [SugarColumn(ColumnName = "GongHao")]
 //            public string GongHao { get; set; }
 
+//            [SugarColumn(ColumnName = "FenJi")]
+//            public string FenJi { get; set; }
+
 //            [SugarColumn(ColumnName = "AreaName")]
 //            public string AreaName { get; set; }
 

+ 8 - 8
src/Hotline.Application/TimeLimits/ITimeLimitApplication.cs

@@ -10,13 +10,13 @@ namespace Hotline.Application.TimeLimits
 {
     public interface ITimeLimitApplication
     {
-        TimeResult CalcEndTime(DateTime beginTime, ETimeType timeType, int timeValue);
-        /// <summary>
-        /// 计算工作时间(跳过休息日)
-        /// </summary>
-        /// <param name="date">开始时间</param>
-        /// <param name="days">天数</param>
-        /// <returns></returns>
-        DateTime GetEndDateWork(DateTime date, int days);
+        //TimeResult CalcEndTime(DateTime beginTime, ETimeType timeType, int timeValue);
+        ///// <summary>
+        ///// 计算工作时间(跳过休息日)
+        ///// </summary>
+        ///// <param name="date">开始时间</param>
+        ///// <param name="days">天数</param>
+        ///// <returns></returns>
+        //DateTime GetEndDateWork(DateTime date, int days);
     }
 }

+ 59 - 59
src/Hotline.Application/TimeLimits/TimeLimitApplication.cs

@@ -20,68 +20,68 @@ namespace Hotline.Application.TimeLimits
 
 
 
-        /// <summary>
-        /// 计算结束时间
-        /// </summary>
-        /// <param name="beginTime"></param>
-        /// <param name="timeType"></param>
-        /// <param name="timeValue"></param>
-        public TimeResult CalcEndTime(DateTime beginTime, ETimeType timeType, int timeValue)
-        {
+        ///// <summary>
+        ///// 计算结束时间
+        ///// </summary>
+        ///// <param name="beginTime"></param>
+        ///// <param name="timeType"></param>
+        ///// <param name="timeValue"></param>
+        //public TimeResult CalcEndTime(DateTime beginTime, ETimeType timeType, int timeValue)
+        //{
            
-            var time = beginTime;
-            switch (timeType)
-            {
-                //新增对应小时
-                case ETimeType.Hour:
-                    return new TimeResult { EndTime = beginTime.AddHours(timeValue), RuleStr = timeValue + "小时" };
-                //新增工作日
-                case ETimeType.WorkDay:
-                    //检查时间段内是否存在休息日或者工作日
-                    int day = 1;
-                    for (int i = 1; i < timeValue + 1; i++)
-                    {
-                        if (IsWorkDay(beginTime.AddDays(day)))
-                        {
-                            beginTime = beginTime.AddDays(day);
-                            day = 1;
-                        }
-                        else
-                        {
-                            i--;
-                            day++;
-                        }
-                    }
-                    return new TimeResult { EndTime = beginTime, RuleStr = timeValue + "个工作日" };
-                //新增自然日
-                case ETimeType.Day:
-                    return new TimeResult { EndTime = beginTime.AddDays(timeValue), RuleStr = timeValue + "个自然日" };
-                default:
-                    return null;
-            }
-        }
+        //    var time = beginTime;
+        //    switch (timeType)
+        //    {
+        //        //新增对应小时
+        //        case ETimeType.Hour:
+        //            return new TimeResult { EndTime = beginTime.AddHours(timeValue), RuleStr = timeValue + "小时" };
+        //        //新增工作日
+        //        case ETimeType.WorkDay:
+        //            //检查时间段内是否存在休息日或者工作日
+        //            int day = 1;
+        //            for (int i = 1; i < timeValue + 1; i++)
+        //            {
+        //                if (IsWorkDay(beginTime.AddDays(day)))
+        //                {
+        //                    beginTime = beginTime.AddDays(day);
+        //                    day = 1;
+        //                }
+        //                else
+        //                {
+        //                    i--;
+        //                    day++;
+        //                }
+        //            }
+        //            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();
-        }
+        //private bool IsWorkDay(DateTime date)
+        //{
+        //    return _daySettingRepository.IsWorkDay(date).GetAwaiter().GetResult();
+        //}
 
-        /// <summary>
-        /// 计算工作时间(跳过休息日)
-        /// </summary>
-        /// <param name="date"></param>
-        /// <param name="days"></param>
-        /// <returns></returns>
-        public DateTime GetEndDateWork(DateTime date,int days)
-        {
-            for (int i = 0; i < days; )
-            {
-                date = date.AddDays(1);
-                if (IsWorkDay(date))
-                    i++;
-            }
-            return date;
-        }
+        ///// <summary>
+        ///// 计算工作时间(跳过休息日)
+        ///// </summary>
+        ///// <param name="date"></param>
+        ///// <param name="days"></param>
+        ///// <returns></returns>
+        //public DateTime GetEndDateWork(DateTime date,int days)
+        //{
+        //    for (int i = 0; i < days; )
+        //    {
+        //        date = date.AddDays(1);
+        //        if (IsWorkDay(date))
+        //            i++;
+        //    }
+        //    return date;
+        //}
 
         //public async Task<TimeResult> Get(string WorkflowCode, DateTime BeginTime, Dictionary<string, string> param)
         //{

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

@@ -1,4 +1,7 @@
-namespace Hotline.Settings.TimeLimits
+using Hotline.Share.Dtos.Settings;
+using Hotline.Share.Enums.Settings;
+
+namespace Hotline.Settings.TimeLimits
 {
     public interface ITimeLimitDomainService
     {
@@ -16,5 +19,22 @@
         /// <param name="cancellationToken"></param>
         /// <returns></returns>
         Task UpdateAsync(TimeLimit model, CancellationToken cancellationToken);
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="beginTime"></param>
+        /// <param name="timeType"></param>
+        /// <param name="timeValue"></param>
+        /// <returns></returns>
+        TimeResult CalcEndTime(DateTime beginTime, ETimeType timeType, int timeValue);
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="beginTime"></param>
+        /// <param name="endTime"></param>
+        /// <returns></returns>
+        int CalcWorkTime(DateTime beginTime, DateTime endTime);
     }
 }

+ 90 - 1
src/Hotline/Settings/TimeLimits/TimeLimitDomainService.cs

@@ -8,10 +8,12 @@ namespace Hotline.Settings.TimeLimits
     public class TimeLimitDomainService : ITimeLimitDomainService, IScopeDependency
     {
         private readonly ITimeLimitRepository _timeLimitRepository;
+        private readonly IDaySettingRepository _daySettingRepository;
 
-        public TimeLimitDomainService(ITimeLimitRepository timeLimitRepository)
+        public TimeLimitDomainService(ITimeLimitRepository timeLimitRepository, IDaySettingRepository daySettingRepository)
         {
             _timeLimitRepository = timeLimitRepository;
+            _daySettingRepository = daySettingRepository;
         }
 
         public async Task<string> AddAsync(TimeLimit model, CancellationToken cancellationToken)
@@ -28,5 +30,92 @@ namespace Hotline.Settings.TimeLimits
             }
             await _timeLimitRepository.UpdateAsync(model, cancellationToken);
         }
+
+        
+        public int CalcWorkTime(DateTime beginTime,DateTime endTime)
+        {
+            //计算时间差
+            TimeSpan minuteSpan = new TimeSpan(endTime.Ticks - beginTime.Ticks);
+            //总时差分钟数
+            int minutes = (int)minuteSpan.TotalMinutes;
+
+
+            //计算开始时间是否计算在工作时间内
+            if(!IsWorkDay(beginTime))
+            {
+                var newBeginTime = beginTime.AddDays(1).Date;
+                TimeSpan beginTimeMinuteSpan = new TimeSpan(newBeginTime.Ticks - beginTime.Ticks);
+                int beginTimeMinute = (int)beginTimeMinuteSpan.TotalMinutes;
+                minutes = minutes - beginTimeMinute;
+            }
+
+
+            //计算结束时间是否计算在工作时间内
+            if(!IsWorkDay(endTime))
+            {
+                var newEndTime = endTime.Date;
+                TimeSpan endTimeMinuteSpan = new TimeSpan(endTime.Ticks - newEndTime.Ticks);
+                int endTimeMinute = (int)endTimeMinuteSpan.TotalMinutes;
+                minutes = minutes - endTimeMinute;
+            }
+
+            //计算整天时间是否在工作时间内
+            int days = minuteSpan.Days;
+            for (int i = 0; i < days; i++)
+            {
+                var newDay = beginTime.AddDays(i+1);
+                if (newDay.Date == endTime.Date)
+                {
+                    continue;
+                }
+
+                if(!IsWorkDay(beginTime.AddDays(i+1)))
+                {
+                    minutes = minutes - 1440;
+                }
+            }
+            return minutes;
+        }
+
+
+
+        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:
+                    //检查时间段内是否存在休息日或者工作日
+                    int day = 1;
+                    for (int i = 1; i < timeValue + 1; i++)
+                    {
+                        if (IsWorkDay(beginTime.AddDays(day)))
+                        {
+                            beginTime = beginTime.AddDays(day);
+                            day = 1;
+                        }
+                        else
+                        {
+                            i--;
+                            day++;
+                        }
+                    }
+                    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();
+        }
+
     }
 }