From 322a3a67ed35897928d6038ef4318f61e100e102 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Sat, 30 Mar 2024 15:24:11 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E9=A2=84=E8=AD=A6OOM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProvideServices/TrackPushService.cs | 18 +++---------- .../OrderAggregate/IOrderRepository.cs | 4 +-- .../Repositories/OrderRepository.cs | 25 +++++++------------ 3 files changed, 14 insertions(+), 33 deletions(-) diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs index 78611294..ab655a04 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs @@ -7,7 +7,6 @@ using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; using SJZY.Track.Domain.Aggregates.TrackPushAggregate; using SJZY.Track.Domain.Consts; -using SJZY.Track.Domain.Enums; using SJZY.UserCenter.HttpApi.Services; namespace SJZY.Track.Application.Services.ProvideServices; @@ -120,20 +119,9 @@ public class TrackPushService : ApplicationService [HttpPost("Track/PushWarnForTask")] public async Task PushWarnForTaskAsync() { - var orders = await _orderRepository.GetPushWarnOrdersAsync(); - - var time = DateTime.Now.Subtract(TimeSpan.FromHours(12)); - - orders.ForEach(x => - { - x.QuestionType = x.LatestPushTime == null || x.LatestPushTime < time - ? (int)TrackProblemType.Warn - : (int)TrackProblemType.None; - }); - - await _orderRepository.UpdateRangeAsync(orders, x => new { x.QuestionType }); - - return $"成功将:{orders.Count(x => x.QuestionType == (int)TrackProblemType.Warn)}个订单置为预警"; + // todo:订单数据上来后一次性update是否会引发长时间X独占? + var count = await _orderRepository.PushWarnOrdersAsync(); + return $"本次预警扫描了:{count}个订单"; } /// diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs index 10832b40..7eaf030f 100644 --- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs @@ -26,10 +26,10 @@ public interface IOrderRepository : IBasicRepository Task DeleteOrderAsync(int orderId); /// - /// 获取推送预警单 + /// 更新推送预警单 /// /// - Task> GetPushWarnOrdersAsync(); + Task PushWarnOrdersAsync(); #region 订单关联 diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs index bbbdca05..b6b49e77 100644 --- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs @@ -1,8 +1,6 @@ using SJZY.Track.Domain; using SJZY.Track.Domain.Aggregates.OrderAggregate; -using SJZY.Track.Domain.Aggregates.TrackPushAggregate; using SJZY.Track.Domain.Dtos.Order; -using SJZY.Track.Domain.Enums; namespace SJZY.Track.Repository.Repositories; @@ -55,21 +53,16 @@ public class OrderRepository : BasicRepository, IOrderRepository, I tran.Complete(); } - public async Task> GetPushWarnOrdersAsync() + public async Task PushWarnOrdersAsync() { - var errorType = (int)TrackProblemType.Error; - - return await Context.Queryable() - .LeftJoin((a, b) => a.SubSystemId == b.SubSystemId && a.CustomId == b.CustomId) - .Where((a, b) => !b.IsCompleted && b.QuestionType != errorType) - .Where("a.CreateTime < DATE_SUB(now(),INTERVAL 12 hour)") // 过滤掉创建时间不足12小时的 - .Select((a, b) => new OrderEntity - { - Id = b.Id, - QuestionType = b.QuestionType, - LatestPushTime = b.LatestPushTime - }) - .ToListAsync(); + return await Context.Ado.ExecuteCommandAsync(@"UPDATE `t_track_push_config` `a` +LEFT JOIN `t_order` `b` ON `a`.`SubSystemId` = `b`.`SubSystemId` AND `a`.`CustomId` = `b`.`CustomId` +SET `b`.`QuestionType` = CASE + WHEN `b`.`LatestPushTime` IS NULL THEN 2 + WHEN `b`.`LatestPushTime` < DATE_SUB(NOW(), INTERVAL 12 HOUR) THEN 2 + ELSE 0 END +WHERE `b`.`IsCompleted` = 0 AND `b`.`QuestionType` != 1 AND `b`.`CreateTime` < DATE_SUB(NOW(), INTERVAL 12 HOUR) +AND `a`.`IsDeleted` = 0 AND `b`.`IsDeleted` = 0;"); } #region 订单关联