opt:拆包

This commit is contained in:
李鹏军 2024-04-23 12:00:53 +08:00
parent 2e551b21d7
commit 04ef345481
4 changed files with 71 additions and 18 deletions

View File

@ -49,7 +49,6 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
nextEvent.Visited.AddRange(@event.OrderIds);
nextEvent.TrackCodes = @event.TrackCodes;
nextEvent.SubSystemId = group.Key;
nextEvent.OrderIds = group.Select(x => x.OrderId).ToArray();
// 不同子系统需要做内容映射
if (@event.SubSystemId != nextEvent.SubSystemId)
@ -60,13 +59,25 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
if (mapCodes.Count == 0)
{
//throw new BusinessException(message: "订单跨子系统,未配置内容映射,请联系管理员");
return;
continue;
}
nextEvent.TrackCodes = mapCodes;
}
await _capPublisher.PublishAsync(GlobalConst.TrackDeleteSubscribe, nextEvent);
var identifiers = group.Select(x => x.OrderId).ToList();
var idx = 0;
while (idx < identifiers.Count)
{
var subEvent = nextEvent.DeepCopy();
var cnt = idx + GlobalConst.ChunkSize > identifiers.Count
? identifiers.Count - idx
: GlobalConst.ChunkSize;
subEvent.OrderIds = identifiers.GetRange(idx, cnt).ToArray();
idx += GlobalConst.ChunkSize;
await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, subEvent);
}
}
}
}

View File

@ -53,12 +53,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
var nextEvent = @event.DeepCopy();
nextEvent.Visited.AddRange(orderIds);
nextEvent.SubSystemId = group.Key;
nextEvent.OrderIdentifiers = group.Select(x => new OrderIdentifier
{
OrderId = x.OrderId,
OrderNo = x.OrderNo,
OrderType = x.OrderType
}).ToArray();
nextEvent.TrackRefreshData = new TrackRefreshStruct
{
ServiceProviderName = @event.TrackRefreshData.ServiceProviderName,
@ -78,13 +72,30 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
if (mapCode == default)
{
// 跨子系统没做映射的轨迹不处理
return;
continue;
}
nextEvent.TrackCode = mapCode;
}
await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, nextEvent);
var identifiers = group.Select(x => new OrderIdentifier
{
OrderId = x.OrderId,
OrderNo = x.OrderNo,
OrderType = x.OrderType
}).ToList();
var idx = 0;
while (idx < identifiers.Count)
{
var subEvent = nextEvent.DeepCopy();
var cnt = idx + GlobalConst.ChunkSize > identifiers.Count
? identifiers.Count - idx
: GlobalConst.ChunkSize;
subEvent.OrderIdentifiers = identifiers.GetRange(idx, cnt).ToArray();
idx += GlobalConst.ChunkSize;
await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, subEvent);
}
}
}
}
@ -94,7 +105,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
var orderIds = @event.OrderIdentifiers.Select(x => x.OrderId).ToArray();
var tracks = await _trackDetailsRepository.GetListAsync(orderIds, @event.TrackCode);
TrackDetailsIndex firstTrack = null;
TrackDetailsIndex? firstTrack = null;
var insertTracks = new List<TrackDetailsIndex>();

View File

@ -4,4 +4,5 @@ public partial class GlobalConst
{
public const string SystemUser = "系统";
public const string EmptyString = "--";
public const int ChunkSize = 100;
}

View File

@ -28,6 +28,11 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
)
);
if (!r.IsValid)
{
throw new Exception($"轨迹查询,原因:{r.DebugInformation}。");
}
return r.ToIdList();
}
@ -35,7 +40,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
{
var excludeTrackCodes = trackCodes.ToList();
excludeTrackCodes.Add(GlobalConst.EmptyString);
var data = await Context.SearchAsync<TrackDetailsIndex>(x => x
var r = await Context.SearchAsync<TrackDetailsIndex>(x => x
.Source(s => s.Includes(fd => fd
.Field(f => f.TrackEnContent)
.Field(f => f.TrackContent)
@ -74,7 +79,12 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
)
);
return data.Documents.ToList();
if (!r.IsValid)
{
throw new Exception($"轨迹查询,原因:{r.DebugInformation}。");
}
return r.Documents.ToList();
}
public async Task<bool> AnyAsync(int orderId, DateTime trackTime)
@ -87,6 +97,11 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
)
);
if (!r.IsValid)
{
throw new Exception($"轨迹查询,原因:{r.DebugInformation}。");
}
return r.Hits.Count > 0;
}
@ -100,6 +115,11 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
)
);
if (!r.IsValid)
{
throw new Exception($"轨迹查询,原因:{r.DebugInformation}。");
}
return r.Hits.Count > 0;
}
@ -150,7 +170,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
{
if (orderNos.Count < 1) return new List<TrackDetailsIndex>();
var data = await Context.SearchAsync<TrackDetailsIndex>(x => x
var r = await Context.SearchAsync<TrackDetailsIndex>(x => x
.Source(s => s.Includes(fd => fd
.Field(f => f.OrderNo)
.Field(f => f.TrackStatus)
@ -170,19 +190,29 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
.Size(1000)
);
return data.Documents.ToList();
if (!r.IsValid)
{
throw new Exception($"轨迹查询,原因:{r.DebugInformation}。");
}
return r.Documents.ToList();
}
public async Task<List<TrackDetailsIndex>> GetListAsync(int orderId)
{
var data = await Context.SearchAsync<TrackDetailsIndex>(x => x
var r = await Context.SearchAsync<TrackDetailsIndex>(x => x
.Query(q =>
q.Term(t => t.OrderId, orderId)
)
.Size(1000)
.Sort(s => s.Field(f => f.ZeroTrackTime, SortOrder.Descending)));
return data.Documents.ToList();
if (!r.IsValid)
{
throw new Exception($"轨迹查询,原因:{r.DebugInformation}。");
}
return r.Documents.ToList();
}
public async Task DeleteTrackAsync(int[] orderIds, List<string> trackCodes)