diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackTemplateListInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackTemplateListInput.cs
index d193eb8e..a591adf7 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackTemplateListInput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackTemplateListInput.cs
@@ -21,4 +21,9 @@ public class GetPageTrackTemplateListInput : PageInfoInput
/// 模板code
///
public string? TemplateCode { get; set; }
+
+ ///
+ /// 关键字
+ ///
+ public string? KeyWord { get; set; }
}
diff --git a/src/SJZY.Track.Application/CAP/CAPFilter.cs b/src/SJZY.Track.Application/CAP/CAPFilter.cs
index 35fa9f23..0decb640 100644
--- a/src/SJZY.Track.Application/CAP/CAPFilter.cs
+++ b/src/SJZY.Track.Application/CAP/CAPFilter.cs
@@ -29,7 +29,7 @@ public class CapFilter : SubscribeFilter
context.DeliverMessage.Headers["sjzy-arguments-hash"] = hash;
}
- if (await RedisHelper.Client.ExistsAsync($"CapExecuteFilter:{hash}"))
+ if (await RedisHelper.Client.ExistsAsync($"CapExecuteFilter:{hash}{DateTime.Now:G}"))
{
throw new BusinessException(GlobalConst.CapNoRetryErrorCode, $"检测到重复消费,消费参数:{argumentJsonStr}");
}
@@ -41,7 +41,7 @@ public class CapFilter : SubscribeFilter
context.DeliverMessage.Headers.TryGetValue("sjzy-arguments-hash", out var hash);
if (!hash.IsNullOrEmpty())
{
- await RedisHelper.Client.SetAsync($"CapExecuteFilter:{hash}", 1, TimeSpan.FromMinutes(3));
+ await RedisHelper.Client.SetAsync($"CapExecuteFilter:{hash}{DateTime.Now:G}", 1, TimeSpan.FromMinutes(3));
}
}
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
index 4e90f379..ce81abd6 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs
@@ -104,6 +104,35 @@ public partial class TrackService : ApplicationService, ITrackService
.Where(x => x.TrackTime == input.TrackTime)
.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)
{
@@ -366,6 +395,34 @@ public partial class TrackService : ApplicationService, ITrackService
.Where(x => x.TrackTime == input.TrackTime)
.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)
{
diff --git a/src/SJZY.Track.Domain/Consts/GlobalConst.Track.cs b/src/SJZY.Track.Domain/Consts/GlobalConst.Track.cs
index eed1301d..3ffed645 100644
--- a/src/SJZY.Track.Domain/Consts/GlobalConst.Track.cs
+++ b/src/SJZY.Track.Domain/Consts/GlobalConst.Track.cs
@@ -8,4 +8,9 @@ public partial class GlobalConst
/// 轨迹数据来源:1外部服务商创建,2内部系统创建,3人工创建
///
public static readonly ImmutableHashSet SupportTrackSources = ImmutableHashSet.Create(1, 2, 3);
+
+ ///
+ /// 最大更新轨迹重试次数
+ ///
+ public const int MaxUpdateTrackRetryCount = 3;
}
diff --git a/src/SJZY.Track.Domain/Dtos/TrackTemplate/GetPageTrackTemplateListInputVo.cs b/src/SJZY.Track.Domain/Dtos/TrackTemplate/GetPageTrackTemplateListInputVo.cs
index b6e253a0..f801ffdc 100644
--- a/src/SJZY.Track.Domain/Dtos/TrackTemplate/GetPageTrackTemplateListInputVo.cs
+++ b/src/SJZY.Track.Domain/Dtos/TrackTemplate/GetPageTrackTemplateListInputVo.cs
@@ -1,8 +1,8 @@
namespace SJZY.Track.Domain.Dtos.TrackTemplate;
-public class GetPageTrackTemplateListInputVo :PageInfoInput
+public class GetPageTrackTemplateListInputVo : PageInfoInput
{
- ///
+ ///
/// 子系统id
///
public int SubSystemId { get; set; }
@@ -21,4 +21,9 @@ public class GetPageTrackTemplateListInputVo :PageInfoInput
/// 模板code
///
public string? TemplateCode { get; set; }
+
+ ///
+ /// 关键字
+ ///
+ public string? KeyWord { get; set; }
}
diff --git a/src/SJZY.Track.Repository/Repositories/TrackTemplateRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackTemplateRepository.cs
index c7f7c2c4..d399bcd1 100644
--- a/src/SJZY.Track.Repository/Repositories/TrackTemplateRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/TrackTemplateRepository.cs
@@ -250,6 +250,11 @@ public class TrackTemplateRepository : BasicRepository, ITr
.LeftJoin((a, b, c) => b.TrackStatusId == c.Id)
.LeftJoin((a, b, c, d) => c.Node == d.Id)
.Where(a => templateIds.Contains(a.TrackTemplateId))
+ .WhereIF(!input.KeyWord.IsNullOrWhiteSpace(), (a, b, c, d) =>
+ b.Code.Contains(input.KeyWord!)
+ || b.EnContent.Contains(input.KeyWord!)
+ || b.Content.Contains(input.KeyWord!)
+ )
.Select((a, b, c, d) => new TemplateContentDtoVo
{
TemplateId = a.TrackTemplateId,