diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetOrderDetailsInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetOrderDetailsInput.cs
index 50572e48..d16e10fe 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetOrderDetailsInput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetOrderDetailsInput.cs
@@ -6,6 +6,11 @@
/// 轨迹订单id
///
public int OrderId { get; set; }
+
+ ///
+ /// 子系统id
+ ///
+ public int SubSystemId { get; set; }
}
public class TrackOrderDetailDto
@@ -49,5 +54,30 @@
/// 轨迹发生时区
///
public string? TrackTimeZone { get; set; }
+
+ ///
+ /// 时区的值
+ ///
+ public float TrackTimeZoneValue { get; set; }
+
+ ///
+ /// 是否可删
+ ///
+ public bool IsCanDelete { get; set; }
+
+ ///
+ /// 是否对外
+ ///
+ public bool IsExternal { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime CreateTime { get; set; }
+
+ ///
+ /// 创建人
+ ///
+ public string? CreateUser { get; set; }
}
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs
index ee323b86..5b2220d2 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetPageTrackOrderInput.cs
@@ -107,4 +107,6 @@ public class TrackOrderDto
/// 子系统
///
public string SubSystem { get; set; }
+
+ public int SubSystemId { get;set; }
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/AutoMapper/OrderAutoMapperProfile.cs b/src/SJZY.Track.Application/AutoMapper/OrderAutoMapperProfile.cs
index dc814b49..5ae0e71d 100644
--- a/src/SJZY.Track.Application/AutoMapper/OrderAutoMapperProfile.cs
+++ b/src/SJZY.Track.Application/AutoMapper/OrderAutoMapperProfile.cs
@@ -3,6 +3,7 @@ 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 Volo.Abp.AutoMapper;
namespace SJZY.Track.Application.AutoMapper;
@@ -21,11 +22,11 @@ public class OrderAutoMapperProfile : Profile
CreateMap(MemberList.None);
CreateMap(MemberList.None);
CreateMap, UnifyPageResultDto>(MemberList.None);
- CreateMap(MemberList.None)
+ CreateMap(MemberList.None).Ignore(dest => dest.TrackTimeZone)
.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))
- .ForMember(dest => dest.TrackTimeZone, opt => opt.MapFrom(m => m.TraceTimeZone.ToString()));
+ .ForMember(dest => dest.TrackTimeZoneValue, opt => opt.MapFrom(m => m.TraceTimeZone));
}
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/AutoMapper/TrackPullAutoMapperProfile.cs b/src/SJZY.Track.Application/AutoMapper/TrackPullAutoMapperProfile.cs
index dbd0f338..d8dad310 100644
--- a/src/SJZY.Track.Application/AutoMapper/TrackPullAutoMapperProfile.cs
+++ b/src/SJZY.Track.Application/AutoMapper/TrackPullAutoMapperProfile.cs
@@ -13,15 +13,7 @@ public class TrackPullAutoMapperProfile : Profile
CreateMap(MemberList.None).Ignore(dest => dest.Id)
.ForMember(dest => dest.IsPush, opt => opt.MapFrom(source => false));
CreateMap(MemberList.None)
- .ForMember(dest => dest.TrackKeyword, opt =>
- {
- opt.Condition(src => !src.TrackKeywords.IsNullOrEmpty());
- opt.MapFrom(src => string.Join(',', src.TrackKeywords));
- })
- .ForMember(dest => dest.TrackKeywordReverse, opt =>
- {
- opt.Condition(src => !src.TrackKeywordReverses.IsNullOrEmpty());
- opt.MapFrom(src => string.Join(',', src.TrackKeywordReverses));
- });
+ .ForMember(dest => dest.TrackKeyword, opt => opt.MapFrom(src => string.Join(',', src.TrackKeywords)))
+ .ForMember(dest => dest.TrackKeywordReverse, opt => opt.MapFrom(src => string.Join(',', src.TrackKeywordReverses)));
}
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs
index b0c86ec2..2f04bb41 100644
--- a/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs
+++ b/src/SJZY.Track.Application/Services/TrackOrders/TrackOrderService.cs
@@ -1,7 +1,9 @@
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
+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 System;
using System.Collections.Generic;
using System.Linq;
@@ -17,19 +19,20 @@ namespace SJZY.Track.Application.Services.TrackOrders
{
private readonly IOrderRepository _orderRepository;
private readonly ITrackDetailsRepository _trackDetailsRepository;
+ private readonly ITrackContentRepository _trackContentRepository;
public TrackOrderService(
IOrderRepository orderRepository,
- ITrackDetailsRepository trackDetailsRepository
+ ITrackDetailsRepository trackDetailsRepository,
+ ITrackContentRepository trackContentRepository
)
{
this._orderRepository=orderRepository;
this._trackDetailsRepository=trackDetailsRepository;
-
+ this._trackContentRepository=trackContentRepository;
}
#region 轨迹订单明细
-
///
/// 根据轨迹订单id获取轨迹订单明细列表
///
@@ -42,10 +45,39 @@ namespace SJZY.Track.Application.Services.TrackOrders
if (!trackDetails.IsNullOrEmpty())
{
var list = ObjectMapper.Map, List>(trackDetails);
+ var trackCodes = list.Where(a => !a.Code.IsNullOrWhiteSpace()).Select(a => a.Code).ToList();
+
+ var trackContents = await _trackContentRepository.GetTrackContentAttributeValue(new GetTemplateContentAttributeValueInputVO
+ {
+ SubSystemId =input.SubSystemId,
+ TrackCodes=trackCodes
+ });
+
int id = 1;
list.ForEach(a =>
{
a.Id = id++;
+ var trackContent = trackContents.FirstOrDefault(a => a.SubSystemId==input.SubSystemId&& a.TrackCode==a.TrackCode);
+ if (trackContent!=null)
+ {
+ a.IsCanDelete=trackContent.IsCanDelete;
+ a.IsExternal = trackContent.IsExternal;
+ }
+ //a.TrackTimeZoneValue=8f;
+ if (a.TrackTimeZoneValue==0)
+ {
+ 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;
}
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.Domain/Aggregates/TrackContentAggregate/ITrackContentRepository.cs b/src/SJZY.Track.Domain/Aggregates/TrackContentAggregate/ITrackContentRepository.cs
index 511d4feb..400b7363 100644
--- a/src/SJZY.Track.Domain/Aggregates/TrackContentAggregate/ITrackContentRepository.cs
+++ b/src/SJZY.Track.Domain/Aggregates/TrackContentAggregate/ITrackContentRepository.cs
@@ -1,4 +1,5 @@
using SJZY.Track.Domain.Dtos.TrackContents;
+using SJZY.Track.Domain.Dtos.TrackTemplate;
namespace SJZY.Track.Domain.Aggregates.TrackContentAggregate;
@@ -24,4 +25,5 @@ public interface ITrackContentRepository : IBasicRepository
Task UpdateMapAsync(Expression> columns, Expression> whereExpression);
Task GetTemplateIsExist(int trackContentId);
+ Task> GetTrackContentAttributeValue(GetTemplateContentAttributeValueInputVO input);
}
\ 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 d79c78df..f6578023 100644
--- a/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs
+++ b/src/SJZY.Track.Domain/Aggregates/TrackDetailsAggregate/ITrackDetailsRepository.cs
@@ -20,4 +20,5 @@ public interface ITrackDetailsRepository
///
///
Task DeleteTrackAsync(int orderId, List trackCodes);
+ Task?> GetListAsync(List orderIds);
}
\ 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 b32b1327..b596a5e1 100644
--- a/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs
+++ b/src/SJZY.Track.Domain/Dtos/Order/GetPageTrackOrderInputVO.cs
@@ -114,5 +114,10 @@ namespace SJZY.Track.Domain.Dtos.Order
/// 子系统
///
public string SubSystem { get; set; }
+
+ ///
+ /// 子系统id
+ ///
+ public int SubSystemId { get; set; }
}
}
diff --git a/src/SJZY.Track.Domain/Dtos/TrackTemplate/GetTemplateContentAttributeValueInputVO.cs b/src/SJZY.Track.Domain/Dtos/TrackTemplate/GetTemplateContentAttributeValueInputVO.cs
new file mode 100644
index 00000000..1ba46bf4
--- /dev/null
+++ b/src/SJZY.Track.Domain/Dtos/TrackTemplate/GetTemplateContentAttributeValueInputVO.cs
@@ -0,0 +1,59 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SJZY.Track.Domain.Dtos.TrackTemplate
+{
+ public class GetTemplateContentAttributeValueInputVO
+ {
+ ///
+ /// 子系统id
+ ///
+ public int SubSystemId { get; set; }
+
+ ///
+ /// 轨迹代码
+ ///
+ public List? TrackCodes { get; set; }
+
+ /////
+ ///// 订单id
+ /////
+ //public int OrderId { get; set; }
+ }
+
+ public class GetTemplateContentAttributeValueVO
+ {
+ ///
+ /// 轨迹内容id
+ ///
+ public int TrackContenId { get; set; }
+
+ ///
+ /// 模版id
+ ///
+ public int TrackTemplateId { get; set; }
+
+ ///
+ /// 轨迹内容代码
+ ///
+ public string TrackCode { get; set; }
+
+ ///
+ /// 子系统id
+ ///
+ public int SubSystemId { get; set; }
+
+ ///
+ /// 是否可删
+ ///
+ public bool IsCanDelete { get; set; }
+
+ ///
+ /// 是否对外
+ ///
+ public bool IsExternal { get; set; }
+ }
+}
diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
index b1bb6476..aa55ea33 100644
--- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
@@ -1,5 +1,6 @@
using SJZY.Track.Domain;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
+using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
using SJZY.Track.Domain.Dtos.Order;
using SJZY.Track.Domain.VEntities;
@@ -9,6 +10,15 @@ namespace SJZY.Track.Repository.Repositories;
public class OrderRepository : BasicRepository, IOrderRepository, ITransientDependency
{
+ private readonly ITrackDetailsRepository _trackDetailsRepository;
+
+ public OrderRepository(
+ ITrackDetailsRepository trackDetailsRepository
+ )
+ {
+ this._trackDetailsRepository=trackDetailsRepository;
+ }
+
public async Task CreateOrderAsync(OrderEntity order)
{
using var tran = TransactionHelper.GetReadCommitted();
@@ -147,10 +157,48 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
NewestTrackTime = a.LatestTrackTime,
IsFinish = a.IsCompleted,
CreateTime = a.CreateTime,
- SubSystem = c.CnName
+ SubSystem = c.CnName,
+ SubSystemId = c.Id
})
.ToPagedListAsync(input.PageIndex, input.PageSize);
+ if (pageList.List.Any())
+ {
+ //查询也需要最新的轨迹
+ var orderIds = pageList.List.Select(a => a.Id).ToList();
+ var esTrackDetails = await _trackDetailsRepository.GetListAsync(orderIds);
+ if (!esTrackDetails.IsNullOrEmpty())
+ {
+ pageList.List.ForEach(a =>
+ {
+ var esDetails = esTrackDetails.Where(b => b.OrderId== a.Id).OrderByDescending(a => a.TrackTime);
+ var trackDetail = esDetails.FirstOrDefault();
+ if (trackDetail!=null)
+ {
+ if (trackDetail.TrackContent!=a.NewestTrackContent)
+ {
+ a.NewestTrackContent=trackDetail.TrackContent;
+ }
+ if (trackDetail.TrackEnContent!=a.NewestTrackEnContent)
+ {
+ a.NewestTrackContent=trackDetail.TrackEnContent;
+ }
+ if (trackDetail.TrackPlace!=a.NewestTrackPlace)
+ {
+ a.NewestTrackPlace=trackDetail.TrackPlace;
+ }
+ if (trackDetail.TrackTime!= trackDetail.TrackTime)
+ {
+ a.NewestTrackTime=trackDetail.TrackTime;
+ }
+ }
+ });
+ }
+ }
+
+
+
+
#region 暂时注释
//if (pageList.List.Any())
diff --git a/src/SJZY.Track.Repository/Repositories/TrackContentRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackContentRepository.cs
index b1a0cda0..5d4db71f 100644
--- a/src/SJZY.Track.Repository/Repositories/TrackContentRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/TrackContentRepository.cs
@@ -3,6 +3,7 @@ using SJZY.Track.Domain.Aggregates.TrackFlagAggregate;
using SJZY.Track.Domain.Aggregates.TrackStatusAggregate;
using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate;
using SJZY.Track.Domain.Dtos.TrackContents;
+using SJZY.Track.Domain.Dtos.TrackTemplate;
using SJZY.Track.Domain.VEntities;
using System.Linq;
using System.Linq.Expressions;
@@ -89,6 +90,31 @@ public class TrackContentRepository : BasicRepository, ITrac
return pagedList;
}
+ ///
+ /// 获取轨迹内容属性值
+ ///
+ ///
+ public async Task> GetTrackContentAttributeValue(GetTemplateContentAttributeValueInputVO input)
+ {
+ var list = await Context.Queryable()
+ .LeftJoin((a, b) => a.Id==b.TrackContentId&& b.TrackTemplateId>0 && b.IsDeleted==false)
+ .LeftJoin((a, b, c) => b.TrackTemplateId==c.Id&& c.IsDeleted==false)
+ .WhereIF(!input.TrackCodes.IsNullOrEmpty(), (a, b, c) => input.TrackCodes.Contains(a.Code))
+ .WhereIF(input.SubSystemId>0, (a, b, c) => a.SubSystemId==input.SubSystemId)
+ .Where((a, b, c) => c.Id>0)
+ .Select((a, b, c) => new GetTemplateContentAttributeValueVO
+ {
+ IsCanDelete=b.IsCanDelete,
+ IsExternal=b.IsExternal,
+ SubSystemId= a.SubSystemId,
+ TrackCode= a.Code,
+ TrackContenId= a.Id,
+ TrackTemplateId=c.Id
+ }).ToListAsync();
+
+ return list;
+ }
+
///
/// 获取轨迹模版是否存在
///
@@ -115,6 +141,8 @@ public class TrackContentRepository : BasicRepository, ITrac
return false;
}
+
+
public async Task> GetMapPageAsync(GetTrackContentMapPageInputVO input)
{
return await Context.Queryable()
diff --git a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
index cf78c66f..191de929 100644
--- a/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/TrackDetailsRepository.cs
@@ -3,6 +3,7 @@ using SJZY.Expand.ABP.Core.Logger;
using SJZY.Expand.ElasticSearch.Services;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Dtos.TrackDetails;
+using SJZY.UserCenter.SharedModel.Dtos.PHP.User;
namespace SJZY.Track.Repository.Repositories;
@@ -52,7 +53,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract(index.Id, u => u
.Index(index.IndexName)
.Doc(index)
- //.Refresh(Refresh.True) // 可选:立即刷新索引使更改立即可见
+ //.Refresh(Refresh.True) // 可选:立即刷新索引使更改立即可见
);
if (!r.IsValid)
@@ -90,13 +91,26 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract?> GetListAsync(int orderId)
{
- var data = await Context.SearchAsync(x => x.Query(q => q.Term(t => t.OrderId, orderId))
+ var data = await Context.SearchAsync(x => x.Query(q => q.Term(t => t.OrderId, orderId)
+ && q.Term(a => a.Field(g => g.IsDeleted).Value(false))
+ )
.Size(1000)
.Sort(s => s.Field(f => f.TrackTime, SortOrder.Descending)));
return data?.Documents?.ToList();
}
+ public async Task?> GetListAsync(List orderIds)
+ {
+ var data = await Context.SearchAsync(x => x.Query(q => q.Terms(t => t.Field(g => g.OrderId).Terms(orderIds))
+ && q.Term(a => a.Field(d => d.IsDeleted).Value(false))
+ )
+ .Size(10000)
+ .Sort(s => s.Field(c => c.TrackTime, SortOrder.Descending))
+ );
+ return data?.Documents?.ToList();
+ }
+
public async Task DeleteTrackAsync(int orderId, List trackCodes)
{
var r = await Context.UpdateByQueryAsync(x => x
diff --git a/src/SJZY.Track.Repository/Repositories/TrackTemplateRepository.cs b/src/SJZY.Track.Repository/Repositories/TrackTemplateRepository.cs
index 3bb1cfd9..21b72d53 100644
--- a/src/SJZY.Track.Repository/Repositories/TrackTemplateRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/TrackTemplateRepository.cs
@@ -65,6 +65,17 @@ public class TrackTemplateRepository : BasicRepository, ITr
return pagedList;
}
+ ///
+ /// 获取轨迹内容属性值
+ ///
+ ///
+ public async Task GetTrackContentAttributeValue(GetTemplateContentAttributeValueInputVO input)
+ {
+
+
+ return null;
+ }
+
///
public async Task> GetContentPageAsync(
GetTrackTemplateContentPageInputVO input)