89 lines
3.4 KiB
C#
89 lines
3.4 KiB
C#
using DotNetCore.CAP;
|
|
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
|
|
using SJZY.Track.Domain.Aggregates.OrderAggregate;
|
|
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
|
|
using SJZY.Track.Domain.Queries;
|
|
using SJZY.UserCenter.HttpApi.Services;
|
|
|
|
namespace SJZY.Track.Application.Services.ProvideServices;
|
|
|
|
/// <summary>
|
|
/// 轨迹服务
|
|
/// </summary>
|
|
[ApiExplorerSettings(GroupName = "提供接口")]
|
|
public class TrackService : ApplicationService
|
|
{
|
|
private readonly IOrderRepository _orderRepository;
|
|
private readonly ITrackDetailsRepository _trackDetailsRepository;
|
|
private readonly ITrackQueries _trackQueries;
|
|
private readonly ICapPublisher _capPublisher;
|
|
|
|
public TrackService(ITrackQueries trackQueries, IOrderRepository orderRepository,
|
|
ITrackDetailsRepository trackDetailsRepository, ICapPublisher capPublisher)
|
|
{
|
|
_trackQueries = trackQueries;
|
|
_orderRepository = orderRepository;
|
|
_trackDetailsRepository = trackDetailsRepository;
|
|
_capPublisher = capPublisher;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 新增/更新订单轨迹接口
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="BusinessException"></exception>
|
|
[HttpPost("Track/Upsert")]
|
|
public async Task<bool> UpsertTrackAsync(UpsertTrackInput input)
|
|
{
|
|
var orderId = await _orderRepository.GetFirstAsync(x =>
|
|
x.OrderType == input.OrderType && x.OrderNo == input.OrderNo, x => x.Id);
|
|
if (orderId == default)
|
|
{
|
|
throw new BusinessException(message: $"订单:{input.OrderNo}不存在");
|
|
}
|
|
|
|
// 不存在则新增轨迹,存在则更新
|
|
var track = await _trackDetailsRepository.GetFirstOrDefaultAsync(orderId, input.TrackCode);
|
|
if (track == default)
|
|
{
|
|
var trackContent = await _trackQueries.MatchTrackContentAsync(orderId, input.TrackCode);
|
|
if (trackContent == default)
|
|
{
|
|
throw new BusinessException(message: $"订单:{input.OrderNo} 所绑定的模板,没有一条内容可以匹配轨迹代码:{input.TrackCode}");
|
|
}
|
|
|
|
track = new TrackDetailsIndex
|
|
{
|
|
OrderId = orderId,
|
|
OrderNo = input.OrderNo,
|
|
OrderType = input.OrderType,
|
|
TrackStatus = trackContent.Status,
|
|
TrackCode = input.TrackCode,
|
|
TrackContent = trackContent.Content,
|
|
TrackEnContent = trackContent.EnContent,
|
|
TrackPlace = input.TrackPlace,
|
|
TrackTime = input.TrackTime,
|
|
TraceTimeZone = input.TraceTimeZone,
|
|
CreateUserId = CurrentUserRequest.CurrentUser.UserId,
|
|
CreateTime = DateTime.Now
|
|
};
|
|
await _trackDetailsRepository.CreateAsync(track);
|
|
}
|
|
else
|
|
{
|
|
track.UpdateUserId = CurrentUserRequest.CurrentUser.UserId;
|
|
track.UpdateTime = DateTime.Now;
|
|
track.TrackPlace = input.TrackPlace;
|
|
track.TrackTime = input.TrackTime;
|
|
track.TraceTimeZone = input.TraceTimeZone;
|
|
await _trackDetailsRepository.UpdateAsync(track);
|
|
}
|
|
|
|
// 根据订单关联关系向下刷,不同子系统还需要做内容映射
|
|
var links = await _orderRepository.GetLinkedOrderIdsAsync(orderId);
|
|
|
|
// 推送
|
|
return true;
|
|
}
|
|
} |