From a006804970f4838b42d4d8ca71560f19778770e0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Tue, 27 Feb 2024 18:19:22 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E8=AE=A2=E5=8D=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
common.props | 1 +
.../Dtos/ProvideServices/CreateOrderInput.cs | 86 +++++++++++++++++++
.../Dtos/ProvideServices/LinkOrderInput.cs | 26 ++++++
.../SJZY.Track.Application.csproj | 4 +-
.../Services/ProvideServices/OrderService.cs | 83 ++++++++++++++++++
.../ProvideServices/TrackQueryService.cs | 31 ++++---
.../OrderAggregate/IOrderRepository.cs | 4 +-
src/SJZY.Track.Repository/OrderRepository.cs | 4 +-
8 files changed, 217 insertions(+), 22 deletions(-)
create mode 100644 src/SJZY.Track.Application/Dtos/ProvideServices/CreateOrderInput.cs
create mode 100644 src/SJZY.Track.Application/Dtos/ProvideServices/LinkOrderInput.cs
create mode 100644 src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
diff --git a/common.props b/common.props
index 9ad7e595..6dfdd8fe 100644
--- a/common.props
+++ b/common.props
@@ -2,6 +2,7 @@
latest
enable
+ enable
diff --git a/src/SJZY.Track.Application/Dtos/ProvideServices/CreateOrderInput.cs b/src/SJZY.Track.Application/Dtos/ProvideServices/CreateOrderInput.cs
new file mode 100644
index 00000000..b5b6520a
--- /dev/null
+++ b/src/SJZY.Track.Application/Dtos/ProvideServices/CreateOrderInput.cs
@@ -0,0 +1,86 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace SJZY.Track.Application.Dtos.ProvideServices;
+
+public class CreateOrderInput
+{
+ public OrderInfo OrderInfo { get; set; }
+
+ ///
+ /// 客户id
+ ///
+ public int ClientId { get; set; }
+
+ ///
+ /// 订单模板
+ ///
+ public List Templates { get; set; }
+
+ ///
+ /// 订单明细
+ ///
+ public OrderDetails Details { get; set; }
+}
+
+
+public class OrderTemplateInfo
+{
+ ///
+ /// 模板id
+ ///
+ [Required]
+ public int TemplateId { get; set; }
+
+ ///
+ /// 服务商id
+ ///
+ public int ServiceProviderId { get; set; }
+}
+
+public class OrderDetails
+{
+ ///
+ /// 目的港口
+ ///
+ public string? ArrivalPort { get; set; }
+
+ ///
+ /// 起运港口
+ ///
+ public string? LeavePort { get; set; }
+
+ ///
+ /// 目的国家,必填
+ ///
+ public string ArrivalCountry { get; set; }
+
+ ///
+ /// 起运国家,必填
+ ///
+ public string LeaveCountry { get; set; }
+
+ ///
+ /// 目的城市,必填
+ ///
+ public string ArrivalCity { get; set; }
+
+ ///
+ /// 起运城市,必填
+ ///
+ public string LeaveCity { get; set; }
+
+ public List FligthInfos { get; set; }
+}
+
+public class FligthInfo
+{
+ ///
+ /// 航班号
+ ///
+ public string FlightNo { get; set; }
+
+ ///
+ /// 班期
+ ///
+ public string FlightDate { get; set; }
+}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/Dtos/ProvideServices/LinkOrderInput.cs b/src/SJZY.Track.Application/Dtos/ProvideServices/LinkOrderInput.cs
new file mode 100644
index 00000000..a9177890
--- /dev/null
+++ b/src/SJZY.Track.Application/Dtos/ProvideServices/LinkOrderInput.cs
@@ -0,0 +1,26 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace SJZY.Track.Application.Dtos.ProvideServices;
+
+public class LinkOrderInput
+{
+ public OrderInfo OrderInfo { get; set; }
+
+ public List LinkedOrderInfos { get; set; }
+}
+
+
+public class OrderInfo
+{
+ ///
+ /// 订单类型
+ ///
+ public int NoType { get; set; }
+
+ ///
+ /// 订单号
+ ///
+ [Required]
+ [MaxLength(100)]
+ public string OrderNo { get; set; }
+}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/SJZY.Track.Application.csproj b/src/SJZY.Track.Application/SJZY.Track.Application.csproj
index 678ee30c..58d32d12 100644
--- a/src/SJZY.Track.Application/SJZY.Track.Application.csproj
+++ b/src/SJZY.Track.Application/SJZY.Track.Application.csproj
@@ -1,10 +1,10 @@
+
+
net7.0
- enable
True
-
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
new file mode 100644
index 00000000..fa526c1e
--- /dev/null
+++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
@@ -0,0 +1,83 @@
+using Newtonsoft.Json;
+using SJZY.Track.Application.Dtos.ProvideServices;
+using SJZY.Track.Domain;
+using SJZY.Track.Domain.OrderAggregate;
+using SJZY.UserCenter.HttpApi.Services;
+
+namespace SJZY.Track.Application.Services.ProvideServices;
+
+///
+/// 订单服务
+///
+[ApiExplorerSettings(GroupName = "提供接口")]
+public class OrderService: ApplicationService
+{
+ private readonly IOrderRepository _orderRepository;
+
+ public OrderService(IOrderRepository orderRepository)
+ {
+ _orderRepository = orderRepository;
+ }
+
+ ///
+ /// 创建订单
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("Order/Create")]
+ public async Task CreateOrderAsync(CreateOrderInput input)
+ {
+ if (await _orderRepository.IsAnyAsync(x =>
+ x.OrderType == input.OrderInfo.NoType && x.OrderNo == input.OrderInfo.OrderNo))
+ {
+ throw new BusinessException(message: $"单号:{input.OrderInfo.OrderNo}已存在");
+ }
+
+ var order = new OrderEntity
+ {
+ CustomId = input.ClientId,
+ OrderDetails = JsonConvert.SerializeObject(input.Details),
+ OrderNo = input.OrderInfo.OrderNo,
+ OrderType = input.OrderInfo.NoType,
+ SubSystemId = CurrentUserRequest.SubSystemId
+ };
+
+ using var tran = TransactionHelper.GetReadCommitted();
+
+ // 创建订单
+ var orderId = await _orderRepository.InsertReturnIdentityAsync(order);
+
+ // 创建订单模板
+ var templates = input.Templates.Select(x => new OrderTemplateEntity
+ {
+ OrderId = orderId,
+ ServiceProviderId = x.ServiceProviderId,
+ TrackTemplateId = x.TemplateId
+ }).ToList();
+ await _orderRepository.CreateOrderTemplatesAsync(templates);
+ tran.Complete();
+
+ return true;
+ }
+
+ ///
+ /// 关联订单
+ ///
+ ///
+ ///
+ [HttpPost("Order/Link")]
+ public async Task LinkOrderAsync(LinkOrderInput input)
+ {
+ // var distinctOrderNos = input.LinkedOrderInfos.Distinct().ToList();
+ //
+ // var links = input.LinkedOrderInfos.Select(x => new OrderLinkEntity
+ // {
+ // LinkOrderId = x.,
+ // OrderId = 0
+ // })
+ // _orderRepository.LinkOrderAsync();
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackQueryService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackQueryService.cs
index 66803064..c7d9b1ff 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackQueryService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackQueryService.cs
@@ -1,12 +1,14 @@
using SJZY.Track.Domain.OrderAggregate;
using SJZY.Track.Domain.TrackTemplateAggregate;
using SJZY.Track.Application.Dtos.ProvideServices;
-using SJZY.Track.Domain;
using SJZY.Track.Repository.TrackDetails;
namespace SJZY.Track.Application.Services.ProvideServices;
-[ApiExplorerSettings(GroupName = "TrackQuery")]
+///
+/// 轨迹查询服务
+///
+[ApiExplorerSettings(GroupName = "提供接口")]
public class TrackQueryService : ApplicationService
{
private readonly ITrackDetailsRepository _trackDetailsRepository;
@@ -21,8 +23,14 @@ public class TrackQueryService : ApplicationService
_trackTemplateRepository = trackTemplateRepository;
}
- [HttpPost("TrackQuery/GetTrack")]
- public async Task> GetTrackAsync(GetTrackInput input)
+ ///
+ /// 根据订单号获取轨迹
+ ///
+ ///
+ ///
+ ///
+ [HttpPost("TrackQuery/GetByOrderNos")]
+ public async Task> GetByOrderNosAsync(GetTrackInput input)
{
if (input.OrderNos.Count > 500)
{
@@ -30,9 +38,9 @@ public class TrackQueryService : ApplicationService
}
var res = new List();
- var distinctOrderNumbers = input.OrderNos.Distinct().ToList();
- var details = await _trackDetailsRepository.GetListAsync(distinctOrderNumbers);
- var orderTemplates = await _orderRepository.GetOrderTemplatesAsync(distinctOrderNumbers);
+ var distinctOrderNos = input.OrderNos.Distinct().ToList();
+ var details = await _trackDetailsRepository.GetListAsync(distinctOrderNos);
+ var orderTemplates = await _orderRepository.GetOrderTemplatesAsync(distinctOrderNos);
var distinctTemplateIds = orderTemplates.Select(x => x.TrackTemplateId).Distinct().ToList();
var templateContents = await _trackTemplateRepository.GetTemplateContentsAsync(distinctTemplateIds);
@@ -61,15 +69,6 @@ public class TrackQueryService : ApplicationService
return res;
}
- public async Task CreateOrder()
- {
- using var tran = TransactionHelper.GetReadCommitted();
- await _orderRepository.InsertAsync(new OrderEntity());
- await _orderRepository.CreateOrderTemplateAsync(new OrderTemplateEntity());
-
- tran.Complete();
- }
-
private void TrackDetailSort(GetTrackOutput item, SortMethod sortMethod)
{
switch (sortMethod)
diff --git a/src/SJZY.Track.Domain/OrderAggregate/IOrderRepository.cs b/src/SJZY.Track.Domain/OrderAggregate/IOrderRepository.cs
index 404224c0..84ca93a2 100644
--- a/src/SJZY.Track.Domain/OrderAggregate/IOrderRepository.cs
+++ b/src/SJZY.Track.Domain/OrderAggregate/IOrderRepository.cs
@@ -14,7 +14,7 @@ public interface IOrderRepository : IBasicRepository
///
/// 创建订单模板
///
- ///
+ ///
///
- Task CreateOrderTemplateAsync(OrderTemplateEntity templateEntity);
+ Task CreateOrderTemplatesAsync(List templateEntities);
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Repository/OrderRepository.cs b/src/SJZY.Track.Repository/OrderRepository.cs
index 7c04dba6..1aa6978b 100644
--- a/src/SJZY.Track.Repository/OrderRepository.cs
+++ b/src/SJZY.Track.Repository/OrderRepository.cs
@@ -14,8 +14,8 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
.ToListAsync();
}
- public async Task CreateOrderTemplateAsync(OrderTemplateEntity templateEntity)
+ public async Task CreateOrderTemplatesAsync(List templateEntities)
{
- await Context.Insertable(templateEntity).ExecuteCommandAsync();
+ await Context.Insertable(templateEntities).ExecuteCommandAsync();
}
}
\ No newline at end of file