【10.批量更新轨迹和删除轨迹优化判断:如果根据code,命中多条,直接跳过,不做任何操作】
https://www.tapd.cn/60863849/prong/tasks/view/1160863849001028879
This commit is contained in:
parent
9d2c10c4db
commit
02533696ec
@ -144,11 +144,27 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
||||
|
||||
foreach (var order in @event.OrderIdentifiers)
|
||||
{
|
||||
var track = tracks.FirstOrDefault(x =>
|
||||
x.OrderId == order.OrderId && x.TrackTime == @event.TrackTime && x.TrackPlace == @event.TrackPlace);
|
||||
TrackDetailsIndex? track;
|
||||
if (!@event.IsAdd)
|
||||
{
|
||||
var existTracks = tracks.Where(x => x.OrderId == order.OrderId).ToArray();
|
||||
if (existTracks.Length > 1)
|
||||
{
|
||||
// 修改轨迹时,订单存在多条轨迹不允许修改
|
||||
continue;
|
||||
}
|
||||
|
||||
if (track == null && !@event.IsAdd) continue; // 不存在不让改
|
||||
if (track != null && @event.IsAdd) continue; // 存在不让创建
|
||||
track = existTracks.FirstOrDefault();
|
||||
|
||||
if (track == null) continue; // 不存在不让改
|
||||
}
|
||||
else
|
||||
{
|
||||
track = tracks.FirstOrDefault(x =>
|
||||
x.OrderId == order.OrderId && x.TrackTime == @event.TrackTime && x.TrackPlace == @event.TrackPlace);
|
||||
|
||||
if (track != null) continue; // 存在不让创建
|
||||
}
|
||||
|
||||
if (track == default)
|
||||
{
|
||||
|
||||
@ -247,41 +247,52 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract<TrackDetail
|
||||
|
||||
public async Task DeleteTrackAsync(int[] orderIds, List<string> trackCodes)
|
||||
{
|
||||
var deleteResponse = await Context.DeleteByQueryAsync<TrackDetailsIndex>(d => d
|
||||
.Index($"{GlobalConst.TrackDetailsIndex}-*") // 使用通配符匹配所有相关索引
|
||||
.Query(q =>
|
||||
q.Terms(t => t.Field(f => f.OrderId).Terms(orderIds))
|
||||
&& q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes))
|
||||
)
|
||||
);
|
||||
|
||||
if (!deleteResponse.IsValid)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
$"删除轨迹失败,orderIds:[{string.Join(", ", orderIds)}],trackCodes:[{string.Join(", ", trackCodes)}],原因:{deleteResponse.DebugInformation}。");
|
||||
}
|
||||
|
||||
// var search = await Context.SearchAsync<TrackDetailsIndex>(x => x
|
||||
// .Source(s => s.Includes(fd => fd.Field(f => f.IndexName)))
|
||||
// .Size(SafelyLimit)
|
||||
// var deleteResponse = await Context.DeleteByQueryAsync<TrackDetailsIndex>(d => d
|
||||
// .Index($"{GlobalConst.TrackDetailsIndex}-*") // 使用通配符匹配所有相关索引
|
||||
// .Query(q =>
|
||||
// q.Terms(t => t.Field(f => f.OrderId).Terms(orderIds))
|
||||
// && q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes))
|
||||
// )
|
||||
// );
|
||||
//
|
||||
// if (!search.IsValid)
|
||||
// if (!deleteResponse.IsValid)
|
||||
// {
|
||||
// throw new InvalidOperationException(
|
||||
// $"轨迹查询失败,orderIds:[{orderIds.JoinAsString(", ")}],trackCodes:[{trackCodes.JoinAsString(", ")}],原因:{search.DebugInformation}。");
|
||||
// }
|
||||
//
|
||||
// var tracks = search.ToIdList();
|
||||
//
|
||||
// foreach (var track in tracks)
|
||||
// {
|
||||
// await DeleteTrackByIdAsync(track.Id, track.IndexName);
|
||||
// $"删除轨迹失败,orderIds:[{string.Join(", ", orderIds)}],trackCodes:[{string.Join(", ", trackCodes)}],原因:{deleteResponse.DebugInformation}。");
|
||||
// }
|
||||
|
||||
var search = await Context.SearchAsync<TrackDetailsIndex>(x => x
|
||||
.Source(s => s.Includes(fd => fd
|
||||
.Field(f => f.IndexName)
|
||||
.Field(f => f.OrderId)
|
||||
.Field(f => f.TrackCode)
|
||||
))
|
||||
.Size(SafelyLimit)
|
||||
.Query(q =>
|
||||
q.Terms(t => t.Field(f => f.OrderId).Terms(orderIds))
|
||||
&& q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes))
|
||||
)
|
||||
);
|
||||
|
||||
if (!search.IsValid)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
$"轨迹查询失败,orderIds:[{orderIds.JoinAsString(", ")}],trackCodes:[{trackCodes.JoinAsString(", ")}],原因:{search.DebugInformation}。");
|
||||
}
|
||||
|
||||
var tracks = search.ToIdList().GroupBy(doc => new
|
||||
{
|
||||
doc.OrderId,
|
||||
doc.TrackCode
|
||||
})
|
||||
.Where(g => g.Count() == 1)
|
||||
.Select(g => g.First()) // 只保留每组的第一个元素
|
||||
.ToList();
|
||||
|
||||
foreach (var track in tracks)
|
||||
{
|
||||
await DeleteTrackByIdAsync(track.Id, track.IndexName);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task DeleteTrackByIdAsync(string id, string indexName)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user