diff --git a/src/SJZY.Track.Api/appsettings.json b/src/SJZY.Track.Api/appsettings.json
index 41fc37c6..beb55965 100644
--- a/src/SJZY.Track.Api/appsettings.json
+++ b/src/SJZY.Track.Api/appsettings.json
@@ -8,9 +8,9 @@
"AppId": "SJZY.Track.Configuration",
"Env": "DEV",
"Namespace": "test",
- "MetaServer": "http://apollo-service-test-apollo-configservice.apollo.svc.cluster.local:8080",
+ "MetaServer": "https://apollo.test.shijizhongyun.com",
"ConfigServer": [
- "http://apollo-service-test-apollo-configservice.apollo.svc.cluster.local:8080"
+ "https://apollo.test.shijizhongyun.com"
]
}
},
diff --git a/src/SJZY.Track.Application.Contract/Events/TrackPushCompletedEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackPushCompletedEvent.cs
new file mode 100644
index 00000000..6d8646ef
--- /dev/null
+++ b/src/SJZY.Track.Application.Contract/Events/TrackPushCompletedEvent.cs
@@ -0,0 +1,82 @@
+namespace SJZY.Track.Application.Contract.Events;
+
+///
+/// 轨迹推送广播模型
+///
+public class TrackPushCompletedEvent
+{
+ ///
+ /// 是否为手动推送
+ ///
+ public bool IsManualPush { get; set; }
+
+ ///
+ /// 推送时间
+ ///
+ public DateTime PushTime { get; set; }
+
+ ///
+ /// 操作人
+ ///
+ public string? OperationMan { get; set; }
+
+ ///
+ /// 订单号
+ ///
+ public string OrderNo { get; set; } = null!;
+
+ ///
+ /// 接口通请求Id
+ ///
+ public Guid RequestId { get; set; }
+
+ ///
+ /// 信息
+ ///
+ public string Message { get; set; } = null!;
+
+ ///
+ /// 操作类型
+ ///
+ public string OptionType { get; set; } = null!;
+
+ ///
+ /// 轨迹状态
+ ///
+ public string TrackStatus { get; set; } = null!;
+
+ ///
+ /// 轨迹内容代码
+ ///
+ public string TrackCode { get; set; } = null!;
+
+ ///
+ /// 轨迹内容
+ ///
+ public string TrackContent { get; set; } = null!;
+
+ ///
+ /// 轨迹发生地
+ ///
+ public string TrackPlace { get; set; } = null!;
+
+ ///
+ /// 轨迹发生时间
+ ///
+ public DateTime TrackTime { get; set; }
+
+ ///
+ /// 轨迹发生时区
+ ///
+ public float TrackTimeZone { get; set; }
+
+ ///
+ /// 是否成功
+ ///
+ public bool IsSuccess { get; set; }
+
+ ///
+ /// 推送内容(json)
+ ///
+ public string PushContent { get; set; } = null!;
+}
diff --git a/src/SJZY.Track.Application.Contract/Events/TrackPushEto.cs b/src/SJZY.Track.Application.Contract/Events/TrackPushEto.cs
deleted file mode 100644
index 01a421fe..00000000
--- a/src/SJZY.Track.Application.Contract/Events/TrackPushEto.cs
+++ /dev/null
@@ -1,159 +0,0 @@
-using SJZY.Track.Application.Contract.Dtos.ProvideServices;
-
-namespace SJZY.Track.Application.Contract.Events;
-
-///
-/// 轨迹推送广播模型
-///
-public class TrackPushEto
-{
- ///
- /// 是否新增
- ///
- public OptionType Option { get; set; }
-
- ///
- /// 是否为手动推送
- ///
- public bool IsManualPush { get; set; }
-
- ///
- /// 推送是否失败
- ///
- public bool IsFailure { get; set; }
-
- ///
- /// 失败原因
- ///
- public string? FailureReason { get; set; }
-
- ///
- /// 推送时间
- ///
- public DateTime PushTime { get; set; }
-
- ///
- /// 操作人
- ///
- public string? OperationMan { get; set; }
-
- ///
- /// 子系统id
- ///
- public int SubSystemId { get; set; }
-
- ///
- /// 单号
- ///
- public string OrderNo { get; set; }
-
- ///
- /// 客户id
- ///
- public int CustomId { get; set; }
-
- ///
- /// 订单id
- ///
- public OrderIdentifier[] OrderIdentifiers { get; set; } = null!;
-
- ///
- /// 轨迹内容代码
- ///
- public string TrackCode { get; set; } = null!;
-
- ///
- /// 轨迹内容
- ///
- public string? Content { get; set; }
-
- ///
- /// 轨迹内容英文
- ///
- public string? EnStatus { get; set; }
-
- ///
- /// 轨迹状态代码
- ///
- public string TrackStatusCode { get; set; }
-
- ///
- /// 轨迹发生地
- ///
- public string TrackPlace { get; set; } = null!;
-
- ///
- /// 轨迹发生时间
- ///
- public DateTime TrackTime { get; set; }
-
- ///
- /// 轨迹发生地时区
- ///
- public float TrackTimeZone { get; set; }
-
- ///
- /// 客户是否可见
- ///
- public bool IsVisibility { get; set; }
-
- ///
- /// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
- ///
- public int Source { get; set; }
-
- ///
- /// 轨迹备注
- ///
- public string? Remarks { get; set; }
-
- ///
- /// 附件集合
- ///
- public List? Files { get; set; }
-
- ///
- /// 轨迹发生地(城市)
- ///
- public string? TrackPlaceCity { get; set; }
-
- ///
- /// 轨迹发生地(城市)Id
- ///
- public int? TrackPlaceCityId { get; set; }
-
- ///
- /// 轨迹发生地(省/州)
- ///
- public string? TrackPlaceProvince { get; set; }
-
- ///
- ///轨迹发生地(省/州)Id
- ///
- public int? TrackPlaceProvinceId { get; set; }
-
- ///
- /// 轨迹发生地(国家/地区)
- ///
- public string? TrackPlaceNation { get; set; }
-
- ///
- /// 轨迹发生地(国家/地区)Id
- ///
- public int? TrackPlaceNationId { get; set; }
-
- ///
- /// 轨迹发生地邮编
- ///
- public string? TrackPlacePostcode { get; set; }
-
- ///
- /// 预计到达时间
- ///
- public DateTime? EstimatedDeliveryDate { get; set; }
-
- ///
- /// 扩展信息字段,用与轨迹推送的附加字段
- ///
- public string? Extra { get; set; }
-}
diff --git a/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs b/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs
index f51929db..ab033510 100644
--- a/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs
+++ b/src/SJZY.Track.Application.Contract/Events/TrackPushEvent.cs
@@ -46,6 +46,11 @@ public class TrackPushEvent
/// 是否强制推送
///
public bool ForcedPush { get; set; }
+
+ ///
+ /// 是否发送到mq
+ ///
+ public bool IsToMq { get; set; }
}
public struct SystemPushStruct
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
index 038f9499..9a2c74f2 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
@@ -276,7 +276,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
OrderId = order.Id,
OrderNo = order.OrderNo,
OptionType = OrderOperationType.删除轨迹.ToString(),
- Content = deleteTracks?.Where(m => m.OrderId == order.Id).ToList().ToJson(),
+ Content = deleteTracks.Where(m => m.OrderId == order.Id).ToList().ToJson(),
CreateUserId = @event.OperationManId,
CreateUserName = @event.OperationMan ?? "",
CreateTime = DateTime.Now
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs
index d2669e14..a4e74aeb 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackPushEventHandler.cs
@@ -1,10 +1,8 @@
-using System.Text.Json;
using DotNetCore.CAP;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.InterfaceRelay.Application.Contracts;
-using SJZY.OTel;
using SJZY.Track.Application.Contract.Dtos.TrackPush;
using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Application.Contract.Services;
@@ -126,6 +124,8 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
TrackTime = @event.SystemPushInfo.TrackTime,
TrackTimeZone = @event.SystemPushInfo.TrackTimeZone,
CreateUser = GlobalConst.SystemUser,
+ SubSystemCode = @event.SubSystemCode,
+ IsToMq = @event.IsToMq
};
var item = await BuiltPushItem(config, log, @event.SystemPushInfo.Extra);
item.Log = JsonConvert.SerializeObject(log);
@@ -172,6 +172,8 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
TrackTime = track.TrackTime,
TrackTimeZone = track.TrackTimeZone,
CreateUser = @event.OperationMan,
+ SubSystemCode = @event.SubSystemCode,
+ IsToMq = @event.IsToMq
};
var item = await BuiltPushItem(config, log, track.Extra);
item.Log = JsonConvert.SerializeObject(log);
@@ -181,20 +183,6 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
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)))
{
@@ -234,6 +222,8 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
TrackTime = @event.SystemPushInfo.TrackTime,
TrackTimeZone = @event.SystemPushInfo.TrackTimeZone,
CreateUser = GlobalConst.SystemUser,
+ SubSystemCode = @event.SubSystemCode,
+ IsToMq = @event.IsToMq
};
var item = BuiltUpdateItem(config, log, @event.SystemPushInfo.Extra);
item.Log = JsonConvert.SerializeObject(log);
@@ -242,13 +232,6 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
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)))
{
@@ -383,107 +366,9 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
{
return obj == null ? string.Empty : System.Text.Json.JsonSerializer.Serialize(obj);
}
+
private T? DeserializeForTextJson(string? json)
{
return string.IsNullOrWhiteSpace(json) ? default : System.Text.Json.JsonSerializer.Deserialize(json);
}
-
- ///
- /// 获取来源系统接口的参数名
- ///
- ///
- ///
- private async Task> GetExtraParamNamesAsync(string subSystemCode)
- {
- using var span = ActivityHelper.CreateSpanActivity("开始请求接口通,接口结构");
- using (Track2InterfaceRelaySubSystemContext.Use(
- new Track2InterfaceRelaySubSystemContext(subSystemCode)))
- {
- var res = await _httpClientProxy.Service.GetSystemInterfaceByIdAsync(_options.CurrentValue.PushTrackInterfaceCode, _options.CurrentValue.PushTrackInterfaceId);
- if (res == null) return new List();
- span.SetTag("request-GetSystemInterfaceByIdAsync", $"PushTrackInterfaceCode[{subSystemCode}]," +
- $"PushTrackInterfaceCode:[{_options.CurrentValue.PushTrackInterfaceCode}]," +
- $"PushTrackInterfaceId:[{_options.CurrentValue.PushTrackInterfaceId}]," +
- $"PushTrackItemParamAliasPrefix:[{_options.CurrentValue.PushTrackItemParamAliasPrefix}]");
- span.SetTag("response-GetSystemInterfaceByIdAsync", res.ToJson());
- return res.InParameterList
- .Where(x => x.Alias.StartsWith(_options.CurrentValue.PushTrackItemParamAliasPrefix))
- .Select(x => x.Name)
- .ToList();
- }
- }
-
- ///
- /// 填充来源于轨迹扩展字段的参数
- ///
- /// 轨迹明细扩展字段Json
- /// 要扩展的参数字典
- /// 来源扩展字段的参数名
- ///
- private void FillExtraParam(string? trackExtraJson, Dictionary? dict, List? paramNames)
- {
- if (paramNames == null || paramNames.Count == 0) return;
- if (dict == null) return;
-
- if (string.IsNullOrWhiteSpace(trackExtraJson)) return;
-
- var trackExtra = ExtractTrackExtraDict(trackExtraJson);
-
- if (trackExtra.Count == 0) return;
- foreach (var item in
- trackExtra.Where(x => x.Value != null && paramNames.Contains(x.Key)))
- {
- dict.TryAdd(item.Key, item.Value);
- }
- }
-
- private Dictionary ExtractTrackExtraDict(string trackExtraStr)
- {
- var dict = new Dictionary();
- var trackExtra = JsonConvert.DeserializeObject>(trackExtraStr);
- if (trackExtra == null) return dict;
- foreach (var pair in trackExtra)
- {
- if (pair.Value is JsonElement jEl)
- {
- object? objVal = null;
- switch (jEl.ValueKind)
- {
- case JsonValueKind.String:
- objVal = jEl.GetString();
- // 处理字符串值
- break;
- case JsonValueKind.Number:
- objVal = jEl.GetDouble();
- // 处理数值
- break;
- case JsonValueKind.True:
- case JsonValueKind.False:
- objVal = jEl.GetBoolean();
- // 处理布尔值
- break;
- case JsonValueKind.Object:
- // 处理对象
- break;
- case JsonValueKind.Array:
- // 处理数组
- break;
- case JsonValueKind.Null:
- // 处理空值
- break;
- default:
- // 处理未知类型
- break;
- }
-
- if (objVal == null) continue;
- dict.TryAdd(pair.Key, objVal);
- continue;
- }
-
- dict.TryAdd(pair.Key, pair.Value);
- }
-
- return dict;
- }
}
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index a0a07af3..a20ec106 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -1,9 +1,8 @@
-using System.Text;
-using BSI.Stack.Rabbit;
using DotNetCore.CAP;
using SJZY.Expand.ABP.Core.Logger;
using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.Track.Application.Contract.Events;
+using SJZY.Track.Application.Services.Broadcasting;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Dtos.TrackContents;
@@ -20,7 +19,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private readonly IOrderRepository _orderRepository;
private readonly IProvideQueries _provideQueries;
private readonly ITrackDetailsEsRepository _trackDetailsEsRepository;
- private readonly RabbitClientBus _rabbitClientBus;
+ private readonly BroadcastingService _broadcastingService;
private readonly IOrderOperationRecordEsRepository _orderOperationRecordEsRepository;
public TrackUpsertEventHandler(
@@ -28,15 +27,15 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
ICapPublisher capPublisher,
IProvideQueries provideQueries,
ITrackDetailsEsRepository trackDetailsEsRepository,
- RabbitClientBus rabbitClientBus,
- IOrderOperationRecordEsRepository orderOperationRecordEsRepository)
+ IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
+ BroadcastingService broadcastingService)
{
_orderRepository = orderRepository;
_capPublisher = capPublisher;
_provideQueries = provideQueries;
_trackDetailsEsRepository = trackDetailsEsRepository;
- _rabbitClientBus = rabbitClientBus;
_orderOperationRecordEsRepository = orderOperationRecordEsRepository;
+ _broadcastingService = broadcastingService;
}
[CapSubscribe(GlobalConst.TrackUpsertSubscribe, Group = GlobalConst.TrackUpsertSubscribe)]
@@ -50,60 +49,14 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
var content = await HandleTrackAsync(@event, canNextOrderIds);
// 处理广播事件
- PublicTrackTopic(@event, content);
+ if (content is { IsToMq: true })
+ await _broadcastingService.TrackChangePublicTopicAsync(@event, content);
if (canNextOrderIds.Count == 0) return;
// 根据订单关联关系异步向下刷(异步)
await DownByOrderLink(@event, canNextOrderIds);
}
- ///
- /// 发送轨迹广播
- ///
- ///
- ///
- private void PublicTrackTopic(TrackUpsertEvent eto, TrackContentVO? content)
- {
- // var trackStatus = await _trackStatusRepository.GetFirstAsync(m => m.Code == content.TrackStatusCode);
- if (content == null || !content.IsToMq)
- return;
-
- var data = new TrackChangeEto()
- {
- EstimatedDeliveryDate = eto.EstimatedDeliveryDate,
- TrackPlacePostcode = eto.TrackPlacePostcode,
- TrackPlaceNation = eto.TrackPlaceNation,
- TrackPlaceNationId = eto.TrackPlaceNationId,
- TrackPlaceProvince = eto.TrackPlaceProvince,
- TrackPlaceProvinceId = eto.TrackPlaceProvinceId,
- TrackPlaceCity = eto.TrackPlaceCity,
- TrackPlaceCityId = eto.TrackPlaceCityId,
- Files = eto.Files,
- Remarks = eto.Remarks,
- Source = eto.Source,
- IsVisibility = eto.IsVisibility,
- TrackTimeZone = eto.TrackTimeZone,
- TrackTime = eto.TrackTime,
- TrackPlace = eto.TrackPlace,
- TrackStatusCode = content.TrackStatusCode,
- EnStatus = eto.EnStatus,
- Content = eto.Content,
- TrackCode = eto.TrackCode,
- OperationMan = eto.OperationMan,
- OrderIdentifiers = eto.OrderIdentifiers,
- CustomId = eto.CustomId,
- SubSystemId = eto.SubSystemId,
- Extra = eto.Extra
- };
-
- if (eto.IsAdd)
- data.Option = 1;
- else
- data.Option = 3;
-
- _rabbitClientBus.Publish(GlobalConst.TrackChangeExchange, $"TrackChange.{content.SubSystemCode}", Encoding.UTF8.GetBytes(data.ToJson()));
- }
-
private async Task DownByOrderLink(TrackUpsertEvent @event, List canNextOrderIds)
{
// 根据订单关联关系异步向下刷(异步)
@@ -246,7 +199,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
DestinationTimeZone = @event.DestinationTimeZone,
EstimatedDeliveryDate = @event.EstimatedDeliveryDate
});
-
+
// 触发轨迹推送事件(异步)
var trackPushEvent = new TrackPushEvent
{
@@ -265,7 +218,8 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
TrackTimeZone = @event.TrackTimeZone,
Extra = @event.Extra
},
- ForcedPush = @event.ForcedPush
+ ForcedPush = @event.ForcedPush,
+ IsToMq = trackContent.IsToMq
};
await _capPublisher.PublishAsync(GlobalConst.TrackPushSubscribe, trackPushEvent);
diff --git a/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs b/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs
index 5dd5e7ed..3a5fed9f 100644
--- a/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs
+++ b/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs
@@ -4,17 +4,12 @@ using BSI.Stack.Rabbit.Handler;
using Newtonsoft.Json;
using RabbitMQ.Client.Events;
using SJZY.Expand.ABP.Core.Logger;
-using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.InterfaceRelay.Application.Contracts;
-using SJZY.Track.Application.Contract.Dtos.ProvideServices;
using SJZY.Track.Application.Contract.Dtos.TrackPush;
-using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Application.Helpers;
+using SJZY.Track.Application.Services.Broadcasting;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
-using SJZY.Track.Domain.Aggregates.TrackContentAggregate;
-using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
-using SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
using SJZY.Track.Domain.Enums;
using Volo.Abp.DependencyInjection;
@@ -24,24 +19,15 @@ public class TrackPushCompletedEventHandler : ITransientDependency, IRabbitHandl
{
private readonly IOrderRepository _orderRepository;
private readonly ITrackPushRecordEsRepository _trackPushRecordEsRepository;
- private readonly ITrackDetailsEsRepository _trackDetailsEsRepository;
- private readonly ITrackStatusRepository _trackStatusRepository;
- private readonly ITrackContentRepository _trackContentRepository;
- private readonly RabbitClientBus _rabbitClientBus;
+ private readonly BroadcastingService _broadcastingService;
public TrackPushCompletedEventHandler(IOrderRepository orderRepository,
ITrackPushRecordEsRepository trackPushRecordEsRepository,
- ITrackDetailsEsRepository trackDetailsEsRepository,
- ITrackStatusRepository trackStatusRepository,
- ITrackContentRepository trackContentRepository,
- RabbitClientBus rabbitClientBus)
+ BroadcastingService broadcastingService)
{
_orderRepository = orderRepository;
_trackPushRecordEsRepository = trackPushRecordEsRepository;
- _trackDetailsEsRepository = trackDetailsEsRepository;
- _trackStatusRepository = trackStatusRepository;
- _trackContentRepository = trackContentRepository;
- _rabbitClientBus = rabbitClientBus;
+ _broadcastingService = broadcastingService;
}
public ConsumeOptions Options()
@@ -71,7 +57,7 @@ public class TrackPushCompletedEventHandler : ITransientDependency, IRabbitHandl
}
else if (optionType == OptionType.修改.ToString())
{
- logStr = JsonConvert.DeserializeObject>(@event.RequestParams)!.First().Log;;
+ logStr = JsonConvert.DeserializeObject>(@event.RequestParams)!.First().Log;
}
if (logStr.IsNullOrEmpty()) throw new InvalidOperationException();
@@ -82,15 +68,9 @@ public class TrackPushCompletedEventHandler : ITransientDependency, IRabbitHandl
log.Message = @event.Message;
log.RequestId = @event.RequestId;
- //查出推送轨迹,写入推送广播
- var tracks = await _trackDetailsEsRepository
- .GetListAsync(new[] { log.OrderId }, new List
- {
- log.TrackCode
- });
-
// 推送广播
- await PublicTrackPushTopicAsync(tracks.First(), log, !log.IsSuccess, log.Message);
+ if (log.IsToMq)
+ await _broadcastingService.TrackPushCompletedPublicTopicAsync(log);
// 往es 写推送日志
await _trackPushRecordEsRepository.AddAsync(log);
@@ -139,70 +119,4 @@ public class TrackPushCompletedEventHandler : ITransientDependency, IRabbitHandl
});
}
}
-
- ///
- /// 轨迹推送广播
- ///
- private async Task PublicTrackPushTopicAsync(TrackDetailsIndex track, TrackPushRecordIndex pushRecord, bool isFailure = false, string? errorMsg = null)
- {
- var statusList = await _trackStatusRepository.GetListAsync(m => m.SubSystemId == track.SubSystemId);
- if (statusList == null)
- return;
-
- var contentList = await _trackContentRepository.GetTrackContentBySyetemIdAsync(track.SubSystemId);
- if (contentList == null)
- return;
-
- var status = statusList.FirstOrDefault(m => m.Code == track.TrackStatusCode);
- if (status == null || !status.IsToMq)
- return;
-
- var content = contentList.FirstOrDefault(m => m.TrackContentCode == track.TrackCode);
-
- var data = new TrackPushEto
- {
- Option = pushRecord.OptionType == OptionType.新增.ToString() ? OptionType.新增 : OptionType.修改,
- IsManualPush = !string.Equals(pushRecord.CreateUser, GlobalConst.SystemUser), //操作人不为系统用户,则认为是仍推送
- IsFailure = isFailure,
- FailureReason = errorMsg,
- PushTime = DateTime.Now,
- OperationMan = pushRecord.CreateUser,
- 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
- {
- OssKey = x.OssKey,
- FileName = x.FileName
- }).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,
- SubSystemId = track.SubSystemId,
- OrderNo = track.OrderNo,
- OrderIdentifiers = new OrderIdentifier[]
- {
- new OrderIdentifier
- {
- OrderId = track.OrderId,
- OrderNo = track.OrderNo,
- OrderType = track.OrderType
- }
- },
- Extra = track.Extra
- };
- _rabbitClientBus.Publish(GlobalConst.TrackPushExchange, $"TrackPush.{content.SubSystemCode}", Encoding.UTF8.GetBytes(data.ToJson()));
- }
}
diff --git a/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs b/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs
new file mode 100644
index 00000000..68b3ddea
--- /dev/null
+++ b/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs
@@ -0,0 +1,103 @@
+using System.Text;
+using BSI.Stack.Rabbit;
+using SJZY.Expand.ABP.Core.PublicMethords;
+using SJZY.Track.Application.Contract.Events;
+using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
+using SJZY.Track.Domain.Dtos.TrackContents;
+using Volo.Abp.DependencyInjection;
+
+namespace SJZY.Track.Application.Services.Broadcasting;
+
+///
+/// 广播服务
+///
+public class BroadcastingService : ITransientDependency
+{
+ private readonly RabbitClientBus _rabbitClientBus;
+
+ public BroadcastingService(RabbitClientBus rabbitClientBus)
+ {
+ _rabbitClientBus = rabbitClientBus;
+ }
+
+ ///
+ /// 轨迹变更广播
+ ///
+ ///
+ ///
+ ///
+ public Task TrackChangePublicTopicAsync(TrackUpsertEvent eto, TrackContentVO content)
+ {
+ return Task.Run(() =>
+ {
+ var data = new TrackChangeEto
+ {
+ EstimatedDeliveryDate = eto.EstimatedDeliveryDate,
+ TrackPlacePostcode = eto.TrackPlacePostcode,
+ TrackPlaceNation = eto.TrackPlaceNation,
+ TrackPlaceNationId = eto.TrackPlaceNationId,
+ TrackPlaceProvince = eto.TrackPlaceProvince,
+ TrackPlaceProvinceId = eto.TrackPlaceProvinceId,
+ TrackPlaceCity = eto.TrackPlaceCity,
+ TrackPlaceCityId = eto.TrackPlaceCityId,
+ Files = eto.Files,
+ Remarks = eto.Remarks,
+ Source = eto.Source,
+ IsVisibility = eto.IsVisibility,
+ TrackTimeZone = eto.TrackTimeZone,
+ TrackTime = eto.TrackTime,
+ TrackPlace = eto.TrackPlace,
+ TrackStatusCode = content.TrackStatusCode,
+ EnStatus = eto.EnStatus,
+ Content = eto.Content,
+ TrackCode = eto.TrackCode,
+ OperationMan = eto.OperationMan,
+ OrderIdentifiers = eto.OrderIdentifiers,
+ CustomId = eto.CustomId,
+ SubSystemId = eto.SubSystemId,
+ Extra = eto.Extra
+ };
+
+ if (eto.IsAdd)
+ data.Option = 1;
+ else
+ data.Option = 3;
+
+ _rabbitClientBus.Publish(GlobalConst.TrackChangeExchange, $"TrackChange.{content.SubSystemCode}", Encoding.UTF8.GetBytes(data.ToJson()));
+ return Task.CompletedTask;
+ });
+ }
+
+ ///
+ /// 轨迹推送完成广播
+ ///
+ ///
+ ///
+ public Task TrackPushCompletedPublicTopicAsync(TrackPushRecordIndex log)
+ {
+ return Task.Run(() =>
+ {
+ var data = new TrackPushCompletedEvent
+ {
+ RequestId = log.RequestId,
+ IsSuccess = log.IsSuccess,
+ Message = log.Message,
+ OperationMan = log.CreateUser,
+ PushTime = DateTime.Now,
+ OptionType = log.OptionType,
+ IsManualPush = !string.Equals(log.CreateUser, GlobalConst.SystemUser), //操作人不为系统用户,则认为是仍推送
+ PushContent = log.PushContent,
+ OrderNo = log.OrderNo,
+ TrackStatus = log.TrackStatus,
+ TrackContent = log.TrackContent,
+ TrackTimeZone = log.TrackTimeZone,
+ TrackTime = log.TrackTime,
+ TrackPlace = log.TrackPlace,
+ TrackCode = log.TrackCode
+ };
+
+ _rabbitClientBus.Publish(GlobalConst.TrackPushExchange, $"TrackPush.{log.SubSystemCode}", Encoding.UTF8.GetBytes(data.ToJson()));
+ return Task.CompletedTask;
+ });
+ }
+}
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs
index 3934c950..49000107 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs
@@ -1,4 +1,5 @@
using DotNetCore.CAP;
+using SJZY.Expand.ABP.Core.Common;
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
using SJZY.Track.Application.Contract.Dtos.TrackOrder;
using SJZY.Track.Application.Contract.Dtos.TrackPush;
@@ -47,6 +48,7 @@ public class TrackPushService : ApplicationService, ITrackPushService
///
///
[HttpPost("Track/Push")]
+ [CustomerResult]
public async Task PushTrackAsync(PushTrackInput input)
{
input.OrderNos = input.OrderNos.Where(x => !x.IsNullOrWhiteSpace()).Distinct().ToList(); // 单号去重、去空
@@ -101,6 +103,7 @@ public class TrackPushService : ApplicationService, ITrackPushService
///
///
[HttpGet("Track/GetTrackPushContentList")]
+ [CustomerResult]
public async Task> GetTrackPushContentListAsync(int subSystemId, int customerId)
{
var list = await _trackPushConfigRepository.GetTrackPushContentListAsync(subSystemId, customerId);
@@ -116,6 +119,7 @@ public class TrackPushService : ApplicationService, ITrackPushService
///
///
[HttpGet("Track/GetTrackPushRecords")]
+ [CustomerResult]
public async Task> GetTrackPushRecordsAsync([FromQuery] OrderNoInfo input)
{
var orderId = await _orderRepository.GetFirstAsync(x =>
diff --git a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs
index f983a5a6..c8731039 100644
--- a/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs
+++ b/src/SJZY.Track.Domain/Aggregates/TrackPushAggregate/TrackPushRecordIndex.cs
@@ -82,4 +82,14 @@ public class TrackPushRecordIndex : IdBaseIndex
/// 创建时间
public DateTime CreateTime { get; set; }
+
+ ///
+ /// 子系统代码
+ ///
+ public string SubSystemCode { get; set; }
+
+ ///
+ /// 是否广播
+ ///
+ public bool IsToMq { get; set; }
}