using SJZY.Track.Application.Contract.Dtos.ProvideServices; 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.Queries; namespace SJZY.Track.Application.Services.TrackOrders; [ApiExplorerSettings(GroupName = "轨迹订单")] [Route("/Track/Order")] public class TrackOrderService : ApplicationService { private readonly ITrackOrderQueries _trackOrderQueries; private readonly ITrackDetailsRepository _trackDetailsRepository; private readonly ITrackContentRepository _trackContentRepository; public TrackOrderService( ITrackOrderQueries trackOrderQueries, ITrackDetailsRepository trackDetailsRepository, ITrackContentRepository trackContentRepository ) { _trackOrderQueries = trackOrderQueries; _trackDetailsRepository = trackDetailsRepository; _trackContentRepository = trackContentRepository; } #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); 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 }); 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(); if (!insertData.IsNullOrEmpty()) { trackContent = trackContentsOfTemplates.FirstOrDefault(a => a.TrackTemplateId == insertData.FirstOrDefault()); } if (trackContent != null) { a.IsCanDelete = trackContent.IsCanDelete; a.IsExternal = trackContent.IsExternal; } //else //{ // a.IsCanDelete=false; // a.IsExternal=false; //} if (a.TrackTimeZoneValue == 0f) { a.TrackTimeZone = $"GTM{" "}+00:00"; } else { // 将小数形式的小时转换为时区偏移量 int hours = (int)a.TrackTimeZoneValue; // 提取整数部分作为小时 int minutes = (int)((a.TrackTimeZoneValue - hours) * 60); // 将小数部分乘以 60 转换为分钟 TimeSpan offset = new TimeSpan(hours, minutes, 0); string timeZoneStr = offset.ToString(); string flag = a.TrackTimeZoneValue > 0f ? "+" : ""; a.TrackTimeZone = $"GTM{" "}{flag}{timeZoneStr.RemovePostFix(":00")}"; } }); return list; } return new List(); } #endregion #region 轨迹订单列表 /// /// 获取分页的轨迹订单 /// /// /// [HttpPost("GetTrackOrderList")] public async Task> GetPageTrackOrder(GetPageTrackOrderInput input) { var vo = ObjectMapper.Map(input); var pageList = await _trackOrderQueries.GetPageTrackOrder(vo); var pageResultDto = ObjectMapper.Map, UnifyPageResultDto>(pageList); return pageResultDto; } #endregion }