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)