diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetOrderDetailsInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetOrderDetailsInput.cs index c82bf122..50572e48 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetOrderDetailsInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetOrderDetailsInput.cs @@ -11,29 +11,34 @@ public class TrackOrderDetailDto { /// - /// 轨迹订单id + /// Id es主键 /// public int Id { get; set; } + /// + /// 轨迹订单id + /// + public int OrderId { set; get; } + /// /// 轨迹代码 /// - public string Code { get; set; } + public string? Code { get; set; } /// /// 轨迹内容 /// - public string Content { get; set; } + public string? Content { get; set; } /// /// 轨迹内容英文 /// - public string EnContent { get; set; } + public string? EnContent { get; set; } /// /// 轨迹发生地 /// - public string TrackPlace { get; set; } + public string? TrackPlace { get; set; } /// /// 轨迹发生时间 @@ -43,6 +48,6 @@ /// /// 轨迹发生时区 /// - public string TrackTimeZone { get; set; } + public string? 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 578c31b2..7f6898d7 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackInput.cs @@ -1,3 +1,5 @@ +using System.ComponentModel.DataAnnotations; + namespace SJZY.Track.Application.Contract.Dtos.ProvideServices; public class GetTrackInput @@ -5,6 +7,8 @@ public class GetTrackInput /// /// 订单类型 /// + [Required] + [Range(1, int.MaxValue)] public int OrderType { get; set; } /// @@ -14,12 +18,14 @@ public class GetTrackInput /// /// 时区 +8 +8.25 -8.5 -9 + /// 不传默认+8 /// - public float TimeZone { get; set; } + public float? TimeZone { get; set; } = 8; /// /// 排序方式 /// + [Required] public SortMethod SortMethod { get; set; } } diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertOrderInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertOrderInput.cs index 880c43a5..91ae6d11 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertOrderInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/UpsertOrderInput.cs @@ -7,6 +7,7 @@ public class UpsertOrderInput : UpdateOrderInput /// /// 客户id /// + [Required] public int CustomId { get; set; } } diff --git a/src/SJZY.Track.Application/AutoMapper/OrderAutoMapperProfile.cs b/src/SJZY.Track.Application/AutoMapper/OrderAutoMapperProfile.cs index 27f73eda..dc814b49 100644 --- a/src/SJZY.Track.Application/AutoMapper/OrderAutoMapperProfile.cs +++ b/src/SJZY.Track.Application/AutoMapper/OrderAutoMapperProfile.cs @@ -21,7 +21,8 @@ public class OrderAutoMapperProfile : Profile CreateMap(MemberList.None); CreateMap(MemberList.None); CreateMap, UnifyPageResultDto>(MemberList.None); - CreateMap(MemberList.None).ForMember(dest => dest.Id, opt => opt.MapFrom(m => m.OrderId)) + CreateMap(MemberList.None) + .ForMember(dest => dest.Id, opt => opt.Ignore()) .ForMember(dest => dest.Code, opt => opt.MapFrom(m => m.TrackCode)) .ForMember(dest => dest.Content, opt => opt.MapFrom(m => m.TrackContent)) .ForMember(dest => dest.EnContent, opt => opt.MapFrom(m => m.TrackEnContent)) diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderLinkService.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderLinkService.cs index 73c08dd9..77805cf7 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/OrderLinkService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderLinkService.cs @@ -43,8 +43,8 @@ public class OrderLinkService : ApplicationService if (input.LinkOrderNos.Count < 1 || input.LinkOrderType == 0) return true; - // 单号去重 - input.LinkOrderNos = input.LinkOrderNos.Distinct().ToList(); + // 单号去重,去空 + input.LinkOrderNos = input.LinkOrderNos.Where(x => !x.IsNullOrWhiteSpace()).Distinct().ToList(); // 解绑 if (!input.IsLink) return await UnLinkOrderAsync(input); diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs index 226be0ef..ffb67836 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs @@ -2,6 +2,7 @@ using SJZY.Track.Domain.Aggregates.OrderAggregate; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; using SJZY.Track.Domain.Dtos.Order; +using SJZY.UserCenter.HttpApi.Services; namespace SJZY.Track.Application.Services.ProvideServices; @@ -42,7 +43,7 @@ public class OrderService : ApplicationService } order = ObjectMapper.Map(input); - order.SubSystemId = 1; + order.SubSystemId = CurrentUserRequest.SubSystemId; order.OrderTemplates = ObjectMapper.Map, List>(input.Templates!); order.OrderFlights = ObjectMapper.Map, List>(input.FlightInfos!); @@ -85,6 +86,11 @@ public class OrderService : ApplicationService if (!trackDetails.IsNullOrEmpty()) { var list = ObjectMapper.Map, List>(trackDetails); + int id = 1; + list.ForEach(a => + { + a.Id = id++; + }); return list; } diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackQueryService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackQueryService.cs index 96bb5de5..8b6fd2cc 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackQueryService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackQueryService.cs @@ -22,7 +22,7 @@ public class TrackQueryService : ApplicationService IProvideQueries provideQueries) { _trackDetailsRepository = trackDetailsRepository; - _orderRepository=orderRepository; + _orderRepository = orderRepository; _provideQueries = provideQueries; } @@ -44,7 +44,6 @@ public class TrackQueryService : ApplicationService input.OrderNos = input.OrderNos.Distinct().ToList(); // 单号去重 var details = await _trackDetailsRepository.GetListAsync(input.OrderType, input.OrderNos); - var isTurn = input.TimeZone != 0; foreach (var group in details.GroupBy(x => x.OrderId)) { var item = new GetTrackOutput(); @@ -57,8 +56,8 @@ public class TrackQueryService : ApplicationService Status = x.TrackStatus, Content = x.TrackContent, Location = x.TrackPlace, - Time = isTurn ? x.TrackTime.AddHours(input.TimeZone - x.TraceTimeZone) : x.TrackTime, - TimeZone = isTurn ? input.TimeZone : x.TraceTimeZone + Time = x.TrackTime.AddHours(input.TimeZone!.Value - x.TraceTimeZone), + TimeZone = input.TimeZone!.Value }).ToList(); res.Add(item); @@ -69,43 +68,6 @@ public class TrackQueryService : ApplicationService return res; } - #region 轨迹订单明细列表 - /// - /// 根据轨迹订单id获取轨迹订单明细列表 - /// - /// - /// - [HttpPost("/Track/GetDetails")] - public async Task> GetOrderDetails(GetOrderDetailsInput input) - { - var trackDetails = await _trackDetailsRepository.GetListAsync(input.OrderId); - if (!trackDetails.IsNullOrEmpty()) - { - var list = ObjectMapper.Map, List>(trackDetails); - return list; - } - - return new List(); - } - #endregion - - #region 轨迹订单分页 - /// - /// 获取分页的轨迹订单 - /// - /// - /// - [HttpPost("/Track/GetTrackOrderList")] - public async Task> GetPageTrackOrder(GetPageTrackOrderInput input) - { - var vo = ObjectMapper.Map(input); - var pageList = await _orderRepository.GetPageTrackOrder(vo); - var pageResultDto = - ObjectMapper.Map, UnifyPageResultDto>(pageList); - return pageResultDto; - } - #endregion - private async Task TrackDetailSort(List list, GetTrackInput input) { switch (input.SortMethod) diff --git a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs new file mode 100644 index 00000000..b0c86ec2 --- /dev/null +++ b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs @@ -0,0 +1,74 @@ +using SJZY.Track.Application.Contract.Dtos.ProvideServices; +using SJZY.Track.Domain.Aggregates.OrderAggregate; +using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; +using SJZY.Track.Domain.Dtos.Order; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +namespace SJZY.Track.Application.Services.TrackOrders +{ + [ApiExplorerSettings(GroupName = "轨迹订单")] + [Route("/Track/Order")] + public class TrackOrderService : ApplicationService, ITransientDependency + { + private readonly IOrderRepository _orderRepository; + private readonly ITrackDetailsRepository _trackDetailsRepository; + + public TrackOrderService( + IOrderRepository orderRepository, + ITrackDetailsRepository trackDetailsRepository + ) + { + this._orderRepository=orderRepository; + this._trackDetailsRepository=trackDetailsRepository; + + } + + #region 轨迹订单明细 + + /// + /// 根据轨迹订单id获取轨迹订单明细列表 + /// + /// + /// + [HttpPost("GetDetails")] + public async Task> GetOrderDetails(GetOrderDetailsInput input) + { + var trackDetails = await _trackDetailsRepository.GetListAsync(input.OrderId); + if (!trackDetails.IsNullOrEmpty()) + { + var list = ObjectMapper.Map, List>(trackDetails); + int id = 1; + list.ForEach(a => + { + a.Id = id++; + }); + return list; + } + + return new List(); + } + #endregion + + #region 轨迹订单列表 + /// + /// 获取分页的轨迹订单 + /// + /// + /// + [HttpPost("GetTrackOrderList")] + public async Task> GetPageTrackOrder(GetPageTrackOrderInput input) + { + var vo = ObjectMapper.Map(input); + var pageList = await _orderRepository.GetPageTrackOrder(vo); + var pageResultDto = + ObjectMapper.Map, UnifyPageResultDto>(pageList); + return pageResultDto; + } + #endregion + } +} diff --git a/src/SJZY.Track.Application/Services/TrackPull/TrackPullService.cs b/src/SJZY.Track.Application/Services/TrackPull/TrackPullService.cs index df09c551..34998b29 100644 --- a/src/SJZY.Track.Application/Services/TrackPull/TrackPullService.cs +++ b/src/SJZY.Track.Application/Services/TrackPull/TrackPullService.cs @@ -222,7 +222,7 @@ public class TrackPullService : ApplicationService, ITransientDependency throw new BusinessException(message: _stringLocalizer["IsTrackPullContentValueAny"]); else if (!input.TrackKeywords.IsNullOrEmpty()) { - Expression> trackKeywordExp = _ => true; + Expression> trackKeywordExp = _ => false; input.TrackKeywords!.ForEach(item => { trackKeywordExp = trackKeywordExp.Or(x => SqlFunc.SplitIn(x.TrackKeyword, item)); }); if (await _trackPullConfigRepository.IsContentAnyAsync(isContentAnyExp.And(trackKeywordExp))) diff --git a/src/SJZY.Track.Repository/Queries/ProvideQueries.cs b/src/SJZY.Track.Repository/Queries/ProvideQueries.cs index 064f9445..a44a15bc 100644 --- a/src/SJZY.Track.Repository/Queries/ProvideQueries.cs +++ b/src/SJZY.Track.Repository/Queries/ProvideQueries.cs @@ -56,7 +56,7 @@ public class ProvideQueries : ISugarRepository, IProvideQueries, .OrderBy(a => a.Sort) .Select((a, b) => new OrderedTrackCodeDto { - TemplateId = a.Id, + TemplateId = a.TrackTemplateId, Code = b.Code }) .ToListAsync(); diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs index 728a0606..b1bb6476 100644 --- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs @@ -61,17 +61,16 @@ public class OrderRepository : BasicRepository, IOrderRepository, I public async Task> GetLinkedOrdersAsync(int orderId) { return await Context.Queryable() - .LeftJoin((a, b) => a.Id == b.OrderId) - .LeftJoin((a, b, c) => b.LinkOrderId == c.Id) - .Where(a => a.Id == orderId) - .Select((a, b, c) => new LinkedOrderVO + .LeftJoin((a, b) => a.LinkOrderId == b.Id) + .Where(a => a.OrderId == orderId) + .Select((a, b) => new LinkedOrderVO { - OrderId = c.Id, - OrderType = c.OrderType, - OrderNo = c.OrderNo, - SubSystemId = c.SubSystemId, - IsPushCompleted = c.IsPushCompleted, - CustomId = c.CustomId + OrderId = b.Id, + OrderType = b.OrderType, + OrderNo = b.OrderNo, + SubSystemId = b.SubSystemId, + IsPushCompleted = b.IsPushCompleted, + CustomId = b.CustomId }) .ToListAsync(); } diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs index 98a4d7d3..cf78c66f 100644 --- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs @@ -44,7 +44,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract(index.Id, u => u .Index(index.IndexName) .Doc(index) - //.Refresh(Refresh.True) // 可选:立即刷新索引使更改立即可见 + //.Refresh(Refresh.True) // 可选:立即刷新索引使更改立即可见 ); if (!r.IsValid) { - LogHelper.Error($"轨迹数据更新失败,原因:{r.DebugInformation}。"); + LogHelper.Error($"轨迹更新失败,原因:{r.DebugInformation}。"); } } } @@ -68,6 +68,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract(x => x .Source(s => s.Includes(fd => fd + .Field(f => f.OrderNo) .Field(f => f.TrackStatus) .Field(f => f.TrackCode) .Field(f => f.TrackContent) @@ -89,22 +90,26 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract?> GetListAsync(int orderId) { - var data = await Context.SearchAsync(x => x.Query(q => q.Term(t => t.OrderId, orderId)).Size(1000) - .Sort(s => s.Field(f => f.TrackTime, SortOrder.Descending))); + var data = await Context.SearchAsync(x => x.Query(q => q.Term(t => t.OrderId, orderId)) + .Size(1000) + .Sort(s => s.Field(f => f.TrackTime, SortOrder.Descending))); return data?.Documents?.ToList(); } public async Task DeleteTrackAsync(int orderId, List trackCodes) { - await Context.UpdateByQueryAsync(x => x + var r = await Context.UpdateByQueryAsync(x => x .Query( q => q.Term(t => t.OrderId, orderId) - && q.Terms(t => t.Field(f => f.TrackCode).Terms(trackCodes))) + && q.Terms(t => t.Field(f => f.TrackCode.Suffix("keyword")).Terms(trackCodes))) .Script(s => s .Source("ctx._source.isDeleted = true")) ); + + if (!r.IsValid) + throw new Exception($"轨迹数据删除失败,原因:{r.DebugInformation}"); } public async Task<(List list, long total)> GetListAsync(TrackDetailsQueryInput input)