Dun.Jason 1 year ago
parent
commit
3e45129254

+ 3 - 0
src/Hotline.Api/Controllers/TestController.cs

@@ -208,6 +208,9 @@ public class TestController : BaseController
         //var a = await _trClient.QueryTelsAsync(new Tr.Sdk.Tels.QueryTelRequest() { }, HttpContext.RequestAborted);
         //await _daySettingRepository.IsWorkDay(DateTime.Now);
 
+        //var r = _timeLimitDomainService.CalcWorkTime(DateTime.Parse("2024-3-22 05:00:00"), DateTime.Parse("2024-3-22 06:00:00"), false);
+        var r = _timeLimitDomainService.CalcWorkTime(DateTime.Parse("2024-3-24 05:00:00"), DateTime.Parse("2024-3-24 06:00:00"), false);
+
         return OpenResponse.Ok(DateTime.Now.ToString("F"));
     }
 

+ 33 - 3
src/Hotline/Settings/TimeLimits/TimeLimitDomainService.cs

@@ -206,11 +206,13 @@ namespace Hotline.Settings.TimeLimits
                 var workTime = _systemSettingRepository.Get(x => x.Code == SettingConstants.WorkTime);
                 if (workTime != null)
                 {
-                    DateTime WorkBeginTime = DateTime.Parse(DateTime.Now.ToShortDateString() + " " + workTime.SettingValue[0] + ":00");
-                    DateTime WorkEndTime = DateTime.Parse(DateTime.Now.ToShortDateString() + " " + workTime.SettingValue[1] + ":00");
+                    //DateTime WorkBeginTime = DateTime.Parse(DateTime.Now.ToShortDateString() + " " + workTime.SettingValue[0] + ":00");
+                    //DateTime WorkEndTime = DateTime.Parse(DateTime.Now.ToShortDateString() + " " + workTime.SettingValue[1] + ":00");
+                    DateTime WorkBeginTime = DateTime.Parse(beginTime.ToShortDateString() + " " + workTime.SettingValue[0] + ":00");
+                    DateTime WorkEndTime = DateTime.Parse(beginTime.ToShortDateString() + " " + workTime.SettingValue[1] + ":00");
 
                     //处理开始时间
-                    if (beginTime < WorkBeginTime)
+                    if (beginTime.Date == WorkBeginTime.Date && beginTime < WorkBeginTime)
                     {
                         beginTime = WorkBeginTime;
                     }
@@ -221,6 +223,34 @@ namespace Hotline.Settings.TimeLimits
                             beginTime = WorkBeginTime.AddDays(1);
                         }
                     }
+                    if (beginTime>=endTime)
+                    {
+                        return 1;
+                    }
+
+                    if (endTime.Date == WorkEndTime.Date && endTime < WorkBeginTime)
+                    {
+                        endTime = WorkBeginTime;
+                    }
+                    else
+                    {
+                        if (endTime>WorkEndTime)
+                        {
+                            endTime = WorkBeginTime.AddDays(1);
+                        }
+                    }
+
+                    while (true)
+                    {
+                        if (!IsWorkDay(endTime))
+                        {
+                            endTime = DateTime.Parse(endTime.AddDays(1).ToShortDateString() + " " + workTime.SettingValue[0] + ":00");
+                        }
+                        else
+                        {
+                            break;
+                        }
+                    }
 
                     int minutes = 0;
                     int i = 0;