138 lines
5.0 KiB
C#
138 lines
5.0 KiB
C#
using System.Text;
|
|
using Fake.DependencyInjection;
|
|
using InterfaceForward.Domain.Shared.Helpers;
|
|
using TrackCenter.Application.Dtos.TrackPush;
|
|
using TrackCenter.Application.Events;
|
|
using TrackCenter.Application.Rabbit;
|
|
|
|
namespace TrackCenter.Application.Services.Broadcasting;
|
|
|
|
/// <summary>
|
|
/// 广播服务
|
|
/// </summary>
|
|
public class BroadcastingService : ITransientDependency
|
|
{
|
|
private readonly RabbitClient _rabbitClient;
|
|
|
|
public BroadcastingService(RabbitClient rabbitClient)
|
|
{
|
|
_rabbitClient = rabbitClient;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 轨迹变更广播
|
|
/// </summary>
|
|
/// <param name="eto"></param>
|
|
/// <param name="contentIsExternal">轨迹内容中的是否对外</param>
|
|
/// <param name="subSystemCode">子系统代码</param>
|
|
/// <param name="trackStatusCode">轨迹状态代码</param>
|
|
/// <returns></returns>
|
|
public void TrackChangePublicTopic(TrackUpsertEvent eto, bool contentIsExternal, string subSystemCode, string trackStatusCode)
|
|
{
|
|
var data = new TrackChangeEto
|
|
{
|
|
EstimatedDeliveryDate = eto.EstimatedDeliveryDate,
|
|
DestinationTimeZone = eto.DestinationTimeZone,
|
|
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,
|
|
IsExternal = eto.IsExternal ?? contentIsExternal,
|
|
TrackTimeZone = eto.TrackTimeZone,
|
|
TrackTime = eto.NewTrackTime ?? eto.TrackTime,
|
|
TrackPlace = eto.TrackPlace,
|
|
TrackStatusCode = trackStatusCode,
|
|
OrderNo = eto.OrderIdentifiers.First().OrderNo,
|
|
EnStatus = eto.EnStatus,
|
|
Content = eto.Content,
|
|
TrackCode = eto.TrackCode,
|
|
OperationMan = eto.OperationMan,
|
|
OrderIdentifiers = eto.OrderIdentifiers,
|
|
CustomId = eto.CustomId,
|
|
SubSystemId = eto.SubSystemId,
|
|
Extra = eto.NewExtra ?? eto.Extra
|
|
};
|
|
|
|
if (eto.IsAdd)
|
|
data.Option = 1;
|
|
else
|
|
data.Option = 3;
|
|
|
|
_rabbitClient.Publish(GlobalConst.TrackChangeExchange, $"TrackChange.{subSystemCode}",
|
|
Encoding.UTF8.GetBytes(data.ToJson()), prop => { prop.Persistent = true; });
|
|
}
|
|
|
|
public void TrackChangePublicTopic(TrackChangeEto eto, string subSystemCode)
|
|
{
|
|
eto.Option = 2;
|
|
_rabbitClient.Publish(GlobalConst.TrackChangeExchange, $"TrackChange.{subSystemCode}",
|
|
Encoding.UTF8.GetBytes(eto.ToJson()), prop => { prop.Persistent = true; });
|
|
}
|
|
|
|
/// <summary>
|
|
/// 轨迹推送完成广播(批量)
|
|
/// </summary>
|
|
/// <param name="list"></param>
|
|
/// <returns></returns>
|
|
public void TrackPushCompletedPublicTopic(List<TrackPushRecordDto> list)
|
|
{
|
|
var datas = list
|
|
.Select(TrackPushRecordDtoToEvent)
|
|
.Select(x => Encoding.UTF8.GetBytes(x.ToJson()));
|
|
var log = list.First();
|
|
_rabbitClient.Publish(GlobalConst.TrackPushExchange, $"TrackPush.{log.SubSystemCode}", datas, prop => { prop.Persistent = true; });
|
|
}
|
|
|
|
/// <summary>
|
|
/// 轨迹推送完成广播
|
|
/// </summary>
|
|
/// <param name="log"></param>
|
|
/// <returns></returns>
|
|
public void TrackPushCompletedPublicTopic(TrackPushRecordDto log)
|
|
{
|
|
var data = TrackPushRecordDtoToEvent(log);
|
|
_rabbitClient.PublishByConfirmSelect(GlobalConst.TrackPushExchange, $"TrackPush.{log.SubSystemCode}",
|
|
Encoding.UTF8.GetBytes(data.ToJson()), prop => { prop.Persistent = true; });
|
|
}
|
|
|
|
/// <summary>
|
|
/// 轨迹推送失败广播
|
|
/// </summary>
|
|
/// <param name="log"></param>
|
|
public void TrackPushFailedPubilcTopic(TrackPushRecordDto log)
|
|
{
|
|
//暂时使用推送完成模型,后续可能会出现有区分度的模型
|
|
TrackPushCompletedPublicTopic(log);
|
|
}
|
|
|
|
private static TrackPushCompletedEvent TrackPushRecordDtoToEvent(TrackPushRecordDto log)
|
|
{
|
|
return new TrackPushCompletedEvent
|
|
{
|
|
RequestId = log.RequestId,
|
|
IsSuccess = log.IsSuccess,
|
|
Message = log.Message,
|
|
OperationMan = log.OperationMan,
|
|
PushTime = log.PushTime,
|
|
OptionType = log.OptionType,
|
|
IsManualPush = log.IsManualPush, //操作人不为系统用户,则认为是人推送
|
|
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,
|
|
InterfaceRelayData = log.InterfaceRelayData
|
|
};
|
|
}
|
|
}
|