From f4b7645ddfe5534a6a5857ce3b5e1e749612f9bb 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, 12 Mar 2024 15:59:34 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E3=80=81=E6=9B=B4=E6=96=B0=E8=BD=A8=E8=BF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProvideServices/BatchDeleteTrackInput.cs | 15 +--- .../ProvideServices/BatchUpsertTrackInput.cs | 33 +++++++++ .../Dtos/ProvideServices/GetTrackInput.cs | 14 +--- .../Dtos/ProvideServices/OrderNoInfo.cs | 16 +++++ .../Dtos/ProvideServices/UpsertTrackInput.cs | 14 ---- .../SJZY.Track.Application.Contract.csproj | 1 + .../EventHandlers/TrackDeleteEventHandler.cs | 2 +- .../EventHandlers/TrackRefreshEventHandler.cs | 63 +++++++++++------ .../SJZY.Track.Application.csproj | 2 +- .../ProvideServices/OrderService.Link.cs | 6 ++ .../Services/ProvideServices/OrderService.cs | 11 +++ .../ProvideServices/TrackPushPullService.cs | 6 +- .../ProvideServices/TrackService.Query.cs | 6 ++ .../Services/ProvideServices/TrackService.cs | 68 +++++++++++++++++-- .../Repositories/TrackDetailsRepository.cs | 3 +- 15 files changed, 187 insertions(+), 73 deletions(-) create mode 100644 src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchDeleteTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchDeleteTrackInput.cs index 5616f912..0a79e008 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchDeleteTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchDeleteTrackInput.cs @@ -2,21 +2,8 @@ namespace SJZY.Track.Application.Contract.Dtos.ProvideServices; -public class BatchDeleteTrackInput +public class BatchDeleteTrackInput : OrderNosInfo { - /// - /// 订单类型,必填 - /// - [Required] - [Range(1, int.MaxValue)] - public int OrderType { get; set; } - - /// - /// 订单号,必填 - /// - [Required] - public List OrderNos { get; set; } = new(); - /// /// 轨迹code,必填 /// diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs new file mode 100644 index 00000000..fa5d3880 --- /dev/null +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs @@ -0,0 +1,33 @@ +using System.ComponentModel.DataAnnotations; + +namespace SJZY.Track.Application.Contract.Dtos.ProvideServices; + +public class BatchUpsertTrackInput : OrderNosInfo +{ + /// + /// 轨迹内容代码 + /// + [Required] + [MaxLength(50)] + public string TrackCode { get; set; } = null!; + + /// + /// 轨迹发生地 + /// + [Required] + [MaxLength(200)] + public string TrackPlace { get; set; } = null!; + + /// + /// 轨迹发生时间 + /// + [Required] + public DateTime? TrackTime { get; set; } + + /// + /// 轨迹发生时区 + /// + [Required] + [Range(-12, 12)] + public float? TrackTimeZone { get; set; } +} \ No newline at end of file diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackInput.cs index 598ee759..8fa3dec0 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackInput.cs @@ -2,20 +2,8 @@ using System.ComponentModel.DataAnnotations; namespace SJZY.Track.Application.Contract.Dtos.ProvideServices; -public class GetTrackInput +public class GetTrackInput : OrderNosInfo { - /// - /// 订单类型 - /// - [Required] - [Range(1, int.MaxValue)] - public int OrderType { get; set; } - - /// - /// 订单号 - /// - public List OrderNos { get; set; } = new(); - /// /// 时区 +8 +8.25 -8.5 -9 /// 不传默认+8 diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/OrderNoInfo.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/OrderNoInfo.cs index eda65e4a..3ec49a17 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/OrderNoInfo.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/OrderNoInfo.cs @@ -17,4 +17,20 @@ public class OrderNoInfo [Required] [MaxLength(100)] public string OrderNo { get; set; } = null!; +} + +public class OrderNosInfo +{ + /// + /// 订单类型 + /// + [Required] + [Range(1, int.MaxValue)] + public int OrderType { get; set; } + + /// + /// 订单号 + /// + [Required] + public List OrderNos { get; set; } = new(); } \ No newline at end of file diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs index b62cf77b..8248c8e0 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertTrackInput.cs @@ -30,18 +30,4 @@ public class UpsertTrackInput : OrderNoInfo [Required] [Range(-12, 12)] public float? TrackTimeZone { get; set; } -} - -public class NotNullAttribute : ValidationAttribute -{ - protected override ValidationResult IsValid(object value, ValidationContext validationContext) - { - if (value == null) - { - return new ValidationResult(ErrorMessage ?? "The field is required.", - new[] { validationContext.MemberName }); - } - - return ValidationResult.Success; - } } \ No newline at end of file diff --git a/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj b/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj index 0a863be2..68b939c0 100644 --- a/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj +++ b/src/SJZY.Track.Application.Contract/SJZY.Track.Application.Contract.csproj @@ -4,6 +4,7 @@ net7.0 + True 1.0.0 diff --git a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs index 55bb5b1d..5fa44212 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs @@ -29,7 +29,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe { if (@event.Visited.Contains(@event.OrderId)) { - LogHelper.Error($"轨迹订单循环依赖预警:{@event.Visited.JoinAsString(",")}"); + LogHelper.Error($"删除轨迹订单时,发现循环依赖:{@event.Visited.JoinAsString(",")}"); return; } diff --git a/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs index 50cabb23..e898fcf7 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackRefreshEventHandler.cs @@ -1,4 +1,5 @@ -using System.Linq.Expressions; +using System.Diagnostics; +using System.Linq.Expressions; using DotNetCore.CAP; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -94,47 +95,71 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe var trackUpsertEvent = @event.DeepCopy(); var paramConfig = config.ParamConfig; var contentConfigs = config.ContentConfigs; - TrackPullContentConfigDto? trackContent = null; + TrackPullContentConfigDto? matchedContentConfig = null; // 1、匹配轨迹代码 - var serviceProviderTrackCode = trackToken[paramConfig.TrackContentCodeName]?.Value(); - if (!serviceProviderTrackCode.IsNullOrWhiteSpace()) + var trackCode = trackToken[paramConfig.TrackContentCodeName]?.Value(); + if (!trackCode.IsNullOrWhiteSpace()) { - trackContent = contentConfigs.FirstOrDefault(x => x.TrackContentCodeValue == serviceProviderTrackCode); + matchedContentConfig = contentConfigs.FirstOrDefault(x => x.TrackContentCodeValue == trackCode); } // 2、匹配轨迹状态 - if (trackContent is null) + if (matchedContentConfig is null) { - var serviceProviderTrackStatus = trackToken[paramConfig.TrackStatusName]?.Value(); - if (!serviceProviderTrackStatus.IsNullOrWhiteSpace()) + var trackStatus = trackToken[paramConfig.TrackStatusName]?.Value(); + if (!trackStatus.IsNullOrWhiteSpace()) { - trackContent = contentConfigs.FirstOrDefault(x => x.TrackStatusValue == serviceProviderTrackCode); + matchedContentConfig = contentConfigs.FirstOrDefault(x => x.TrackStatusValue == trackCode); } } // 3、匹配轨迹内容 - if (trackContent is null) + if (matchedContentConfig is null) { - var serviceProviderTrackContent = trackToken[paramConfig.TrackContentName]?.Value(); - if (!serviceProviderTrackContent.IsNullOrWhiteSpace()) + var trackContent = trackToken[paramConfig.TrackContentName]?.Value(); + if (!trackContent.IsNullOrWhiteSpace()) { - trackContent = contentConfigs.FirstOrDefault(x => x.TrackContentValue == serviceProviderTrackCode); + Debug.Assert(trackContent != null, nameof(trackContent) + " != null"); + matchedContentConfig = contentConfigs.FirstOrDefault(x => x.TrackContentValue == trackCode); - // 3.1、按关键字匹配 - if (trackContent is null) + // 按关键字分析轨迹内容 + if (matchedContentConfig is null) { + foreach (var contentConfig in contentConfigs) + { + foreach (var keyword in contentConfig.TrackKeyword?.Split(',') ?? Enumerable.Empty()) + { + if (trackContent.Contains(keyword, StringComparison.OrdinalIgnoreCase)) + { + matchedContentConfig = contentConfig; + break; + } + } + + if (matchedContentConfig is null) continue; + + foreach (var keyword in contentConfig.TrackKeywordReverse?.Split(',') ?? + Enumerable.Empty()) + { + if (trackContent.Contains(keyword, StringComparison.OrdinalIgnoreCase)) + { + matchedContentConfig = null; + break; + } + } + } } } } - if (trackContent is null) return; + if (matchedContentConfig is null) return; var trackPlace = trackToken[paramConfig.TrackPlaceName]?.Value(); if (trackPlace.IsNullOrWhiteSpace()) { Expression> resultExpression = - (TrackLocationValue?)trackContent.TrackPlaceValue switch + (TrackLocationValue?)matchedContentConfig.TrackPlaceValue switch { TrackLocationValue.ArrivalPort => x => x.ArrivalPort, TrackLocationValue.ArriveCity => x => x.ArrivalCity, @@ -149,11 +174,11 @@ public class TrackRefreshEventHandler : ITransientDependency, ICapSubscribe } // 新增/更新轨迹 - trackUpsertEvent.TrackCode = trackContent.TrackContentCode; + trackUpsertEvent.TrackCode = matchedContentConfig.TrackContentCode; trackUpsertEvent.TrackPlace = trackPlace ?? "CN"; trackUpsertEvent.TrackTime = trackToken[paramConfig.TrackTimeName]?.Value() ?? DateTime.Now; trackUpsertEvent.TrackTimeZone = trackToken[paramConfig.TrackTimeZoneName]?.Value() ?? - trackContent.TrackTimeZoneValue ?? 8; + matchedContentConfig.TrackTimeZoneValue ?? 8; await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, trackUpsertEvent); } } \ 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 d2b2eafd..da60d1a4 100644 --- a/src/SJZY.Track.Application/SJZY.Track.Application.csproj +++ b/src/SJZY.Track.Application/SJZY.Track.Application.csproj @@ -8,7 +8,7 @@ - + diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs index 5c35b728..51f50f3b 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.Link.cs @@ -14,6 +14,12 @@ public partial class OrderService private readonly IBasicQuery _orderLinkQuery; private readonly ICapPublisher _capPublisher; + /// + /// 关联、解除关联订单 + /// + /// + /// + /// [HttpPost("Order/Link")] public async Task LinkOrderAsync(LinkOrderInput input) { diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs index 5c56337d..765ff6ad 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs @@ -24,6 +24,11 @@ public partial class OrderService : ApplicationService, IOrderService _orderLinkQuery = orderLinkQuery; } + /// + /// 新增、更新订单(存在就更新) + /// + /// + /// [HttpPost("Order/Upsert")] public async Task UpsertAsync(UpsertOrderInput input) { @@ -45,6 +50,12 @@ public partial class OrderService : ApplicationService, IOrderService return "创建成功"; } + /// + /// 删除订单 + /// + /// + /// + /// [HttpPost("Order/Delete")] public async Task DeleteOrderAsync(DeleteOrderInput input) { diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs index 66625f36..2e1dd08b 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs @@ -15,10 +15,10 @@ namespace SJZY.Track.Application.Services.ProvideServices; public class TrackPushPullService : ApplicationService { private readonly IOrderRepository _orderRepository; - private readonly IHttpClientProxy _httpClientProxy; + private readonly IHttpClientProxy _httpClientProxy; public TrackPushPullService(IOrderRepository orderRepository, - IHttpClientProxy httpClientProxy) + IHttpClientProxy httpClientProxy) { _orderRepository = orderRepository; _httpClientProxy = httpClientProxy; @@ -51,7 +51,7 @@ public class TrackPushPullService : ApplicationService // 批量获取轨迹 await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync( - "A012", group.Key.ServiceProviderCode, 42, data, + "A012", group.Key.ServiceProviderCode, data, GlobalConst.TrackRefreshSubscribe, JsonConvert.SerializeObject(group.Key)); } diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs index 372d3f01..35237196 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs @@ -10,6 +10,12 @@ public partial class TrackService { private readonly ITrackDetailsRepository _trackDetailsRepository; + /// + /// 查询轨迹 + /// + /// + /// + /// [HttpPost("Track/Query")] public async Task> QueryAsync(GetTrackInput input) { diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs index 7c84dbc3..fbd0fd99 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.cs @@ -29,6 +29,12 @@ public partial class TrackService : ApplicationService, ITrackService _trackDetailsRepository = trackDetailsRepository; } + /// + /// 新增、更新轨迹(存在就更新) + /// + /// + /// + /// [HttpPost("Track/Upsert")] public async Task UpsertTrackAsync(UpsertTrackInput input) { @@ -52,24 +58,68 @@ public partial class TrackService : ApplicationService, ITrackService return true; } + /// + /// 批量新增、更新轨迹 + /// + /// + /// + /// + [HttpPost("Track/BatchUpsert")] + public async Task BatchUpsertTrackAsync(BatchUpsertTrackInput input) + { + input.OrderNos = input.OrderNos.Where(x => !x.IsNullOrWhiteSpace()).Distinct().ToList(); // 单号去重、去空 + if (input.OrderNos.Count == 0) + { + throw new BusinessException(message: "订单一个都不存在"); + } + + var orders = await _orderRepository.GetListAsync(x => + x.OrderType == input.OrderType && input.OrderNos.Contains(x.OrderNo), x => new + { + x.Id, x.OrderNo, x.SubSystemId, x.IsPushCompleted, x.CustomId + }); + + foreach (var order in orders) + { + // 新增/更新轨迹 + var @event = new TrackUpsertEvent + { + TrackCode = input.TrackCode, + TrackPlace = input.TrackPlace, + TrackTime = input.TrackTime, + TrackTimeZone = input.TrackTimeZone, + OrderType = input.OrderType, + OrderNo = order.OrderNo, + OrderId = order.Id, + SubSystemId = order.SubSystemId, + IsPushCompleted = order.IsPushCompleted, + CustomId = order.CustomId + }; + await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, @event); + } + + return true; + } + + /// + /// 删除轨迹 + /// + /// + /// + /// [HttpPost("Track/Delete")] public async Task DeleteTrackAsync(DeleteTrackInput input) { var order = await _orderRepository.GetFirstAsync(x => x.OrderType == input.OrderType && x.OrderNo == input.OrderNo, x => new { - x.Id, x.SubSystemId, x.IsCompleted + x.Id, x.SubSystemId }); if (order == default) { throw new BusinessException(message: $"订单:{input.OrderNo}不存在"); } - if (order.IsCompleted) - { - throw new BusinessException(message: $"订单:{input.OrderNo}已完成无法删除轨迹"); - } - var codes = await _provideQueries.GetCanDeleteTrackCodesAsync(new List(order.Id), input.TrackCodes); if (codes.Count == 0) @@ -89,6 +139,12 @@ public partial class TrackService : ApplicationService, ITrackService return true; } + /// + /// 批量删除轨迹 + /// + /// + /// + /// [HttpPost("Track/BatchDelete")] public async Task BatchDeleteTrackAsync(BatchDeleteTrackInput input) { diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs index e6aae4f0..99290105 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs @@ -1,4 +1,3 @@ -using Elasticsearch.Net; using Nest; using SJZY.Expand.ABP.Core.Logger; using SJZY.Expand.ElasticSearch.Services; @@ -40,7 +39,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract request .Index(index.IndexName) - .Refresh(Refresh.True) // 可选:立即刷新索引使更改立即可见 + //.Refresh(Refresh.True) // 可选:立即刷新索引使更改立即可见 ); if (!r.IsValid) From 2e86b7f7ba6aa1b2e227e4a6a9fce3d0921a7f4e 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, 12 Mar 2024 17:28:15 +0800 Subject: [PATCH 2/7] =?UTF-8?q?change=E3=80=90=E6=9B=B4=E6=96=B0=E8=BD=A8?= =?UTF-8?q?=E8=BF=B9=E9=9C=80=E8=A6=81=E6=9B=B4=E6=96=B0=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=9A=84=E6=9C=80=E6=96=B0=E8=BD=A8=E8=BF=B9=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E3=80=91https://www.tapd.cn/60863849/prong/tasks/view/11608638?= =?UTF-8?q?49001016391?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Events/UpdateOrderTrackEvent.cs | 11 +++++--- .../EventHandlers/TrackDeleteEventHandler.cs | 25 ++++++++++++++++++- .../EventHandlers/TrackUpsertEventHandler.cs | 2 +- .../UpdateOrderTrackEventHandler.cs | 22 ++++++++++++---- .../Aggregates/OrderAggregate/OrderEntity.cs | 20 ++++++++++----- .../ITrackDetailsRepository.cs | 9 ++++++- .../TrackDetailsIndex.cs | 5 ++++ src/SJZY.Track.Domain/GlobalConst.cs | 5 ++++ .../Repositories/TrackDetailsRepository.cs | 25 ++++++++++++++++++- 9 files changed, 106 insertions(+), 18 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Events/UpdateOrderTrackEvent.cs b/src/SJZY.Track.Application.Contract/Events/UpdateOrderTrackEvent.cs index f04cd86c..779415e2 100644 --- a/src/SJZY.Track.Application.Contract/Events/UpdateOrderTrackEvent.cs +++ b/src/SJZY.Track.Application.Contract/Events/UpdateOrderTrackEvent.cs @@ -7,11 +7,16 @@ public class UpdateOrderTrackEvent /// public int OrderId { get; set; } + /// + /// 是否删除引起的更新 + /// + public bool IsDelete { get; set; } + /// /// 此次发生的轨迹是否意味完成 /// public bool IsCompleted { get; set; } - + /// /// 轨迹内容 /// @@ -21,7 +26,7 @@ public class UpdateOrderTrackEvent /// 轨迹内容英文 /// public string TrackEnContent { get; set; } = null!; - + /// /// 轨迹发生地 /// @@ -31,7 +36,7 @@ public class UpdateOrderTrackEvent /// 轨迹发生时间 /// public DateTime TrackTime { get; set; } - + /// /// 轨迹时区 /// diff --git a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs index 5fa44212..1994118d 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackDeleteEventHandler.cs @@ -56,7 +56,30 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe private async Task DeleteTrackAsync(TrackDeleteEvent @event) { // 删除轨迹 - await _trackDetailsRepository.DeleteTrackAsync(@event.OrderId, @event.TrackCodes); + var isOk = await _trackDetailsRepository.DeleteTrackAsync(@event.OrderId, @event.TrackCodes); + + // 触发订单主表更新事件 + if (isOk) + { + var track = await _trackDetailsRepository.GetLatestAsync(@event.OrderId); + var updateOrderEvent = track == default + ? new UpdateOrderTrackEvent + { + OrderId = @event.OrderId, + IsDelete = true + } + : new UpdateOrderTrackEvent + { + OrderId = @event.OrderId, + IsCompleted = track.IsCompleted, + TrackContent = track.TrackContent, + TrackEnContent = track.TrackEnContent, + TrackPlace = track.TrackPlace, + TrackTime = track.TrackTime, + TrackTimeZone = track.TrackTimeZone + }; + await _capPublisher.PublishAsync(GlobalConst.UpdateOrderTrackSubscribe, updateOrderEvent); + } // 根据订单关联关系异步向下刷 var linkedOrders = await _orderRepository.GetLinkedOrdersAsync(@event.OrderId); diff --git a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs index 5784d125..21ddffc0 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackUpsertEventHandler.cs @@ -88,7 +88,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe TrackStatus = trackContent.Status, TrackCode = @event.TrackCode, TrackContent = trackContent.Content, - + IsCompleted = orderIsCompleted, TrackEnContent = trackContent.EnContent, TrackPlace = @event.TrackPlace, TrackTime = @event.TrackTime!.Value, diff --git a/src/SJZY.Track.Application/EventHandlers/UpdateOrderTrackEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/UpdateOrderTrackEventHandler.cs index 0901b2a0..f2fca16a 100644 --- a/src/SJZY.Track.Application/EventHandlers/UpdateOrderTrackEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/UpdateOrderTrackEventHandler.cs @@ -20,16 +20,28 @@ public class UpdateOrderTrackEventHandler : ITransientDependency, ICapSubscribe var order = await _orderRepository.GetFirstAsync(x => x.Id == @event.OrderId); if (order == default) return; - if (order.IsCompleted) return; + if (@event.IsDelete) + { + if (@event.TrackTime == default) + { + // 删除全部轨迹导致的重置行为 + order.ResetTrackInfo(); + } + else if (@event.TrackTime == order.LatestTrackTime) return; + } + else // upsert引发的更新,需要校验发生时间是否大于最新时间 + { + if (order.LatestTrackTime != null && + order.LatestTrackTime.Value.Subtract(TimeSpan.FromHours(order.LatestTrackTimeZone ?? 0)) > + @event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone))) return; + } + + order.IsCompleted = @event.IsCompleted; order.LatestTrackContent = @event.TrackContent; order.LatestTrackEnContent = @event.TrackEnContent; order.LatestTrackPlace = @event.TrackPlace; order.LatestTrackTime = @event.TrackTime; order.LatestTrackTimeZone = @event.TrackTimeZone; - if (@event.IsCompleted) order.IsCompleted = true; - else if (order.LatestTrackTime != null && - order.LatestTrackTime.Value.Subtract(TimeSpan.FromHours(order.LatestTrackTimeZone ?? 0)) > - @event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone))) return; await _orderRepository.UpdateColumnAsync(order, x => new { diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs index 04432d30..69d5f706 100644 --- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs +++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs @@ -41,7 +41,7 @@ public class OrderEntity : IFullAuditedBasicEntitys, IAggregateRoot /// [SugarColumn(ColumnName = "IsCompleted")] public bool IsCompleted { get; set; } - + /// /// 订单是否推送完成(异步维护) /// @@ -65,7 +65,7 @@ public class OrderEntity : IFullAuditedBasicEntitys, IAggregateRoot /// [SugarColumn(ColumnName = "LatestTrackTime")] public DateTime? LatestTrackTime { get; set; } - + /// /// 最新轨迹时区(异步维护) /// @@ -114,8 +114,16 @@ public class OrderEntity : IFullAuditedBasicEntitys, IAggregateRoot [SugarColumn(ColumnName = "LeavePort")] public string? LeavePort { get; set; } - [SugarColumn(IsIgnore = true)] - public List OrderFlights { get; set; } - [SugarColumn(IsIgnore = true)] - public List OrderTemplates { get; set; } + [SugarColumn(IsIgnore = true)] public List OrderFlights { get; set; } + [SugarColumn(IsIgnore = true)] public List OrderTemplates { get; set; } + + public void ResetTrackInfo() + { + IsCompleted = false; + LatestTrackContent = null; + LatestTrackEnContent = null; + LatestTrackTime = null; + LatestTrackPlace = null; + LatestTrackTimeZone = null; + } } \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs index 4025579e..34cdac01 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs @@ -19,7 +19,14 @@ public interface ITrackDetailsRepository /// /// /// - Task DeleteTrackAsync(int orderId, List trackCodes); + Task DeleteTrackAsync(int orderId, List trackCodes); Task?> GetListAsync(List orderIds); + + /// + /// 获取最近一条发生的轨迹 + /// + /// + /// + Task GetLatestAsync(int orderId); } \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs index d4f5c9e1..d5909320 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/TrackDetailsIndex.cs @@ -46,6 +46,11 @@ public class TrackDetailsIndex : IdBaseIndex /// public string TrackContent { get; set; } = null!; + /// + /// 是否意味着完成 + /// + public bool IsCompleted { get; set; } + /// /// 原轨迹内容 /// diff --git a/src/SJZY.Track.Domain/GlobalConst.cs b/src/SJZY.Track.Domain/GlobalConst.cs index 27a07bb1..629149a8 100644 --- a/src/SJZY.Track.Domain/GlobalConst.cs +++ b/src/SJZY.Track.Domain/GlobalConst.cs @@ -27,6 +27,11 @@ public class GlobalConst /// public const string UpdateOrderTrackSubscribe = "SJZY.Track.UpdateOrderTrack"; + /// + /// 轨迹删除后触发更新订单轨迹 mq订阅名称 + /// + public const string DeleteTrackAfterUpdateOrderSubscribe = "SJZY.Track.DeleteTrackAfterUpdateOrder"; + /// /// 关联订单后补轨迹 mq订阅名称 /// diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs index 99290105..8bc2739d 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs @@ -110,7 +110,28 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract trackCodes) + public async Task GetLatestAsync(int orderId) + { + var data = await Context.SearchAsync(x => x + .Source(s => s.Includes(fd => fd + .Field(f => f.IsCompleted) + .Field(f => f.TrackEnContent) + .Field(f => f.TrackContent) + .Field(f => f.TrackPlace) + .Field(f => f.TrackTime) + .Field(f => f.TrackTimeZone) + )) + .Query(q => + q.Term(f => f.OrderId, orderId) + ) + .Sort(s => s.Field(f => f.TrackTime, SortOrder.Descending)) + .Size(1) + ); + + return data.Documents.FirstOrDefault(); + } + + public async Task DeleteTrackAsync(int orderId, List trackCodes) { var r = await Context.DeleteByQueryAsync(x => x .Query( @@ -122,6 +143,8 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract 0; } public async Task<(List list, long total)> GetListAsync(TrackDetailsQueryInput input) From d23edffffc77a2c12b7f32c6d098de61d552c869 Mon Sep 17 00:00:00 2001 From: moyongzhen <2534173414@qq.com> Date: Tue, 12 Mar 2024 21:13:20 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E8=BD=A8=E8=BF=B9=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=97=AE=E9=A2=98=E7=B1=BB=E5=9E=8B=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E5=92=8C=E9=97=AE=E9=A2=98=E6=8F=8F=E8=BF=B0=E8=BF=94?= =?UTF-8?q?=E5=8F=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProvideServices/GetPageTrackOrderInput.cs | 33 +++++++++++++++++++ .../ProvideServices/TrackPushPullService.cs | 4 +-- .../Aggregates/OrderAggregate/OrderEntity.cs | 12 +++++++ .../Dtos/Order/GetPageTrackOrderInputVO.cs | 29 ++++++++++++++++ .../Repositories/OrderRepository.cs | 7 +++- 5 files changed, 82 insertions(+), 3 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs index 81aa553e..64191392 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs @@ -17,6 +17,16 @@ public class GetPageTrackOrderInput : PageInfoInput /// public string? OrderNos { get; set; } + /// + /// tab标签类型 0 全部, 1 异常 2 预警 + /// + public int TabType { get; set; } + + /// + /// 当tab选中 0 默认不传 1 直接写死传值 [1,4] 2 传 [2,4] + /// + public List? QuestionTypeIds { get; set; } + /// /// 创建时间开始 /// @@ -113,5 +123,28 @@ public class TrackOrderDto /// public string SubSystem { get; set; } + /// + /// 子系统id + /// public int SubSystemId { get; set; } + + /// + /// 问题类型(主数据枚举TrackQuestionType) + /// + public int QuestionType { get; set; } + + /// + /// 问题类型名称 + /// + public string? QuestionTypeName { get; set; } + + /// + /// 问题描述(主数据枚举TrackProblemDescription) + /// + public int ProblemDescription { get; set; } + + /// + /// 问题描述名称 + /// + public string? ProblemDescriptionName { get; set; } } \ No newline at end of file diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs index 2e1dd08b..53b71e31 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs @@ -49,9 +49,9 @@ public class TrackPushPullService : ApplicationService x.OrderNo }).ToList(); - // 批量获取轨迹 + // 批量获取轨迹 这里报错了,我先随便给个 写死的主体值 await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync( - "A012", group.Key.ServiceProviderCode, data, + "A012", group.Key.ServiceProviderCode, 42, data, GlobalConst.TrackRefreshSubscribe, JsonConvert.SerializeObject(group.Key)); } diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs index 69d5f706..66f704a3 100644 --- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs +++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs @@ -108,6 +108,18 @@ public class OrderEntity : IFullAuditedBasicEntitys, IAggregateRoot [SugarColumn(ColumnName = "LeaveCountry")] public string LeaveCountry { get; set; } = null!; + /// + /// 问题类型(主数据枚举TrackQuestionType) + /// + [SugarColumn(ColumnName = "QuestionType")] + public int QuestionType { get; set; } + + /// + /// 问题描述(主数据枚举TrackProblemDescription) + /// + [SugarColumn(ColumnName = "ProblemDescription")] + public int ProblemDescription { get; set; } + /// /// 起运港口 /// diff --git a/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs b/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs index c1b97cc5..99a8d068 100644 --- a/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs +++ b/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs @@ -18,6 +18,15 @@ namespace SJZY.Track.Domain.Dtos.Order ///// //public List? OrderNos { get; set; } + /// + /// 当tab选中 0 默认不传 1 直接写死传值 [1,4] 2 传 [2,4] + /// + public int TabType { get; set; } + + /// + /// 当tab选中 1 直接写死传值 [1,4] 2 传 [2,4] + /// + public List? QuestionTypeIds { get; set; } /// /// 单号 @@ -124,5 +133,25 @@ namespace SJZY.Track.Domain.Dtos.Order /// 轨迹模板Id数组 /// public List? TrackTemplateIds { get; set; } + + /// + /// 问题类型(主数据枚举TrackQuestionType) + /// + public int QuestionType { get; set; } + + /// + /// 问题类型名称 + /// + public string? QuestionTypeName { get; set; } + + /// + /// 问题描述(主数据枚举TrackProblemDescription) + /// + public int ProblemDescription { get; set; } + + /// + /// 问题描述名称 + /// + public string? ProblemDescriptionName { get; set; } } } diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs index be9cc648..eeeeeb14 100644 --- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs @@ -137,6 +137,7 @@ public class OrderRepository : BasicRepository, IOrderRepository, I (a, b, c) => a.CreateTime >= input.CreateTimeStart) .WhereIF((!input.CreateTimeStart.HasValue) && input.CreateTimeEnd.HasValue, (a, b, c) => a.CreateTime <= input.CreateTimeEnd) + .WhereIF(input.TabType>0 && (!input.QuestionTypeIds.IsNullOrEmpty()), (a, b, c) => input.QuestionTypeIds.Contains(a.QuestionType)) .OrderByDescending((a, b, c) => a.CreateTime) .Select((a, b, c) => new TrackOrderVO { @@ -148,6 +149,10 @@ public class OrderRepository : BasicRepository, IOrderRepository, I .Return("箱/袋单").ElseIF(a.OrderType == 4).Return("FBA订单").End(""), CustomerShortName = b.Abbreviation, CustomerCode = b.Code, + QuestionType = a.QuestionType, + QuestionTypeName = SqlFunc.IF(a.QuestionType == 1).Return("异常").ElseIF(a.QuestionType == 2).Return("预警").End(""), + ProblemDescription = a.ProblemDescription, + ProblemDescriptionName =SqlFunc.IF(a.ProblemDescription == 1).Return("推送异常").ElseIF(a.ProblemDescription == 2).Return("推送预警").End(""), //TrackTemplateNames = SqlFunc.Subqueryable() // .LeftJoin((aa, bb) => aa.TrackTemplateId == bb.Id) // .Where((aa, bb) => a.Id == aa.OrderId).SelectStringJoin((aa, bb) => bb.Name, ","), @@ -206,7 +211,7 @@ public class OrderRepository : BasicRepository, IOrderRepository, I a.TrackTemplateNames = trackTemplateList.Where(b => b.OrderId == a.Id).Select(a => a.Name) .JoinAsString(","); - a.TrackTemplateIds = trackTemplateList.Where(b => b.OrderId == a.Id).Select(a => a.TemplateId).ToList(); + a.TrackTemplateIds = trackTemplateList.Where(b => b.OrderId == a.Id).Where(b => b.TemplateId>0).Select(a => a.TemplateId).ToList(); }); } From 10a68b817af4deac4a2a5bddbcdba2c227ca5303 Mon Sep 17 00:00:00 2001 From: moyongzhen <2534173414@qq.com> Date: Tue, 12 Mar 2024 21:23:47 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E9=87=8D=E6=96=B0=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/ProvideServices/TrackPushPullService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs index 53b71e31..8e32d1c1 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushPullService.cs @@ -51,7 +51,7 @@ public class TrackPushPullService : ApplicationService // 批量获取轨迹 这里报错了,我先随便给个 写死的主体值 await _httpClientProxy.Service.BatchForwardThenPushToQueueAsync( - "A012", group.Key.ServiceProviderCode, 42, data, + "A012", group.Key.ServiceProviderCode, data, GlobalConst.TrackRefreshSubscribe, JsonConvert.SerializeObject(group.Key)); } From 6bea8224f09417457199af70b09f2e5ced7eb63e Mon Sep 17 00:00:00 2001 From: moyongzhen <2534173414@qq.com> Date: Wed, 13 Mar 2024 09:34:42 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProvideServices/GetPageTrackOrderInput.cs | 19 +++++++++++++++++-- .../Dtos/Order/GetPageTrackOrderInputVO.cs | 13 +++++++++---- .../Repositories/OrderRepository.cs | 13 ++++++++++++- 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs index 64191392..9bd8fcc9 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs @@ -22,10 +22,20 @@ public class GetPageTrackOrderInput : PageInfoInput /// public int TabType { get; set; } + ///// + ///// 当tab选中 0 默认不传 1 直接写死传值 [1,4] 2 传 [2,4] + ///// + //public List? QuestionTypeIds { get; set; } + /// - /// 当tab选中 0 默认不传 1 直接写死传值 [1,4] 2 传 [2,4] + /// 订单类型 /// - public List? QuestionTypeIds { get; set; } + public int? TrackOrderType { get; set; } + + /// + /// 客户id + /// + public int? CustomerId { get; set; } /// /// 创建时间开始 @@ -83,6 +93,11 @@ public class TrackOrderDto /// public string? CustomerCode { get; set; } + /// + /// 客户id + /// + public int CustomerId { get; set; } + /// /// 订单明细(json) /// diff --git a/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs b/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs index 99a8d068..b0abd5b0 100644 --- a/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs +++ b/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs @@ -23,10 +23,10 @@ namespace SJZY.Track.Domain.Dtos.Order /// public int TabType { get; set; } - /// - /// 当tab选中 1 直接写死传值 [1,4] 2 传 [2,4] - /// - public List? QuestionTypeIds { get; set; } + ///// + ///// 当tab选中 1 直接写死传值 [1,4] 2 传 [2,4] + ///// + //public List? QuestionTypeIds { get; set; } /// /// 单号 @@ -84,6 +84,11 @@ namespace SJZY.Track.Domain.Dtos.Order /// public string? CustomerCode { get; set; } + /// + /// 客户id + /// + public int CustomerId { get; set; } + ///// ///// 订单明细(json) ///// diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs index eeeeeb14..43de6ccb 100644 --- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs @@ -5,6 +5,7 @@ using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate; using SJZY.Track.Domain.Dtos.Order; using SJZY.Track.Domain.VEntities; using SJZY.Track.Repository.VData.Entitys; +using SqlSugar; namespace SJZY.Track.Repository.Repositories; @@ -121,10 +122,19 @@ public class OrderRepository : BasicRepository, IOrderRepository, I public async Task> GetPageTrackOrder(GetPageTrackOrderInputVO input) { List orderNoList = new List(); + List questionTypeIds = new List(); if (!input.OrderNos.IsNullOrWhiteSpace()) { orderNoList = input.OrderNos.Split(new char[] { ',', ',', ':', ':' }).ToList(); } + if (input.TabType==1) + { + questionTypeIds= new List { 1, 4 }; + } + else if (input.TabType==2) + { + questionTypeIds= new List { 2, 4 }; + } var pageList = await Context.Queryable() .LeftJoin((a, b) => a.CustomId == b.Id && b.IsDeleted == false) @@ -137,7 +147,7 @@ public class OrderRepository : BasicRepository, IOrderRepository, I (a, b, c) => a.CreateTime >= input.CreateTimeStart) .WhereIF((!input.CreateTimeStart.HasValue) && input.CreateTimeEnd.HasValue, (a, b, c) => a.CreateTime <= input.CreateTimeEnd) - .WhereIF(input.TabType>0 && (!input.QuestionTypeIds.IsNullOrEmpty()), (a, b, c) => input.QuestionTypeIds.Contains(a.QuestionType)) + .WhereIF(input.TabType>0 && (!questionTypeIds.IsNullOrEmpty()), (a, b, c) => questionTypeIds.Contains(a.QuestionType)) .OrderByDescending((a, b, c) => a.CreateTime) .Select((a, b, c) => new TrackOrderVO { @@ -149,6 +159,7 @@ public class OrderRepository : BasicRepository, IOrderRepository, I .Return("箱/袋单").ElseIF(a.OrderType == 4).Return("FBA订单").End(""), CustomerShortName = b.Abbreviation, CustomerCode = b.Code, + CustomerId = a.CustomId, QuestionType = a.QuestionType, QuestionTypeName = SqlFunc.IF(a.QuestionType == 1).Return("异常").ElseIF(a.QuestionType == 2).Return("预警").End(""), ProblemDescription = a.ProblemDescription, From f19ba6c01a3a760fefc74773f448759d5ad2a1d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com> Date: Wed, 13 Mar 2024 10:08:41 +0800 Subject: [PATCH 6/7] =?UTF-8?q?add=20=E5=88=A0=E9=99=A4=E5=BC=95=E5=8F=91?= =?UTF-8?q?=E8=BD=A8=E8=BF=B9=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EventHandlers/UpdateOrderTrackEventHandler.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/SJZY.Track.Application/EventHandlers/UpdateOrderTrackEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/UpdateOrderTrackEventHandler.cs index f2fca16a..72316cef 100644 --- a/src/SJZY.Track.Application/EventHandlers/UpdateOrderTrackEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/UpdateOrderTrackEventHandler.cs @@ -24,12 +24,15 @@ public class UpdateOrderTrackEventHandler : ITransientDependency, ICapSubscribe { if (@event.TrackTime == default) { + if (order.LatestTrackTime == null) return; // 删除全部轨迹导致的重置行为 order.ResetTrackInfo(); } - else if (@event.TrackTime == order.LatestTrackTime) return; + else if (order.LatestTrackTime != null && + order.LatestTrackTime.Value.Subtract(TimeSpan.FromHours(order.LatestTrackTimeZone ?? 0)) == + @event.TrackTime.Subtract(TimeSpan.FromHours(@event.TrackTimeZone))) return; } - else // upsert引发的更新,需要校验发生时间是否大于最新时间 + else // upsert引发的更新 { if (order.LatestTrackTime != null && order.LatestTrackTime.Value.Subtract(TimeSpan.FromHours(order.LatestTrackTimeZone ?? 0)) > From 953bca93f54b51dcf3768ba14bfa2e37f23df645 Mon Sep 17 00:00:00 2001 From: moyongzhen <2534173414@qq.com> Date: Wed, 13 Mar 2024 10:16:27 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E8=BD=A8=E8=BF=B9=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dtos/ProvideServices/GetPageTrackOrderInput.cs | 10 +++++----- .../Dtos/Order/GetPageTrackOrderInputVO.cs | 10 ++++++++++ .../Repositories/OrderRepository.cs | 7 ++++++- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs index 9bd8fcc9..c6a143df 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs @@ -22,11 +22,6 @@ public class GetPageTrackOrderInput : PageInfoInput /// public int TabType { get; set; } - ///// - ///// 当tab选中 0 默认不传 1 直接写死传值 [1,4] 2 传 [2,4] - ///// - //public List? QuestionTypeIds { get; set; } - /// /// 订单类型 /// @@ -37,6 +32,11 @@ public class GetPageTrackOrderInput : PageInfoInput /// public int? CustomerId { get; set; } + ///// + ///// 当tab选中 0 默认不传 1 直接写死传值 [1,4] 2 传 [2,4] + ///// + //public List? QuestionTypeIds { get; set; } + /// /// 创建时间开始 /// diff --git a/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs b/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs index b0abd5b0..788c9fb8 100644 --- a/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs +++ b/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs @@ -28,6 +28,16 @@ namespace SJZY.Track.Domain.Dtos.Order ///// //public List? QuestionTypeIds { get; set; } + /// + /// 订单类型 + /// + public int? TrackOrderType { get; set; } + + /// + /// 客户id + /// + public int? CustomerId { get; set; } + /// /// 单号 /// diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs index 43de6ccb..e160ec0b 100644 --- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs @@ -123,6 +123,7 @@ public class OrderRepository : BasicRepository, IOrderRepository, I { List orderNoList = new List(); List questionTypeIds = new List(); + int ques = 0; if (!input.OrderNos.IsNullOrWhiteSpace()) { orderNoList = input.OrderNos.Split(new char[] { ',', ',', ':', ':' }).ToList(); @@ -130,10 +131,12 @@ public class OrderRepository : BasicRepository, IOrderRepository, I if (input.TabType==1) { questionTypeIds= new List { 1, 4 }; + ques = questionTypeIds.Sum(); } else if (input.TabType==2) { questionTypeIds= new List { 2, 4 }; + ques = questionTypeIds.Sum(); } var pageList = await Context.Queryable() @@ -147,7 +150,9 @@ public class OrderRepository : BasicRepository, IOrderRepository, I (a, b, c) => a.CreateTime >= input.CreateTimeStart) .WhereIF((!input.CreateTimeStart.HasValue) && input.CreateTimeEnd.HasValue, (a, b, c) => a.CreateTime <= input.CreateTimeEnd) - .WhereIF(input.TabType>0 && (!questionTypeIds.IsNullOrEmpty()), (a, b, c) => questionTypeIds.Contains(a.QuestionType)) + .WhereIF(input.CustomerId>0, (a, b, c) => a.CustomId==input.CustomerId) + .WhereIF(input.TrackOrderType>0, (a, b, c) => a.OrderType==input.TrackOrderType) + .WhereIF(input.TabType>0 && (!questionTypeIds.IsNullOrEmpty()), (a, b, c) => (a.QuestionType&ques)>0) .OrderByDescending((a, b, c) => a.CreateTime) .Select((a, b, c) => new TrackOrderVO {