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.无: case OptionType.无:
return; return;
case OptionType.新增: case OptionType.新增:
//获取接口参数名称,稍后将用于轨迹扩展字段提取填充请求 await DoPushAsync(@event);
var paramsNames1 = await GetExtraParamNamesAsync(@event.SubSystemCode);
await DoPushAsync(@event, paramsNames1);
break; break;
case OptionType.删除: case OptionType.删除:
break; break;
case OptionType.修改: case OptionType.修改:
//获取接口参数名称,稍后将用于轨迹扩展字段提取填充请求 await DoUpdateAsync(@event);
var paramsNames2 = await GetExtraParamNamesAsync(@event.SubSystemCode);
await DoUpdateAsync(@event, paramsNames2);
break; break;
default: default:
throw new ArgumentOutOfRangeException(); 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; TrackPushContentConfigDto? config;
if (@event.OperationMan == null) var isSystemPush = @event.OperationMan == null;
var trackPushInputDict = new Dictionary<TrackPushInput, TrackDetailsIndex>();
if (isSystemPush)
{ {
foreach (var order in _orders) foreach (var order in _orders)
{ {
@ -120,8 +118,6 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
}; };
var item = await BuiltPushItem(config, log); var item = await BuiltPushItem(config, log);
item.Log = JsonConvert.SerializeObject(log); item.Log = JsonConvert.SerializeObject(log);
//根据轨迹扩展内容填充
item.Data.ForEach(dict => FillExtraParam(@event.SystemPushInfo.Extra, dict, paramNames));
items.Add(item); items.Add(item);
} }
} }
@ -130,10 +126,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
config = _pushConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode); config = _pushConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode);
if (config == null) return; if (config == null) return;
var tracks = await _trackDetailsEsRepository.GetListAsync(@event.OrderIds, new List<string>() var tracks = await _trackDetailsEsRepository.GetListAsync(@event.OrderIds, @event.TrackCode);
{
@event.TrackCode
});
tracks = tracks.DistinctBy(x => x.OrderId).ToList(); // 防止重复推送 tracks = tracks.DistinctBy(x => x.OrderId).ToList(); // 防止重复推送
if (tracks.Count == 0) return; // 一个能推的轨迹都不存在 if (tracks.Count == 0) return; // 一个能推的轨迹都不存在
@ -164,21 +157,34 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
}; };
var item = await BuiltPushItem(config, log); var item = await BuiltPushItem(config, log);
item.Log = JsonConvert.SerializeObject(log); item.Log = JsonConvert.SerializeObject(log);
//根据轨迹扩展内容填充 trackPushInputDict.Add(item, track);
item.Data.ForEach(dict => FillExtraParam(track.Extra, dict, paramNames));
items.Add(item); items.Add(item);
} }
} }
if (items.Count == 0) return; 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( using (Track2InterfaceRelaySubSystemContext.Use(
new Track2InterfaceRelaySubSystemContext(@event.SubSystemCode))) new Track2InterfaceRelaySubSystemContext(@event.SubSystemCode)))
{ {
var asciiString = Base64Helper.SerializeObject(OptionType.新增.ToString()); var asciiString = Base64Helper.SerializeObject(OptionType.新增.ToString());
var r = await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync( var r = await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync(
_options.CurrentValue.PushTrackInterfaceCode, _options.CurrentValue.PushTrackInterfaceCode,
_pushConfigs.First().ServiceProviderCode, items, GlobalConst.TrackPushCompletedSubscribe, _pushConfigs.First().ServiceProviderCode, items.Cast<object>().ToList(), GlobalConst.TrackPushCompletedSubscribe,
attach: asciiString); attach: asciiString);
if (r.Code != GlobalConst.SuccessCode) 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); var config = _pushConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode);
if (config == null || !config.IsCanUpdate) return; if (config == null || !config.IsCanUpdate) return;
var items = new List<object>(); var items = new List<TrackUpdateInput>();
foreach (var order in _orders) foreach (var order in _orders)
{ {
var log = new TrackPushRecordIndex var log = new TrackPushRecordIndex
@ -211,20 +217,25 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
}; };
var item = BuiltUpdateItem(config, log); var item = BuiltUpdateItem(config, log);
item.Log = JsonConvert.SerializeObject(log); item.Log = JsonConvert.SerializeObject(log);
//根据轨迹扩展内容填充
item.Data.ForEach(dict => FillExtraParam(@event.SystemPushInfo.Extra, dict, paramNames));
items.Add(item); items.Add(item);
} }
if (items.Count == 0) return; 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( using (Track2InterfaceRelaySubSystemContext.Use(
new Track2InterfaceRelaySubSystemContext(@event.SubSystemCode))) new Track2InterfaceRelaySubSystemContext(@event.SubSystemCode)))
{ {
var asciiString = Base64Helper.SerializeObject(OptionType.修改.ToString()); var asciiString = Base64Helper.SerializeObject(OptionType.修改.ToString());
var r = await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync( var r = await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync(
_options.CurrentValue.TrackUpdateInterfaceCode, _options.CurrentValue.TrackUpdateInterfaceCode,
_pushConfigs.First().ServiceProviderCode, items, GlobalConst.TrackPushCompletedSubscribe, _pushConfigs.First().ServiceProviderCode, items.Cast<object>().ToList(), GlobalConst.TrackPushCompletedSubscribe,
attach: asciiString); attach: asciiString);
if (r.Code != GlobalConst.SuccessCode) 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 trackDatetime = log.TrackTime.AddHours(config.TrackTimeZone ?? log.TrackTimeZone - log.TrackTimeZone);
var trackDateStr = DateTimeFormat(trackDatetime, config.TrackTimeZone ?? log.TrackTimeZone, config); 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 var body = new TrackUpdateInput
{ {
OrderNo = log.OrderNo, OrderNo = log.OrderNo,
@ -279,19 +277,6 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
var trackDatetime = log.TrackTime.AddHours(config.TrackTimeZone ?? log.TrackTimeZone - log.TrackTimeZone); var trackDatetime = log.TrackTime.AddHours(config.TrackTimeZone ?? log.TrackTimeZone - log.TrackTimeZone);
var trackDateStr = DateTimeFormat(trackDatetime, config.TrackTimeZone ?? log.TrackTimeZone, config); 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 var body = new TrackPushInput
{ {
OrderNo = log.OrderNo, OrderNo = log.OrderNo,
@ -402,18 +387,18 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
/// <summary> /// <summary>
/// 填充来源于轨迹扩展字段的参数 /// 填充来源于轨迹扩展字段的参数
/// </summary> /// </summary>
/// <param name="trackExtra">轨迹明细扩展字段</param> /// <param name="trackExtraJson">轨迹明细扩展字段Json</param>
/// <param name="dict">要扩展的参数字典</param> /// <param name="dict">要扩展的参数字典</param>
/// <param name="paramNames">来源扩展字段的参数名</param> /// <param name="paramNames">来源扩展字段的参数名</param>
/// <returns></returns> /// <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 (paramNames == null || paramNames.Count == 0) return;
if (dict == null) 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; if (trackExtra.Count == 0) return;
foreach (var item in foreach (var item in