Merge branch 'S06' into test

This commit is contained in:
hardstylewyl 2024-12-19 18:06:51 +08:00
commit 503d4f470e

View File

@ -74,27 +74,25 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
case OptionType.无:
return;
case OptionType.新增:
//获取接口参数名称,稍后将用于轨迹扩展字段提取填充请求
var paramsNames1 = await GetExtraParamNamesAsync(@event.SubSystemCode);
await DoPushAsync(@event, paramsNames1);
await DoPushAsync(@event);
break;
case OptionType.删除:
break;
case OptionType.修改:
//获取接口参数名称,稍后将用于轨迹扩展字段提取填充请求
var paramsNames2 = await GetExtraParamNamesAsync(@event.SubSystemCode);
await DoUpdateAsync(@event, paramsNames2);
await DoUpdateAsync(@event);
break;
default:
throw new ArgumentOutOfRangeException();
}
}
private async Task DoPushAsync(TrackPushEvent @event, List<string> paramNames)
private async Task DoPushAsync(TrackPushEvent @event)
{
var items = new List<object>();
var items = new List<TrackPushInput>();
TrackPushContentConfigDto? config;
if (@event.OperationMan == null)
var isSystemPush = @event.OperationMan == null;
var trackPushInputDict = new Dictionary<TrackPushInput, TrackDetailsIndex>();
if (isSystemPush)
{
foreach (var order in _orders)
{
@ -120,8 +118,6 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
};
var item = await BuiltPushItem(config, log);
item.Log = JsonConvert.SerializeObject(log);
//根据轨迹扩展内容填充
item.Data.ForEach(dict => FillExtraParam(@event.SystemPushInfo.Extra, dict, paramNames));
items.Add(item);
}
}
@ -130,10 +126,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
config = _pushConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode);
if (config == null) return;
var tracks = await _trackDetailsEsRepository.GetListAsync(@event.OrderIds, new List<string>()
{
@event.TrackCode
});
var tracks = await _trackDetailsEsRepository.GetListAsync(@event.OrderIds, @event.TrackCode);
tracks = tracks.DistinctBy(x => x.OrderId).ToList(); // 防止重复推送
if (tracks.Count == 0) return; // 一个能推的轨迹都不存在
@ -164,21 +157,34 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
};
var item = await BuiltPushItem(config, log);
item.Log = JsonConvert.SerializeObject(log);
//根据轨迹扩展内容填充
item.Data.ForEach(dict => FillExtraParam(track.Extra, dict, paramNames));
trackPushInputDict.Add(item, track);
items.Add(item);
}
}
if (items.Count == 0) return;
//获取参数结构名称
var paramNames = await GetExtraParamNamesAsync(@event.SubSystemCode);
//如果为系统推送,则从事件中取出轨迹扩展内容填充
foreach (var item in items)
{
//根据事件中轨迹扩展内容填充
if (isSystemPush)
item.Data.ForEach(dict => FillExtraParam(@event.SystemPushInfo.Extra, dict, paramNames));
//根据查出的轨迹中扩展内容填充
else
item.Data.ForEach(dict => FillExtraParam(trackPushInputDict[item].Extra, dict, paramNames));
}
using (Track2InterfaceRelaySubSystemContext.Use(
new Track2InterfaceRelaySubSystemContext(@event.SubSystemCode)))
{
var asciiString = Base64Helper.SerializeObject(OptionType.新增.ToString());
var r = await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync(
_options.CurrentValue.PushTrackInterfaceCode,
_pushConfigs.First().ServiceProviderCode, items, GlobalConst.TrackPushCompletedSubscribe,
_pushConfigs.First().ServiceProviderCode, items.Cast<object>().ToList(), GlobalConst.TrackPushCompletedSubscribe,
attach: asciiString);
if (r.Code != GlobalConst.SuccessCode)
@ -188,12 +194,12 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
}
}
private async Task DoUpdateAsync(TrackPushEvent @event, List<string> paramNames)
private async Task DoUpdateAsync(TrackPushEvent @event)
{
var config = _pushConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode);
if (config == null || !config.IsCanUpdate) return;
var items = new List<object>();
var items = new List<TrackUpdateInput>();
foreach (var order in _orders)
{
var log = new TrackPushRecordIndex
@ -211,20 +217,25 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
};
var item = BuiltUpdateItem(config, log);
item.Log = JsonConvert.SerializeObject(log);
//根据轨迹扩展内容填充
item.Data.ForEach(dict => FillExtraParam(@event.SystemPushInfo.Extra, dict, paramNames));
items.Add(item);
}
if (items.Count == 0) return;
//获取参数结构名称
var paramNames = await GetExtraParamNamesAsync(@event.SubSystemCode);
//根据事件中轨迹扩展内容填充请求
foreach (var item in items)
item.Data.ForEach(dict => FillExtraParam(@event.SystemPushInfo.Extra, dict, paramNames));
using (Track2InterfaceRelaySubSystemContext.Use(
new Track2InterfaceRelaySubSystemContext(@event.SubSystemCode)))
{
var asciiString = Base64Helper.SerializeObject(OptionType.修改.ToString());
var r = await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync(
_options.CurrentValue.TrackUpdateInterfaceCode,
_pushConfigs.First().ServiceProviderCode, items, GlobalConst.TrackPushCompletedSubscribe,
_pushConfigs.First().ServiceProviderCode, items.Cast<object>().ToList(), GlobalConst.TrackPushCompletedSubscribe,
attach: asciiString);
if (r.Code != GlobalConst.SuccessCode)
@ -239,19 +250,6 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
var trackDatetime = log.TrackTime.AddHours(config.TrackTimeZone ?? log.TrackTimeZone - log.TrackTimeZone);
var trackDateStr = DateTimeFormat(trackDatetime, config.TrackTimeZone ?? log.TrackTimeZone, config);
// var track = new TrackItem
// {
// // 推真实的发生地和发生时间(时间是计算后的)
// Location = log.TrackPlace,
// Date = trackDateStr,
// TimeZone = config.TrackTimeZone ?? log.TrackTimeZone,
// Description = config.TrackEnContentValue,
// DescriptionCn = config.TrackContentValue,
// Code = config.TrackContentCodeValue,
// Status = config.TrackStatusValue,
// Extra = config.ExpandFieldsValue
// };
var body = new TrackUpdateInput
{
OrderNo = log.OrderNo,
@ -279,19 +277,6 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
var trackDatetime = log.TrackTime.AddHours(config.TrackTimeZone ?? log.TrackTimeZone - log.TrackTimeZone);
var trackDateStr = DateTimeFormat(trackDatetime, config.TrackTimeZone ?? log.TrackTimeZone, config);
// var track = new TrackItem
// {
// // 推真实的发生地和发生时间(时间是计算后的)
// Location = log.TrackPlace,
// Date = trackDateStr,
// TimeZone = config.TrackTimeZone ?? log.TrackTimeZone,
// Description = config.TrackEnContentValue,
// DescriptionCn = config.TrackContentValue,
// Code = config.TrackContentCodeValue,
// Status = config.TrackStatusValue,
// Extra = config.ExpandFieldsValue
// };
var body = new TrackPushInput
{
OrderNo = log.OrderNo,
@ -402,18 +387,18 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
/// <summary>
/// 填充来源于轨迹扩展字段的参数
/// </summary>
/// <param name="trackExtra">轨迹明细扩展字段</param>
/// <param name="trackExtraJson">轨迹明细扩展字段Json</param>
/// <param name="dict">要扩展的参数字典</param>
/// <param name="paramNames">来源扩展字段的参数名</param>
/// <returns></returns>
private void FillExtraParam(string? trackExtraStr, Dictionary<string, object>? dict, List<string>? paramNames)
private void FillExtraParam(string? trackExtraJson, Dictionary<string, object>? dict, List<string>? paramNames)
{
if (paramNames == null || paramNames.Count == 0) return;
if (dict == null) return;
if (string.IsNullOrWhiteSpace(trackExtraStr)) return;
if (string.IsNullOrWhiteSpace(trackExtraJson)) return;
var trackExtra = ExtractTrackExtraDict(trackExtraStr);
var trackExtra = ExtractTrackExtraDict(trackExtraJson);
if (trackExtra.Count == 0) return;
foreach (var item in