diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackOrder/TrackPushRecordItem.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackOrder/TrackPushRecordItem.cs new file mode 100644 index 00000000..f01d9869 --- /dev/null +++ b/src/SJZY.Track.Application.Contract/Dtos/TrackOrder/TrackPushRecordItem.cs @@ -0,0 +1,5 @@ +namespace SJZY.Track.Application.Contract.Dtos.TrackOrder; + +public class TrackPushRecordItem +{ +} \ No newline at end of file diff --git a/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs index b74281a9..8434072e 100644 --- a/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs @@ -27,6 +27,21 @@ public class TrackPushEvent /// public int TrackContentId { get; set; } + /// + /// 轨迹状态 + /// + public string TrackStatus { get; set; } = null!; + + /// + /// 轨迹内容代码 + /// + public string TrackCode { get; set; } = null!; + + /// + /// 轨迹内容 + /// + public string TrackContent { get; set; } = null!; + /// /// 轨迹发生地 /// diff --git a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs index 5aa94802..c1ca1b19 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackPushEventHandler.cs @@ -51,11 +51,18 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe RequestId = res.RequestId, Message = res.Msg, OptionType = @event.OptionType.ToString(), + TrackStatus = @event.TrackStatus, + TrackCode = @event.TrackCode, + TrackContent = @event.TrackContent, TrackPlace = @event.TrackPlace, TrackTime = @event.TrackTime, TrackTimeZone = @event.TrackTimeZone, + TrackContentCodeValue = @event.TrackContentCodeValue, + TrackContentValue = @event.TrackContentValue, + TrackEnContentValue = @event.TrackEnContentValue, + TrackStatusValue = @event.TrackStatusValue, + ExpandFieldsValue = @event.ExpandFieldsValue, IsSuccess = isSuccess, - IsAuto = @event.OperationMan == null, CreateUser = @event.OperationMan ?? "系统", CreateTime = DateTime.Now }); diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index a0733812..9d375716 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -2,6 +2,7 @@ using DotNetCore.CAP; using SJZY.Expand.ABP.Core.Logger; using SJZY.Expand.ABP.Core.PublicMethords; +using SJZY.Track.Application.Contract.Dtos.ProvideServices; using SJZY.Track.Application.Contract.Events; using SJZY.Track.Application.Contract.Services; using SJZY.Track.Domain.Aggregates.OrderAggregate; @@ -155,37 +156,50 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe /// private async Task HandleTrackPushAsync(TrackUpsertEvent @event, TrackDetailsIndex track) { - var config = await _trackPushCacheService.InferNextPushContentOrNullAsync( - @event.SubSystemId, @event.CustomId, @event.LatestPushTrackContentId); - - if (config == null || !config.IsAutoPush) return; - - // 当前发生的轨迹就是要推送的 - if (config.TrackContentId == track.TrackContentId && config.OrderType == @event.OrderType) + TrackPushContentConfigDto? config; + OptionType optionType = OptionType.修改; + // 推送更新 + if (!track.Id.IsNullOrWhiteSpace()) { - var trackPushEvent = new TrackPushEvent - { - ServiceProviderCode = config.ServiceProviderCode, - OrderNo = track.OrderNo, - TrackContentId = config.TrackContentId, - TrackPlace = track.TrackPlace, - TrackTime = track.TrackTime.AddHours(config.TrackTimeZone ?? track.TrackTimeZone - track.TrackTimeZone), - TrackTimeZone = (float)(config.TrackTimeZone ?? track.TrackTimeZone), - TrackContentCodeValue = config.TrackContentCodeValue, - TrackContentValue = config.TrackContentValue, - TrackEnContentValue = config.TrackEnContentValue, - TrackStatusValue = config.TrackStatusValue, - ExpandFieldsValue = config.ExpandFieldsValue - }; - - // 推送更新 - if (!track.Id.IsNullOrWhiteSpace()) - { - trackPushEvent.OptionType = OptionType.修改; - if (!config.IsCanUpdate) return; - } - - await _capPublisher.PublishAsync(GlobalConst.TrackPushSubscribe, trackPushEvent); + config = await _trackPushCacheService.GetPushContentConfigAsync( + @event.SubSystemId, @event.CustomId, track.TrackContentId); + if (!config.IsCanUpdate) return; } + else + { + // 推送新增,需要根据上一次的推送 推断 本次推送 是否可行 + config = await _trackPushCacheService.InferNextPushContentOrNullAsync( + @event.SubSystemId, @event.CustomId, @event.LatestPushTrackContentId); + + if (config == null || !config.IsAutoPush) return; + + // 当前发生的轨迹就是要推送的 + if (config.TrackContentId != track.TrackContentId) return; + + optionType = OptionType.新增; + } + + if (config.OrderType != @event.OrderType) return; + + var trackPushEvent = new TrackPushEvent + { + OptionType = optionType, + ServiceProviderCode = config.ServiceProviderCode, + OrderNo = track.OrderNo, + TrackContentId = config.TrackContentId, + TrackStatus = track.TrackStatus, + TrackCode = track.TrackCode, + TrackContent = track.TrackContent, + TrackPlace = track.TrackPlace, + TrackTime = track.TrackTime.AddHours(config.TrackTimeZone ?? track.TrackTimeZone - track.TrackTimeZone), + TrackTimeZone = (float)(config.TrackTimeZone ?? track.TrackTimeZone), + TrackContentCodeValue = config.TrackContentCodeValue, + TrackContentValue = config.TrackContentValue, + TrackEnContentValue = config.TrackEnContentValue, + TrackStatusValue = config.TrackStatusValue, + ExpandFieldsValue = config.ExpandFieldsValue + }; + + await _capPublisher.PublishAsync(GlobalConst.TrackPushSubscribe, trackPushEvent); } } \ No newline at end of file diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs index 6ce154dd..2fee5408 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs @@ -78,6 +78,10 @@ public class TrackPushService : ApplicationService { ServiceProviderCode = config.ServiceProviderCode, OrderNo = order.OrderNo, + TrackContentId = config.TrackContentId, + TrackStatus = track.TrackStatus, + TrackCode = track.TrackCode, + TrackContent = track.TrackContent, TrackPlace = track.TrackPlace, TrackTime = track.TrackTime.AddHours(config.TrackTimeZone ?? track.TrackTimeZone - track.TrackTimeZone), diff --git a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs index 4ca4b245..f25aad89 100644 --- a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs +++ b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs @@ -3,6 +3,7 @@ using SJZY.Track.Application.Contract.Dtos.ProvideServices; using SJZY.Track.Application.Contract.Dtos.TrackOrder; using SJZY.Track.Domain.Aggregates.TrackContentAggregate; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; +using SJZY.Track.Domain.Aggregates.TrackPushAggregate; using SJZY.Track.Domain.Dtos.Order; using SJZY.Track.Domain.Dtos.TrackTemplate; using SJZY.Track.Domain.Enums; @@ -17,16 +18,19 @@ public class TrackOrderService : ApplicationService private readonly ITrackOrderQueries _trackOrderQueries; private readonly ITrackDetailsRepository _trackDetailsRepository; private readonly ITrackContentRepository _trackContentRepository; + private readonly ITrackPushRecordsRepository _trackPushRecordsRepository; public TrackOrderService( ITrackOrderQueries trackOrderQueries, ITrackDetailsRepository trackDetailsRepository, - ITrackContentRepository trackContentRepository + ITrackContentRepository trackContentRepository, + ITrackPushRecordsRepository trackPushRecordsRepository ) { _trackOrderQueries = trackOrderQueries; _trackDetailsRepository = trackDetailsRepository; _trackContentRepository = trackContentRepository; + _trackPushRecordsRepository = trackPushRecordsRepository; } #region 轨迹订单明细 @@ -136,4 +140,15 @@ public class TrackOrderService : ApplicationService WarnCount = counts.FirstOrDefault(x => x.ProblemType == (int)TrackProblemType.Warn)?.Count ?? 0, }; } + + /// + /// 获取轨迹推送记录 + /// + /// + /// 订单id + [HttpGet] + public async Task> GetTrackPushRecordsAsync(int orderId) + { + return await _trackPushRecordsRepository.GetTrackPushRecordsAsync(orderId); + } } \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs index b0a1cf21..acd0ed4e 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs @@ -23,8 +23,6 @@ public interface ITrackDetailsRepository /// Task DeleteTrackAsync(int orderId, List trackCodes); - Task?> GetListAsync(List orderIds); - /// /// 获取最近一条发生的轨迹 /// diff --git a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushRecordsRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushRecordsRepository.cs index c7ae38be..e8115b13 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushRecordsRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/ITrackPushRecordsRepository.cs @@ -8,4 +8,11 @@ public interface ITrackPushRecordsRepository /// /// Task AddAsync(TrackPushRecordIndex index); + + /// + /// 获取轨迹推送记录 + /// + /// + /// + Task> GetTrackPushRecordsAsync(int orderId); } \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs index ef9dfb74..0d178b45 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs @@ -12,6 +12,11 @@ public class TrackPushRecordIndex : IdBaseIndex /// public string IndexName { get; set; } = null!; + /// + /// 订单Id + /// + public int OrderId { get; set; } + /// /// 接口通请求Id /// @@ -28,9 +33,19 @@ public class TrackPushRecordIndex : IdBaseIndex public string OptionType { get; set; } = null!; /// - /// 是否自动推送 + /// 轨迹状态 /// - public bool IsAuto { get; set; } + public string TrackStatus { get; set; } = null!; + + /// + /// 轨迹内容代码 + /// + public string TrackCode { get; set; } = null!; + + /// + /// 轨迹内容 + /// + public string TrackContent { get; set; } = null!; /// /// 轨迹发生地 @@ -52,6 +67,31 @@ public class TrackPushRecordIndex : IdBaseIndex /// public bool IsSuccess { get; set; } + /// + /// 轨迹代码参数值 + /// + public string? TrackContentCodeValue { get; set; } + + /// + /// 轨迹内容参数值 + /// + public string? TrackContentValue { get; set; } + + /// + /// 轨迹内容英文参数值 + /// + public string? TrackEnContentValue { get; set; } + + /// + /// 轨迹状态参数值 + /// + public string? TrackStatusValue { get; set; } + + /// + /// 扩展字段参数值 + /// + public string? ExpandFieldsValue { get; set; } + /// 创建人 public string? CreateUser { get; set; } diff --git a/src/SJZY.Track.Repository/Repositories/TrackPushRecordsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackPushRecordsRepository.cs index 31adf93d..c1bb968f 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackPushRecordsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackPushRecordsRepository.cs @@ -1,4 +1,5 @@ -using SJZY.Expand.ABP.Core.Logger; +using Nest; +using SJZY.Expand.ABP.Core.Logger; using SJZY.Expand.ElasticSearch.Services; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; using SJZY.Track.Domain.Aggregates.TrackPushAggregate; @@ -25,4 +26,16 @@ public class TrackPushRecordsRepository : ElasticSearchContextAbstract> GetTrackPushRecordsAsync(int orderId) + { + var data = await Context.SearchAsync(x => x + .Query(q => + q.Term(t => t.OrderId, orderId) + ) + .Size(1000) + .Sort(s => s.Field(f => f.CreateTime, SortOrder.Descending))); + + return data.Documents.ToList(); + } } \ No newline at end of file