From 8ca0adfbd39b9b0229a6f7f49038f118f7540dc9 Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Fri, 10 Jan 2025 16:39:23 +0800 Subject: [PATCH] =?UTF-8?q?update:=20=E6=96=B0=E5=A2=9E=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E8=BD=A8=E8=BF=B9=E5=90=8E=E8=AE=B0=E5=BD=95=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97=E6=94=B9=E4=B8=BA=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E6=93=8D=E4=BD=9C=EF=BC=8C=E5=B9=B6=E4=B8=94=E4=BF=9D?= =?UTF-8?q?=E8=AF=81=E5=8F=AA=E6=9C=89=E8=BD=A8=E8=BF=B9=E5=AE=9E=E9=99=85?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=88=90=E5=8A=9F=E5=90=8E=E6=89=8D=E4=BC=9A?= =?UTF-8?q?=E5=86=99=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/TrackPushEventHandler.cs | 1 - .../EventHandlers/TrackUpsertEventHandler.cs | 55 +++++++++---------- .../Services/ProvideServices/TrackService.cs | 2 +- .../IOrderOperationRecordEsRepository.cs | 7 +++ .../OrderOperationRecordEsRepository.cs | 18 ++++++ 5 files changed, 53 insertions(+), 30 deletions(-) diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs index 1b5dab76..a90592fe 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs @@ -95,7 +95,6 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe private async Task DoPushAsync(TrackPushEvent @event) { - // todo: 轨迹中台推送逻辑致使的未推送,也需要广播到mq,告知业务系统缘故 var items = new List(); TrackPushContentConfigDto? config; var isSystemPush = @event.OperationMan == null; diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs index 3bf950a9..dc8a327f 100644 --- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs @@ -176,6 +176,14 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe // 批量add to es await _trackDetailsEsRepository.AddManyAsync(insertTracks); + //批量写入订单操作日志 + _ = _orderOperationRecordEsRepository + .AddManyAsync(insertTracks.Select(t => BuildOrderOperationRecord(@event, t, new OrderIdentifier + { + OrderNo = t.OrderNo, + OrderId = t.OrderId + })).ToList()); + // 添加轨迹触发订单拉取状态更新 await _orderRepository.UpdatePullStatusToSilenceAsync(insertTracks.Select(x => x.OrderId).ToList(), @event.TrackCode); @@ -243,7 +251,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe var insertTracks = new List(); var updateTracks = new List(); - + var operationRecords = new List(); foreach (var order in @event.OrderIdentifiers) { // fast path: by update with es id case @@ -277,7 +285,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe { var oldExtraDict = GetExtraDictForTextJson(x.Extra); // tips:注意兼容性,历史轨迹的字段可能为空 - if (oldExtraDict == null|| !oldExtraDict.TryGetValue(@event.CompareFields, out var oldValue)) + if (oldExtraDict == null || !oldExtraDict.TryGetValue(@event.CompareFields, out var oldValue)) { return false; } @@ -301,6 +309,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe if (track == null) continue; // 不存在不让改 updateTracks.Add(BuiltUpdateTrack(@event, track, order, trackContent)); + operationRecords.Add(BuildOrderOperationRecord(@event, track, order)); } else { @@ -317,6 +326,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe { //批量差异化更新轨迹 await _trackDetailsEsRepository.BulkUpdateAsync(updateTracks); + //批量写入操作日志 + _ = _orderOperationRecordEsRepository.AddManyAsync(operationRecords); } return insertTracks; @@ -363,19 +374,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe track.EstimatedDeliveryDate = @event.EstimatedDeliveryDate; track.Extra = @event.Extra; - // todo:如果后面写es异常了,这里日志不就不准了,这里应该和写轨迹一样,做成批量的,放到写完轨迹只会写日志 - // 写入操作日志 - _ = _orderOperationRecordEsRepository.AddAsync(new OrderOperationRecordIndex - { - OrderId = order.OrderId, - OrderNo = order.OrderNo, - OptionType = OrderOperationType.修改轨迹.ToString(), - Content = track.ToJson(), - CreateUserId = @event.OperationManId, - CreateUserName = @event.OperationMan ?? "", - CreateTime = DateTime.Now - }); - return track; } @@ -429,19 +427,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe ? track.TrackTime : track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone)); - // todo:如果后面写es异常了,这里日志不就不准了,这里应该和写轨迹一样,做成批量的,放到写完轨迹只会写日志 - // 写入操作日志 - _ = _orderOperationRecordEsRepository.AddAsync(new OrderOperationRecordIndex - { - OrderId = order.OrderId, - OrderNo = order.OrderNo, - OptionType = OrderOperationType.创建轨迹.ToString(), - Content = track.ToJson(), - CreateUserId = @event.OperationManId, - CreateUserName = @event.OperationMan ?? "", - CreateTime = DateTime.Now - }); - return track; } @@ -461,4 +446,18 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe return false; } + + private OrderOperationRecordIndex BuildOrderOperationRecord(TrackUpsertEvent @event, TrackDetailsIndex track, OrderIdentifier order) + { + return new OrderOperationRecordIndex + { + OrderId = order.OrderId, + OrderNo = order.OrderNo, + OptionType = @event.IsAdd ? OrderOperationType.创建轨迹.ToString() : OrderOperationType.修改轨迹.ToString(), + Content = track.ToJson(), + CreateUserId = @event.OperationManId, + CreateUserName = @event.OperationMan ?? "", + CreateTime = DateTime.Now + }; + } } diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs index 0af5624e..e58d3355 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs @@ -157,7 +157,7 @@ public partial class TrackService : ApplicationService, ITrackService var userInfo = await _requestCurrentUserService.Service.GetCurrentUserBasicInfoAsync(); if (userInfo.Code != GlobalConst.SuccessCode || userInfo.Data is null) { - //todo:保留之前的方式 后续可去除 + //todo:保留之前的方式(FBA在用) 后续可能去除 userInfo = await _requestCurrentUserService.Service.GetCurrentUserBasicInfoAsync(input.OptionUserId); if (userInfo.Code != GlobalConst.SuccessCode || userInfo.Data is null) diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderOperationRecordEsRepository.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderOperationRecordEsRepository.cs index 9f3af683..eb97ddae 100644 --- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderOperationRecordEsRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderOperationRecordEsRepository.cs @@ -9,6 +9,13 @@ public interface IOrderOperationRecordEsRepository /// Task AddAsync(OrderOperationRecordIndex index); + /// + /// 添加订单操作记录(批量) + /// + /// + /// + Task AddManyAsync(List indexes); + /// /// 获取订单操作记录 /// diff --git a/src/SJZY.Track.Repository/Repositories/OrderOperationRecordEsRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderOperationRecordEsRepository.cs index 99d71604..0c30c860 100644 --- a/src/SJZY.Track.Repository/Repositories/OrderOperationRecordEsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/OrderOperationRecordEsRepository.cs @@ -29,6 +29,24 @@ public class OrderOperationRecordEsRepository : ElasticSearchContextAbstract indexes) + { + // 按天写入es + var indexName = $"{GlobalConst.OrderOperationRecordIndex}-{DateTime.Now:yyyy.MM.dd}"; + indexes.ForEach(x => + { + x.IndexName = indexName; + x.CreateTime = DateTime.Now; + }); + + var r = await Context.IndexManyAsync(indexes, indexName); + + if (!r.IsValid) + { + throw new InvalidOperationException($"{indexes.Count}条订单变更记录写入失败,原因:{r.DebugInformation}。"); + } + } + public async Task> GetOrderOperationsByIdAsync(int orderId) { var data = await Context.SearchAsync(x => x