From f4313461a02a98a582ccf360fb0639106a36937f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E5=96=9C=E6=97=BA?= Date: Wed, 7 Aug 2024 10:14:19 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=2012=E5=B0=8F=E6=97=B6=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E9=A2=84=E8=AD=A6=E8=BD=A8=E8=BF=B9=E9=94=81=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E9=9D=9E=E9=98=BB=E5=A1=9E=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/PushWarningEventHandler.cs | 10 +++++++++ .../Consts/GlobalConst.Redis.cs | 21 ++++++++++++------- .../Repositories/OrderRepository.cs | 7 +++---- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/PushWarningEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/PushWarningEventHandler.cs index 103351c3..f4c68504 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/PushWarningEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/PushWarningEventHandler.cs @@ -1,5 +1,6 @@ using DotNetCore.CAP; using Microsoft.Extensions.Logging; +using SJZY.Expand.ABP.Core; using SJZY.Track.Application.Contract.Events; using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Consts; @@ -22,6 +23,14 @@ public class PushWarningEventHandler : ITransientDependency, ICapSubscribe [CapSubscribe(GlobalConst.TrackPushWarning)] public async Task Handle(PushWarningEvent @event) { + var hasProcess = await RedisHelper.Client.ExistsAsync(GlobalConst.TrackPushTrackWaringLockKey); + if (hasProcess) + { + return; + } + + await RedisHelper.Client.SetAsync(GlobalConst.TrackPushTrackWaringLockKey, 1, TimeSpan.FromHours(3)); + int total = 0, pageSize = @event.PageSize, waitTime = 1000; var dateTimes = Enumerable.Range(1, 12).Select(val => DateTime.Now.AddHours(-val)).ToList(); @@ -38,6 +47,7 @@ public class PushWarningEventHandler : ITransientDependency, ICapSubscribe } while (rows != pageSize); } + await RedisHelper.Client.DelAsync(GlobalConst.TrackPushTrackWaringLockKey); _logger.LogInformation(message: "本次预警扫描了:{total}个订单", total); } } \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Consts/GlobalConst.Redis.cs b/src/SJZY.Track.Domain/Consts/GlobalConst.Redis.cs index 06972eff..4dec0225 100644 --- a/src/SJZY.Track.Domain/Consts/GlobalConst.Redis.cs +++ b/src/SJZY.Track.Domain/Consts/GlobalConst.Redis.cs @@ -21,44 +21,49 @@ public partial class GlobalConst /// 轨迹拉取配置信息redis key前缀 /// public const string TrackPullContentKeyPrefix = "TrackPullContent"; - + /// /// 预警通知redis key /// public const string ForewarningNotifyKey = "ForewarningNotify"; - + /// /// 预警通知剩余次数redis key /// public const string ForewarningNotifyCntKey = "ForewarningNotifyCnt"; - + /// /// kpi区域redis key前缀 /// public const string KpiAreaKeyPrefix = "KpiArea"; - + /// /// 城市时区redis key前缀 /// public const string CityTimezoneKeyPrefix = "CityTimezone"; - + /// /// 港口时区redis key前缀 /// public const string PortTimezoneKeyPrefix = "PortTimezone"; - + /// /// 发布订阅通知频道Key /// public const string PublishNotifyChannelKey = "PublishNotifyChannel"; - + /// /// 轨迹区域reids key /// public const string TrackAreaKeyPrefix = "TrackArea"; - + /// /// 轨迹预警数据redis key前缀 /// public const string TrackWarningKeyPrefix = "TrackWarning"; + + /// + /// 12小时推送预警轨迹锁 + /// + public const string TrackPushTrackWaringLockKey = "TrackPushTrackWaringLock"; } \ No newline at end of file diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs index 5460ce3c..fbdcdc51 100644 --- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs @@ -94,13 +94,12 @@ AND `a`.`IsDeleted` = 0 AND `b`.`IsDeleted` = 0 limit @pageSize", new { pageSize .Select((b, a) => new { Order = b }) .ToPageListAsync(pageindex, pageSize); - var latestPushTimeIds = new LinkedList(); - var questionZeroIds = new LinkedList(); + var latestPushTimeIds = new List(); + var questionZeroIds = new List(); foreach (var item in ordersToUpdate) { var order = item.Order; - var questionType = !order.LatestPushTime.HasValue - || order.LatestPushTime < DateTime.Now.AddHours(-12) + var questionType = !order.LatestPushTime.HasValue || order.LatestPushTime < DateTime.Now.AddHours(-12) ? 2 : 0; if (order.QuestionType == questionType) continue; From c23542248ef6f7241d8ff6447c33439809c2cc86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E5=96=9C=E6=97=BA?= Date: Wed, 7 Aug 2024 10:47:05 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20select=20=E9=99=90=E5=AE=9A?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Repositories/OrderRepository.cs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs index fbdcdc51..17d41811 100644 --- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs @@ -91,20 +91,19 @@ AND `a`.`IsDeleted` = 0 AND `b`.`IsDeleted` = 0 limit @pageSize", new { pageSize && b.CreateTime < createTime && !a.IsDeleted && !b.IsDeleted) - .Select((b, a) => new { Order = b }) + .Select((b, a) => new { b.LatestPushTime, b.Id, b.QuestionType }) .ToPageListAsync(pageindex, pageSize); var latestPushTimeIds = new List(); var questionZeroIds = new List(); foreach (var item in ordersToUpdate) { - var order = item.Order; - var questionType = !order.LatestPushTime.HasValue || order.LatestPushTime < DateTime.Now.AddHours(-12) + var questionType = !item.LatestPushTime.HasValue || item.LatestPushTime < DateTime.Now.AddHours(-12) ? 2 : 0; - if (order.QuestionType == questionType) continue; - if (questionType == 2) latestPushTimeIds.AddLast(order.Id); - else questionZeroIds.AddLast(order.Id); + if (item.QuestionType == questionType) continue; + if (questionType == 2) latestPushTimeIds.AddLast(item.Id); + else questionZeroIds.AddLast(item.Id); } int rows = 0; From 10f60967701248baeeb1fdbec17a217e30cf5632 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E5=96=9C=E6=97=BA?= Date: Wed, 7 Aug 2024 11:57:42 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=E5=A4=84=E7=90=86=E6=AD=BB?= =?UTF-8?q?=E5=BE=AA=E7=8E=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/PushWarningEventHandler.cs | 20 +++++++---------- .../OrderAggregate/IOrderRepository.cs | 4 ++-- .../Repositories/OrderRepository.cs | 22 +++++++------------ 3 files changed, 18 insertions(+), 28 deletions(-) diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/PushWarningEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/PushWarningEventHandler.cs index f4c68504..de99f575 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/PushWarningEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/PushWarningEventHandler.cs @@ -32,20 +32,16 @@ public class PushWarningEventHandler : ITransientDependency, ICapSubscribe await RedisHelper.Client.SetAsync(GlobalConst.TrackPushTrackWaringLockKey, 1, TimeSpan.FromHours(3)); int total = 0, pageSize = @event.PageSize, waitTime = 1000; - var dateTimes = Enumerable.Range(1, 12).Select(val => DateTime.Now.AddHours(-val)).ToList(); + var rows = 0; + var pageindex = 0; - foreach (var dateTime in dateTimes) + do { - var rows = 0; - var pageindex = 1; - do - { - rows = await _orderRepository.PushWarnOrdersAsync(pageSize, pageindex, dateTime); - pageindex++; - total += rows; - await Task.Delay(waitTime); - } while (rows != pageSize); - } + rows = await _orderRepository.PushWarnOrdersAsync(pageSize, pageindex); + pageindex++; + total += rows; + await Task.Delay(waitTime); + } while (rows == pageSize); await RedisHelper.Client.DelAsync(GlobalConst.TrackPushTrackWaringLockKey); _logger.LogInformation(message: "本次预警扫描了:{total}个订单", total); diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs index 7f7c6d8f..773b2996 100644 --- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs @@ -29,13 +29,13 @@ public interface IOrderRepository : IBasicRepository /// 更新推送预警单 /// /// - Task PushWarnOrdersAsync(int pageSize,DateTime createTime); + Task PushWarnOrdersAsync(int pageSize, DateTime createTime); /// /// 更新推送预警单 /// /// - Task PushWarnOrdersAsync(int pageSize, int pageindex, DateTime createTime); + Task PushWarnOrdersAsync(int pageSize, int pageindex); /// /// 更新缺失标记,时区缺失和发生地缺失标记,1表示时区,2表示发生地,3表示两种 diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs index 17d41811..5aca5329 100644 --- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs @@ -1,6 +1,5 @@ using SJZY.Track.Domain; using SJZY.Track.Domain.Aggregates.OrderAggregate; -using SJZY.Track.Domain.Aggregates.TrackPushAggregate; using SJZY.Track.Domain.Dtos.Order; namespace SJZY.Track.Repository.Repositories; @@ -81,17 +80,13 @@ AND `a`.`IsDeleted` = 0 AND `b`.`IsDeleted` = 0 limit @pageSize", new { pageSize /// /// /// - public async Task PushWarnOrdersAsync(int pageSize, int pageindex, DateTime createTime) + public async Task PushWarnOrdersAsync(int pageSize, int pageindex) { var ordersToUpdate = await Context.Queryable() - .InnerJoin((b, a) => a.SubSystemId == b.SubSystemId && a.CustomId == b.CustomId) - .Where((b, a) => - !b.IsCompleted - && b.QuestionType != 1 - && b.CreateTime < createTime - && !a.IsDeleted - && !b.IsDeleted) - .Select((b, a) => new { b.LatestPushTime, b.Id, b.QuestionType }) + .Where((b) => !b.IsCompleted + && b.QuestionType != 1 + && !b.IsDeleted) + .Select(b => new { b.LatestPushTime, b.Id, b.QuestionType }) .ToPageListAsync(pageindex, pageSize); var latestPushTimeIds = new List(); @@ -106,10 +101,9 @@ AND `a`.`IsDeleted` = 0 AND `b`.`IsDeleted` = 0 limit @pageSize", new { pageSize else questionZeroIds.AddLast(item.Id); } - int rows = 0; - if (latestPushTimeIds.Count > 0) rows += UpdateOrderQuestionType(2, latestPushTimeIds); - if (questionZeroIds.Count > 0) rows += UpdateOrderQuestionType(0, questionZeroIds); - return rows; + if (latestPushTimeIds.Count > 0) UpdateOrderQuestionType(2, latestPushTimeIds); + if (questionZeroIds.Count > 0) UpdateOrderQuestionType(0, questionZeroIds); + return ordersToUpdate.Count; } private int UpdateOrderQuestionType(int questionType, IEnumerable ids)