Browse Source

timelimit

Dun.Jason 1 year ago
parent
commit
e615291014

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

@@ -184,7 +184,7 @@ public class TestController : BaseController
 
         //int a = _timeLimitDomainService.CalcWorkTime(DateTime.Now, DateTime.Parse("2023-09-11 16:21:00"));
         //int m = _timeLimitDomainService.CalcWorkTime(DateTime.Parse("2023-09-19 12:00:00"), DateTime.Parse("2023-09-20 18:00:00"), false);
-        //var r = _timeLimitDomainService.CalcEndTime(DateTime.Parse("2024-01-31 18:00:00"), ETimeType.WorkDay,10,false);
+        //var r = _timeLimitDomainService.CalcEndTime(DateTime.Parse("2024-01-31 18:00:00"), ETimeType.WorkDay,1,false,50);
         //await _wfModuleDomainService.PersistenceModulesAsync(HttpContext.RequestAborted);
 
         //var rsp = await _daprClient.InvokeMethodAsync<ApiResponse<string>>(HttpMethod.Get, "identity", "api/v1/Test/time", HttpContext.RequestAborted);

+ 24 - 18
src/Hotline.Repository.SqlSugar/CallCenter/TrCallRecordRepository.cs

@@ -28,10 +28,10 @@ namespace Hotline.Repository.SqlSugar.CallCenter
             //}
 
             //var list = await Db.Reportable(dts).ToQueryable<DateTime>()
-            //    .LeftJoin<TrCallRecord>((it,o)=> o.CreatedTime>= it.ColumnName && o.CreatedTime<=it.ColumnName.AddHours(1))
+            //    .LeftJoin<TrCallRecord>((it, o) => o.CreatedTime >= it.ColumnName && o.CreatedTime <= it.ColumnName.AddHours(1))
             //    .Where((it, o) => o.CreatedTime >= beginDate)
             //    .WhereIF(endDate.HasValue, (it, o) => o.CreatedTime <= endDate.Value.Date.AddDays(1).AddMilliseconds(-1))
-            //    .WhereIF(!endDate.HasValue,(it, o) => o.CreatedTime <= beginDate.Date.AddDays(1).AddMilliseconds(-1))
+            //    .WhereIF(!endDate.HasValue, (it, o) => o.CreatedTime <= beginDate.Date.AddDays(1).AddMilliseconds(-1))
             //    .GroupBy(it => it.ColumnName)
             //    .OrderBy(it => it.ColumnName)
             //    .Select((it, o) => new TrCallHourDto()
@@ -46,33 +46,39 @@ namespace Hotline.Repository.SqlSugar.CallCenter
             //        IvrByeCount = SqlFunc.AggregateSum(SqlFunc.IIF(o.CallDirection == ECallDirection.In && o.BeginIvrTime.HasValue && !o.BeginQueueTime.HasValue && !o.BeginRingTime.HasValue && o.OnState == EOnState.NoOn, 1, 0)), //IVR挂断
             //    }).ToListAsync();
             //计算小时差
-            //if (!endDate.HasValue)
-            //{
-            //    endDate = beginDate.Date.AddDays(1).AddMilliseconds(-1);
-            //}
-            //TimeSpan timeDifference = endDate.Value.Subtract(beginDate).Duration();
-
-            //int hourDiff = (int)(timeDifference.TotalHours);
+            if (!endDate.HasValue)
+            {
+                endDate = beginDate.Date.AddDays(1).AddMilliseconds(-1);
+            }
+            TimeSpan timeDifference = endDate.Value.Subtract(beginDate).Duration();
 
+            int hourDiff = (int)(timeDifference.TotalHours);
+            if (!endDate.HasValue)
+            {
+                endDate = beginDate.Date.AddDays(1).AddMilliseconds(-1);
+            }
+            //计算时间差
+            int hour = Convert.ToInt32((endDate - beginDate).Value.TotalHours);
 
-            List<DateTime> dts = new List<DateTime>() { beginDate.Date.AddDays(1) };
-            for (int i = 0; i < 24; i++)
+            List<DateTime> dts = new List<DateTime>() { beginDate };
+            for (int i = 0; i < hour - 1; i++)
             {
-                dts.Add(dts.Last().AddHours(-1));
+                dts.Add(dts.Last().AddHours(1));
             }
 
             var list = await Db.Reportable(dts).ToQueryable<DateTime>()
-                .LeftJoin<TrCallRecord>((it, o) => o.CreatedTime.Hour == it.ColumnName.Hour)
-                .WhereIF(endDate.HasValue, (it, o) => o.CreatedTime <= endDate.Value.Date.AddDays(1).AddMilliseconds(-1))
-                .WhereIF(!endDate.HasValue, (it, o) => o.CreatedTime <= beginDate.Date.AddDays(1).AddMilliseconds(-1))
-                .GroupBy(it => it.ColumnName.Hour)
-                .OrderBy(it => it.ColumnName.Hour)
+                .LeftJoin<TrCallRecord>((it, o) => o.CreatedTime >= it.ColumnName && o.CreatedTime <= it.ColumnName.AddHours(1))
+                .GroupBy(it => it.ColumnName)
+                .OrderBy(it => it.ColumnName)
                 .Select((it, o) => new TrCallHourDto()
                 {
+                    Dates = it.ColumnName,
                     Hour = it.ColumnName.Hour,
-                    Count = SqlFunc.AggregateCount(o.Id)
+                    Count = SqlFunc.AggregateSum(SqlFunc.IIF(o.CallDirection == ECallDirection.In, 1, 0))
                 }).ToListAsync();
 
+            //Db.Queryable<TrCallRecord>().LeftJoin<>
+
 
             return list;
         }

+ 2 - 2
src/Hotline.Repository.SqlSugar/Extensions/SqlSugarStartupExtensions.cs

@@ -207,8 +207,8 @@ namespace Hotline.Repository.SqlSugar.Extensions
             /***写AOP等方法***/
             db.Aop.OnLogExecuting = (sql, pars) =>
             {
-                //Log.Information("Sql: {0}", sql);
-                //Log.Information("SqlParameters: {0}", string.Join(',', pars.Select(d => d.Value)));
+                Log.Information("Sql: {0}", sql);
+                Log.Information("SqlParameters: {0}", string.Join(',', pars.Select(d => d.Value)));
             };
             db.Aop.OnError = (exp) =>//SQL报错
             {

+ 1 - 1
src/Hotline.Share/Dtos/Order/OrderDto.cs

@@ -429,7 +429,7 @@ namespace Hotline.Share.Dtos.Order
         public EExpiredStatus CalculateExpiredState()
         {
             //ExpiredStatus
-            if (!ExpiredTime.HasValue)
+            if (ExpiredTime.HasValue)
             {
                 if (DateTime.Now< NearlyExpiredTime)
                 {

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

@@ -464,7 +464,7 @@ namespace Hotline.Settings.TimeLimits
                         //计算一天多少个工作小时
                         var duration =  WorkEndTime - WorkBeginTime;
                         double workMinutes = duration.TotalMinutes;
-                        double totalWorkMinutes = (workMinutes * timeValue) * (Percentage/100);
+                        double totalWorkMinutes = (workMinutes * timeValue) * (Percentage/100.00);
                         
                         //判断开始时间不在工时间段修正时间复位至当天或者第二天的开始时间(如果大于结束时间则复位至第二天的开始时间)
                         if (beginTime < WorkBeginTime)