diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs index fe813627..590391f0 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs @@ -1,9 +1,11 @@ using DotNetCore.CAP; +using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.Track.Application.Contract.Dtos.ProvideServices; using SJZY.Track.Application.Contract.Services; using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; using SJZY.Track.Domain.Queries; +using SJZY.UserCenter.HttpApi.Services; namespace SJZY.Track.Application.Services.ProvideServices; @@ -14,12 +16,15 @@ namespace SJZY.Track.Application.Services.ProvideServices; [Route("/ProviderService")] public partial class OrderService : ApplicationService, IOrderService { + private readonly IOrderOperationRecordRepository _orderOperationRecordRepository; private readonly IOrderRepository _orderRepository; public OrderService(IOrderRepository orderRepository, IBasicQuery orderLinkQuery, - ICapPublisher capPublisher, ITrackDetailsRepository trackDetailsRepository) + ICapPublisher capPublisher, ITrackDetailsRepository trackDetailsRepository, + IOrderOperationRecordRepository orderOperationRecordRepository) { _orderRepository = orderRepository; + _orderOperationRecordRepository = orderOperationRecordRepository; _trackDetailsRepository = trackDetailsRepository; _capPublisher = capPublisher; _orderLinkQuery = orderLinkQuery; @@ -43,6 +48,16 @@ public partial class OrderService : ApplicationService, IOrderService // 订单已存在则视为更新 await UpdateOrderAsync(input, order); + var index = new OrderOperationRecordIndex + { + OrderId = order.Id, + OrderNo = input.OrderNo, + OptionType = OptionType.修改.ToString(), + Content = input.ToJson(), + }; + + _ = _orderOperationRecordRepository.AddAsync(index); + return new UnifyResultDto(true, new IdBaseDto { Id = order.Id @@ -54,6 +69,18 @@ public partial class OrderService : ApplicationService, IOrderService order.OrderFlights = ObjectMapper.Map, List>(input.FlightInfos); var orderId = await _orderRepository.CreateOrderAsync(order); + var indexForAdd = new OrderOperationRecordIndex + { + OrderId = orderId, + OrderNo = input.OrderNo, + OptionType = OptionType.新增.ToString(), + Content = input.ToJson(), + CreateUserId = CurrentUserRequest.CurrentUser.UserId, + CreateTime = DateTime.Now + }; + + _ = _orderOperationRecordRepository.AddAsync(indexForAdd); + return new UnifyResultDto(true, new IdBaseDto { Id = orderId diff --git a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs index 0c38b766..0e1dc988 100644 --- a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs +++ b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs @@ -15,6 +15,7 @@ namespace SJZY.Track.Application.Services.TrackOrders; [Route("/Track/Order")] public class TrackOrderService : ApplicationService { + private readonly IOrderOperationRecordRepository _orderOperationRecordRepository; private readonly IOrderRepository _orderRepository; private readonly ITrackContentRepository _trackContentRepository; private readonly ITrackDetailsRepository _trackDetailsRepository; @@ -26,14 +27,15 @@ public class TrackOrderService : ApplicationService ITrackOrderQueries trackOrderQueries, ITrackDetailsRepository trackDetailsRepository, ITrackContentRepository trackContentRepository, - ITrackPushRecordsRepository trackPushRecordsRepository - ) + ITrackPushRecordsRepository trackPushRecordsRepository, + IOrderOperationRecordRepository orderOperationRecordRepository) { _orderRepository = orderRepository; _trackOrderQueries = trackOrderQueries; _trackDetailsRepository = trackDetailsRepository; _trackContentRepository = trackContentRepository; _trackPushRecordsRepository = trackPushRecordsRepository; + _orderOperationRecordRepository = orderOperationRecordRepository; } #region 轨迹订单列表 @@ -194,4 +196,17 @@ public class TrackOrderService : ApplicationService await _trackDetailsRepository.DeleteTrackByIdAsync(trackId, track.IndexName); return true; } + + /// + /// 根据订单id查询订单操作记录 + /// + /// 订单id + /// + [HttpGet("GetOrderOperationsById")] + public async Task> GetOrderOperationsByIdAsync(int orderId) + { + // todo:分页?dto? + return await _orderOperationRecordRepository.GetOrderOperationsByIdAsync(orderId); + ; + } } diff --git a/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningRecordIndex.cs b/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningRecordIndex.cs index cd40adb7..308684ab 100644 --- a/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningRecordIndex.cs +++ b/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningRecordIndex.cs @@ -4,7 +4,7 @@ using SJZY.Track.Domain.Consts; namespace SJZY.Track.Domain.Aggregates.ForewarningAggregate; -[ElasticsearchType(RelationName = GlobalConst.TrackWarningRecordsIndex)] +[ElasticsearchType(RelationName = GlobalConst.TrackWarningRecordIndex)] public class WarningRecordIndex : IdBaseIndex { /// diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderOperationRecordRepository.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderOperationRecordRepository.cs new file mode 100644 index 00000000..0dfe62f4 --- /dev/null +++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderOperationRecordRepository.cs @@ -0,0 +1,18 @@ +namespace SJZY.Track.Domain.Aggregates.OrderAggregate; + +public interface IOrderOperationRecordRepository +{ + /// + /// 添加订单操作记录 + /// + /// + /// + Task AddAsync(OrderOperationRecordIndex index); + + /// + /// 获取订单操作记录 + /// + /// + /// + Task> GetOrderOperationsByIdAsync(int orderId); +} diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderOperationRecordIndex.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderOperationRecordIndex.cs new file mode 100644 index 00000000..cedba47d --- /dev/null +++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderOperationRecordIndex.cs @@ -0,0 +1,47 @@ +using Nest; +using SJZY.Expand.ElasticSearch; +using SJZY.Track.Domain.Consts; + +namespace SJZY.Track.Domain.Aggregates.OrderAggregate; + +/// +/// 订单操作记录 +/// +[ElasticsearchType(RelationName = GlobalConst.OrderOperationRecordIndex)] +public class OrderOperationRecordIndex : IdBaseIndex +{ + /// + /// 索引名称 + /// + public string IndexName { get; set; } = null!; + + /// + /// 订单Id + /// + public int OrderId { get; set; } + + /// + /// 订单号 + /// + public string OrderNo { get; set; } = null!; + + /// + /// 操作类型 + /// + public string OptionType { get; set; } = null!; + + /// + /// 前期报文(json) + /// + public string Content { get; set; } = null!; + + /// + /// 创建人 + /// + public int CreateUserId { get; set; } + + /// + /// 创建时间 + /// + public DateTime CreateTime { get; set; } +} diff --git a/src/SJZY.Track.Domain/Consts/GlobalConst.ES.cs b/src/SJZY.Track.Domain/Consts/GlobalConst.ES.cs index 24c454e0..bdc73ae4 100644 --- a/src/SJZY.Track.Domain/Consts/GlobalConst.ES.cs +++ b/src/SJZY.Track.Domain/Consts/GlobalConst.ES.cs @@ -15,5 +15,10 @@ public partial class GlobalConst /// /// 预警记录 es索引名称(模板) /// - public const string TrackWarningRecordsIndex = "sjzy_track_warning_records"; + public const string TrackWarningRecordIndex = "sjzy_track_warning_records"; + + /// + /// 订单操作记录 es索引名称(模板) + /// + public const string OrderOperationRecordIndex = "sjzy_track_order_operation_records"; } diff --git a/src/SJZY.Track.Domain/Consts/GlobalConst.cs b/src/SJZY.Track.Domain/Consts/GlobalConst.cs index 87f1c99a..acdb876e 100644 --- a/src/SJZY.Track.Domain/Consts/GlobalConst.cs +++ b/src/SJZY.Track.Domain/Consts/GlobalConst.cs @@ -6,6 +6,7 @@ public partial class GlobalConst public const string EmptyString = "--"; public const int ChunkSize = 100; public const int SafelyLimit = 10000; + public const int NormalLimit = 10000; public const float NoneTrackTimeZone = 99999; } diff --git a/src/SJZY.Track.Repository/Repositories/OrderOperationRecordRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderOperationRecordRepository.cs new file mode 100644 index 00000000..773636f0 --- /dev/null +++ b/src/SJZY.Track.Repository/Repositories/OrderOperationRecordRepository.cs @@ -0,0 +1,45 @@ +using Nest; +using SJZY.Expand.ABP.Core.Logger; +using SJZY.Expand.ElasticSearch.Services; +using SJZY.Track.Domain.Aggregates.OrderAggregate; +using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; +using SJZY.Track.Domain.Consts; + +namespace SJZY.Track.Repository.Repositories; + +public class OrderOperationRecordRepository : ElasticSearchContextAbstract, + IOrderOperationRecordRepository, + ITransientDependency +{ + public OrderOperationRecordRepository(ConnectionFactory connectionFactory) : base(connectionFactory) + { + } + + public async Task AddAsync(OrderOperationRecordIndex index) + { + index.IndexName = $"{GlobalConst.OrderOperationRecordIndex}-{DateTime.Now:yyyy.MM.dd}"; + index.CreateTime = DateTime.Now; + // 按天写入es + var r = await Context.IndexAsync(index, request => request + .Index(index.IndexName) + ); + + if (!r.IsValid) + { + LogHelper.Error($"轨迹推送记录写入es失败,原因:{r.DebugInformation}。"); + } + } + + public async Task> GetOrderOperationsByIdAsync(int orderId) + { + var data = await Context.SearchAsync(x => x + .Index(GlobalConst.TrackPushRecordsIndex) + .Query(q => + q.Term(t => t.OrderId, orderId) + ) + .Size(GlobalConst.NormalLimit) + .Sort(s => s.Field(f => f.CreateTime, SortOrder.Descending))); + + return data.Documents.ToList(); + } +}