Merge branch 'refs/heads/S06' into test
This commit is contained in:
commit
b0c026ffa7
@ -49,6 +49,7 @@ public class BatchUpsertTrackInput : OrderNosInfo
|
|||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
|
/// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
|
||||||
|
/// 批量新增时使用指定轨迹来源,更新时无需指定
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Required]
|
[Required]
|
||||||
public int Source { get; set; }
|
public int Source { get; set; }
|
||||||
|
|||||||
@ -7,6 +7,9 @@ public class GetTrackOutput
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string OrderNo { get; set; } = null!;
|
public string OrderNo { get; set; } = null!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹明细列表
|
||||||
|
/// </summary>
|
||||||
public List<TrackDetail> TrackDetails { get; set; } = new();
|
public List<TrackDetail> TrackDetails { get; set; } = new();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -32,4 +35,70 @@ public class TrackDetail
|
|||||||
/// 是否对外
|
/// 是否对外
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsDisplay { get; set; }
|
public bool IsDisplay { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 客户是否可见
|
||||||
|
/// </summary>
|
||||||
|
public bool IsVisibility { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 数据来源:1外部服务商创建,2内部系统创建,3人工创建
|
||||||
|
/// </summary>
|
||||||
|
public int Source { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 备注
|
||||||
|
/// </summary>
|
||||||
|
public string? Remarks { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 附件集合
|
||||||
|
/// </summary>
|
||||||
|
public List<FileItemDto>? Files { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹发生地(城市)
|
||||||
|
/// </summary>
|
||||||
|
public string? TrackPlaceCity { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹发生地(城市)Id
|
||||||
|
/// </summary>
|
||||||
|
public int? TrackPlaceCityId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹发生地(省/州)
|
||||||
|
/// </summary>
|
||||||
|
public string? TrackPlaceProvince { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹发生地(省/州)Id
|
||||||
|
/// </summary>
|
||||||
|
public int? TrackPlaceProvinceId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹发生地(国家/地区)
|
||||||
|
/// </summary>
|
||||||
|
public string? TrackPlaceNation { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹发生地(国家/地区)Id
|
||||||
|
/// </summary>
|
||||||
|
public int? TrackPlaceNationId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹发生地邮编
|
||||||
|
/// </summary>
|
||||||
|
public string? TrackPlacePostcode { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 预计到达时间
|
||||||
|
/// </summary>
|
||||||
|
public DateTime? EstimatedDeliveryDate { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 目的地时区
|
||||||
|
/// </summary>
|
||||||
|
public float? DestinationTimeZone { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,4 +26,19 @@ public class GetAvailableContentOutput
|
|||||||
/// 是否对外
|
/// 是否对外
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsExternal { get; set; }
|
public bool IsExternal { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹来源
|
||||||
|
/// </summary>
|
||||||
|
public int? Source { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹发生时间
|
||||||
|
/// </summary>
|
||||||
|
public DateTime? TrackTime { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 轨迹发生时区
|
||||||
|
/// </summary>
|
||||||
|
public float? TrackTimeZone { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -172,6 +172,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
tracks = await _trackDetailsEsRepository.GetDataByIds(@event.EsIds);
|
tracks = await _trackDetailsEsRepository.GetDataByIds(@event.EsIds);
|
||||||
orderIds = tracks.Select(m => m.OrderId).Distinct().ToList();
|
orderIds = tracks.Select(m => m.OrderId).Distinct().ToList();
|
||||||
@event.OrderIds = orderIds.ToArray();
|
@event.OrderIds = orderIds.ToArray();
|
||||||
|
@event.TrackCodes = tracks.Select(x => x.TrackCode).Distinct().ToList();
|
||||||
|
|
||||||
// 外部api获取的轨迹不允许删除
|
// 外部api获取的轨迹不允许删除
|
||||||
if (tracks.Any(m => m.Source == TrackSourceEnum.ExternalServiceProvide.GetHashCode()))
|
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);
|
await _trackDetailsEsRepository.DeleteTrackByIdAsync(item.Id, item.IndexName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//清理已经删除过的esid
|
||||||
|
@event.EsIds = Array.Empty<string>();
|
||||||
}
|
}
|
||||||
else //原有逻辑,根据轨迹code和订单进行删除
|
else //原有逻辑,根据轨迹code和订单进行删除
|
||||||
{
|
{
|
||||||
@ -235,7 +239,7 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
OrderId = order.Id,
|
OrderId = order.Id,
|
||||||
OrderNo = order.OrderNo,
|
OrderNo = order.OrderNo,
|
||||||
OptionType = OrderOperationType.删除轨迹.ToString(),
|
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,
|
CreateUserId = @event.OperationManId,
|
||||||
CreateUserName = @event.OperationMan ?? "",
|
CreateUserName = @event.OperationMan ?? "",
|
||||||
CreateTime = DateTime.Now
|
CreateTime = DateTime.Now
|
||||||
|
|||||||
@ -298,8 +298,6 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
|
|
||||||
if (track == null) continue; // 不存在不让改
|
if (track == null) continue; // 不存在不让改
|
||||||
|
|
||||||
//来源与外部服务商不允许修改
|
|
||||||
if (track.Source == (int) TrackSourceEnum.ExternalServiceProvide) continue;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -397,10 +395,15 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
//外部轨迹,轨迹发生地,轨迹发生时间,轨迹发生时区,不允许更改
|
||||||
|
if (track.Source != (int) TrackSourceEnum.ExternalServiceProvide)
|
||||||
{
|
{
|
||||||
track.TrackPlace = @event.TrackPlace;
|
track.TrackPlace = @event.TrackPlace;
|
||||||
track.TrackTime = @event.NewTrackTime ?? @event.TrackTime;
|
track.TrackTime = @event.NewTrackTime ?? @event.TrackTime;
|
||||||
track.TrackTimeZone = @event.TrackTimeZone;
|
track.TrackTimeZone = @event.TrackTimeZone;
|
||||||
|
}
|
||||||
|
|
||||||
track.ZeroTrackTime = Math.Abs(track.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1
|
track.ZeroTrackTime = Math.Abs(track.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1
|
||||||
? track.TrackTime
|
? track.TrackTime
|
||||||
: track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone));
|
: track.TrackTime.Subtract(TimeSpan.FromHours(track.TrackTimeZone));
|
||||||
|
|||||||
@ -15,6 +15,7 @@ using SJZY.Track.Application.Contract.Services;
|
|||||||
using SJZY.Track.Application.Helpers;
|
using SJZY.Track.Application.Helpers;
|
||||||
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
||||||
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
|
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
|
||||||
|
using SJZY.Track.Domain.Enums;
|
||||||
using Volo.Abp.DependencyInjection;
|
using Volo.Abp.DependencyInjection;
|
||||||
|
|
||||||
namespace SJZY.Track.Application.Rabbit;
|
namespace SJZY.Track.Application.Rabbit;
|
||||||
@ -258,6 +259,22 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler
|
|||||||
TrackTime = trackTime ?? DateTime.Now,
|
TrackTime = trackTime ?? DateTime.Now,
|
||||||
TrackTimeZone = trackTimeZone ?? GlobalConst.NoneTrackTimeZone,
|
TrackTimeZone = trackTimeZone ?? GlobalConst.NoneTrackTimeZone,
|
||||||
IsAdd = true,
|
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);
|
await _capPublisher.PublishAsync(GlobalConst.TrackUpsertForRefreshSubscribe, trackUpsertEvent);
|
||||||
@ -281,7 +298,26 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler
|
|||||||
OriginTrackDataHash = StringHelper.GetHash(JsonConvert.SerializeObject(trackToken)),
|
OriginTrackDataHash = StringHelper.GetHash(JsonConvert.SerializeObject(trackToken)),
|
||||||
OriginTrackContent = trackContent ?? GlobalConst.EmptyString,
|
OriginTrackContent = trackContent ?? GlobalConst.EmptyString,
|
||||||
CreateUser = GlobalConst.SystemUser,
|
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
|
track.ZeroTrackTime = Math.Abs(track.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1
|
||||||
|
|||||||
@ -62,7 +62,24 @@ public partial class TrackService
|
|||||||
TimeZone = Math.Abs(x.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1
|
TimeZone = Math.Abs(x.TrackTimeZone - GlobalConst.NoneTrackTimeZone) < 1
|
||||||
? null
|
? null
|
||||||
: input.TimeZone ?? 8,
|
: 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();
|
}).ToList();
|
||||||
|
|
||||||
res.Add(item);
|
res.Add(item);
|
||||||
|
|||||||
@ -266,13 +266,7 @@ public class TrackContentService : ApplicationService
|
|||||||
if (!item.IsAllowManuallyCreate && input.TrackOptionType == TrackOptionType.创建) //跳过不允许手动创建的轨迹内容
|
if (!item.IsAllowManuallyCreate && input.TrackOptionType == TrackOptionType.创建) //跳过不允许手动创建的轨迹内容
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!item.IsAllowManuallyUpdate && input.TrackOptionType == TrackOptionType.修改) //跳过不允许手动创建的轨迹内容
|
if (!item.IsAllowManuallyUpdate && input.TrackOptionType == TrackOptionType.修改) //跳过不允许手动修改的轨迹内容
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!item.IsRepeatable && input.TrackOptionType == TrackOptionType.删除) //删除操作中跳过不重复的轨迹内容
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!item.IsAllowManuallyCreate && input.TrackOptionType == TrackOptionType.删除) //删除操作中跳过不允许手动创建的轨迹内容
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
res.Data.Add(new GetAvailableContentOutput()
|
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<GetAvailableContentOutput>();
|
||||||
|
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;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -61,7 +61,7 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
|
|||||||
public async Task<(int MainOrderId, int CustomId)> GetTrackOrderByProviderAndOrderNo(string serviceProvidrCode, string orderNo)
|
public async Task<(int MainOrderId, int CustomId)> GetTrackOrderByProviderAndOrderNo(string serviceProvidrCode, string orderNo)
|
||||||
{
|
{
|
||||||
var orderList = await Context.Queryable<OrderEntity>()
|
var orderList = await Context.Queryable<OrderEntity>()
|
||||||
.LeftJoin<OrderPlatformNumberEntity>((a, b) => a.Id == b.OrderId && b.IsDeleted)
|
.LeftJoin<OrderPlatformNumberEntity>((a, b) => a.Id == b.OrderId && b.IsDeleted == false)
|
||||||
.Where((a, b) => a.OrderNo == orderNo
|
.Where((a, b) => a.OrderNo == orderNo
|
||||||
|| (b.Platform == serviceProvidrCode && b.OrderNumber == orderNo))
|
|| (b.Platform == serviceProvidrCode && b.OrderNumber == orderNo))
|
||||||
.Select((a, b) => new
|
.Select((a, b) => new
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user