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