update: 新增修改轨迹后记录订单操作日志改为批量操作,并且保证只有轨迹实际操作成功后才会写入
This commit is contained in:
parent
ccc08166b9
commit
8ca0adfbd3
@ -95,7 +95,6 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
|
||||
|
||||
private async Task DoPushAsync(TrackPushEvent @event)
|
||||
{
|
||||
// todo: 轨迹中台推送逻辑致使的未推送,也需要广播到mq,告知业务系统缘故
|
||||
var items = new List<TrackPushInput>();
|
||||
TrackPushContentConfigDto? config;
|
||||
var isSystemPush = @event.OperationMan == null;
|
||||
|
||||
@ -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<TrackDetailsIndex>();
|
||||
var updateTracks = new List<TrackDetailsIndex>();
|
||||
|
||||
var operationRecords = new List<OrderOperationRecordIndex>();
|
||||
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
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -9,6 +9,13 @@ public interface IOrderOperationRecordEsRepository
|
||||
/// <returns></returns>
|
||||
Task AddAsync(OrderOperationRecordIndex index);
|
||||
|
||||
/// <summary>
|
||||
/// 添加订单操作记录(批量)
|
||||
/// </summary>
|
||||
/// <param name="indexes"></param>
|
||||
/// <returns></returns>
|
||||
Task AddManyAsync(List<OrderOperationRecordIndex> indexes);
|
||||
|
||||
/// <summary>
|
||||
/// 获取订单操作记录
|
||||
/// </summary>
|
||||
|
||||
@ -29,6 +29,24 @@ public class OrderOperationRecordEsRepository : ElasticSearchContextAbstract<Ord
|
||||
}
|
||||
}
|
||||
|
||||
public async Task AddManyAsync(List<OrderOperationRecordIndex> 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<List<OrderOperationRecordIndex>> GetOrderOperationsByIdAsync(int orderId)
|
||||
{
|
||||
var data = await Context.SearchAsync<OrderOperationRecordIndex>(x => x
|
||||
|
||||
Loading…
Reference in New Issue
Block a user