feat(order): add repository and service methods for pull config lookup

feat(order): add API layer to find order pull configs
feat(order): add repository and service layers for finding order pull configs
feat(order): add find order pull configs capability
- Add `FindOrderPullConfigsController` for API endpoint
- Add `OrderPullConfigService.findOrderPull
This commit is contained in:
xiaolipro 2026-03-13 16:53:16 +08:00
parent 7008ffbd96
commit 3e06c83cd6
5 changed files with 147 additions and 0 deletions

View File

@ -0,0 +1,35 @@
using TrackCenter.Domain.Aggregates.OrderAggregate;
namespace TrackCenter.Application.Dtos.ProvideServices;
public class FindOrderPullConfigsOutput
{
public int Total { get; set; }
public List<FindOrderPullConfigsItem> Items { get; set; } = [];
public List<string> NotFoundOrderNos { get; set; } = [];
}
public class FindOrderPullConfigsItem
{
public string OrderNo { get; set; } = string.Empty;
public string ServiceCode { get; set; } = string.Empty;
public string? PullOrderNo { get; set; }
public string StartCode { get; set; } = string.Empty;
public string EndCode { get; set; } = string.Empty;
public int SilenceTime { get; set; }
public int StopTime { get; set; }
public TrackPullStatus PullStatus { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
}

View File

@ -6,6 +6,49 @@ namespace TrackCenter.Application.Services.ProvideServices;
public partial class OrderService
{
/// <summary>
/// 查询订单拉取配置
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("Order/FindOrderPullConfigs")]
public async Task<FindOrderPullConfigsOutput> FindOrderPullConfigsAsync(OrderNosInfo input)
{
var orderNos = input.OrderNos
.Where(x => !string.IsNullOrWhiteSpace(x))
.Distinct()
.ToList();
if (orderNos.Count == 0)
{
return new FindOrderPullConfigsOutput();
}
var pullConfigs = await _orderRepository.FindOrderPullConfigsAsync(input.AppKey, input.OrderType, orderNos);
var foundOrderNos = pullConfigs
.Select(x => x.OrderNo)
.Distinct()
.ToHashSet();
return new FindOrderPullConfigsOutput
{
Total = pullConfigs.Count,
Items = pullConfigs.Select(x => new FindOrderPullConfigsItem
{
OrderNo = x.OrderNo,
ServiceCode = x.ServiceCode,
PullOrderNo = x.PullOrderNo,
StartCode = x.StartCode,
EndCode = x.EndCode,
SilenceTime = x.SilenceTime,
StopTime = x.StopTime,
PullStatus = x.PullStatus,
StartTime = x.StartTime,
EndTime = x.EndTime
}).ToList(),
NotFoundOrderNos = orderNos.Where(x => !foundOrderNos.Contains(x)).ToList()
};
}
/// <summary>
/// 修改订单拉取信息(轻易勿动)
/// </summary>

View File

@ -139,6 +139,18 @@ public interface IOrderRepository : IBasicRepository<OrderEntity>
/// <returns></returns>
Task<int> ClearPullStatusAsync();
/// <summary>
/// 查询订单拉取配置
/// </summary>
/// <param name="appKey"></param>
/// <param name="orderType"></param>
/// <param name="orderNos"></param>
/// <returns></returns>
Task<List<FindOrderPullConfigsOutputVO>> FindOrderPullConfigsAsync(
string appKey,
TrackOrderType orderType,
List<string> orderNos);
/// <summary>
/// 更新订单拉取配置,根据服务商
/// </summary>

View File

@ -0,0 +1,26 @@
using TrackCenter.Domain.Aggregates.OrderAggregate;
namespace TrackCenter.Domain.Dtos.Order;
public class FindOrderPullConfigsOutputVO
{
public string OrderNo { get; set; } = string.Empty;
public string ServiceCode { get; set; } = string.Empty;
public string? PullOrderNo { get; set; }
public string StartCode { get; set; } = string.Empty;
public string EndCode { get; set; } = string.Empty;
public int SilenceTime { get; set; }
public int StopTime { get; set; }
public TrackPullStatus PullStatus { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
}

View File

@ -500,6 +500,37 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
.ExecuteCommandAsync();
}
public async Task<List<FindOrderPullConfigsOutputVO>> FindOrderPullConfigsAsync(
string appKey,
TrackOrderType orderType,
List<string> orderNos)
{
if (orderNos.Count == 0)
{
return [];
}
return await Context.Queryable<OrderEntity>()
.InnerJoin<OrderPullStatusEntity>((order, pullStatus) => order.Id == pullStatus.OrderId)
.Where((order, pullStatus) => order.AppKey == appKey
&& order.OrderType == orderType
&& orderNos.Contains(order.OrderNo))
.Select((order, pullStatus) => new FindOrderPullConfigsOutputVO
{
OrderNo = order.OrderNo,
ServiceCode = pullStatus.ServiceProviderCode,
PullOrderNo = pullStatus.OrderNo,
StartCode = pullStatus.StartTrackCode,
EndCode = pullStatus.EndTrackCode,
SilenceTime = pullStatus.SilenceBeforeStart,
StopTime = pullStatus.SilenceAfterEnd,
PullStatus = pullStatus.PullStatus,
StartTime = pullStatus.StartTime,
EndTime = pullStatus.EndTime
})
.ToListAsync();
}
public async Task<int> UpdateOrderPullConfigForServiceProviderAsync(
UpdateOrderPullConfigsInputVo inputVo)
{