【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)
|
foreach (var order in @event.OrderIdentifiers)
|
||||||
{
|
{
|
||||||
var track = tracks.FirstOrDefault(x =>
|
TrackDetailsIndex? track;
|
||||||
x.OrderId == order.OrderId && x.TrackTime == @event.TrackTime && x.TrackPlace == @event.TrackPlace);
|
if (!@event.IsAdd)
|
||||||
|
{
|
||||||
|
var existTracks = tracks.Where(x => x.OrderId == order.OrderId).ToArray();
|
||||||
|
if (existTracks.Length > 1)
|
||||||
|
{
|
||||||
|
// 修改轨迹时,订单存在多条轨迹不允许修改
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (track == null && !@event.IsAdd) continue; // 不存在不让改
|
track = existTracks.FirstOrDefault();
|
||||||
if (track != null && @event.IsAdd) continue; // 存在不让创建
|
|
||||||
|
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)
|
if (track == default)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -247,41 +247,52 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract<TrackDetail
|
|||||||
|
|
||||||
public async Task DeleteTrackAsync(int[] orderIds, List<string> trackCodes)
|
public async Task DeleteTrackAsync(int[] orderIds, List<string> trackCodes)
|
||||||
{
|
{
|
||||||
var deleteResponse = await Context.DeleteByQueryAsync<TrackDetailsIndex>(d => d
|
// var deleteResponse = await Context.DeleteByQueryAsync<TrackDetailsIndex>(d => d
|
||||||
.Index($"{GlobalConst.TrackDetailsIndex}-*") // 使用通配符匹配所有相关索引
|
// .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)
|
|
||||||
// .Query(q =>
|
// .Query(q =>
|
||||||
// q.Terms(t => t.Field(f => f.OrderId).Terms(orderIds))
|
// q.Terms(t => t.Field(f => f.OrderId).Terms(orderIds))
|
||||||
// && q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes))
|
// && q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes))
|
||||||
// )
|
// )
|
||||||
// );
|
// );
|
||||||
//
|
//
|
||||||
// if (!search.IsValid)
|
// if (!deleteResponse.IsValid)
|
||||||
// {
|
// {
|
||||||
// throw new InvalidOperationException(
|
// throw new InvalidOperationException(
|
||||||
// $"轨迹查询失败,orderIds:[{orderIds.JoinAsString(", ")}],trackCodes:[{trackCodes.JoinAsString(", ")}],原因:{search.DebugInformation}。");
|
// $"删除轨迹失败,orderIds:[{string.Join(", ", orderIds)}],trackCodes:[{string.Join(", ", trackCodes)}],原因:{deleteResponse.DebugInformation}。");
|
||||||
// }
|
|
||||||
//
|
|
||||||
// var tracks = search.ToIdList();
|
|
||||||
//
|
|
||||||
// foreach (var track in tracks)
|
|
||||||
// {
|
|
||||||
// await DeleteTrackByIdAsync(track.Id, track.IndexName);
|
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
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)
|
public async Task DeleteTrackByIdAsync(string id, string indexName)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user