update: 外部手动推送,先查轨迹后进行推送
This commit is contained in:
parent
398f3b330f
commit
c4ceca39c4
@ -139,6 +139,9 @@ 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;
|
||||||
|
|
||||||
|
//使用事件参数传递要推送的轨迹
|
||||||
|
await ManualPushV2Async(@event, items, config);
|
||||||
|
goto Push;
|
||||||
var tracks = await _trackDetailsEsRepository.GetListAsync(@event.OrderIds, @event.TrackCode);
|
var tracks = await _trackDetailsEsRepository.GetListAsync(@event.OrderIds, @event.TrackCode);
|
||||||
|
|
||||||
// tips:人工推送只要能推就推了,不会校验已推和顺序问题,因为可能是更新
|
// tips:人工推送只要能推就推了,不会校验已推和顺序问题,因为可能是更新
|
||||||
@ -189,6 +192,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Push:
|
||||||
if (items.Count == 0) return;
|
if (items.Count == 0) return;
|
||||||
|
|
||||||
using (Track2InterfaceRelaySubSystemContext.Use(
|
using (Track2InterfaceRelaySubSystemContext.Use(
|
||||||
@ -207,6 +211,48 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task ManualPushV2Async(TrackPushEvent @event, List<TrackPushInput> items, TrackPushContentConfigDto? config)
|
||||||
|
{
|
||||||
|
// tips:人工推送只要能推就推了,不会校验已推和顺序问题,因为可能是更新
|
||||||
|
foreach (var order in _orders)
|
||||||
|
{
|
||||||
|
if (config is { IsAllPush: true })
|
||||||
|
{
|
||||||
|
// 强制推送只需直接查出配置
|
||||||
|
if (@event.ForcedPush)
|
||||||
|
config = _pushConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode);
|
||||||
|
// 推断 本次推送 是否可行
|
||||||
|
else
|
||||||
|
config = GetValidPushConfigAsync(_pushConfigs, order.LatestPushTrackCode, @event.TrackCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config == null) continue;
|
||||||
|
|
||||||
|
//配置的类型如何和订单类型不一致则不允许推送
|
||||||
|
if (config.OrderType != order.OrderType) continue;
|
||||||
|
|
||||||
|
var log = new TrackPushRecordIndex
|
||||||
|
{
|
||||||
|
OptionType = @event.OptionType.ToString(),
|
||||||
|
OrderId = order.Id,
|
||||||
|
OrderNo = order.OrderNo,
|
||||||
|
TrackStatus = @event.SystemPushInfo.TrackStatus,
|
||||||
|
TrackCode = @event.TrackCode,
|
||||||
|
TrackContent = @event.SystemPushInfo.TrackContent,
|
||||||
|
TrackPlace = @event.SystemPushInfo.TrackPlace,
|
||||||
|
TrackTime = @event.SystemPushInfo.TrackTime,
|
||||||
|
TrackTimeZone = @event.SystemPushInfo.TrackTimeZone,
|
||||||
|
CreateUser = @event.OperationMan,
|
||||||
|
SubSystemCode = @event.SubSystemCode,
|
||||||
|
IsToMq = @event.IsToMq,
|
||||||
|
Extra = @event.SystemPushInfo.Extra
|
||||||
|
};
|
||||||
|
var item = await BuiltPushItem(config, log, @event.SystemPushInfo.Extra);
|
||||||
|
item.Log = JsonConvert.SerializeObject(log);
|
||||||
|
items.Add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private async Task DoUpdateAsync(TrackPushEvent @event)
|
private async Task DoUpdateAsync(TrackPushEvent @event)
|
||||||
{
|
{
|
||||||
var config = _pushConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode);
|
var config = _pushConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode);
|
||||||
|
|||||||
@ -6,6 +6,7 @@ using SJZY.Track.Application.Contract.Dtos.TrackPush;
|
|||||||
using SJZY.Track.Application.Contract.Events;
|
using SJZY.Track.Application.Contract.Events;
|
||||||
using SJZY.Track.Application.Contract.Services.ProvideServices;
|
using SJZY.Track.Application.Contract.Services.ProvideServices;
|
||||||
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
||||||
|
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
|
||||||
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
|
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
|
||||||
using SJZY.Track.Domain.Dtos.TrackPush;
|
using SJZY.Track.Domain.Dtos.TrackPush;
|
||||||
using SJZY.Track.Domain.Queries;
|
using SJZY.Track.Domain.Queries;
|
||||||
@ -27,12 +28,14 @@ public class TrackPushService : ApplicationService, ITrackPushService
|
|||||||
private readonly IHttpClientProxy<IUserBaseInfoService> _requestCurrentUserService;
|
private readonly IHttpClientProxy<IUserBaseInfoService> _requestCurrentUserService;
|
||||||
private readonly ITrackPushConfigRepository _trackPushConfigRepository;
|
private readonly ITrackPushConfigRepository _trackPushConfigRepository;
|
||||||
private readonly ITrackPushRecordEsRepository _trackPushRecordEsRepository;
|
private readonly ITrackPushRecordEsRepository _trackPushRecordEsRepository;
|
||||||
|
private readonly ITrackDetailsEsRepository _trackDetailsEsRepository;
|
||||||
|
|
||||||
public TrackPushService(IOrderRepository orderRepository
|
public TrackPushService(IOrderRepository orderRepository
|
||||||
, ICapPublisher capPublisher
|
, ICapPublisher capPublisher
|
||||||
, ITrackPushRecordEsRepository trackPushRecordEsRepository
|
, ITrackPushRecordEsRepository trackPushRecordEsRepository
|
||||||
, IHttpClientProxy<IUserBaseInfoService> requestCurrentUserService
|
, IHttpClientProxy<IUserBaseInfoService> requestCurrentUserService
|
||||||
, ITrackPushConfigRepository trackPushConfigRepository, IProvideQueries provideQueries)
|
, ITrackPushConfigRepository trackPushConfigRepository, IProvideQueries provideQueries,
|
||||||
|
ITrackDetailsEsRepository trackDetailsEsRepository)
|
||||||
{
|
{
|
||||||
_orderRepository = orderRepository;
|
_orderRepository = orderRepository;
|
||||||
_capPublisher = capPublisher;
|
_capPublisher = capPublisher;
|
||||||
@ -40,6 +43,7 @@ public class TrackPushService : ApplicationService, ITrackPushService
|
|||||||
_requestCurrentUserService = requestCurrentUserService;
|
_requestCurrentUserService = requestCurrentUserService;
|
||||||
_trackPushConfigRepository = trackPushConfigRepository;
|
_trackPushConfigRepository = trackPushConfigRepository;
|
||||||
_provideQueries = provideQueries;
|
_provideQueries = provideQueries;
|
||||||
|
_trackDetailsEsRepository = trackDetailsEsRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -76,22 +80,68 @@ public class TrackPushService : ApplicationService, ITrackPushService
|
|||||||
|
|
||||||
var name = userInfo.Data.UserName;
|
var name = userInfo.Data.UserName;
|
||||||
|
|
||||||
foreach (var group in orders.GroupBy(x => x.CustomId))
|
//查出需要推送的轨迹
|
||||||
|
var tracks = await _trackDetailsEsRepository
|
||||||
|
.GetListAsync(input.SubSystemId, input.OrderType, input.OrderNos,
|
||||||
|
new List<string>
|
||||||
{
|
{
|
||||||
|
input.TrackCode
|
||||||
|
});
|
||||||
|
if (tracks.Count == 0)
|
||||||
|
{
|
||||||
|
throw new BusinessException(message: "没有需要推送的轨迹");
|
||||||
|
}
|
||||||
|
|
||||||
|
//不同单可能会有不同的轨迹内容,先推送只推送最新的一条
|
||||||
|
foreach (var order in orders)
|
||||||
|
{
|
||||||
|
//找出每个单的某个code的最新轨迹内容
|
||||||
|
var track = tracks.Where(x => x.OrderId == order.Id)
|
||||||
|
.OrderByDescending(x => x.CreateTime)
|
||||||
|
.FirstOrDefault();
|
||||||
|
if (track == null) continue;
|
||||||
|
|
||||||
var trackPushEvent = new TrackPushEvent
|
var trackPushEvent = new TrackPushEvent
|
||||||
{
|
{
|
||||||
OptionType = OptionType.新增,
|
OptionType = OptionType.新增,
|
||||||
SubSystemId = input.SubSystemId,
|
SubSystemId = input.SubSystemId,
|
||||||
SubSystemCode = subSystemCode,
|
SubSystemCode = subSystemCode,
|
||||||
CustomId = group.Key,
|
CustomId = order.CustomId,
|
||||||
OrderIds = group.Select(x => x.Id).ToArray(),
|
OrderIds = new[] { order.Id },
|
||||||
TrackCode = input.TrackCode,
|
TrackCode = input.TrackCode,
|
||||||
OperationMan = name,
|
OperationMan = name,
|
||||||
|
SystemPushInfo = new SystemPushStruct()
|
||||||
|
{
|
||||||
|
TrackStatus = track.TrackStatus,
|
||||||
|
TrackContent = track.TrackContent,
|
||||||
|
TrackPlace = track.TrackPlace,
|
||||||
|
TrackTime = track.TrackTime,
|
||||||
|
TrackTimeZone = track.TrackTimeZone,
|
||||||
|
Extra = track.Extra
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
await _capPublisher.PublishAsync(GlobalConst.TrackManualPushSubscribe, trackPushEvent);
|
await _capPublisher.PublishAsync(GlobalConst.TrackManualPushSubscribe, trackPushEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// foreach (var group in orders.GroupBy(x => x.CustomId))
|
||||||
|
// {
|
||||||
|
// var trackPushEvent = new TrackPushEvent
|
||||||
|
// {
|
||||||
|
// OptionType = OptionType.新增,
|
||||||
|
// SubSystemId = input.SubSystemId,
|
||||||
|
// SubSystemCode = subSystemCode,
|
||||||
|
// CustomId = group.Key,
|
||||||
|
// OrderIds = group.Select(x => x.Id).ToArray(),
|
||||||
|
// TrackCode = input.TrackCode,
|
||||||
|
// OperationMan = name,
|
||||||
|
// SystemPushInfo = new SystemPushStruct()
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// await _capPublisher.PublishAsync(GlobalConst.TrackManualPushSubscribe, trackPushEvent);
|
||||||
|
// }
|
||||||
|
|
||||||
return new UnifyResultDto(true, $"即将推送轨迹代码{input.TrackCode}给{orders.Length}个订单");
|
return new UnifyResultDto(true, $"即将推送轨迹代码{input.TrackCode}给{orders.Length}个订单");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,7 @@ public interface ITrackDetailsEsRepository : IElasticsearchClientService<TrackDe
|
|||||||
|
|
||||||
Task<List<TrackDetailsIndex>> GetLatestListAsync(int[] eventOrderIds, List<string> trackCodes);
|
Task<List<TrackDetailsIndex>> GetLatestListAsync(int[] eventOrderIds, List<string> trackCodes);
|
||||||
|
|
||||||
Task<List<TrackDetailsIndex>> GetListAsync(int subSystemId, int orderType, List<string> orderNos);
|
Task<List<TrackDetailsIndex>> GetListAsync(int subSystemId, int orderType, List<string> orderNos, List<string>? trackCodes = null);
|
||||||
|
|
||||||
Task<bool> AnyAsync(int orderId, string originTrackDataHash);
|
Task<bool> AnyAsync(int orderId, string originTrackDataHash);
|
||||||
|
|
||||||
|
|||||||
@ -372,16 +372,12 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract<TrackDetail
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<TrackDetailsIndex>> GetListAsync(int subSystemId, int orderType, List<string> orderNos)
|
public async Task<List<TrackDetailsIndex>> GetListAsync(int subSystemId, int orderType, List<string> orderNos, List<string>? trackCodes = null)
|
||||||
{
|
{
|
||||||
if (orderNos.Count < 1) return new List<TrackDetailsIndex>();
|
if (orderNos.Count < 1) return new List<TrackDetailsIndex>();
|
||||||
|
|
||||||
var r = await Context.SearchAsync<TrackDetailsIndex>(x => x
|
var musts = new List<Func<QueryContainerDescriptor<TrackDetailsIndex>, QueryContainer>>
|
||||||
.Index(GlobalConst.TrackDetailsIndex)
|
{
|
||||||
.Source()
|
|
||||||
.Query(q =>
|
|
||||||
q.Bool(b => b
|
|
||||||
.Must(
|
|
||||||
mu => mu.Term(f => f.SubSystemId, subSystemId),
|
mu => mu.Term(f => f.SubSystemId, subSystemId),
|
||||||
mu => mu
|
mu => mu
|
||||||
.Terms(t => t
|
.Terms(t => t
|
||||||
@ -390,7 +386,24 @@ public class TrackDetailsEsRepository : ElasticSearchContextAbstract<TrackDetail
|
|||||||
),
|
),
|
||||||
mu => mu
|
mu => mu
|
||||||
.Term(f => f.OrderType, orderType)
|
.Term(f => f.OrderType, orderType)
|
||||||
)
|
};
|
||||||
|
|
||||||
|
if (trackCodes != null && trackCodes.Count > 0)
|
||||||
|
{
|
||||||
|
musts.Add(mu => mu
|
||||||
|
.Terms(t => t
|
||||||
|
.Field(f => f.TrackCode.Suffix("keyword"))
|
||||||
|
.Terms(trackCodes)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var r = await Context.SearchAsync<TrackDetailsIndex>(x => x
|
||||||
|
.Index(GlobalConst.TrackDetailsIndex)
|
||||||
|
.Source()
|
||||||
|
.Query(q =>
|
||||||
|
q.Bool(b => b
|
||||||
|
.Must(musts)
|
||||||
// tips:对外不暴露服务商轨迹
|
// tips:对外不暴露服务商轨迹
|
||||||
.MustNot(mn => mn
|
.MustNot(mn => mn
|
||||||
.Term(t => t.TrackCode.Suffix("keyword"), GlobalConst.EmptyString)
|
.Term(t => t.TrackCode.Suffix("keyword"), GlobalConst.EmptyString)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user