fix: 解决删除轨迹后订单主表进行回退更新,更新值为被删除的轨迹内容,更改为当前订单的最新轨迹内容

This commit is contained in:
云龙 王 2024-11-26 11:03:04 +08:00
parent e130e491f7
commit 2eb7ae9047
3 changed files with 15 additions and 10 deletions

View File

@ -201,9 +201,8 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
} }
else //原有逻辑,根据轨迹code和订单进行删除 else //原有逻辑,根据轨迹code和订单进行删除
{ {
var trackCodes = @event.TrackIdentifiers.Select(x => x.TrackCode).ToList(); //根据订单查询出所有的轨迹,查所有是因为主单上需要进行回退更新
// 删除轨迹(删的是同子系统下的单,所以code是统一的) tracks = await _trackDetailsEsRepository.GetListAsync(@event.OrderIds);
tracks = await _trackDetailsEsRepository.GetListAsync(@event.OrderIds, trackCodes,null);
//构建标识符集合 //构建标识符集合
var ids = @event.TrackIdentifiers.Select(x => $"{x.TrackCode}{x.TrackTime}").ToList(); var ids = @event.TrackIdentifiers.Select(x => $"{x.TrackCode}{x.TrackTime}").ToList();
@ -217,8 +216,10 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
await _trackDetailsEsRepository.DeleteTrackByIdAsync(track.Id, track.IndexName); await _trackDetailsEsRepository.DeleteTrackByIdAsync(track.Id, track.IndexName);
} }
orderIds = tracks.Select(m => m.OrderId).Distinct().ToList(); //从被删除轨迹寻找订单id,稍后会更新订单主表
tracks = deleteTracks; orderIds = deleteTracks.Select(m => m.OrderId).Distinct().ToList();
//排除掉已经删除的轨迹
tracks = tracks.Except(deleteTracks).ToList();
} }
@ -236,7 +237,9 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
foreach (var order in orders) foreach (var order in orders)
{ {
var track = tracks.FirstOrDefault(x => x.OrderId == order.Id); //找到最新的轨迹数据
var track = tracks?.OrderByDescending(x=>x.TrackTime)
.FirstOrDefault(x => x.OrderId == order.Id);
// 删除全部轨迹导致的重置行为 // 删除全部轨迹导致的重置行为
if (track == default) if (track == default)
@ -264,7 +267,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
OrderId = order.Id, OrderId = order.Id,
OrderNo = order.OrderNo, OrderNo = order.OrderNo,
OptionType = OrderOperationType.删除轨迹.ToString(), OptionType = OrderOperationType.删除轨迹.ToString(),
Content = tracks?.Where(m => m.OrderId == order.Id)?.ToList().ToJson(), Content = tracks?.Where(m => m.OrderId == order.Id).ToList().ToJson(),
CreateUserId = @event.OperationManId, CreateUserId = @event.OperationManId,
CreateUserName = @event.OperationMan ?? "", CreateUserName = @event.OperationMan ?? "",
CreateTime = DateTime.Now CreateTime = DateTime.Now

View File

@ -24,7 +24,7 @@ public interface ITrackDetailsEsRepository : IElasticsearchClientService<TrackDe
Task<List<TrackDetailsIndex>> GetListAsync(int orderId); Task<List<TrackDetailsIndex>> GetListAsync(int orderId);
Task<List<TrackDetailsIndex>> GetListAsync(int[] orderIds, List<string> trackCodes, TrackSourceEnum? source); Task<List<TrackDetailsIndex>> GetListAsync(int[] orderIds, List<string>? trackCodes = null, TrackSourceEnum? source = null);
Task<List<int>> DeleteTrackAsync(int[] orderIds, List<string> trackCodes); Task<List<int>> DeleteTrackAsync(int[] orderIds, List<string> trackCodes);

View File

@ -357,7 +357,7 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract<TrackDetail
return r.ToIdList(); return r.ToIdList();
} }
public async Task<List<TrackDetailsIndex>> GetListAsync(int[] orderIds, List<string> trackCodes, TrackSourceEnum? source) public async Task<List<TrackDetailsIndex>> GetListAsync(int[] orderIds, List<string>? trackCodes = null, TrackSourceEnum? source = null)
{ {
var query = new QueryContainer(); var query = new QueryContainer();
@ -365,10 +365,12 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract<TrackDetail
{ {
query &= Query<TrackDetailsIndex>.Terms(t => t.Field(f => f.OrderId).Terms(orderIds)); query &= Query<TrackDetailsIndex>.Terms(t => t.Field(f => f.OrderId).Terms(orderIds));
} }
if (trackCodes.Count > 0)
if (trackCodes != null && trackCodes.Count > 0)
{ {
query &= Query<TrackDetailsIndex>.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes)); query &= Query<TrackDetailsIndex>.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes));
} }
if (source.HasValue) if (source.HasValue)
{ {
query &= Query<TrackDetailsIndex>.Term(t => t.Field(f => f.Source).Value(source.Value)); query &= Query<TrackDetailsIndex>.Term(t => t.Field(f => f.Source).Value(source.Value));