Merge branch 'S06' into test

This commit is contained in:
hardstylewyl 2024-12-27 18:06:32 +08:00
commit 7b99532f1f
4 changed files with 126 additions and 17 deletions

View File

@ -139,6 +139,9 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
config = _pushConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode);
if (config == null) return;
//使用事件参数传递要推送的轨迹
await ManualPushV2Async(@event, items, config);
goto Push;
var tracks = await _trackDetailsEsRepository.GetListAsync(@event.OrderIds, @event.TrackCode);
// tips:人工推送只要能推就推了,不会校验已推和顺序问题,因为可能是更新
@ -189,6 +192,7 @@ public class TrackPushEventHandler : ITransientDependency, ICapSubscribe
}
}
Push:
if (items.Count == 0) return;
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)
{
var config = _pushConfigs.FirstOrDefault(x => x.TrackCode == @event.TrackCode);

View File

@ -6,6 +6,7 @@ using SJZY.Track.Application.Contract.Dtos.TrackPush;
using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Application.Contract.Services.ProvideServices;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
using SJZY.Track.Domain.Dtos.TrackPush;
using SJZY.Track.Domain.Queries;
@ -27,12 +28,14 @@ public class TrackPushService : ApplicationService, ITrackPushService
private readonly IHttpClientProxy<IUserBaseInfoService> _requestCurrentUserService;
private readonly ITrackPushConfigRepository _trackPushConfigRepository;
private readonly ITrackPushRecordEsRepository _trackPushRecordEsRepository;
private readonly ITrackDetailsEsRepository _trackDetailsEsRepository;
public TrackPushService(IOrderRepository orderRepository
, ICapPublisher capPublisher
, ITrackPushRecordEsRepository trackPushRecordEsRepository
, IHttpClientProxy<IUserBaseInfoService> requestCurrentUserService
, ITrackPushConfigRepository trackPushConfigRepository, IProvideQueries provideQueries)
, ITrackPushConfigRepository trackPushConfigRepository, IProvideQueries provideQueries,
ITrackDetailsEsRepository trackDetailsEsRepository)
{
_orderRepository = orderRepository;
_capPublisher = capPublisher;
@ -40,6 +43,7 @@ public class TrackPushService : ApplicationService, ITrackPushService
_requestCurrentUserService = requestCurrentUserService;
_trackPushConfigRepository = trackPushConfigRepository;
_provideQueries = provideQueries;
_trackDetailsEsRepository = trackDetailsEsRepository;
}
/// <summary>
@ -76,23 +80,69 @@ public class TrackPushService : ApplicationService, ITrackPushService
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
{
OptionType = OptionType.新增,
SubSystemId = input.SubSystemId,
SubSystemCode = subSystemCode,
CustomId = group.Key,
OrderIds = group.Select(x => x.Id).ToArray(),
CustomId = order.CustomId,
OrderIds = new[] { order.Id },
TrackCode = input.TrackCode,
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);
}
return new UnifyResultDto(true,$"即将推送轨迹代码{input.TrackCode}给{orders.Length}个订单");
// 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}个订单");
}

View File

@ -10,7 +10,7 @@ public interface ITrackDetailsEsRepository : IElasticsearchClientService<TrackDe
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);

View File

@ -372,25 +372,38 @@ 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>();
var musts = new List<Func<QueryContainerDescriptor<TrackDetailsIndex>, QueryContainer>>
{
mu => mu.Term(f => f.SubSystemId, subSystemId),
mu => mu
.Terms(t => t
.Field(f => f.OrderNo.Suffix("keyword"))
.Terms(orderNos)
),
mu => mu
.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(
mu => mu.Term(f => f.SubSystemId, subSystemId),
mu => mu
.Terms(t => t
.Field(f => f.OrderNo.Suffix("keyword"))
.Terms(orderNos)
),
mu => mu
.Term(f => f.OrderType, orderType)
)
.Must(musts)
// tips:对外不暴露服务商轨迹
.MustNot(mn => mn
.Term(t => t.TrackCode.Suffix("keyword"), GlobalConst.EmptyString)