diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs
index baaeb7bb..d5767cd5 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/BatchUpsertTrackInput.cs
@@ -49,6 +49,7 @@ public class BatchUpsertTrackInput : OrderNosInfo
///
/// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
+ /// 批量新增时使用指定轨迹来源,更新时无需指定
///
[Required]
public int Source { get; set; }
diff --git a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs
index 72df17e3..84c1ed15 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/ProvideServices/GetTrackOutput.cs
@@ -7,6 +7,9 @@ public class GetTrackOutput
///
public string OrderNo { get; set; } = null!;
+ ///
+ /// 轨迹明细列表
+ ///
public List TrackDetails { get; set; } = new();
}
@@ -32,4 +35,70 @@ public class TrackDetail
/// 是否对外
///
public bool IsDisplay { get; set; }
+
+ ///
+ /// 客户是否可见
+ ///
+ public bool IsVisibility { get; set; }
+
+ ///
+ /// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
+ ///
+ public int Source { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public string? Remarks { get; set; }
+
+ ///
+ /// 附件集合
+ ///
+ public List? Files { get; set; }
+
+ ///
+ /// 轨迹发生地(城市)
+ ///
+ public string? TrackPlaceCity { get; set; }
+
+ ///
+ /// 轨迹发生地(城市)Id
+ ///
+ public int? TrackPlaceCityId { get; set; }
+
+ ///
+ /// 轨迹发生地(省/州)
+ ///
+ public string? TrackPlaceProvince { get; set; }
+
+ ///
+ /// 轨迹发生地(省/州)Id
+ ///
+ public int? TrackPlaceProvinceId { get; set; }
+
+ ///
+ /// 轨迹发生地(国家/地区)
+ ///
+ public string? TrackPlaceNation { get; set; }
+
+ ///
+ /// 轨迹发生地(国家/地区)Id
+ ///
+ public int? TrackPlaceNationId { get; set; }
+
+ ///
+ /// 轨迹发生地邮编
+ ///
+ public string? TrackPlacePostcode { get; set; }
+
+
+ ///
+ /// 预计到达时间
+ ///
+ public DateTime? EstimatedDeliveryDate { get; set; }
+
+ ///
+ /// 目的地时区
+ ///
+ public float? DestinationTimeZone { get; set; }
}
diff --git a/src/SJZY.Track.Application.Contract/Dtos/TrackContents/GetAvailableContentOutput.cs b/src/SJZY.Track.Application.Contract/Dtos/TrackContents/GetAvailableContentOutput.cs
index 69e77773..f1c9300c 100644
--- a/src/SJZY.Track.Application.Contract/Dtos/TrackContents/GetAvailableContentOutput.cs
+++ b/src/SJZY.Track.Application.Contract/Dtos/TrackContents/GetAvailableContentOutput.cs
@@ -26,4 +26,19 @@ public class GetAvailableContentOutput
/// 是否对外
///
public bool IsExternal { get; set; }
+
+ ///
+ /// 轨迹来源
+ ///
+ public int? Source { get; set; }
+
+ ///
+ /// 轨迹发生时间
+ ///
+ public DateTime? TrackTime { get; set; }
+
+ ///
+ /// 轨迹发生时区
+ ///
+ public float? TrackTimeZone { get; set; }
}
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
index 436e55dd..288face2 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackDeleteEventHandler.cs
@@ -172,6 +172,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
tracks = await _trackDetailsEsRepository.GetDataByIds(@event.EsIds);
orderIds = tracks.Select(m => m.OrderId).Distinct().ToList();
@event.OrderIds = orderIds.ToArray();
+ @event.TrackCodes = tracks.Select(x => x.TrackCode).Distinct().ToList();
// 外部api获取的轨迹不允许删除
if (tracks.Any(m => m.Source == TrackSourceEnum.ExternalServiceProvide.GetHashCode()))
@@ -182,6 +183,9 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
{
await _trackDetailsEsRepository.DeleteTrackByIdAsync(item.Id, item.IndexName);
}
+
+ //清理已经删除过的esid
+ @event.EsIds = Array.Empty();
}
else //原有逻辑,根据轨迹code和订单进行删除
{
@@ -235,7 +239,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
OrderId = order.Id,
OrderNo = order.OrderNo,
OptionType = OrderOperationType.删除轨迹.ToString(),
- Content = tracks?.Where(m=>m.OrderId == order.Id)?.ToList().ToJson(),
+ Content = tracks?.Where(m => m.OrderId == order.Id)?.ToList().ToJson(),
CreateUserId = @event.OperationManId,
CreateUserName = @event.OperationMan ?? "",
CreateTime = DateTime.Now
diff --git a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
index 58b1cd4f..eba60623 100644
--- a/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
+++ b/src/SJZY.Track.Application/CAP/EventHandlers/TrackUpsertEventHandler.cs
@@ -298,8 +298,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
if (track == null) continue; // 不存在不让改
- //来源与外部服务商不允许修改
- if (track.Source == (int) TrackSourceEnum.ExternalServiceProvide) continue;
}
else
{
@@ -398,9 +396,14 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
}
else
{
- track.TrackPlace = @event.TrackPlace;
- track.TrackTime = @event.NewTrackTime ?? @event.TrackTime;
- track.TrackTimeZone = @event.TrackTimeZone;
+ //外部轨迹,轨迹发生地,轨迹发生时间,轨迹发生时区,不允许更改
+ if (track.Source != (int) TrackSourceEnum.ExternalServiceProvide)
+ {
+ track.TrackPlace = @event.TrackPlace;
+ track.TrackTime = @event.NewTrackTime ?? @event.TrackTime;
+ track.TrackTimeZone = @event.TrackTimeZone;
+ }
+
track.ZeroTrackTime = Math.Abs(track.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1
? track.TrackTime
: track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone));
diff --git a/src/SJZY.Track.Application/Rabbit/TrackRefreshEventHandler.cs b/src/SJZY.Track.Application/Rabbit/TrackRefreshEventHandler.cs
index 8afa7705..25367043 100644
--- a/src/SJZY.Track.Application/Rabbit/TrackRefreshEventHandler.cs
+++ b/src/SJZY.Track.Application/Rabbit/TrackRefreshEventHandler.cs
@@ -15,6 +15,7 @@ using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Application.Helpers;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
+using SJZY.Track.Domain.Enums;
using Volo.Abp.DependencyInjection;
namespace SJZY.Track.Application.Rabbit;
@@ -258,6 +259,22 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler
TrackTime = trackTime ?? DateTime.Now,
TrackTimeZone = trackTimeZone ?? GlobalConst.NoneTrackTimeZone,
IsAdd = true,
+ //S06新增
+ IsVisibility = false,
+ Source = (int)TrackSourceEnum.ExternalServiceProvide,
+ Remarks = GlobalConst.EmptyString,
+ Files = null,
+ Content = GlobalConst.EmptyString,
+ EnStatus = GlobalConst.EmptyString,
+ TrackPlaceCity = GlobalConst.EmptyString,
+ TrackPlaceCityId = GlobalConst.NotExistId,
+ TrackPlaceProvince = GlobalConst.EmptyString,
+ TrackPlaceProvinceId = GlobalConst.NotExistId,
+ TrackPlaceNation = GlobalConst.EmptyString,
+ TrackPlaceNationId = GlobalConst.NotExistId,
+ TrackPlacePostcode = GlobalConst.EmptyString,
+ DestinationTimeZone = null,
+ EstimatedDeliveryDate = null,
};
await _capPublisher.PublishAsync(GlobalConst.TrackUpsertForRefreshSubscribe, trackUpsertEvent);
@@ -281,7 +298,26 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler
OriginTrackDataHash = StringHelper.GetHash(JsonConvert.SerializeObject(trackToken)),
OriginTrackContent = trackContent ?? GlobalConst.EmptyString,
CreateUser = GlobalConst.SystemUser,
- CreateTime = DateTime.Now
+ CreateTime = DateTime.Now,
+ //来源轨迹内容,第一次新增的时候使用轨迹内容表提供的
+ TrackStatus = GlobalConst.EmptyString,
+ TrackStatusCode = GlobalConst.EmptyString,
+ TrackContent = GlobalConst.EmptyString,
+ TrackEnContent = GlobalConst.EmptyString,
+ //S06新增轨迹明细字段
+ IsVisibility = false,
+ Source = (int) TrackSourceEnum.ExternalServiceProvide,
+ Remarks = GlobalConst.EmptyString,
+ Files = null,
+ TrackPlaceCity = GlobalConst.EmptyString,
+ TrackPlaceCityId = GlobalConst.NotExistId,
+ TrackPlaceProvince = GlobalConst.EmptyString,
+ TrackPlaceProvinceId = GlobalConst.NotExistId,
+ TrackPlaceNation = GlobalConst.EmptyString,
+ TrackPlaceNationId = GlobalConst.NotExistId,
+ TrackPlacePostcode = GlobalConst.EmptyString,
+ DestinationTimeZone = null,
+ EstimatedDeliveryDate = null,
};
track.ZeroTrackTime = Math.Abs(track.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs
index 30b0e0d2..ab0bd27d 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/TrackService.Query.cs
@@ -62,7 +62,24 @@ public partial class TrackService
TimeZone = Math.Abs(x.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1
? null
: input.TimeZone ?? 8,
- IsDisplay = trackContentDic.TryGetValue(x.TrackCode, out var isExternal) && isExternal
+ IsDisplay = trackContentDic.TryGetValue(x.TrackCode, out var isExternal) && isExternal,
+ IsVisibility = x.IsVisibility,
+ Source = x.Source,
+ Remarks = x.Remarks,
+ Files = x.Files?.Select(y => new FileItemDto
+ {
+ FileName = y.FileName,
+ OssKey = y.OssKey
+ }).ToList(),
+ TrackPlaceCity = x.TrackPlaceCity,
+ TrackPlaceCityId = x.TrackPlaceCityId,
+ TrackPlaceProvince = x.TrackPlaceProvince,
+ TrackPlaceProvinceId = x.TrackPlaceProvinceId,
+ TrackPlaceNation = x.TrackPlaceNation,
+ TrackPlaceNationId = x.TrackPlaceNationId,
+ TrackPlacePostcode = x.TrackPlacePostcode,
+ DestinationTimeZone = x.DestinationTimeZone,
+ EstimatedDeliveryDate = x.EstimatedDeliveryDate
}).ToList();
res.Add(item);
diff --git a/src/SJZY.Track.Application/Services/TrackContents/TrackContentService.cs b/src/SJZY.Track.Application/Services/TrackContents/TrackContentService.cs
index bdc6edab..4aa023da 100644
--- a/src/SJZY.Track.Application/Services/TrackContents/TrackContentService.cs
+++ b/src/SJZY.Track.Application/Services/TrackContents/TrackContentService.cs
@@ -266,13 +266,7 @@ public class TrackContentService : ApplicationService
if (!item.IsAllowManuallyCreate && input.TrackOptionType == TrackOptionType.创建) //跳过不允许手动创建的轨迹内容
continue;
- if (!item.IsAllowManuallyUpdate && input.TrackOptionType == TrackOptionType.修改) //跳过不允许手动创建的轨迹内容
- continue;
-
- if (!item.IsRepeatable && input.TrackOptionType == TrackOptionType.删除) //删除操作中跳过不重复的轨迹内容
- continue;
-
- if (!item.IsAllowManuallyCreate && input.TrackOptionType == TrackOptionType.删除) //删除操作中跳过不允许手动创建的轨迹内容
+ if (!item.IsAllowManuallyUpdate && input.TrackOptionType == TrackOptionType.修改) //跳过不允许手动修改的轨迹内容
continue;
res.Data.Add(new GetAvailableContentOutput()
@@ -285,6 +279,42 @@ public class TrackContentService : ApplicationService
});
}
+ if (input.TrackOptionType == TrackOptionType.创建
+ || trackDetails == null
+ || trackDetails.Count == 0)
+ {
+ return res;
+ }
+
+
+ //修改操作,查轨迹内容列表反映明细表数据,重新构造响应数据
+ var matchContent = new List();
+ var contents = res.Data.Select(x => new
+ {
+ x.Id,
+ x.IsExternal,
+ x.Code
+ });
+
+ foreach (var content in contents)
+ {
+ var match = trackDetails
+ .Where(x => x.TrackCode == content.Code)
+ .Select(matchItem => new GetAvailableContentOutput
+ {
+ IsExternal = content.IsExternal,
+ Id = content.Id,
+ EnContent = matchItem.TrackEnContent,
+ Content = matchItem.TrackContent,
+ Code = matchItem.TrackCode,
+ TrackTime = matchItem.TrackTime,
+ TrackTimeZone = matchItem.TrackTimeZone,
+ Source = matchItem.Source
+ });
+ matchContent.AddRange(match);
+ }
+
+ res.Data = matchContent;
return res;
}
diff --git a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
index 53f6c327..ec5f18fe 100644
--- a/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
+++ b/src/SJZY.Track.Repository/Repositories/OrderRepository.cs
@@ -61,7 +61,7 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
public async Task<(int MainOrderId, int CustomId)> GetTrackOrderByProviderAndOrderNo(string serviceProvidrCode, string orderNo)
{
var orderList = await Context.Queryable()
- .LeftJoin((a, b) => a.Id == b.OrderId && b.IsDeleted)
+ .LeftJoin((a, b) => a.Id == b.OrderId && b.IsDeleted == false)
.Where((a, b) => a.OrderNo == orderNo
|| (b.Platform == serviceProvidrCode && b.OrderNumber == orderNo))
.Select((a, b) => new