diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushRecordDto.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushRecordDto.cs
new file mode 100644
index 00000000..7bb84c1c
--- /dev/null
+++ b/src/SJZY.Track.Application.Contract/Dtos/TrackPush/TrackPushRecordDto.cs
@@ -0,0 +1,89 @@
+namespace SJZY.Track.Application.Contract.Dtos.TrackPush;
+
+public class TrackPushRecordDto
+{
+ ///
+ /// 子系统代码
+ ///
+ public string SubSystemCode { get; set; }
+
+ ///
+ /// 是否为手动推送
+ ///
+ 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!;
+
+ ///
+ /// 轨迹的额外新
+ ///
+ public string? Extra { get; set; }
+}
diff --git a/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs b/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs
new file mode 100644
index 00000000..1b2fdbd9
--- /dev/null
+++ b/src/SJZY.Track.Application.Contract/Services/IBroadcastingService.cs
@@ -0,0 +1,22 @@
+using SJZY.Track.Application.Contract.Dtos.TrackPush;
+using SJZY.Track.Application.Contract.Events;
+using Volo.Abp.DependencyInjection;
+
+namespace SJZY.Track.Application.Contract.Services;
+
+public interface IBroadcastingService :ITransientDependency
+{
+ ///
+ /// 轨迹变更广播
+ ///
+ ///
+ ///
+ ///
+ void TrackChangePublicTopicAsync(TrackUpsertEvent eto, string subSystemCode, string trackStatusCode);
+
+ ///
+ /// 轨迹推送完成广播
+ ///
+ ///
+ void TrackPushCompletedPublicTopicAsync(TrackPushRecordDto log);
+}
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index f1f3747d..85266ae1 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -2,7 +2,7 @@ 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.Application.Contract.Services;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Dtos.TrackContents;
@@ -19,7 +19,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
private readonly IOrderRepository _orderRepository;
private readonly IProvideQueries _provideQueries;
private readonly ITrackDetailsEsRepository _trackDetailsEsRepository;
- private readonly BroadcastingService _broadcastingService;
+ private readonly IBroadcastingService _broadcastingService;
private readonly IOrderOperationRecordEsRepository _orderOperationRecordEsRepository;
public TrackUpsertEventHandler(
@@ -28,7 +28,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
IProvideQueries provideQueries,
ITrackDetailsEsRepository trackDetailsEsRepository,
IOrderOperationRecordEsRepository orderOperationRecordEsRepository,
- BroadcastingService broadcastingService)
+ IBroadcastingService broadcastingService)
{
_orderRepository = orderRepository;
_capPublisher = capPublisher;
@@ -50,8 +50,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
// 处理广播事件
if (content != null && (content.IsToMq || @event.IsToMq))
- // todo: review BroadcastingService抽一层接口,面向抽象编程
- _broadcastingService.TrackChangePublicTopicAsync(@event, content);
+ _broadcastingService.TrackChangePublicTopicAsync(@event, content.SubSystemCode, content.TrackStatusCode);
if (canNextOrderIds.Count == 0) return;
// 根据订单关联关系异步向下刷(异步)
diff --git a/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs b/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs
index 471ea081..8144eb1c 100644
--- a/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs
+++ b/src/SJZY.Track.Application/Rabbit/TrackPushCompletedEventHandler.cs
@@ -6,8 +6,8 @@ using RabbitMQ.Client.Events;
using SJZY.Expand.ABP.Core.Logger;
using SJZY.InterfaceRelay.Application.Contracts;
using SJZY.Track.Application.Contract.Dtos.TrackPush;
+using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Application.Helpers;
-using SJZY.Track.Application.Services.Broadcasting;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
using SJZY.Track.Domain.Enums;
@@ -19,11 +19,11 @@ public class TrackPushCompletedEventHandler : ITransientDependency, IRabbitHandl
{
private readonly IOrderRepository _orderRepository;
private readonly ITrackPushRecordEsRepository _trackPushRecordEsRepository;
- private readonly BroadcastingService _broadcastingService;
+ private readonly IBroadcastingService _broadcastingService;
public TrackPushCompletedEventHandler(IOrderRepository orderRepository,
ITrackPushRecordEsRepository trackPushRecordEsRepository,
- BroadcastingService broadcastingService)
+ IBroadcastingService broadcastingService)
{
_orderRepository = orderRepository;
_trackPushRecordEsRepository = trackPushRecordEsRepository;
@@ -70,7 +70,7 @@ public class TrackPushCompletedEventHandler : ITransientDependency, IRabbitHandl
// 推送广播
if (log.IsToMq)
- _broadcastingService.TrackPushCompletedPublicTopicAsync(log);
+ _broadcastingService.TrackPushCompletedPublicTopicAsync(BuildDto(log));
// 往es 写推送日志
await _trackPushRecordEsRepository.AddAsync(log);
@@ -119,4 +119,28 @@ public class TrackPushCompletedEventHandler : ITransientDependency, IRabbitHandl
});
}
}
+
+ private TrackPushRecordDto BuildDto(TrackPushRecordIndex log)
+ {
+ return new TrackPushRecordDto
+ {
+ SubSystemCode = log.SubSystemCode,
+ 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,
+ Extra = log.Extra
+ };
+ }
}
diff --git a/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs b/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs
index 7e02475e..1fc0f24a 100644
--- a/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs
+++ b/src/SJZY.Track.Application/Services/Broadcasting/BroadcastingService.cs
@@ -1,17 +1,16 @@
using System.Text;
using BSI.Stack.Rabbit;
using SJZY.Expand.ABP.Core.PublicMethords;
+using SJZY.Track.Application.Contract.Dtos.TrackPush;
using SJZY.Track.Application.Contract.Events;
-using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
-using SJZY.Track.Domain.Dtos.TrackContents;
-using Volo.Abp.DependencyInjection;
+using SJZY.Track.Application.Contract.Services;
namespace SJZY.Track.Application.Services.Broadcasting;
///
/// 广播服务
///
-public class BroadcastingService : ITransientDependency
+public class BroadcastingService : IBroadcastingService
{
private readonly RabbitClientBus _rabbitClientBus;
@@ -24,9 +23,10 @@ public class BroadcastingService : ITransientDependency
/// 轨迹变更广播
///
///
- ///
+ /// 子系统代码
+ /// 轨迹状态代码
///
- public void TrackChangePublicTopicAsync(TrackUpsertEvent eto, TrackContentVO content)
+ public void TrackChangePublicTopicAsync(TrackUpsertEvent eto, string subSystemCode, string trackStatusCode)
{
var data = new TrackChangeEto
{
@@ -45,7 +45,7 @@ public class BroadcastingService : ITransientDependency
TrackTimeZone = eto.TrackTimeZone,
TrackTime = eto.TrackTime,
TrackPlace = eto.TrackPlace,
- TrackStatusCode = content.TrackStatusCode,
+ TrackStatusCode = trackStatusCode,
EnStatus = eto.EnStatus,
Content = eto.Content,
TrackCode = eto.TrackCode,
@@ -61,7 +61,7 @@ public class BroadcastingService : ITransientDependency
else
data.Option = 3;
- _rabbitClientBus.Publish(GlobalConst.TrackChangeExchange, $"TrackChange.{content.SubSystemCode}",
+ _rabbitClientBus.Publish(GlobalConst.TrackChangeExchange, $"TrackChange.{subSystemCode}",
Encoding.UTF8.GetBytes(data.ToJson()));
}
@@ -70,17 +70,17 @@ public class BroadcastingService : ITransientDependency
///
///
///
- public void TrackPushCompletedPublicTopicAsync(TrackPushRecordIndex log)
+ public void TrackPushCompletedPublicTopicAsync(TrackPushRecordDto log)
{
var data = new TrackPushCompletedEvent
{
RequestId = log.RequestId,
IsSuccess = log.IsSuccess,
Message = log.Message,
- OperationMan = log.CreateUser,
- PushTime = DateTime.Now,
+ OperationMan = log.OperationMan,
+ PushTime = log.PushTime,
OptionType = log.OptionType,
- IsManualPush = !string.Equals(log.CreateUser, GlobalConst.SystemUser), //操作人不为系统用户,则认为是仍推送
+ IsManualPush = log.IsManualPush, //操作人不为系统用户,则认为是仍推送
PushContent = log.PushContent,
OrderNo = log.OrderNo,
TrackStatus = log.TrackStatus,
diff --git a/src/SJZY.Track.Domain/Dtos/TrackContents/TrackContentVO.cs b/src/SJZY.Track.Domain/Dtos/TrackContents/TrackContentVO.cs
index 07982ec1..374787e5 100644
--- a/src/SJZY.Track.Domain/Dtos/TrackContents/TrackContentVO.cs
+++ b/src/SJZY.Track.Domain/Dtos/TrackContents/TrackContentVO.cs
@@ -2,6 +2,11 @@ namespace SJZY.Track.Domain.Dtos.TrackContents;
public class TrackContentVO
{
+ ///
+ /// 子系统Id
+ ///
+ public int SubSystemId { get; set; }
+
///
/// 子系统代码
///
diff --git a/src/SJZY.Track.Domain/Queries/IProvideQueries.cs b/src/SJZY.Track.Domain/Queries/IProvideQueries.cs
index 351224c5..d955ffda 100644
--- a/src/SJZY.Track.Domain/Queries/IProvideQueries.cs
+++ b/src/SJZY.Track.Domain/Queries/IProvideQueries.cs
@@ -52,6 +52,14 @@ public interface IProvideQueries
///
Task GetTrackContentAsync(int subSystemId, string trackCode);
+ ///
+ /// 获取轨迹内容
+ ///
+ /// 子系统ids
+ /// 轨迹代码集合
+ ///
+ Task> GetTrackContentsAsync(int[] subSystemIds, string[] trackCodes);
+
///
/// 获取所有拉取配置
///
diff --git a/src/SJZY.Track.Repository/Queries/ProvideQueries.cs b/src/SJZY.Track.Repository/Queries/ProvideQueries.cs
index b59a308d..d60f5cf0 100644
--- a/src/SJZY.Track.Repository/Queries/ProvideQueries.cs
+++ b/src/SJZY.Track.Repository/Queries/ProvideQueries.cs
@@ -117,6 +117,30 @@ public class ProvideQueries : ISugarRepository, IProvideQueries, ITransientDepen
.FirstAsync();
}
+ public async Task> GetTrackContentsAsync(int[] subSystemIds, string[] trackCodes)
+ {
+ return await Context.Queryable()
+ .LeftJoin((x, y) => x.TrackStatusId == y.Id)
+ .LeftJoin((x, y, z) => x.SubSystemId == z.Id)
+ .Where(x => subSystemIds.Contains(x.SubSystemId) && trackCodes.Contains(x.Code))
+ .Select((x, y, z) => new TrackContentVO
+ {
+ SubSystemId = x.SubSystemId,
+ SubSystemCode = z.Key,
+ TrackStatusId = x.TrackStatusId,
+ TrackStatus = y.Status,
+ TrackStatusCode = y.Code,
+ TrackContent = x.Content,
+ TrackEnContent = x.EnContent,
+ IsCompleted = y.IsCompleted,
+ IsRepeatable = x.IsRepeatable,
+ IsAllowManuallyUpdate = x.IsAllowManuallyUpdate,
+ IsAllowManuallyCreate = x.IsAllowManuallyCreate,
+ IsToMq = y.IsToMq,
+ })
+ .ToListAsync();
+ }
+
public async Task> GetAllPullConfigsAsync()
{
return await Context.Queryable()