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.Visited.AddRange(@event.OrderIds);
nextEvent.TrackCodes = @event.TrackCodes; nextEvent.TrackCodes = @event.TrackCodes;
nextEvent.SubSystemId = group.Key; nextEvent.SubSystemId = group.Key;
nextEvent.OrderIds = group.Select(x => x.OrderId).ToArray();
// 不同子系统需要做内容映射 // 不同子系统需要做内容映射
if (@event.SubSystemId != nextEvent.SubSystemId) if (@event.SubSystemId != nextEvent.SubSystemId)
@ -60,13 +59,25 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
if (mapCodes.Count == 0) if (mapCodes.Count == 0)
{ {
//throw new BusinessException(message: "订单跨子系统,未配置内容映射,请联系管理员"); //throw new BusinessException(message: "订单跨子系统,未配置内容映射,请联系管理员");
return; continue;
} }
nextEvent.TrackCodes = mapCodes; 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(); var nextEvent = @event.DeepCopy();
nextEvent.Visited.AddRange(orderIds); nextEvent.Visited.AddRange(orderIds);
nextEvent.SubSystemId = group.Key; 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 nextEvent.TrackRefreshData = new TrackRefreshStruct
{ {
ServiceProviderName = @event.TrackRefreshData.ServiceProviderName, ServiceProviderName = @event.TrackRefreshData.ServiceProviderName,
@ -78,13 +72,30 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
if (mapCode == default) if (mapCode == default)
{ {
// 跨子系统没做映射的轨迹不处理 // 跨子系统没做映射的轨迹不处理
return; continue;
} }
nextEvent.TrackCode = mapCode; 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 orderIds = @event.OrderIdentifiers.Select(x => x.OrderId).ToArray();
var tracks = await _trackDetailsRepository.GetListAsync(orderIds, @event.TrackCode); var tracks = await _trackDetailsRepository.GetListAsync(orderIds, @event.TrackCode);
TrackDetailsIndex firstTrack = null; TrackDetailsIndex? firstTrack = null;
var insertTracks = new List<TrackDetailsIndex>(); var insertTracks = new List<TrackDetailsIndex>();

View File

@ -4,4 +4,5 @@ public partial class GlobalConst
{ {
public const string SystemUser = "系统"; public const string SystemUser = "系统";
public const string EmptyString = "--"; 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(); return r.ToIdList();
} }
@ -35,7 +40,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
{ {
var excludeTrackCodes = trackCodes.ToList(); var excludeTrackCodes = trackCodes.ToList();
excludeTrackCodes.Add(GlobalConst.EmptyString); 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 .Source(s => s.Includes(fd => fd
.Field(f => f.TrackEnContent) .Field(f => f.TrackEnContent)
.Field(f => f.TrackContent) .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) 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; 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; return r.Hits.Count > 0;
} }
@ -150,7 +170,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
{ {
if (orderNos.Count < 1) return new List<TrackDetailsIndex>(); 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 .Source(s => s.Includes(fd => fd
.Field(f => f.OrderNo) .Field(f => f.OrderNo)
.Field(f => f.TrackStatus) .Field(f => f.TrackStatus)
@ -170,19 +190,29 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
.Size(1000) .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) 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 => .Query(q =>
q.Term(t => t.OrderId, orderId) q.Term(t => t.OrderId, orderId)
) )
.Size(1000) .Size(1000)
.Sort(s => s.Field(f => f.ZeroTrackTime, SortOrder.Descending))); .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) public async Task DeleteTrackAsync(int[] orderIds, List<string> trackCodes)