From 5cd6c4f6c6a80091293f541d2687aca2a87a3359 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E5=96=9C=E6=97=BA?= Date: Thu, 1 Aug 2024 09:26:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E9=A2=84=E8=AD=A6=EF=BC=88=E3=80=8B12=E5=B0=8F?= =?UTF-8?q?=E6=97=B6=E6=B2=A1=E6=9C=89=E6=8E=A8=E9=80=81=E7=9A=84=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProvideServices/TrackPushService.cs | 4 +- .../OrderAggregate/IOrderRepository.cs | 6 +++ .../Repositories/OrderRepository.cs | 45 +++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs index c9a53360..fe78e2dd 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs @@ -98,10 +98,12 @@ public class TrackPushService : ApplicationService foreach (var dateTime in dateTimes) { var rows = 0; + var pageindex = 1; do { - rows = await _orderRepository.PushWarnOrdersAsync(pageSize,dateTime); + rows = await _orderRepository.PushWarnOrdersAsync(pageSize,pageindex,dateTime); total+=rows; + pageindex++; await Task.Delay(waitTime); }while (rows!= pageSize); } diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs index 746cf6b5..7f7c6d8f 100644 --- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs @@ -31,6 +31,12 @@ public interface IOrderRepository : IBasicRepository /// Task PushWarnOrdersAsync(int pageSize,DateTime createTime); + /// + /// 更新推送预警单 + /// + /// + Task PushWarnOrdersAsync(int pageSize, int pageindex, DateTime createTime); + /// /// 更新缺失标记,时区缺失和发生地缺失标记,1表示时区,2表示发生地,3表示两种 /// diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs index ff1fdfdf..ef481d06 100644 --- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs @@ -1,5 +1,6 @@ using SJZY.Track.Domain; using SJZY.Track.Domain.Aggregates.OrderAggregate; +using SJZY.Track.Domain.Aggregates.TrackPushAggregate; using SJZY.Track.Domain.Consts; using SJZY.Track.Domain.Dtos.Order; @@ -73,6 +74,50 @@ WHERE `b`.`IsCompleted` = 0 AND `b`.`QuestionType` != 1 AND `b`.`CreateTime` < @ AND `a`.`IsDeleted` = 0 AND `b`.`IsDeleted` = 0 limit @pageSize", new { pageSize,createTime }); } + /// + /// 更新推送预警单 + /// + /// + /// + /// + /// + public async Task PushWarnOrdersAsync(int pageSize,int pageindex, DateTime createTime) + { + var ordersToUpdate = await Context.Queryable() + .LeftJoin((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) => b) + .ToPageListAsync(pageindex,pageSize); + + var latestPushTimeIds = new LinkedList(); + var questionZeroIds = new LinkedList(); + foreach (var item in ordersToUpdate) + { + var questionType = item.LatestPushTime == null + || item.LatestPushTime < DateTime.Now.AddHours(-12) ? 2 : 0; + if(item.QuestionType== questionType) continue; + if(questionType==2) latestPushTimeIds.AddLast(item.Id); + 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; + } + + private int UpdateOrderQuestionType(int questionType, IEnumerable ids) + { + var idsString = string.Join(",", ids); + return Context.Ado.ExecuteCommand( + $"UPDATE `t_order` SET `QuestionType` = @questionType ,UpdateTime= current_timestamp WHERE `Id` IN ({idsString})", new { questionType }); + } + #region 订单关联 public async Task> GetLinkedOrdersAsync(int[] orderIds)