fix:预警OOM

This commit is contained in:
李鹏军 2024-03-30 15:24:11 +08:00
parent 8962d032b1
commit 322a3a67ed
3 changed files with 14 additions and 33 deletions

View File

@ -7,7 +7,6 @@ using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Aggregates.TrackPushAggregate; using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
using SJZY.Track.Domain.Consts; using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Enums;
using SJZY.UserCenter.HttpApi.Services; using SJZY.UserCenter.HttpApi.Services;
namespace SJZY.Track.Application.Services.ProvideServices; namespace SJZY.Track.Application.Services.ProvideServices;
@ -120,20 +119,9 @@ public class TrackPushService : ApplicationService
[HttpPost("Track/PushWarnForTask")] [HttpPost("Track/PushWarnForTask")]
public async Task<string> PushWarnForTaskAsync() public async Task<string> PushWarnForTaskAsync()
{ {
var orders = await _orderRepository.GetPushWarnOrdersAsync(); // todo:订单数据上来后一次性update是否会引发长时间X独占?
var count = await _orderRepository.PushWarnOrdersAsync();
var time = DateTime.Now.Subtract(TimeSpan.FromHours(12)); return $"本次预警扫描了:{count}个订单";
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)}个订单置为预警";
} }
/// <summary> /// <summary>

View File

@ -26,10 +26,10 @@ public interface IOrderRepository : IBasicRepository<OrderEntity>
Task DeleteOrderAsync(int orderId); Task DeleteOrderAsync(int orderId);
/// <summary> /// <summary>
/// 获取推送预警单 /// 更新推送预警单
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
Task<List<OrderEntity>> GetPushWarnOrdersAsync(); Task<int> PushWarnOrdersAsync();
#region 订单关联 #region 订单关联

View File

@ -1,8 +1,6 @@
using SJZY.Track.Domain; using SJZY.Track.Domain;
using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
using SJZY.Track.Domain.Dtos.Order; using SJZY.Track.Domain.Dtos.Order;
using SJZY.Track.Domain.Enums;
namespace SJZY.Track.Repository.Repositories; namespace SJZY.Track.Repository.Repositories;
@ -55,21 +53,16 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
tran.Complete(); tran.Complete();
} }
public async Task<List<OrderEntity>> GetPushWarnOrdersAsync() public async Task<int> PushWarnOrdersAsync()
{ {
var errorType = (int)TrackProblemType.Error; 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`
return await Context.Queryable<TrackPushConfigEntity>() SET `b`.`QuestionType` = CASE
.LeftJoin<OrderEntity>((a, b) => a.SubSystemId == b.SubSystemId && a.CustomId == b.CustomId) WHEN `b`.`LatestPushTime` IS NULL THEN 2
.Where((a, b) => !b.IsCompleted && b.QuestionType != errorType) WHEN `b`.`LatestPushTime` < DATE_SUB(NOW(), INTERVAL 12 HOUR) THEN 2
.Where("a.CreateTime < DATE_SUB(now(),INTERVAL 12 hour)") // 过滤掉创建时间不足12小时的 ELSE 0 END
.Select((a, b) => new OrderEntity 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;");
Id = b.Id,
QuestionType = b.QuestionType,
LatestPushTime = b.LatestPushTime
})
.ToListAsync();
} }
#region 订单关联 #region 订单关联