diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackOrder/GetTrackCounterOutput.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackOrder/GetTrackCounterOutput.cs new file mode 100644 index 00000000..e330fabb --- /dev/null +++ b/src/SJZY.Track.Application.Contract/Dtos/TrackOrder/GetTrackCounterOutput.cs @@ -0,0 +1,19 @@ +namespace SJZY.Track.Application.Contract.Dtos.TrackOrder; + +public class GetTrackCounterOutput +{ + /// + /// 总条数 + /// + public int TotalCount { get; set; } + + /// + /// 异常数 + /// + public int ErrorCount { get; set; } + + /// + /// 预警数 + /// + public int WarnCount { get; set; } +} \ No newline at end of file diff --git a/src/SJZY.Track.Application/EventHandlers/TrackPushAfterUpdateOrderEventHandler.cs b/src/SJZY.Track.Application/EventHandlers/TrackPushAfterUpdateOrderEventHandler.cs index a514639e..268db6c1 100644 --- a/src/SJZY.Track.Application/EventHandlers/TrackPushAfterUpdateOrderEventHandler.cs +++ b/src/SJZY.Track.Application/EventHandlers/TrackPushAfterUpdateOrderEventHandler.cs @@ -27,12 +27,12 @@ public class TrackPushAfterUpdateOrderEventHandler : ITransientDependency, ICapS */ if (!@event.IsSuccess) { - order.QuestionType = (int)TrackPushProblemType.Error; + order.QuestionType = (int)TrackProblemType.Error; order.ProblemDescription = @event.Message; } else { - order.QuestionType = (int)TrackPushProblemType.None; + order.QuestionType = (int)TrackProblemType.None; if (@event.OptionType == OptionType.新增) { // tips:只有新增会影响推送进度? diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs index 9c24046b..6ce154dd 100644 --- a/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs +++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackPushService.cs @@ -110,7 +110,7 @@ public class TrackPushService : ApplicationService var orders = await _orderRepository.GetListAsync(x => !x.IsCompleted && x.QuestionType == 0 && x.LatestPushTime < time); - orders.ForEach(x => { x.QuestionType = (int)TrackPushProblemType.Warn; }); + orders.ForEach(x => { x.QuestionType = (int)TrackProblemType.Warn; }); await _orderRepository.UpdateRangeAsync(orders, x => new { x.QuestionType }); diff --git a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs index e799aeea..029d5523 100644 --- a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs +++ b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs @@ -1,8 +1,11 @@ -using SJZY.Track.Application.Contract.Dtos.ProvideServices; +using System.Diagnostics; +using SJZY.Track.Application.Contract.Dtos.ProvideServices; +using SJZY.Track.Application.Contract.Dtos.TrackOrder; using SJZY.Track.Domain.Aggregates.TrackContentAggregate; using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate; using SJZY.Track.Domain.Dtos.Order; using SJZY.Track.Domain.Dtos.TrackTemplate; +using SJZY.Track.Domain.Enums; using SJZY.Track.Domain.Queries; namespace SJZY.Track.Application.Services.TrackOrders; @@ -42,25 +45,32 @@ public class TrackOrderService : ApplicationService var list = ObjectMapper.Map, List>(trackDetails); var trackCodes = list.Where(a => !a.Code.IsNullOrWhiteSpace()).Select(a => a.Code).Distinct().ToList(); - var trackContents = await _trackContentRepository.GetTrackContentAttributeValue(new GetTemplateContentAttributeValueInputVO - { - SubSystemId = input.SubSystemId, - TrackTemplateIds = input.TrackTemplateIds, - TrackCodes = trackCodes - }); + var trackContents = await _trackContentRepository.GetTrackContentAttributeValue( + new GetTemplateContentAttributeValueInputVO + { + SubSystemId = input.SubSystemId, + TrackTemplateIds = input.TrackTemplateIds, + TrackCodes = trackCodes + }); + Debug.Assert(input.TrackTemplateIds != null, "input.TrackTemplateIds != null"); input.TrackTemplateIds = input.TrackTemplateIds.Where(a => a > 0).ToList(); int id = 1; list.ForEach(a => { a.Id = id++; - var trackContentsOfTemplates = trackContents.Where(b => b.SubSystemId == input.SubSystemId && b.TrackCode == a.Code - && input.TrackTemplateIds.Contains(b.TrackTemplateId)); - GetTemplateContentAttributeValueVO trackContent = null; - var insertData = input.TrackTemplateIds.Intersect(trackContentsOfTemplates.Select(aa => aa.TrackTemplateId)).ToList(); + var trackContentsOfTemplates = trackContents.Where(b => b.SubSystemId == input.SubSystemId && + b.TrackCode == a.Code + && input.TrackTemplateIds.Contains( + b.TrackTemplateId)).ToList(); + GetTemplateContentAttributeValueVO? trackContent = null; + var insertData = input.TrackTemplateIds + .Intersect(trackContentsOfTemplates.Select(aa => aa.TrackTemplateId)).ToList(); if (!insertData.IsNullOrEmpty()) { - trackContent = trackContentsOfTemplates.FirstOrDefault(a => a.TrackTemplateId == insertData.FirstOrDefault()); + trackContent = + trackContentsOfTemplates.FirstOrDefault(it => + it.TrackTemplateId == insertData.FirstOrDefault()); } if (trackContent != null) @@ -68,14 +78,10 @@ public class TrackOrderService : ApplicationService a.IsCanDelete = trackContent.IsCanDelete; a.IsExternal = trackContent.IsExternal; } - //else - //{ - // a.IsCanDelete=false; - // a.IsExternal=false; - //} + if (a.TrackTimeZoneValue == 0f) { - a.TrackTimeZone = $"GTM{" "}+00:00"; + a.TrackTimeZone = "GTM +00:00"; } else { @@ -85,11 +91,10 @@ public class TrackOrderService : ApplicationService TimeSpan offset = new TimeSpan(hours, minutes, 0); string timeZoneStr = offset.ToString(); string flag = a.TrackTimeZoneValue > 0f ? "+" : ""; - a.TrackTimeZone = $"GTM{" "}{flag}{timeZoneStr.RemovePostFix(":00")}"; + a.TrackTimeZone = $"GTM {flag}{timeZoneStr.RemovePostFix(":00")}"; } }); return list; - } return new List(); @@ -115,4 +120,21 @@ public class TrackOrderService : ApplicationService } #endregion + + /// + /// 获取轨迹计数器 + /// + /// + [HttpGet] + public async Task GetTrackCounterAsync() + { + var counts = await _trackOrderQueries.GetTrackProblemCountsAsync(); + + return new GetTrackCounterOutput + { + TotalCount = counts.Sum(x => x.Count), + ErrorCount = counts.FirstOrDefault(x => x.ProblemType == (int)TrackProblemType.Error)?.Count ?? 0, + WarnCount = counts.FirstOrDefault(x => x.ProblemType == (int)TrackProblemType.Warn)?.Count ?? 0, + }; + } } \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs b/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs index 3dd85154..06cfe9e9 100644 --- a/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs +++ b/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs @@ -7,21 +7,11 @@ /// public int SubSystemId { get; set; } - ///// - ///// 单号 - ///// - //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; } - /// /// 订单类型 /// @@ -142,25 +132,5 @@ /// 轨迹模板Id数组 /// public List? TrackTemplateIds { get; set; } - - /// - /// 问题类型(主数据枚举TrackQuestionType) - /// - public int QuestionType { get; set; } - - /// - /// 问题类型名称 - /// - public string? QuestionTypeName { get; set; } - - /// - /// 问题描述(主数据枚举TrackProblemDescription) - /// - public string? ProblemDescription { get; set; } - - /// - /// 问题描述名称 - /// - public string? ProblemDescriptionName { get; set; } } } \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Dtos/Order/GetTrackCounterVO.cs b/src/SJZY.Track.Domain/Dtos/Order/GetTrackCounterVO.cs new file mode 100644 index 00000000..67cc8496 --- /dev/null +++ b/src/SJZY.Track.Domain/Dtos/Order/GetTrackCounterVO.cs @@ -0,0 +1,14 @@ +namespace SJZY.Track.Domain.Dtos.Order; + +public class GetTrackCounterVO +{ + /// + /// 问题类型 + /// + public int ProblemType { get; set; } + + /// + /// 总条数 + /// + public int Count { get; set; } +} \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Enums/OrderType.cs b/src/SJZY.Track.Domain/Enums/OrderType.cs new file mode 100644 index 00000000..072aba6b --- /dev/null +++ b/src/SJZY.Track.Domain/Enums/OrderType.cs @@ -0,0 +1,6 @@ +namespace SJZY.Track.Domain.Enums; + +public enum OrderType +{ + 干线提单 = 1 +} \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Enums/TrackPushProblemType.cs b/src/SJZY.Track.Domain/Enums/TrackProblemType.cs similarity index 88% rename from src/SJZY.Track.Domain/Enums/TrackPushProblemType.cs rename to src/SJZY.Track.Domain/Enums/TrackProblemType.cs index 93bbdbcb..10087ba0 100644 --- a/src/SJZY.Track.Domain/Enums/TrackPushProblemType.cs +++ b/src/SJZY.Track.Domain/Enums/TrackProblemType.cs @@ -1,7 +1,7 @@ namespace SJZY.Track.Domain.Enums; [Flags] -public enum TrackPushProblemType +public enum TrackProblemType { /// /// 没问题 diff --git a/src/SJZY.Track.Domain/Queries/ITrackOrderQueries.cs b/src/SJZY.Track.Domain/Queries/ITrackOrderQueries.cs index 45309ad5..b521d97d 100644 --- a/src/SJZY.Track.Domain/Queries/ITrackOrderQueries.cs +++ b/src/SJZY.Track.Domain/Queries/ITrackOrderQueries.cs @@ -10,4 +10,10 @@ public interface ITrackOrderQueries /// /// Task> GetPageTrackOrder(GetPageTrackOrderInputVO input); + + /// + /// 获取轨迹各个问题数 + /// + /// + Task> GetTrackProblemCountsAsync(); } \ No newline at end of file diff --git a/src/SJZY.Track.Repository/Queries/TrackOrderQueries.cs b/src/SJZY.Track.Repository/Queries/TrackOrderQueries.cs index 108026b9..2542a33e 100644 --- a/src/SJZY.Track.Repository/Queries/TrackOrderQueries.cs +++ b/src/SJZY.Track.Repository/Queries/TrackOrderQueries.cs @@ -29,7 +29,7 @@ public class TrackOrderQueries : ISugarRepository, ITrackOrderQueries, int ques = 0; if (!input.OrderNos.IsNullOrWhiteSpace()) { - orderNoList = input.OrderNos!.Split(new[] { ',', ',', ':', ':' }).ToList(); + orderNoList = input.OrderNos!.Split(',', ',', ':', ':').ToList(); } if (input.TabType == 1) @@ -63,16 +63,9 @@ public class TrackOrderQueries : ISugarRepository, ITrackOrderQueries, Id = a.Id, OrderNumber = a.OrderNo, OrderType = a.OrderType, - OrderTypeName = SqlFunc.IF(a.OrderType == 1).Return("干线提单").ElseIF(a.OrderType == 2).Return("小包运单") - .ElseIF(a.OrderType == 3) - .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, NewestTrackContent = a.LatestTrackContent, NewestTrackEnContent = a.LatestTrackEnContent, NewestTrackPlace = a.LatestTrackPlace, @@ -105,4 +98,16 @@ public class TrackOrderQueries : ISugarRepository, ITrackOrderQueries, return pageList; } + + public async Task> GetTrackProblemCountsAsync() + { + return await Context.Queryable() + .GroupBy(x => x.QuestionType) + .Select(x => new GetTrackCounterVO + { + ProblemType = x.QuestionType, + Count = SqlFunc.AggregateCount(1) + }) + .ToListAsync(); + } } \ No newline at end of file