创建订单

This commit is contained in:
李鹏军 2024-02-27 18:19:22 +08:00
parent e6d52a3894
commit a006804970
8 changed files with 217 additions and 22 deletions

View File

@ -2,6 +2,7 @@
<PropertyGroup>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<!-- <WarningsAsErrors>Nullable</WarningsAsErrors>-->
</PropertyGroup>
</Project>

View File

@ -0,0 +1,86 @@
using System.ComponentModel.DataAnnotations;
namespace SJZY.Track.Application.Dtos.ProvideServices;
public class CreateOrderInput
{
public OrderInfo OrderInfo { get; set; }
/// <summary>
/// 客户id
/// </summary>
public int ClientId { get; set; }
/// <summary>
/// 订单模板
/// </summary>
public List<OrderTemplateInfo> Templates { get; set; }
/// <summary>
/// 订单明细
/// </summary>
public OrderDetails Details { get; set; }
}
public class OrderTemplateInfo
{
/// <summary>
/// 模板id
/// </summary>
[Required]
public int TemplateId { get; set; }
/// <summary>
/// 服务商id
/// </summary>
public int ServiceProviderId { get; set; }
}
public class OrderDetails
{
/// <summary>
/// 目的港口
/// </summary>
public string? ArrivalPort { get; set; }
/// <summary>
/// 起运港口
/// </summary>
public string? LeavePort { get; set; }
/// <summary>
/// 目的国家,必填
/// </summary>
public string ArrivalCountry { get; set; }
/// <summary>
/// 起运国家,必填
/// </summary>
public string LeaveCountry { get; set; }
/// <summary>
/// 目的城市,必填
/// </summary>
public string ArrivalCity { get; set; }
/// <summary>
/// 起运城市,必填
/// </summary>
public string LeaveCity { get; set; }
public List<FligthInfo> FligthInfos { get; set; }
}
public class FligthInfo
{
/// <summary>
/// 航班号
/// </summary>
public string FlightNo { get; set; }
/// <summary>
/// 班期
/// </summary>
public string FlightDate { get; set; }
}

View File

@ -0,0 +1,26 @@
using System.ComponentModel.DataAnnotations;
namespace SJZY.Track.Application.Dtos.ProvideServices;
public class LinkOrderInput
{
public OrderInfo OrderInfo { get; set; }
public List<OrderInfo> LinkedOrderInfos { get; set; }
}
public class OrderInfo
{
/// <summary>
/// 订单类型
/// </summary>
public int NoType { get; set; }
/// <summary>
/// 订单号
/// </summary>
[Required]
[MaxLength(100)]
public string OrderNo { get; set; }
}

View File

@ -1,10 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="../../common.props" />
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<!--<Nullable>enable</Nullable>-->
</PropertyGroup>
<ItemGroup>

View File

@ -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;
/// <summary>
/// 订单服务
/// </summary>
[ApiExplorerSettings(GroupName = "提供接口")]
public class OrderService: ApplicationService
{
private readonly IOrderRepository _orderRepository;
public OrderService(IOrderRepository orderRepository)
{
_orderRepository = orderRepository;
}
/// <summary>
/// 创建订单
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="BusinessException"></exception>
[HttpPost("Order/Create")]
public async Task<bool> 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;
}
/// <summary>
/// 关联订单
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("Order/Link")]
public async Task<bool> 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;
}
}

View File

@ -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")]
/// <summary>
/// 轨迹查询服务
/// </summary>
[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<List<GetTrackOutput>> GetTrackAsync(GetTrackInput input)
/// <summary>
/// 根据订单号获取轨迹
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="BusinessException"></exception>
[HttpPost("TrackQuery/GetByOrderNos")]
public async Task<List<GetTrackOutput>> GetByOrderNosAsync(GetTrackInput input)
{
if (input.OrderNos.Count > 500)
{
@ -30,9 +38,9 @@ public class TrackQueryService : ApplicationService
}
var res = new List<GetTrackOutput>();
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)

View File

@ -14,7 +14,7 @@ public interface IOrderRepository : IBasicRepository<OrderEntity>
/// <summary>
/// 创建订单模板
/// </summary>
/// <param name="templateEntity"></param>
/// <param name="templateEntities"></param>
/// <returns></returns>
Task CreateOrderTemplateAsync(OrderTemplateEntity templateEntity);
Task CreateOrderTemplatesAsync(List<OrderTemplateEntity> templateEntities);
}

View File

@ -14,8 +14,8 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
.ToListAsync();
}
public async Task CreateOrderTemplateAsync(OrderTemplateEntity templateEntity)
public async Task CreateOrderTemplatesAsync(List<OrderTemplateEntity> templateEntities)
{
await Context.Insertable(templateEntity).ExecuteCommandAsync();
await Context.Insertable(templateEntities).ExecuteCommandAsync();
}
}