瀏覽代碼

合并冲突

Dun.Jason 1 月之前
父節點
當前提交
e65907762b

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

@@ -4283,7 +4283,7 @@ public class OrderController : BaseController
             exp = exp.Or(x => SqlFunc.JsonArrayAny(x.Sensitive, item));
         }
         var orderList = await query.Where(exp.ToExpression()).ToListAsync();
-       
+
         var orderEarlyList = new List<OrderEarlyInfo>();
         foreach (var item in order!.Sensitive!)
         {

+ 51 - 19
src/Hotline.Application/OrderApp/Handlers/OrderHandler/OrderEarlyWarningNotifyHandler.cs

@@ -1,5 +1,6 @@
 using Hotline.Early;
 using Hotline.Orders.Notifications;
+using Hotline.Share.Tools;
 using MediatR;
 using System;
 using System.Collections.Generic;
@@ -13,10 +14,12 @@ namespace Hotline.Application.OrderApp.Handlers.OrderHandler
     public class OrderEarlyWarningNotifyHandler : INotificationHandler<OrderEarlyWarningNotify>
     {
         private readonly IRepository<EarlyWarningOrder> _orderEarlyWarningRepository;
+        private readonly IRepository<EarlyWarningOrderDetail> _orderEarlyWarningDetailRepository;
 
-        public OrderEarlyWarningNotifyHandler(IRepository<EarlyWarningOrder> orderEarlyWarningRepository)
+        public OrderEarlyWarningNotifyHandler(IRepository<EarlyWarningOrder> orderEarlyWarningRepository, IRepository<EarlyWarningOrderDetail> orderEarlyWarningDetailRepository)
         {
             _orderEarlyWarningRepository = orderEarlyWarningRepository;
+            _orderEarlyWarningDetailRepository = orderEarlyWarningDetailRepository;
         }
 
 
@@ -27,27 +30,56 @@ namespace Hotline.Application.OrderApp.Handlers.OrderHandler
             var now = DateTime.Now;
             foreach (var item in settiingList)
             {
-                switch (item.Frequency)
+                var model = new EarlyWarningOrderDetail()
                 {
-                    //每日
-                    case Share.Enums.Early.EFrequency.Day:
-                        _orderEarlyWarningRepository.Queryable().Where(x => x.StartTime<= now && x.EndTime>= now && x.EarlyWarningSettingId == item.Id);
-                        break;
-                    //每周
-                    case Share.Enums.Early.EFrequency.Week:
-                        break;
-                    //每月
-                    case Share.Enums.Early.EFrequency.Month:
-                        break;
-                    //每年
-                    case Share.Enums.Early.EFrequency.Year:
-                        break;
-                    default:
-                        break;
+                    OrderId = order.Id,
+                    OrderContent = order.Content,
+                    OrderTitle = order.Title,
+                    Sensitive = order.Sensitive,
+                    OrderPushStatus = Share.Enums.Early.EOrderPushStatus.NoPush,
+                };
+                var orderEarly = await _orderEarlyWarningRepository.Queryable().Where(x => x.StartTime<= now && x.EndTime>= now && x.EarlyWarningSettingId == item.Id).FirstAsync();
+                if (orderEarly != null)
+                {
+                    model.EarlyWarningOrderId = orderEarly.Id;
+                    await _orderEarlyWarningDetailRepository.AddAsync(model);
+                    await _orderEarlyWarningRepository.Updateable().SetColumns(x => new EarlyWarningOrder()
+                    {
+                        LastEarlyTime = now,
+                    }).Where(x=>x.Id == orderEarly.Id).ExecuteCommandAsync(cancellationToken);
+                }
+                else
+                {
+                    orderEarly = new EarlyWarningOrder()
+                    {
+                        EarlyWarningSettingId = item.Id,
+                        LastEarlyTime= now,
+                    };
+                    switch (item.Frequency)
+                    {
+                        case Share.Enums.Early.EFrequency.Day:
+                            orderEarly.StartTime = now.Date;
+                            orderEarly.EndTime = now.Date.AddDays(1).AddSeconds(-1);
+                            break;
+                        case Share.Enums.Early.EFrequency.Week:
+                            var (startTime,endTime) = now.GetWeekRange();
+                            orderEarly.StartTime = startTime;
+                            orderEarly.EndTime = endTime;
+                            break;
+                        case Share.Enums.Early.EFrequency.Month:
+                            (startTime, endTime) = now.GetMonthRange();
+                            break;
+                        case Share.Enums.Early.EFrequency.Year:
+                            (startTime, endTime) = now.GetYearRange();
+                            break;
+                        default:
+                            break;
+                    }
+                    await _orderEarlyWarningRepository.AddAsync(orderEarly,cancellationToken);
+                    model.EarlyWarningOrderId = orderEarly.Id;
+                    await _orderEarlyWarningDetailRepository.AddAsync(model);
                 }
             }
-
-            throw new NotImplementedException();
         }
     }
 }

+ 2 - 2
src/Hotline.Application/OrderApp/OrderApplication.cs

@@ -5190,8 +5190,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         }
         var query = _earlyWarningSettingRepository.Queryable()
             .Where(exp.ToExpression());
-            
-        var earlyList =await query.ToListAsync();
+
+        var earlyList = await query.ToListAsync();
 
         model.CanChooseEarlyWarning = earlyList;
         await _orderEarlyWarningRepository.AddAsync(model, cancellationToken);

+ 56 - 0
src/Hotline.Share/Tools/DateTimeExtensions.cs

@@ -75,4 +75,60 @@ public static class DateTimeExtensions
         return null;
     }
 
+
+    /// <summary>
+    /// 获取本周的开始时间(周一 00:00:00)和结束时间(周日 23:59:59)
+    /// </summary>
+    /// <param name="currentDate">当前时间</param>
+    /// <returns>本周的开始时间和结束时间</returns>
+    public static (DateTime StartOfWeek, DateTime EndOfWeek) GetWeekRange(this DateTime currentDate)
+    {
+        // 获取当前是本周的第几天(周一是1,周日是7)
+        int diff = (int)currentDate.DayOfWeek - (int)DayOfWeek.Monday;
+
+        // 如果当前是星期天(DayOfWeek.Sunday),调整 diff
+        if (diff < 0)
+            diff += 7;
+
+        // 计算本周周一 00:00:00
+        DateTime startOfWeek = currentDate.Date.AddDays(-diff);
+
+        // 计算本周周日 23:59:59
+        DateTime endOfWeek = startOfWeek.AddDays(6).AddHours(23).AddMinutes(59).AddSeconds(59);
+
+        return (startOfWeek, endOfWeek);
+    }
+
+    /// <summary>
+    /// 获取当前年的开始时间(1月1日 00:00:00)和结束时间(12月31日 23:59:59)
+    /// </summary>
+    /// <param name="currentDate">当前时间</param>
+    /// <returns>当前年的开始时间和结束时间</returns>
+    public static (DateTime StartOfYear, DateTime EndOfYear) GetYearRange(this DateTime currentDate)
+    {
+        // 当年第一天 00:00:00
+        DateTime startOfYear = new DateTime(currentDate.Year, 1, 1);
+
+        // 当年最后一天 23:59:59
+        DateTime endOfYear = new DateTime(currentDate.Year, 12, 31, 23, 59, 59);
+
+        return (startOfYear, endOfYear);
+    }
+
+    /// <summary>
+    /// 获取当前月份的开始时间(1号 00:00:00)和结束时间(最后一天 23:59:59)
+    /// </summary>
+    /// <param name="currentDate">当前时间</param>
+    /// <returns>当前月的开始时间和结束时间</returns>
+    public static (DateTime StartOfMonth, DateTime EndOfMonth) GetMonthRange(this DateTime currentDate)
+    {
+        // 当月第一天 00:00:00
+        DateTime startOfMonth = new DateTime(currentDate.Year, currentDate.Month, 1);
+
+        // 当月最后一天 23:59:59
+        DateTime endOfMonth = startOfMonth.AddMonths(1).AddDays(-1).AddHours(23).AddMinutes(59).AddSeconds(59);
+
+        return (startOfMonth, endOfMonth);
+    }
+
 }