update: 调整接口通回传轨迹入库逻辑,增加可用外部单号匹配主单
This commit is contained in:
parent
f046f25182
commit
283375a3ab
@ -41,10 +41,10 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler
|
||||
|
||||
public ConsumeOptions Options()
|
||||
{
|
||||
return new ConsumeOptions()
|
||||
{
|
||||
Queue = GlobalConst.TrackRefreshSubscribe,
|
||||
};
|
||||
return new ConsumeOptions()
|
||||
{
|
||||
Queue = GlobalConst.TrackRefreshSubscribe,
|
||||
};
|
||||
}
|
||||
|
||||
public async Task Handle(IServiceProvider sp, BasicDeliverEventArgs args, ConsumeOptions options)
|
||||
@ -110,18 +110,18 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler
|
||||
var trackToken = orderToken.SelectToken(paramConfig.TrackDetailsPath);
|
||||
if (trackToken is null) return;
|
||||
|
||||
var order = await _orderRepository.GetFirstAsync(x =>
|
||||
x.SubSystemId == attach.SubSystemId && x.OrderType == attach.OrderType && x.OrderNo == orderNo,
|
||||
x => new
|
||||
{
|
||||
x.Id,
|
||||
x.CustomId
|
||||
});
|
||||
if (order == default) return;
|
||||
//回传单号可能是主单也可能是外部单号
|
||||
//通过平台code和(外部单号/主单号)查询主单
|
||||
var order = await _orderRepository.GetTrackOrderByProviderAndOrderNo(attach.ServiceProviderCode, orderNo!);
|
||||
if (order == default)
|
||||
{
|
||||
_logger.LogError($"请求id: {attach.ToJson()},轨迹消费失败,找不到主单,平台code:{attach.ServiceProviderCode},单号:{orderNo}");
|
||||
return;
|
||||
}
|
||||
|
||||
var context = new TrackRefreshContext
|
||||
{
|
||||
OrderId = order.Id,
|
||||
OrderId = order.MainOrderId,
|
||||
OrderType = attach.OrderType,
|
||||
OrderNo = orderNo!,
|
||||
ServiceProviderCode = attach.ServiceProviderCode,
|
||||
|
||||
@ -12,6 +12,14 @@ public interface IOrderRepository : IBasicRepository<OrderEntity>
|
||||
/// <returns></returns>
|
||||
Task<UnifyPageResultDto<TrackOrderVO>> GetTrackOrderPagedList(GetPageTrackOrderInputVO input);
|
||||
|
||||
/// <summary>
|
||||
/// 通过三方平台和三方单号查询订单
|
||||
/// </summary>
|
||||
/// <param name="serviceProvidrCode">三方平台</param>
|
||||
/// <param name="orderNo">三方平台单号</param>
|
||||
/// <returns>(主单号id,客户id)</returns>
|
||||
Task<(int MainOrderId, int CustomId)> GetTrackOrderByProviderAndOrderNo(string serviceProvidrCode, string orderNo);
|
||||
|
||||
/// <summary>
|
||||
/// 创建订单
|
||||
/// </summary>
|
||||
|
||||
@ -58,6 +58,34 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
|
||||
return pageList;
|
||||
}
|
||||
|
||||
public async Task<(int MainOrderId, int CustomId)> GetTrackOrderByProviderAndOrderNo(string serviceProvidrCode, string orderNo)
|
||||
{
|
||||
var orderList = await Context.Queryable<OrderEntity>()
|
||||
.LeftJoin<OrderPlatformNumberEntity>((a, b) => a.Id == b.OrderId && b.IsDeleted)
|
||||
.Where((a, b) => a.OrderNo == orderNo
|
||||
|| (b.Platform == serviceProvidrCode && b.OrderNumber == orderNo))
|
||||
.Select((a, b) => new
|
||||
{
|
||||
a.Id,
|
||||
a.CustomId,
|
||||
b.Platform,
|
||||
b.OrderNumber
|
||||
})
|
||||
.ToListAsync();
|
||||
|
||||
if (orderList.Count == 0)
|
||||
{
|
||||
return default;
|
||||
}
|
||||
|
||||
var order = orderList.First();
|
||||
//当出现了多条记录匹配,优先使用外部单匹配提升精确度
|
||||
var matchOrder = orderList.FirstOrDefault(x => x.Platform == serviceProvidrCode && x.OrderNumber == orderNo);
|
||||
return matchOrder != null
|
||||
? (matchOrder.Id, matchOrder.CustomId)
|
||||
: (order.Id, order.CustomId);
|
||||
}
|
||||
|
||||
public async Task<int> CreateOrderAsync(OrderEntity order)
|
||||
{
|
||||
using var tran = TransactionHelper.GetReadCommitted();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user