田爽 1 سال پیش
والد
کامیت
30ff52fa51

+ 46 - 17
src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs

@@ -7,6 +7,7 @@ using Hotline.Identity.Roles;
 using Hotline.Orders;
 using Hotline.Repository.SqlSugar.DataPermissions;
 using Hotline.Repository.SqlSugar.Extensions;
+using Hotline.Settings;
 using Hotline.Settings.TimeLimits;
 using Hotline.Share.Consts;
 using Hotline.Share.Dtos.Order;
@@ -14,6 +15,7 @@ using Hotline.Share.Enums.Order;
 using SqlSugar;
 using XF.Domain.Dependency;
 using XF.Domain.Exceptions;
+using XF.Domain.Repository;
 
 namespace Hotline.Repository.SqlSugar.Orders
 {
@@ -22,7 +24,10 @@ namespace Hotline.Repository.SqlSugar.Orders
         private readonly IDataPermissionFilterBuilder _dataPermissionFilterBuilder;
         private readonly ITimeLimitDomainService _timeLimitDomainService;
 
-		public OrderRepository(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder, ITimeLimitDomainService timeLimitDomainService) : base(uow, dataPermissionFilterBuilder)
+		public OrderRepository(ISugarUnitOfWork<HotlineDbContext> uow,
+            IDataPermissionFilterBuilder dataPermissionFilterBuilder,
+            ITimeLimitDomainService timeLimitDomainService
+			) : base(uow, dataPermissionFilterBuilder)
         {
             _dataPermissionFilterBuilder = dataPermissionFilterBuilder;
             _timeLimitDomainService = timeLimitDomainService;
@@ -88,25 +93,49 @@ namespace Hotline.Repository.SqlSugar.Orders
             await Db.Deleteable(orderReport).ExecuteCommandAsync();
         }
 
+        /// <summary>
+        /// 即将超期列表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="AboutToExpireNum"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
         public async Task<List<AboutToExpireDto>> GetAboutToExpireAsync(AboutToExpireListDto dto,int AboutToExpireNum, CancellationToken cancellationToken)
         {
-            DateTime stTime= DateTime.Now; 
-            //判断是否在工作日
-            if (_timeLimitDomainService.IsWorkDay(stTime))
-            {
-                    
-            }
-            //        var oders = await Db.Queryable<Order>()
-            //            .WhereIF(dto.IsProvince.HasValue, x => x.IsProvince == dto.IsProvince)
-            //            .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.No == dto.No)
-            //            .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Title.Contains(dto.Title!))
-            //            .Select(x => new AboutToExpireDto()
-            //            {
-            //             IntervalText = _timeLimitDomainService.CalcTimeInterval(DateTime.Now,x.)
-            //}, true)
+            DateTime stTime = _timeLimitDomainService.WorkDay(DateTime.Now);
+            var oders = await Db.Queryable<Order>()
+                .WhereIF(dto.IsProvince.HasValue, x => x.IsProvince == dto.IsProvince)
+                .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.No == dto.No)
+                .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Title.Contains(dto.Title!))
+                .Where(x=> x.ExpiredTime != null && stTime <= x.ExpiredTime.Value)
+                .Where(x => x.ExpiredTime != null && (x.ExpiredTime.Value - stTime).TotalHours <= AboutToExpireNum)
+                .Select(x => new AboutToExpireDto()
+                {
+                    IntervalText = _timeLimitDomainService.CalcTimeInterval(stTime, x.ExpiredTime.Value, false)
+                }, true).ToListAsync();
+            return oders;
+        }
 
-            return new List<AboutToExpireDto>();
+        /// <summary>
+        /// 已超期列表
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task<List<AboutToExpireDto>> GetToExpireAsync(AboutToExpireListDto dto, CancellationToken cancellationToken)
+        {
+	        DateTime stTime = _timeLimitDomainService.WorkDay(DateTime.Now);
+	        var oders = await Db.Queryable<Order>()
+		        .WhereIF(dto.IsProvince.HasValue, x => x.IsProvince == dto.IsProvince)
+		        .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.No == dto.No)
+		        .WhereIF(!string.IsNullOrEmpty(dto.Title), x => x.Title.Contains(dto.Title!))
+		        .Where(x => x.ExpiredTime != null && stTime > x.ExpiredTime.Value)
+		        .Select(x => new AboutToExpireDto()
+		        {
+			        IntervalText = _timeLimitDomainService.CalcTimeInterval(stTime, x.ExpiredTime.Value, false)
+		        }, true).ToListAsync();
+	        return oders;
         }
 
-    }
+	}
 }

+ 9 - 2
src/Hotline/Settings/TimeLimits/ITimeLimitDomainService.cs

@@ -56,12 +56,19 @@ namespace Hotline.Settings.TimeLimits
         /// <returns></returns>
         string CalcTimeInterval(DateTime beginTime, DateTime endTime, bool isCenter);
 
+		/// <summary>
+		/// 判断是否工作日
+		/// </summary>
+		/// <param name="date"></param>
+		/// <returns></returns>
+		bool IsWorkDay(DateTime date);
+
         /// <summary>
-        /// 判断是否工作日
+        /// 获取工作日
         /// </summary>
         /// <param name="date"></param>
         /// <returns></returns>
-        bool IsWorkDay(DateTime date);
+		DateTime WorkDay(DateTime date);
 
 	}
 }

+ 39 - 4
src/Hotline/Settings/TimeLimits/TimeLimitDomainService.cs

@@ -416,9 +416,18 @@ namespace Hotline.Settings.TimeLimits
             }
             else
             {
-                //如果是部门按工作时间
-
-                return "";
+				//如果是部门按工作时间 8小时制
+				TimeSpan centerIntervalSp = new TimeSpan(endTime.Ticks - beginTime.Ticks);
+				double re = Math.Round(((double)centerIntervalSp.Microseconds / (8 * 60)), 1);
+				if (re > 0)
+				{
+					return re + "天后超期";
+				}
+				else
+				{
+					return "已超期" + Math.Abs(re) + "天";
+				}
+				return "";
             }
         }
 
@@ -428,6 +437,32 @@ namespace Hotline.Settings.TimeLimits
             return _daySettingRepository.IsWorkDay(date).GetAwaiter().GetResult();
         }
 
+        /// <summary>
+        /// 判断当前时间是否是工作日 返回一个工作日
+        /// </summary>
+        /// <param name="date"></param>
+        /// <returns></returns>
+        public DateTime WorkDay(DateTime date) {
+	        var workTime = _systemSettingRepository.Get(x => x.Code == "WorkTime");
+			if (!IsWorkDay(date))
+				date = DateTime.Parse(date.AddDays(1).ToShortDateString() + " " + workTime.SettingValue[0] + ":00");
+			DateTime WorkBeginTime = DateTime.Parse(DateTime.Now.ToShortDateString() + " " + workTime.SettingValue[0] + ":00");
+	        DateTime WorkEndTime = DateTime.Parse(DateTime.Now.ToShortDateString() + " " + workTime.SettingValue[1] + ":00");
+	        if (date < WorkBeginTime || date > WorkEndTime)
+	        {
+		        date = date.AddDays(1);
+	        }
+            return WorkDayRecursion(date);
+		}
 
-    }
+        private DateTime WorkDayRecursion(DateTime date) {
+			var rsDate = date;
+			while (IsWorkDay(rsDate))
+			{
+				rsDate = rsDate.AddDays(1);
+				rsDate = WorkDay(rsDate);
+			}
+			return rsDate;
+		}
+	}
 }