diff --git a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs
index 16d8c9ce..04f91415 100644
--- a/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs
+++ b/src/SJZY.Track.Application.Contract/Events/TrackUpsertEvent.cs
@@ -18,14 +18,19 @@ public class TrackUpsertEvent : UpsertTrackInput
/// 子系统id
///
public int SubSystemId { get; set; }
-
+
///
/// 订单是否推送完成(异步维护)
///
public bool IsPushCompleted { get; set; }
-
+
///
/// 上游子系统id
///
public int UpSubSystemId { get; set; }
+
+ ///
+ /// 已经处理过的订单
+ ///
+ public List Visited { get; set; } = new();
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs
index 08969864..fd15e042 100644
--- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs
@@ -32,6 +32,9 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
[CapSubscribe(GlobalConst.TrackUpsertSubscribe)]
public async Task ConsumerAsync(TrackUpsertEvent @event)
{
+ if (@event.Visited.Contains(@event.OrderId)) return;
+ @event.Visited.Add(@event.OrderId);
+
// 不同子系统需要做内容映射
if (@event.UpSubSystemId != 0 && @event.UpSubSystemId != @event.SubSystemId)
{
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderLinkService.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderLinkService.cs
index 77805cf7..c4a6d1db 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/OrderLinkService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderLinkService.cs
@@ -43,8 +43,10 @@ public class OrderLinkService : ApplicationService
if (input.LinkOrderNos.Count < 1 || input.LinkOrderType == 0) return true;
- // 单号去重,去空
- input.LinkOrderNos = input.LinkOrderNos.Where(x => !x.IsNullOrWhiteSpace()).Distinct().ToList();
+ // 单号去重,去空,去自己
+ input.LinkOrderNos = input.LinkOrderNos
+ .Where(x => !x.IsNullOrWhiteSpace() && x != input.OrderNo)
+ .Distinct().ToList();
// 解绑
if (!input.IsLink) return await UnLinkOrderAsync(input);
@@ -78,6 +80,8 @@ public class OrderLinkService : ApplicationService
LinkOrderType = input.LinkOrderType
}).ToList());
+ // todo:补轨迹
+
return true;
}
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackQueryService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackQueryService.cs
index 8b6fd2cc..6980ef05 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackQueryService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackQueryService.cs
@@ -1,7 +1,6 @@
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
-using SJZY.Track.Domain.Dtos.Order;
using SJZY.Track.Domain.Queries;
namespace SJZY.Track.Application.Services.ProvideServices;
@@ -91,7 +90,8 @@ public class TrackQueryService : ApplicationService
foreach (var orderTemplate in orderTemplates.Where(x => x.OrderNo == item.OrderNo))
{
codes.AddRange(templateContent
- .Where(t => t.TemplateId == orderTemplate.TemplateId)
+ .Where(t => t.TemplateId == orderTemplate.TemplateId) // 按模板
+ .Where(t => t.IsExternal) // 过滤不对外的
.Select(t => t.Code));
}
diff --git a/src/SJZY.Track.Application/Validations/ProviderService/UpsertTrackInputValidation.cs b/src/SJZY.Track.Application/Validations/ProviderService/UpsertTrackInputValidation.cs
new file mode 100644
index 00000000..ba7e6366
--- /dev/null
+++ b/src/SJZY.Track.Application/Validations/ProviderService/UpsertTrackInputValidation.cs
@@ -0,0 +1,13 @@
+using FluentValidation;
+using SJZY.Track.Application.Contract.Dtos.ProvideServices;
+
+namespace SJZY.Track.Application.Validations.ProviderService;
+
+public class UpsertTrackInputValidation : AbstractValidator, IValidationEnabled
+{
+ public UpsertTrackInputValidation()
+ {
+ RuleFor(x => x.TrackTime).NotNull();
+ RuleFor(x => x.TraceTimeZone).NotNull();
+ }
+}
\ No newline at end of file
diff --git a/src/SJZY.Track.Domain/Dtos/TrackTemplate/OrderedTrackCodeDto.cs b/src/SJZY.Track.Domain/Dtos/TrackTemplate/OrderedTrackCodeDto.cs
index 60362986..cb31744d 100644
--- a/src/SJZY.Track.Domain/Dtos/TrackTemplate/OrderedTrackCodeDto.cs
+++ b/src/SJZY.Track.Domain/Dtos/TrackTemplate/OrderedTrackCodeDto.cs
@@ -10,5 +10,10 @@ public class OrderedTrackCodeDto
///
/// 轨迹内容代码
///
- public string Code { get; set; }
+ public string Code { get; set; } = null!;
+
+ ///
+ /// 是否对外
+ ///
+ public bool IsExternal { get; set; }
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Repository/Queries/ProvideQueries.cs b/src/SJZY.Track.Repository/Queries/ProvideQueries.cs
index a44a15bc..119ba0aa 100644
--- a/src/SJZY.Track.Repository/Queries/ProvideQueries.cs
+++ b/src/SJZY.Track.Repository/Queries/ProvideQueries.cs
@@ -57,7 +57,8 @@ public class ProvideQueries : ISugarRepository, IProvideQueries,
.Select((a, b) => new OrderedTrackCodeDto
{
TemplateId = a.TrackTemplateId,
- Code = b.Code
+ Code = b.Code,
+ IsExternal = a.IsExternal
})
.ToListAsync();
}