临时提交
This commit is contained in:
parent
0e8af92756
commit
e17eb425a4
@ -0,0 +1,8 @@
|
|||||||
|
namespace SJZY.Track.Application.Contract.Dtos.TrackPull;
|
||||||
|
|
||||||
|
public class TrackPullConfigDto
|
||||||
|
{
|
||||||
|
public TrackPullParamConfigDto ParamConfig { get; set; }
|
||||||
|
|
||||||
|
public List<TrackPullContentConfigDto> ContentConfigs { get; set; }
|
||||||
|
}
|
||||||
@ -1,11 +1,16 @@
|
|||||||
namespace SJZY.Track.Domain.Dtos.Order;
|
namespace SJZY.Track.Application.Contract.Dtos.TrackPull;
|
||||||
|
|
||||||
public class TrackPullContentConfigVO
|
public class TrackPullContentConfigDto
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 轨迹内容id
|
/// 轨迹内容代码
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int TrackContentId { get; set; }
|
public string TrackContentCode { get; set; } = null!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 服务商轨迹状态参数值
|
||||||
|
/// </summary>
|
||||||
|
public string? TrackStatusValue { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 服务商轨迹代码参数值
|
/// 服务商轨迹代码参数值
|
||||||
@ -32,13 +37,8 @@ public class TrackPullContentConfigVO
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public int? TrackPlaceValue { get; set; }
|
public int? TrackPlaceValue { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 服务商轨迹状态参数值
|
|
||||||
/// </summary>
|
|
||||||
public string? TrackStatusValue { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 轨迹时区GMT
|
/// 轨迹时区GMT
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public double? TrackTimeZone { get; set; }
|
public float? TrackTimeZone { get; set; }
|
||||||
}
|
}
|
||||||
@ -0,0 +1,49 @@
|
|||||||
|
namespace SJZY.Track.Application.Contract.Dtos.TrackPull;
|
||||||
|
|
||||||
|
public class TrackPullParamConfigDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 单号参数名
|
||||||
|
/// </summary>
|
||||||
|
public string OrderNoName { get; set; } = null!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹时区参数名
|
||||||
|
/// </summary>
|
||||||
|
public string TackTimeZoneName { get; set; } = null!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹代码参数名
|
||||||
|
/// </summary>
|
||||||
|
public string TrackContentCodeName { get; set; } = null!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹内容参数名
|
||||||
|
/// </summary>
|
||||||
|
public string TrackContentName { get; set; } = null!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹发生地参数名
|
||||||
|
/// </summary>
|
||||||
|
public string TrackPlaceName { get; set; } = null!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹状态参数名
|
||||||
|
/// </summary>
|
||||||
|
public string TrackStatusName { get; set; } = null!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹发生时间参数名
|
||||||
|
/// </summary>
|
||||||
|
public string TrackTimeName { get; set; } = null!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 订单数组路径
|
||||||
|
/// </summary>
|
||||||
|
public string OrderPath { get; set; } = null!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹明细数组路径
|
||||||
|
/// </summary>
|
||||||
|
public string TrackDetailsPath { get; set; } = null!;
|
||||||
|
}
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
using SJZY.Track.Application.Contract.Dtos.TrackPull;
|
||||||
|
|
||||||
|
namespace SJZY.Track.Application.Contract.Services;
|
||||||
|
|
||||||
|
public interface ITrackPullCacheService
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 获取服务商拉取配置
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="serviceProviderId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<TrackPullConfigDto> GetPullConfigAsync(int serviceProviderId);
|
||||||
|
}
|
||||||
@ -1,35 +0,0 @@
|
|||||||
using DotNetCore.CAP;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using SJZY.InterfaceRelay.Application.Contracts;
|
|
||||||
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
|
|
||||||
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
|
||||||
using SJZY.Track.Domain.Queries;
|
|
||||||
using Volo.Abp.DependencyInjection;
|
|
||||||
|
|
||||||
namespace SJZY.Track.Application.EventHandlers;
|
|
||||||
|
|
||||||
public class InterfaceRelayTrackRefreshEventHandler : ITransientDependency, ICapSubscribe
|
|
||||||
{
|
|
||||||
private readonly IOrderRepository _orderRepository;
|
|
||||||
private readonly IProvideQueries _provideQueries;
|
|
||||||
|
|
||||||
public InterfaceRelayTrackRefreshEventHandler(IOrderRepository orderRepository, IProvideQueries provideQueries)
|
|
||||||
{
|
|
||||||
_orderRepository = orderRepository;
|
|
||||||
_provideQueries = provideQueries;
|
|
||||||
}
|
|
||||||
|
|
||||||
[CapSubscribe(GlobalConst.InterfaceRelayTrackRefreshSubscribe)]
|
|
||||||
public async Task ConsumerAsync(InterfaceRelayTrackRefreshEvent @event)
|
|
||||||
{
|
|
||||||
if (@event.RequestParams is List<OrderNoInfo> requestParams)
|
|
||||||
{
|
|
||||||
var orderNos = requestParams.Select(x => x.OrderNo).ToList();
|
|
||||||
|
|
||||||
// tips:attach返回的是服务商id,必有
|
|
||||||
var pullContentConfigs = await _provideQueries.GetPullContentConfigsAsync(int.Parse(@event.Attach));
|
|
||||||
|
|
||||||
// 轨迹清洗入库
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -0,0 +1,95 @@
|
|||||||
|
using DotNetCore.CAP;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using SJZY.InterfaceRelay.Application.Contracts;
|
||||||
|
using SJZY.Track.Application.Contract.Dtos.TrackPull;
|
||||||
|
using SJZY.Track.Application.Contract.Events;
|
||||||
|
using SJZY.Track.Application.Contract.Services;
|
||||||
|
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
||||||
|
using Volo.Abp.DependencyInjection;
|
||||||
|
|
||||||
|
namespace SJZY.Track.Application.EventHandlers;
|
||||||
|
|
||||||
|
public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe
|
||||||
|
{
|
||||||
|
private readonly IOrderRepository _orderRepository;
|
||||||
|
private readonly ICapPublisher _capPublisher;
|
||||||
|
private readonly ITrackPullCacheService _trackPullCacheService;
|
||||||
|
|
||||||
|
public TrackRefreshEventHandler(IOrderRepository orderRepository,
|
||||||
|
ICapPublisher capPublisher, ITrackPullCacheService trackPullCacheService)
|
||||||
|
{
|
||||||
|
_orderRepository = orderRepository;
|
||||||
|
_capPublisher = capPublisher;
|
||||||
|
_trackPullCacheService = trackPullCacheService;
|
||||||
|
}
|
||||||
|
|
||||||
|
[CapSubscribe(GlobalConst.TrackRefreshSubscribe)]
|
||||||
|
public async Task ConsumerAsync(InterfaceRelayTrackRefreshEvent @event)
|
||||||
|
{
|
||||||
|
// tips:attach返回的是服务商id,必有
|
||||||
|
var attach = JObject.Parse(@event.Attach);
|
||||||
|
var serviceProviderId = attach["ServiceProviderId"]!.Value<int>();
|
||||||
|
var orderType = attach["OrderType"]!.Value<int>();
|
||||||
|
var config = await _trackPullCacheService.GetPullConfigAsync(serviceProviderId);
|
||||||
|
|
||||||
|
var data = JObject.FromObject(@event.Data)["Data"]!;
|
||||||
|
var orderToken = data[config.ParamConfig.OrderPath];
|
||||||
|
if (orderToken is JArray orderTokens)
|
||||||
|
{
|
||||||
|
foreach (var token in orderTokens)
|
||||||
|
{
|
||||||
|
await HandleOrderAsync(token, config, orderType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (orderToken is JObject)
|
||||||
|
{
|
||||||
|
await HandleOrderAsync(orderToken, config, orderType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task HandleOrderAsync(JToken token, TrackPullConfigDto config, int orderType)
|
||||||
|
{
|
||||||
|
var paramConfig = config.ParamConfig;
|
||||||
|
var orderNo = token[paramConfig.OrderNoName]?.Value<string>();
|
||||||
|
if (orderNo.IsNullOrWhiteSpace()) return;
|
||||||
|
|
||||||
|
var order = await _orderRepository.GetFirstAsync(x =>
|
||||||
|
x.OrderType == orderType && x.OrderNo == orderNo, x => new
|
||||||
|
{
|
||||||
|
x.Id, x.SubSystemId, x.IsPushCompleted, x.CustomId
|
||||||
|
});
|
||||||
|
if (order == default) return;
|
||||||
|
|
||||||
|
var trackToken = token[paramConfig.TrackDetailsPath];
|
||||||
|
if (trackToken is null) return;
|
||||||
|
var trackUpsertEvent = new TrackUpsertEvent
|
||||||
|
{
|
||||||
|
OrderId = order.Id,
|
||||||
|
SubSystemId = order.SubSystemId,
|
||||||
|
IsPushCompleted = order.IsPushCompleted,
|
||||||
|
CustomId = order.CustomId,
|
||||||
|
OrderType = orderType,
|
||||||
|
OrderNo = orderNo!,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (trackToken is JArray trackTokens)
|
||||||
|
{
|
||||||
|
foreach (var item in trackTokens)
|
||||||
|
{
|
||||||
|
await HandleTrackAsync(item, config, trackUpsertEvent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task HandleTrackAsync(JToken token, TrackPullConfigDto config,
|
||||||
|
TrackUpsertEvent trackUpsertEvent)
|
||||||
|
{
|
||||||
|
// 新增/更新轨迹
|
||||||
|
trackUpsertEvent.TrackCode = null;
|
||||||
|
trackUpsertEvent.TrackPlace = null;
|
||||||
|
trackUpsertEvent.TrackTime = null;
|
||||||
|
trackUpsertEvent.TrackTimeZone = null;
|
||||||
|
trackUpsertEvent.UpSubSystemId = 0;
|
||||||
|
await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, trackUpsertEvent);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -88,6 +88,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
TrackStatus = trackContent.Status,
|
TrackStatus = trackContent.Status,
|
||||||
TrackCode = @event.TrackCode,
|
TrackCode = @event.TrackCode,
|
||||||
TrackContent = trackContent.Content,
|
TrackContent = trackContent.Content,
|
||||||
|
|
||||||
TrackEnContent = trackContent.EnContent,
|
TrackEnContent = trackContent.EnContent,
|
||||||
TrackPlace = @event.TrackPlace,
|
TrackPlace = @event.TrackPlace,
|
||||||
TrackTime = @event.TrackTime!.Value,
|
TrackTime = @event.TrackTime!.Value,
|
||||||
|
|||||||
@ -1,7 +1,5 @@
|
|||||||
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
|
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
|
||||||
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
||||||
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
|
|
||||||
using SJZY.Track.Domain.Dtos.Order;
|
|
||||||
using SJZY.UserCenter.HttpApi.Services;
|
using SJZY.UserCenter.HttpApi.Services;
|
||||||
|
|
||||||
namespace SJZY.Track.Application.Services.ProvideServices;
|
namespace SJZY.Track.Application.Services.ProvideServices;
|
||||||
@ -14,14 +12,10 @@ namespace SJZY.Track.Application.Services.ProvideServices;
|
|||||||
public class OrderService : ApplicationService
|
public class OrderService : ApplicationService
|
||||||
{
|
{
|
||||||
private readonly IOrderRepository _orderRepository;
|
private readonly IOrderRepository _orderRepository;
|
||||||
private readonly ITrackDetailsRepository _trackDetailsRepository;
|
|
||||||
|
|
||||||
public OrderService(IOrderRepository orderRepository,
|
public OrderService(IOrderRepository orderRepository)
|
||||||
ITrackDetailsRepository trackDetailsRepository
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
_orderRepository = orderRepository;
|
_orderRepository = orderRepository;
|
||||||
_trackDetailsRepository = trackDetailsRepository;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using SJZY.InterfaceRelay.Application.Contracts;
|
using Newtonsoft.Json;
|
||||||
|
using SJZY.InterfaceRelay.Application.Contracts;
|
||||||
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
|
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
|
||||||
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
||||||
using Volo.Abp.Http.Client.DynamicProxying;
|
using Volo.Abp.Http.Client.DynamicProxying;
|
||||||
@ -39,17 +40,19 @@ public class TrackPullService : ApplicationService
|
|||||||
|
|
||||||
var orderTemplates = await _orderRepository.GetOrderTemplatesAsync(input.OrderNos);
|
var orderTemplates = await _orderRepository.GetOrderTemplatesAsync(input.OrderNos);
|
||||||
|
|
||||||
foreach (var group in orderTemplates.GroupBy(x => x.ServiceProviderId))
|
foreach (var group in orderTemplates.GroupBy(x => new
|
||||||
{
|
{
|
||||||
var data = group.Select(x => new OrderNoInfo
|
x.ServiceProviderId, x.OrderType, x.ServiceProviderCode
|
||||||
|
}))
|
||||||
{
|
{
|
||||||
OrderType = x.OrderType,
|
var data = group.Select(x => new
|
||||||
OrderNo = x.OrderNo
|
{
|
||||||
|
x.OrderNo
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync(
|
await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync(
|
||||||
"A012", "yicang", 42, data, GlobalConst.InterfaceRelayTrackRefreshSubscribe
|
"A012", group.Key.ServiceProviderCode, 42, data,
|
||||||
, group.Key.ToString());
|
GlobalConst.TrackRefreshSubscribe, JsonConvert.SerializeObject(group.Key));
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -12,4 +12,9 @@ public class OrderTemplateVO
|
|||||||
public int TemplateId { get; set; }
|
public int TemplateId { get; set; }
|
||||||
|
|
||||||
public int ServiceProviderId { get; set; }
|
public int ServiceProviderId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 服务商code
|
||||||
|
/// </summary>
|
||||||
|
public string ServiceProviderCode { get; set; } = null!;
|
||||||
}
|
}
|
||||||
@ -20,7 +20,7 @@ public class GlobalConst
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 接口通批量轨迹刷新 mq订阅名称
|
/// 接口通批量轨迹刷新 mq订阅名称
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string InterfaceRelayTrackRefreshSubscribe = "SJZY.Track.TrackRefresh";
|
public const string TrackRefreshSubscribe = "SJZY.Track.TrackRefresh";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 轨迹新增/更新后触发更新订单轨迹 mq订阅名称
|
/// 轨迹新增/更新后触发更新订单轨迹 mq订阅名称
|
||||||
|
|||||||
@ -48,11 +48,4 @@ public interface IProvideQueries
|
|||||||
/// <param name="trackCodes"></param>
|
/// <param name="trackCodes"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<List<string>> MapTrackCodesAsync(int upSubSystemId, int subSystemId, params string[] trackCodes);
|
Task<List<string>> MapTrackCodesAsync(int upSubSystemId, int subSystemId, params string[] trackCodes);
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 获取服务商模板配置
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="serviceProviderId"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
Task<List<TrackPullContentConfigVO>> GetPullContentConfigsAsync(int serviceProviderId);
|
|
||||||
}
|
}
|
||||||
@ -1,6 +1,5 @@
|
|||||||
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
||||||
using SJZY.Track.Domain.Aggregates.TrackContentAggregate;
|
using SJZY.Track.Domain.Aggregates.TrackContentAggregate;
|
||||||
using SJZY.Track.Domain.Aggregates.TrackPullAggregate;
|
|
||||||
using SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
|
using SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
|
||||||
using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
|
using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
|
||||||
using SJZY.Track.Domain.Dtos.Order;
|
using SJZY.Track.Domain.Dtos.Order;
|
||||||
@ -105,22 +104,4 @@ public class ProvideQueries : ISugarRepository, IProvideQueries,
|
|||||||
.Select(x => x.TrackContentCode)
|
.Select(x => x.TrackContentCode)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<TrackPullContentConfigVO>> GetPullContentConfigsAsync(int serviceProviderId)
|
|
||||||
{
|
|
||||||
return await Context.Queryable<TrackPullConfigEntity>()
|
|
||||||
.LeftJoin<TrackPullContentConfigEntity>((a, b) => a.Id == b.TrackPullConfigId)
|
|
||||||
.Where(a => a.ServiceProviderId == serviceProviderId)
|
|
||||||
.Select(x => new TrackPullContentConfigVO
|
|
||||||
{
|
|
||||||
TrackContentId = 0,
|
|
||||||
TrackContentCodeValue = null,
|
|
||||||
TrackContentValue = null,
|
|
||||||
TrackKeyword = null,
|
|
||||||
TrackKeywordReverse = null,
|
|
||||||
TrackPlaceValue = null,
|
|
||||||
TrackStatusValue = null,
|
|
||||||
TrackTimeZone = null
|
|
||||||
}).ToListAsync();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@ -187,29 +187,30 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
|
|||||||
{
|
{
|
||||||
a.NewestTrackContent = trackDetail.TrackContent;
|
a.NewestTrackContent = trackDetail.TrackContent;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trackDetail.TrackEnContent != a.NewestTrackEnContent)
|
if (trackDetail.TrackEnContent != a.NewestTrackEnContent)
|
||||||
{
|
{
|
||||||
a.NewestTrackEnContent = trackDetail.TrackEnContent;
|
a.NewestTrackEnContent = trackDetail.TrackEnContent;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trackDetail.TrackPlace != a.NewestTrackPlace)
|
if (trackDetail.TrackPlace != a.NewestTrackPlace)
|
||||||
{
|
{
|
||||||
a.NewestTrackPlace = trackDetail.TrackPlace;
|
a.NewestTrackPlace = trackDetail.TrackPlace;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trackDetail.TrackTime != a.NewestTrackTime)
|
if (trackDetail.TrackTime != a.NewestTrackTime)
|
||||||
{
|
{
|
||||||
a.NewestTrackTime = trackDetail.TrackTime;
|
a.NewestTrackTime = trackDetail.TrackTime;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
a.TrackTemplateNames =trackTemplateList.Where(b => b.OrderId== a.Id).Select(a => a.Name).JoinAsString(",");
|
a.TrackTemplateNames = trackTemplateList.Where(b => b.OrderId == a.Id).Select(a => a.Name)
|
||||||
|
.JoinAsString(",");
|
||||||
a.TrackTemplateIds = trackTemplateList.Where(b => b.OrderId == a.Id).Select(a => a.TemplateId).ToList();
|
a.TrackTemplateIds = trackTemplateList.Where(b => b.OrderId == a.Id).Select(a => a.TemplateId).ToList();
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#region 暂时注释
|
#region 暂时注释
|
||||||
|
|
||||||
//if (pageList.List.Any())
|
//if (pageList.List.Any())
|
||||||
@ -243,13 +244,15 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
|
|||||||
{
|
{
|
||||||
return await Context.Queryable<OrderEntity>()
|
return await Context.Queryable<OrderEntity>()
|
||||||
.LeftJoin<OrderTemplateEntity>((a, b) => a.Id == b.OrderId)
|
.LeftJoin<OrderTemplateEntity>((a, b) => a.Id == b.OrderId)
|
||||||
|
.LeftJoin<VServiceProviderEntity>((a, b, c) => b.ServiceProviderId == c.Id)
|
||||||
.Where(a => orderNos.Contains(a.OrderNo))
|
.Where(a => orderNos.Contains(a.OrderNo))
|
||||||
.Select((a, b) => new OrderTemplateVO
|
.Select((a, b, c) => new OrderTemplateVO
|
||||||
{
|
{
|
||||||
OrderNo = a.OrderNo,
|
OrderNo = a.OrderNo,
|
||||||
OrderType = a.OrderType,
|
OrderType = a.OrderType,
|
||||||
TemplateId = b.TrackTemplateId,
|
TemplateId = b.TrackTemplateId,
|
||||||
ServiceProviderId = b.ServiceProviderId
|
ServiceProviderId = b.ServiceProviderId,
|
||||||
|
ServiceProviderCode = c.Code
|
||||||
})
|
})
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user