fix: 由于轨迹更新过快导致的轨迹还未落库,查询不出要修改轨迹,现增加重试策略,提高更新的可靠性,当更新还是失败时会返回400响应

This commit is contained in:
云龙 王 2024-12-05 17:42:56 +08:00
parent ffd6d0e689
commit 8105d04144

View File

@ -104,6 +104,35 @@ public partial class TrackService : ApplicationService, ITrackService
.Where(x => x.TrackTime == input.TrackTime) .Where(x => x.TrackTime == input.TrackTime)
.ToList(); .ToList();
//当为更新操作时发现更新的数目为0进行重试操作
if (!input.IsAdd && tracks.Count == 0)
{
var curRetryCount = 0;
var success = false;
while (!success && curRetryCount < GlobalConst.MaxUpdateTrackRetryCount)
{
try
{
tracks = (await _trackDetailsEsRepository.GetListAsync(new[] { order.Id }, input.TrackCode, true))
.Where(x => x.TrackTime == input.TrackTime)
.ToList();
if (tracks.Count > 0)
success = true;
await Task.Delay(300);
}
finally
{
curRetryCount++;
}
}
if (tracks.Count == 0)
{
throw new BusinessException(message: $"订单:{input.OrderNo},轨迹代码:{input.TrackCode}没有要更新的记录");
}
}
//更新轨迹,同一时间存在多条轨迹记录,理由:不清晰到底要修改哪一条或是全部修改 //更新轨迹,同一时间存在多条轨迹记录,理由:不清晰到底要修改哪一条或是全部修改
if (!input.IsAdd && tracks.Count > 1) if (!input.IsAdd && tracks.Count > 1)
{ {
@ -366,6 +395,34 @@ public partial class TrackService : ApplicationService, ITrackService
.Where(x => x.TrackTime == input.TrackTime) .Where(x => x.TrackTime == input.TrackTime)
.ToList(); .ToList();
//当为更新操作时发现更新的数目为0进行重试操作
if (!input.IsAdd && tracks.Count == 0)
{
var curRetryCount = 0;
var success = false;
while (!success && curRetryCount < GlobalConst.MaxUpdateTrackRetryCount)
{
try
{
tracks = (await _trackDetailsEsRepository.GetListAsync(new[] { order.Id }, input.TrackCode, true))
.Where(x => x.TrackTime == input.TrackTime)
.ToList();
if (tracks.Count > 0)
success = true;
await Task.Delay(300);
}
finally
{
curRetryCount++;
}
}
if (tracks.Count == 0)
{
throw new BusinessException(message: $"订单:[{string.Join(",", input.OrderNos)}],轨迹代码:{input.TrackCode}没有要更新的记录");
}
}
//更新轨迹,同一时间存在多条轨迹记录,理由:不清晰到底要修改哪一条或是全部修改 //更新轨迹,同一时间存在多条轨迹记录,理由:不清晰到底要修改哪一条或是全部修改
if (!input.IsAdd && tracks.Count > 1) if (!input.IsAdd && tracks.Count > 1)
{ {