diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs
new file mode 100644
index 00000000..88eb9530
--- /dev/null
+++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs
@@ -0,0 +1,112 @@
+using DotNetCore.CAP;
+using SJZY.Track.Application.Contract.Dtos.ProvideServices;
+using SJZY.Track.Application.Contract.Events;
+using SJZY.Track.Domain.Aggregates.OrderAggregate;
+using SJZY.Track.Domain.Consts;
+using SJZY.Track.Domain.Queries;
+
+namespace SJZY.Track.Application.Services.ProvideServices;
+
+///
+/// 订单关联服务
+///
+public partial class OrderService
+{
+ private readonly IBasicQuery _orderLinkQuery;
+ private readonly ICapPublisher _capPublisher;
+
+ ///
+ /// 关联、解除关联订单
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("Order/Link")]
+ public async Task LinkOrderAsync(LinkOrderInput input)
+ {
+ var order = await _orderRepository.GetFirstAsync(x =>
+ x.OrderType == input.OrderType && x.OrderNo == input.OrderNo, x => new
+ {
+ x.Id, x.SubSystemId
+ });
+ if (order == default)
+ {
+ throw new BusinessException(message: $"订单:{input.OrderNo}不存在");
+ }
+
+ //tips:循环关联问题再消费时解决
+ if (input.OrderType == input.LinkOrderType)
+ {
+ throw new BusinessException(message: "不能同级关联");
+ }
+
+ if (input.LinkOrderNos.Count < 1 || input.LinkOrderType == 0) return true;
+
+ // 单号去重,去空,去自己
+ input.LinkOrderNos = input.LinkOrderNos
+ .Where(x => !x.IsNullOrWhiteSpace() && x != input.OrderNo)
+ .Distinct().ToList();
+
+ // 解绑
+ if (!input.IsLink) return await UnLinkOrderAsync(input);
+
+ // 关联订单
+ var linkedOrderIds = await DoLinkOrderAsync(input, order.Id);
+
+ // 补轨迹
+ if (linkedOrderIds.Count > 0)
+ {
+ await _capPublisher.PublishAsync(GlobalConst.OrderLinkAfterFillTrack, new OrderLinkAfterFillTrackEvent
+ {
+ OrderId = order.Id,
+ SubSystemId = order.SubSystemId,
+ LinkedOrderIds = linkedOrderIds,
+ });
+ }
+
+ return true;
+ }
+
+ private async Task> DoLinkOrderAsync(LinkOrderInput input, int orderId)
+ {
+ // 获取已关联的订单
+ var linkOrderNos = await _orderLinkQuery.GetListAsync(x =>
+ x.OrderType == input.OrderType && x.OrderNo == input.OrderNo && x.LinkOrderType == input.LinkOrderType,
+ x => x.LinkOrderNo);
+
+ // 计算出未关联的订单
+ var noLinkOrderNos = input.LinkOrderNos.Except(linkOrderNos);
+
+ // 过滤掉不存在的订单
+ var canLinkOrders = await _orderRepository.GetListAsync(x =>
+ x.OrderType == input.LinkOrderType && noLinkOrderNos.Contains(x.OrderNo),
+ x => new { x.Id, x.OrderNo });
+
+ if (canLinkOrders.Count == 0) return new List();
+
+ await _orderRepository.LinkOrderAsync(canLinkOrders.Select(x => new OrderLinkEntity
+ {
+ OrderId = orderId,
+ OrderNo = input.OrderNo,
+ OrderType = input.OrderType,
+ LinkOrderId = x.Id,
+ LinkOrderNo = x.OrderNo,
+ LinkOrderType = input.LinkOrderType
+ }).ToList());
+
+ return canLinkOrders.Select(x => x.Id).ToList();
+ }
+
+ private async Task UnLinkOrderAsync(LinkOrderInput input)
+ {
+ var unLinkIds = await _orderLinkQuery.GetListAsync(x =>
+ x.OrderType == input.OrderType && x.OrderNo == input.OrderNo &&
+ x.LinkOrderType == input.LinkOrderType && input.LinkOrderNos.Contains(x.LinkOrderNo),
+ x => x.Id);
+
+ // real del
+ await _orderRepository.UnLinkByIdsAsync(unLinkIds);
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
index ce4913bc..712b775c 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
@@ -1,9 +1,7 @@
using DotNetCore.CAP;
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
-using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
-using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Queries;
using SJZY.UserCenter.HttpApi.Services;
@@ -17,9 +15,6 @@ namespace SJZY.Track.Application.Services.ProvideServices;
public partial class OrderService : ApplicationService, IOrderService
{
private readonly IOrderRepository _orderRepository;
- private readonly IBasicQuery _orderLinkQuery;
- private readonly ICapPublisher _capPublisher;
-
public OrderService(IOrderRepository orderRepository, IBasicQuery orderLinkQuery,
ICapPublisher capPublisher)
@@ -84,100 +79,4 @@ public partial class OrderService : ApplicationService, IOrderService
order.OrderFlights = ObjectMapper.Map, List>(input.FlightInfos);
await _orderRepository.UpdateOrderAsync(order);
}
-
- ///
- /// 关联、解除关联订单
- ///
- ///
- ///
- ///
- [HttpPost("Order/Link")]
- public async Task LinkOrderAsync(LinkOrderInput input)
- {
- var order = await _orderRepository.GetFirstAsync(x =>
- x.OrderType == input.OrderType && x.OrderNo == input.OrderNo, x => new
- {
- x.Id,
- x.SubSystemId
- });
- if (order == default)
- {
- throw new BusinessException(message: $"订单:{input.OrderNo}不存在");
- }
-
- //tips:循环关联问题再消费时解决
- if (input.OrderType == input.LinkOrderType)
- {
- throw new BusinessException(message: "不能同级关联");
- }
-
- if (input.LinkOrderNos.Count < 1 || input.LinkOrderType == 0) return true;
-
- // 单号去重,去空,去自己
- input.LinkOrderNos = input.LinkOrderNos
- .Where(x => !x.IsNullOrWhiteSpace() && x != input.OrderNo)
- .Distinct().ToList();
-
- // 解绑
- if (!input.IsLink) return await UnLinkOrderAsync(input);
-
- // 关联订单
- var linkedOrderIds = await DoLinkOrderAsync(input, order.Id);
-
- // 补轨迹
- if (linkedOrderIds.Count > 0)
- {
- await _capPublisher.PublishAsync(GlobalConst.OrderLinkAfterFillTrack, new OrderLinkAfterFillTrackEvent
- {
- OrderId = order.Id,
- SubSystemId = order.SubSystemId,
- LinkedOrderIds = linkedOrderIds,
- });
- }
-
- return true;
- }
-
- private async Task> DoLinkOrderAsync(LinkOrderInput input, int orderId)
- {
- // 获取已关联的订单
- var linkOrderNos = await _orderLinkQuery.GetListAsync(x =>
- x.OrderType == input.OrderType && x.OrderNo == input.OrderNo && x.LinkOrderType == input.LinkOrderType,
- x => x.LinkOrderNo);
-
- // 计算出未关联的订单
- var noLinkOrderNos = input.LinkOrderNos.Except(linkOrderNos);
-
- // 过滤掉不存在的订单
- var canLinkOrders = await _orderRepository.GetListAsync(x =>
- x.OrderType == input.LinkOrderType && noLinkOrderNos.Contains(x.OrderNo),
- x => new { x.Id, x.OrderNo });
-
- if (canLinkOrders.Count == 0) return new List();
-
- await _orderRepository.LinkOrderAsync(canLinkOrders.Select(x => new OrderLinkEntity
- {
- OrderId = orderId,
- OrderNo = input.OrderNo,
- OrderType = input.OrderType,
- LinkOrderId = x.Id,
- LinkOrderNo = x.OrderNo,
- LinkOrderType = input.LinkOrderType
- }).ToList());
-
- return canLinkOrders.Select(x => x.Id).ToList();
- }
-
- private async Task UnLinkOrderAsync(LinkOrderInput input)
- {
- var unLinkIds = await _orderLinkQuery.GetListAsync(x =>
- x.OrderType == input.OrderType && x.OrderNo == input.OrderNo &&
- x.LinkOrderType == input.LinkOrderType && input.LinkOrderNos.Contains(x.LinkOrderNo),
- x => x.Id);
-
- // real del
- await _orderRepository.UnLinkByIdsAsync(unLinkIds);
-
- return true;
- }
}
\ No newline at end of file