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(); }