perf:优化轨迹删除增加广播延时发送,并且修正为不阻塞主流程
This commit is contained in:
parent
e0be935489
commit
40c663634e
@ -47,7 +47,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
|
||||
|
||||
//当轨迹删除,根据轨迹标记/状态上IsToMq选择进行广播
|
||||
if (trackList.Count != 0)
|
||||
await PublicTrackTopicAsync(@event, trackList);
|
||||
_ = PublicTrackTopicAsync(@event, trackList);
|
||||
|
||||
// 根据订单关联关系异步向下刷(异步)
|
||||
await DownByOrderLink(@event);
|
||||
@ -121,89 +121,6 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
|
||||
return true;
|
||||
}
|
||||
|
||||
private async Task PublicTrackTopicAsync(TrackDeleteEvent @event, List<TrackDetailsIndex> trackList)
|
||||
{
|
||||
var systemIds = trackList.Select(x => x.SubSystemId).Distinct().ToArray();
|
||||
var trackCodes = trackList.Select(x => x.TrackCode).Distinct().ToArray();
|
||||
|
||||
//从轨迹内容中查询出标记是否需要mq广播
|
||||
var contentList = await _provideQueries.GetTrackContentsAsync(systemIds, trackCodes);
|
||||
var toMqDict = contentList
|
||||
.ToDictionary(x => x.SubSystemId + x.TrackContentCode, y => y.IsToMq);
|
||||
|
||||
//选出需要广播的轨迹,并按code和订单号分组
|
||||
var trackGroup = trackList
|
||||
.Where(x => toMqDict[x.SubSystemId + x.TrackCode])
|
||||
.GroupBy(m => new
|
||||
{
|
||||
m.TrackCode,
|
||||
m.OrderNo
|
||||
})
|
||||
.ToList();
|
||||
if (trackGroup.Count == 0) return;
|
||||
|
||||
foreach (var dataItem in trackGroup)
|
||||
{
|
||||
var item = dataItem.First();
|
||||
var content = contentList.First(m => m.TrackContentCode == item.TrackCode);
|
||||
|
||||
// _broadcastingService.TrackChangePublicTopic(track,
|
||||
// dataItem.Select(m => new OrderIdentifier
|
||||
// {
|
||||
// OrderId = m.OrderId,
|
||||
// OrderNo = m.OrderNo,
|
||||
// OrderType = m.OrderType
|
||||
// }).ToArray(),
|
||||
// item.TrackCode,
|
||||
// item.TrackStatusCode,
|
||||
// content.SubSystemCode
|
||||
// );
|
||||
|
||||
//将每个订单的每个轨迹的删除变更发布
|
||||
foreach (var track in dataItem)
|
||||
{
|
||||
_broadcastingService.TrackChangePublicTopic(new TrackChangeEto
|
||||
{
|
||||
EstimatedDeliveryDate = track.EstimatedDeliveryDate,
|
||||
TrackPlacePostcode = track.TrackPlacePostcode,
|
||||
TrackPlaceNation = track.TrackPlaceNation,
|
||||
TrackPlaceNationId = track.TrackPlaceNationId,
|
||||
TrackPlaceProvince = track.TrackPlaceProvince,
|
||||
TrackPlaceProvinceId = track.TrackPlaceProvinceId,
|
||||
TrackPlaceCity = track.TrackPlaceCity,
|
||||
TrackPlaceCityId = track.TrackPlaceCityId,
|
||||
Files = track.Files?.Select(x => new FileItemDto()
|
||||
{
|
||||
FileName = x.FileName,
|
||||
OssKey = x.OssKey
|
||||
}).ToList(),
|
||||
Remarks = track.Remarks,
|
||||
Source = track.Source,
|
||||
IsVisibility = track.IsVisibility,
|
||||
TrackTimeZone = track.TrackTimeZone,
|
||||
TrackTime = track.TrackTime,
|
||||
TrackPlace = track.TrackPlace,
|
||||
TrackStatusCode = track.TrackStatusCode,
|
||||
EnStatus = track.TrackEnContent,
|
||||
Content = track.TrackContent,
|
||||
TrackCode = track.TrackCode,
|
||||
OperationMan = @event.OperationMan,
|
||||
OrderIdentifiers = new[]
|
||||
{
|
||||
new OrderIdentifier()
|
||||
{
|
||||
OrderId = track.OrderId,
|
||||
OrderNo = track.OrderNo,
|
||||
OrderType = track.OrderType
|
||||
}
|
||||
},
|
||||
SubSystemId = @event.SubSystemId,
|
||||
Extra = track.Extra
|
||||
}, content.SubSystemCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<List<TrackDetailsIndex>> DeleteTrackAsync(TrackDeleteEvent @event)
|
||||
{
|
||||
List<int> orderIds;
|
||||
@ -264,7 +181,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
|
||||
throw new BusinessException(message: $"当前轨迹不存在扩展信息,无法利用扩展字段:{@event.CompareFields}");
|
||||
}
|
||||
|
||||
var extraDict = GetExtraDictForTextJson(x.Extra);
|
||||
var extraDict = TextJsonHelper.DeserializeDictionary(x.Extra);
|
||||
if (extraDict == null || !extraDict.TryGetValue(@event.CompareFields, out var compareValue))
|
||||
{
|
||||
throw new BusinessException(message: $"请检查拓展字段,为什么找不到比较字段:{@event.CompareFields}");
|
||||
@ -361,68 +278,88 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
|
||||
return deleteTracks;
|
||||
}
|
||||
|
||||
private Dictionary<string, object?>? GetExtraDictForTextJson(string? extraStr)
|
||||
private async Task PublicTrackTopicAsync(TrackDeleteEvent @event, List<TrackDetailsIndex> trackList)
|
||||
{
|
||||
return string.IsNullOrWhiteSpace(extraStr)
|
||||
? null
|
||||
: System.Text.Json.JsonSerializer.Deserialize<Dictionary<string, object?>>(extraStr);
|
||||
}
|
||||
var systemIds = trackList.Select(x => x.SubSystemId).Distinct().ToArray();
|
||||
var trackCodes = trackList.Select(x => x.TrackCode).Distinct().ToArray();
|
||||
|
||||
//json Element和object的比较
|
||||
private bool EqJsonElementObject2(object? a, object? b)
|
||||
{
|
||||
if (a == null && b == null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
//从轨迹内容中查询出标记是否需要mq广播
|
||||
var contentList = await _provideQueries.GetTrackContentsAsync(systemIds, trackCodes);
|
||||
var toMqDict = contentList
|
||||
.ToDictionary(x => x.SubSystemId + x.TrackContentCode, y => y.IsToMq);
|
||||
|
||||
if (a is JsonElement aJsonElement)
|
||||
{
|
||||
switch (aJsonElement.ValueKind)
|
||||
//选出需要广播的轨迹,并按code和订单号分组
|
||||
var trackGroup = trackList
|
||||
.Where(x => toMqDict[x.SubSystemId + x.TrackCode])
|
||||
.GroupBy(m => new
|
||||
{
|
||||
case JsonValueKind.Undefined:
|
||||
return false;
|
||||
case JsonValueKind.Object:
|
||||
return false;
|
||||
case JsonValueKind.Array:
|
||||
return false;
|
||||
case JsonValueKind.String:
|
||||
return string.Equals(aJsonElement.GetString(), b as string);
|
||||
case JsonValueKind.Number:
|
||||
m.TrackCode,
|
||||
m.OrderNo
|
||||
})
|
||||
.ToList();
|
||||
if (trackGroup.Count == 0) return;
|
||||
|
||||
//增加延时确保写盘成功
|
||||
await Task.Delay(1000);
|
||||
foreach (var dataItem in trackGroup)
|
||||
{
|
||||
var item = dataItem.First();
|
||||
var content = contentList.First(m => m.TrackContentCode == item.TrackCode);
|
||||
|
||||
// _broadcastingService.TrackChangePublicTopic(track,
|
||||
// dataItem.Select(m => new OrderIdentifier
|
||||
// {
|
||||
// OrderId = m.OrderId,
|
||||
// OrderNo = m.OrderNo,
|
||||
// OrderType = m.OrderType
|
||||
// }).ToArray(),
|
||||
// item.TrackCode,
|
||||
// item.TrackStatusCode,
|
||||
// content.SubSystemCode
|
||||
// );
|
||||
|
||||
//将每个订单的每个轨迹的删除变更发布
|
||||
foreach (var track in dataItem)
|
||||
{
|
||||
_broadcastingService.TrackChangePublicTopic(new TrackChangeEto
|
||||
{
|
||||
EstimatedDeliveryDate = track.EstimatedDeliveryDate,
|
||||
TrackPlacePostcode = track.TrackPlacePostcode,
|
||||
TrackPlaceNation = track.TrackPlaceNation,
|
||||
TrackPlaceNationId = track.TrackPlaceNationId,
|
||||
TrackPlaceProvince = track.TrackPlaceProvince,
|
||||
TrackPlaceProvinceId = track.TrackPlaceProvinceId,
|
||||
TrackPlaceCity = track.TrackPlaceCity,
|
||||
TrackPlaceCityId = track.TrackPlaceCityId,
|
||||
Files = track.Files?.Select(x => new FileItemDto()
|
||||
{
|
||||
if (b == null) return false;
|
||||
|
||||
if (b is int bInt)
|
||||
{
|
||||
var aInt = aJsonElement.GetInt32();
|
||||
return aInt == bInt;
|
||||
}
|
||||
|
||||
if (b is long bLong)
|
||||
{
|
||||
var aLong = aJsonElement.GetInt64();
|
||||
return aLong == bLong;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
case JsonValueKind.True:
|
||||
case JsonValueKind.False:
|
||||
FileName = x.FileName,
|
||||
OssKey = x.OssKey
|
||||
}).ToList(),
|
||||
Remarks = track.Remarks,
|
||||
Source = track.Source,
|
||||
IsVisibility = track.IsVisibility,
|
||||
TrackTimeZone = track.TrackTimeZone,
|
||||
TrackTime = track.TrackTime,
|
||||
TrackPlace = track.TrackPlace,
|
||||
TrackStatusCode = track.TrackStatusCode,
|
||||
EnStatus = track.TrackEnContent,
|
||||
Content = track.TrackContent,
|
||||
TrackCode = track.TrackCode,
|
||||
OperationMan = @event.OperationMan,
|
||||
OrderIdentifiers = new[]
|
||||
{
|
||||
if (b is bool bl)
|
||||
new OrderIdentifier()
|
||||
{
|
||||
return aJsonElement.GetBoolean() == bl;
|
||||
OrderId = track.OrderId,
|
||||
OrderNo = track.OrderNo,
|
||||
OrderType = track.OrderType
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
case JsonValueKind.Null:
|
||||
{
|
||||
return false;
|
||||
}
|
||||
},
|
||||
SubSystemId = @event.SubSystemId,
|
||||
Extra = track.Extra
|
||||
}, content.SubSystemCode);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user