add:为所有对外接口加上子系统参数

This commit is contained in:
xiaolipro 2024-09-07 10:41:53 +08:00
parent 42bae65d38
commit 8bf76305fe
38 changed files with 169 additions and 203 deletions

View File

@ -8,5 +8,6 @@ public class BatchDeleteTrackInput : OrderNosInfo
/// 轨迹code,必填
/// </summary>
[Required]
[MaxLength(500)]
public List<string> TrackCodes { get; set; } = new();
}

View File

@ -27,12 +27,12 @@ public class BatchUpsertTrackInput : OrderNosInfo
/// 轨迹发生时间
/// </summary>
[Required]
public DateTime? TrackTime { get; set; }
public DateTime TrackTime { get; set; }
/// <summary>
/// 轨迹发生时区
/// </summary>
[Required]
[Range(-12, 12)]
public float? TrackTimeZone { get; set; }
public float TrackTimeZone { get; set; }
}

View File

@ -4,6 +4,13 @@ namespace SJZY.Track.Application.Contract.Dtos.ProvideServices;
public class LinkOrderInput
{
/// <summary>
/// 子系统id
/// </summary>
[Required]
[Range(1, int.MaxValue)]
public int SubSystemId { get; set; }
/// <summary>
/// false解绑,true关联
/// </summary>

View File

@ -49,5 +49,6 @@ public class OrderNosInfo
/// 订单号
/// </summary>
[Required]
[MaxLength(500)]
public List<string> OrderNos { get; set; } = new();
}

View File

@ -3,7 +3,6 @@ using SJZY.Expand.ABP.Core;
using SJZY.Expand.ABP.Core.Logger;
using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.Track.Application.Helpers;
using SJZY.Track.Domain.Consts;
namespace SJZY.Track.Application.CAP;

View File

@ -3,7 +3,6 @@ using Microsoft.Extensions.Logging;
using SJZY.Expand.ABP.Core;
using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Consts;
using Volo.Abp.DependencyInjection;
namespace SJZY.Track.Application.CAP.EventHandlers;

View File

@ -3,7 +3,6 @@ using SJZY.Track.Application.Contract.Dtos.Forewarning;
using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Queries;
using Volo.Abp.DependencyInjection;

View File

@ -4,7 +4,6 @@ using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Queries;
using Volo.Abp.DependencyInjection;
@ -29,16 +28,16 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
[CapSubscribe(GlobalConst.TrackDeleteSubscribe, Group = GlobalConst.TrackDeleteSubscribe)]
public async Task ConsumerAsync(TrackDeleteEvent @event)
{
var dup = @event.Visited.Intersect(@event.OrderIds).ToArray();
if (dup.Any())
{
LogHelper.Warn($"删除轨迹时,发现循环依赖:{dup.JoinAsString(",")}", true);
return;
}
if (!CanDelete(@event)) return;
await DeleteTrackAsync(@event);
// 根据订单关联关系异步向下刷(异步)
await DownByOrderLink(@event);
}
private async Task DownByOrderLink(TrackDeleteEvent @event)
{
var linkedOrders = await _orderRepository.GetLinkedOrdersAsync(@event.OrderIds);
foreach (var orderId in @event.OrderIds)
{
@ -82,6 +81,26 @@ public class TrackDeleteEventHandler : ITransientDependency, ICapSubscribe
}
}
private bool CanDelete(TrackDeleteEvent @event)
{
// 系统创建的轨迹不允许删除
if (@event.Visited.IsNullOrEmpty() && @event.OperationMan == GlobalConst.SystemUser)
{
LogHelper.Warn($"系统创建的轨迹不允许被删除:{@event}", true);
return false;
}
// 订单循环关联检测
var dup = @event.Visited.Intersect(@event.OrderIds).ToArray();
if (!dup.Any())
{
return false;
}
LogHelper.Warn($"删除轨迹时,发现循环依赖:{dup.JoinAsString(",")}", true);
return false;
}
private async Task DeleteTrackAsync(TrackDeleteEvent @event)
{
// 删除轨迹(删的是同子系统下的单,所以code是统一的)

View File

@ -5,7 +5,6 @@ using SJZY.Track.Application.Contract.Dtos.TrackPush;
using SJZY.Track.Application.Helpers;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Enums;
using Volo.Abp.DependencyInjection;

View File

@ -9,7 +9,6 @@ using SJZY.Track.Application.Helpers;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Enums;
using SJZY.Track.Share.Enums;
using Volo.Abp.DependencyInjection;

View File

@ -4,7 +4,6 @@ using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Queries;
using Volo.Abp.DependencyInjection;
using OrderIdentifier = SJZY.Track.Application.Contract.Events.OrderIdentifier;
@ -134,6 +133,7 @@ public class TrackUpsertEventHandler : ITransientDependency, ICapSubscribe
{
track = new TrackDetailsIndex
{
SubSystemId = @event.SubSystemId,
OrderId = order.OrderId,
OrderNo = order.OrderNo,
OrderType = order.OrderType,

View File

@ -1,3 +1,4 @@
global using SJZY.Track.Domain.Consts;
global using Microsoft.AspNetCore.Mvc;
global using Microsoft.Extensions.DependencyInjection;
global using SJZY.Expand.ABP.Common.Enums;

View File

@ -1,7 +1,6 @@
using Microsoft.Extensions.Hosting;
using SJZY.Expand.ABP.Core;
using SJZY.Track.Domain.Aggregates.ForewarningAggregate;
using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Dtos.Forewarning;
namespace SJZY.Track.Application.HostServices;

View File

@ -16,7 +16,6 @@ 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.Consts;
using SJZY.Track.Domain.Enums;
using SJZY.Track.Domain.Queries;
using Volo.Abp.DependencyInjection;
@ -306,6 +305,7 @@ public class TrackRefreshEventHandler : ITransientDependency, IRabbitHandler
var track = new TrackDetailsIndex
{
IndexName = $"{GlobalConst.TrackIndex}-{DateTime.Now:yyyy.MM.dd}",
SubSystemId = context.SubSystemId,
OrderId = context.OrderId,
OrderType = context.OrderType,
OrderNo = context.OrderNo,

View File

@ -3,7 +3,6 @@ using SJZY.Expand.ABP.Core;
using SJZY.Expand.ABP.Core.PublicMethords;
using SJZY.Track.Domain.Aggregates.ForewarningAggregate;
using SJZY.Track.Domain.Aggregates.KPIAreaAggregate;
using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Dtos.Forewarning;
using SJZY.Track.Domain.Queries;
using Volo.Abp.DependencyInjection;

View File

@ -4,7 +4,6 @@ using SJZY.Expand.ABP.Core;
using SJZY.Track.Application.Contract.Dtos.Forewarning;
using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Domain.Aggregates.ForewarningAggregate;
using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Dtos.Forewarning;
using SJZY.Track.Domain.Queries;
using Volo.Abp.DependencyInjection;

View File

@ -1,6 +1,5 @@
using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Domain.Aggregates.KPIAreaAggregate;
using SJZY.Track.Domain.Consts;
using Volo.Abp.DependencyInjection;
namespace SJZY.Track.Application.Services.ForewarningServices;

View File

@ -3,7 +3,6 @@ using SJZY.Track.Application.Contract.Dtos.ProvideServices;
using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Queries;
namespace SJZY.Track.Application.Services.ProvideServices;
@ -26,19 +25,15 @@ public partial class OrderService
[HttpPost("Order/Link")]
public async Task<UnifyResultDto> LinkOrderAsync(LinkOrderInput input)
{
var order = await _orderRepository.GetFirstAsync(x =>
x.OrderType == input.OrderType && x.OrderNo == input.OrderNo,
x => new
{
x.Id,
x.SubSystemId
});
if (order == default)
var orderId = await _orderRepository.GetFirstAsync(x =>
x.SubSystemId == input.SubSystemId && x.OrderType == input.OrderType && x.OrderNo == input.OrderNo,
x => x.Id);
if (orderId == default)
{
throw new BusinessException(message: $"订单:{input.OrderNo}不存在");
}
//tips:循环关联问题再消费时解决
// tips:循环关联问题再消费时解决
if (input.OrderType == input.LinkOrderType)
{
throw new BusinessException(message: "不能同级关联");
@ -51,11 +46,16 @@ public partial class OrderService
.Where(x => !x.IsNullOrWhiteSpace() && x != input.OrderNo)
.Distinct().ToList();
// 解绑
if (!input.IsLink) return await UnLinkOrderAsync(input);
// 关联订单
await DoLinkOrderAsync(input, order.Id);
if (!input.IsLink)
{
// 解绑
await UnLinkOrderAsync(input);
}
else
{
// 关联订单
await DoLinkOrderAsync(input, orderId);
}
return new UnifyResultDto(true, true);
}
@ -101,7 +101,7 @@ public partial class OrderService
var tracks = await _trackDetailsRepository.GetListAsync(orderId);
// 补轨迹
// 补轨迹(按子系统、按客户分,同样是为了方便轨迹upsert和push)
foreach (var group in existedOrders.GroupBy(x => new
{
x.SubSystemId,
@ -127,7 +127,7 @@ public partial class OrderService
TrackPlace = track.TrackPlace,
TrackTime = track.TrackTime,
TrackTimeZone = track.TrackTimeZone,
IsAdd = true
IsAdd = true // 存在则不新增
};
await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, fillTrackEvent);
@ -135,7 +135,7 @@ public partial class OrderService
}
}
private async Task<UnifyResultDto> UnLinkOrderAsync(LinkOrderInput input)
private async Task UnLinkOrderAsync(LinkOrderInput input)
{
var unLinkIds = await _orderLinkQuery.GetListAsync(x =>
x.OrderType == input.OrderType && x.OrderNo == input.OrderNo &&
@ -144,7 +144,5 @@ public partial class OrderService
// real del
await _orderRepository.UnLinkByIdsAsync(unLinkIds);
return new UnifyResultDto(true, true);
}
}

View File

@ -4,7 +4,6 @@ using SJZY.Track.Application.Contract.Dtos.ProvideServices;
using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Queries;
using SJZY.UserCenter.HttpApi.Services;
@ -39,11 +38,9 @@ public partial class OrderService : ApplicationService, IOrderService
[HttpPost("Order/Upsert")]
public async Task<UnifyResultDto<IdBaseDto>> UpsertAsync(UpsertOrderInput input)
{
var subSystemId = input.SubSystemId;
// 校验订单是否已存在,存在则更新
var order = await _orderRepository.GetFirstAsync(x =>
x.SubSystemId == subSystemId && x.OrderType == input.OrderType && x.OrderNo == input.OrderNo);
x.SubSystemId == input.SubSystemId && x.OrderType == input.OrderType && x.OrderNo == input.OrderNo);
if (order != default)
{
// 订单已存在则视为更新
@ -66,7 +63,7 @@ public partial class OrderService : ApplicationService, IOrderService
}
order = ObjectMapper.Map<UpsertOrderInput, OrderEntity>(input);
order.SubSystemId = subSystemId;
order.SubSystemId = input.SubSystemId;
order.OrderFlights = ObjectMapper.Map<List<OrderFlightInfo>, List<OrderFlightEntity>>(input.FlightInfos);
order.OrderPullStatus = BuiltOrderPullStatus(input.PullConfigInfos);
@ -100,9 +97,9 @@ public partial class OrderService : ApplicationService, IOrderService
[HttpPost("Order/Delete")]
public async Task<UnifyResultDto<IdBaseDto>> DeleteOrderAsync(DeleteOrderInput input)
{
var susSystemId = input.SubSystemId;
var orderId = await _orderRepository.GetFirstAsync(x =>
x.SubSystemId == susSystemId && x.OrderType == input.OrderType && x.OrderNo == input.OrderNo, x => x.Id);
x.SubSystemId == input.SubSystemId && x.OrderType == input.OrderType && x.OrderNo == input.OrderNo,
x => x.Id);
if (orderId == default)
{
throw new BusinessException(message: $"订单:{input.OrderNo}不存在");

View File

@ -8,7 +8,6 @@ using SJZY.Track.Application.Contract.Dtos.TrackPull;
using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Application.Helpers;
using SJZY.Track.Application.Rabbit;
using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Queries;
using Volo.Abp.Http.Client.DynamicProxying;

View File

@ -4,7 +4,6 @@ using SJZY.Track.Application.Contract.Dtos.ProvideServices;
using SJZY.Track.Application.Contract.Events;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
using SJZY.Track.Domain.Consts;
using SJZY.UserCenter.HttpApi.Services;
using Volo.Abp.Http.Client.DynamicProxying;
@ -44,11 +43,11 @@ public class TrackPushService : ApplicationService
input.OrderNos = input.OrderNos.Where(x => !x.IsNullOrWhiteSpace()).Distinct().ToList(); // 单号去重、去空
var orders = await _orderRepository.GetArrayAsync(x =>
x.OrderType == input.OrderType && input.OrderNos.Contains(x.OrderNo),
x.SubSystemId == input.SubSystemId && x.OrderType == input.OrderType &&
input.OrderNos.Contains(x.OrderNo),
x => new
{
x.Id,
x.SubSystemId,
x.CustomId
});
@ -58,25 +57,20 @@ public class TrackPushService : ApplicationService
}
var userInfo = await _requestCurrentUserService.Service.GetCurrentUserBasicInfoAsync();
if (userInfo.Code != "200" || userInfo.Data is null)
if (userInfo.Code != GlobalConst.SuccessCode || userInfo.Data is null)
{
//TODO: log || ex
throw new BusinessException(message: $"调用用户中心,获取用户信息失败:{userInfo?.Msg}");
throw new BusinessException(message: $"调用用户中心,获取用户信息失败:{userInfo.Msg}");
}
var name = userInfo.Data.UserName;
foreach (var group in orders.GroupBy(x => new
{
x.SubSystemId,
x.CustomId
}))
foreach (var group in orders.GroupBy(x => x.CustomId))
{
var trackPushEvent = new TrackPushEvent
{
OptionType = OptionType.新增,
SubSystemId = group.Key.SubSystemId,
CustomId = group.Key.CustomId,
SubSystemId = input.SubSystemId,
CustomId = group.Key,
OrderIds = group.Select(x => x.Id).ToArray(),
TrackCode = input.TrackCode,
OperationMan = name,
@ -114,7 +108,8 @@ public class TrackPushService : ApplicationService
public async Task<List<TrackPushRecordIndex>> GetTrackPushRecordsAsync(OrderNoInfo input)
{
var orderId = await _orderRepository.GetFirstAsync(x =>
x.OrderType == input.OrderType && input.OrderNo == x.OrderNo, x => x.Id);
x.SubSystemId == input.SubSystemId && x.OrderType == input.OrderType && input.OrderNo == x.OrderNo,
x => x.Id);
if (orderId == default)
{
throw new BusinessException(message: "订单不存在");

View File

@ -1,6 +1,5 @@
using SJZY.Track.Application.Contract.Dtos.ProvideServices;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Consts;
namespace SJZY.Track.Application.Services.ProvideServices;
@ -20,17 +19,10 @@ public partial class TrackService
[HttpPost("Track/Query")]
public async Task<UnifyResultDto<List<GetTrackOutput>>> QueryAsync(GetTrackInput input)
{
if (input.OrderNos.Count > 500)
{
throw new BusinessException(message: "最多只能查询500单");
}
var subSystemId = input.SubSystemId;
var res = new List<GetTrackOutput>();
input.OrderNos = input.OrderNos.Where(x => !x.IsNullOrWhiteSpace()).Distinct().ToList(); // 单号去重、去空
var details = await _trackDetailsRepository.GetListAsync(input.OrderType, input.OrderNos);
var details = await _trackDetailsRepository.GetListAsync(input.SubSystemId, input.OrderType, input.OrderNos);
// 是否对外
var trackCodes = details.Select(x => x.TrackCode)
@ -42,7 +34,7 @@ public partial class TrackService
if (!trackCodes.IsNullOrEmpty())
{
var trackContents = await _trackContentRepository.GetListAsync(x =>
x.SubSystemId == subSystemId && trackCodes.Contains(x.Code),
x.SubSystemId == input.SubSystemId && trackCodes.Contains(x.Code),
x => new
{
x.Code,

View File

@ -5,7 +5,6 @@ using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackContentAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Consts;
using SJZY.UserCenter.HttpApi.Services;
using Volo.Abp.Http.Client.DynamicProxying;
@ -44,13 +43,10 @@ public partial class TrackService : ApplicationService, ITrackService
public async Task<UnifyResultDto> UpsertTrackAsync(UpsertTrackInput input)
{
var order = await _orderRepository.GetFirstAsync(x =>
x.OrderType == input.OrderType && x.OrderNo == input.OrderNo,
x.SubSystemId == input.SubSystemId && x.OrderType == input.OrderType && x.OrderNo == input.OrderNo,
x => new
{
x.Id,
x.SubSystemId,
x.OrderNo,
x.OrderType,
x.CustomId
});
if (order == default)
@ -59,25 +55,25 @@ public partial class TrackService : ApplicationService, ITrackService
}
var userInfo = await _requestCurrentUserService.Service.GetCurrentUserBasicInfoAsync();
if (userInfo.Code != "200" || userInfo.Data is null)
if (userInfo.Code != GlobalConst.SuccessCode || userInfo.Data is null)
{
//TODO: log || ex
throw new BusinessException(message: $"调用用户中心,获取用户信息失败:{userInfo?.Msg}");
throw new BusinessException(message: $"调用用户中心,获取用户信息失败:{userInfo.Msg}");
}
var name = userInfo.Data.UserName;
// 新增/更新轨迹
var @event = ObjectMapper.Map<UpsertTrackInput, TrackUpsertEvent>(input);
@event.SubSystemId = order.SubSystemId;
@event.SubSystemId = input.SubSystemId;
@event.CustomId = order.CustomId;
@event.OrderIdentifiers = new[]
{
new OrderIdentifier
{
OrderId = order.Id,
OrderNo = order.OrderNo,
OrderType = order.OrderType,
OrderNo = input.OrderNo,
OrderType = input.OrderType,
}
};
@event.OperationMan = name;
@ -94,32 +90,19 @@ public partial class TrackService : ApplicationService, ITrackService
[HttpPost("Track/Delete")]
public async Task<UnifyResultDto> DeleteTrackAsync(DeleteTrackInput input)
{
var order = await _orderRepository.GetFirstAsync(
x => x.OrderType == input.OrderType && x.OrderNo == input.OrderNo,
x => new
{
x.Id,
x.SubSystemId
});
if (order == default)
var orderId = await _orderRepository.GetFirstAsync(
x => x.SubSystemId == input.SubSystemId && x.OrderType == input.OrderType && x.OrderNo == input.OrderNo,
x => x.Id);
if (orderId == default)
{
throw new BusinessException(message: $"订单:{input.OrderNo}不存在");
}
// todo:判断是否可以删除取决于这条轨迹的创建人是否是系统,这里要改
// todo:这里重构吧,加入一个追踪id,然后根据追踪id删除,既可以防止误删,又可以减少查询
var codes = input.TrackCodes;
if (codes.Count == 0)
{
throw new BusinessException(message: "没有一个轨迹代码是可删的");
}
var userInfo = await _requestCurrentUserService.Service.GetCurrentUserBasicInfoAsync();
if (userInfo.Code != "200" || userInfo.Data is null)
if (userInfo.Code != GlobalConst.SuccessCode || userInfo.Data is null)
{
//TODO: log || ex
throw new BusinessException(message: $"调用用户中心,获取用户信息失败:{userInfo?.Msg}");
throw new BusinessException(message: $"调用用户中心,获取用户信息失败:{userInfo.Msg}");
}
var name = userInfo.Data.UserName;
@ -127,9 +110,9 @@ public partial class TrackService : ApplicationService, ITrackService
// 删除轨迹
var @event = new TrackDeleteEvent
{
OrderIds = new[] { order.Id },
TrackCodes = codes,
SubSystemId = order.SubSystemId,
OrderIds = new[] { orderId },
TrackCodes = input.TrackCodes,
SubSystemId = input.SubSystemId,
OperationMan = name
};
await _capPublisher.PublishAsync(GlobalConst.TrackDeleteSubscribe, @event);
@ -146,46 +129,33 @@ public partial class TrackService : ApplicationService, ITrackService
[HttpPost("Track/BatchDelete")]
public async Task<UnifyResultDto> BatchDeleteTrackAsync(BatchDeleteTrackInput input)
{
var orders = await _orderRepository.GetListAsync(x =>
x.OrderType == input.OrderType && input.OrderNos.Contains(x.OrderNo)
, x => new
{
x.Id,
x.SubSystemId
}
);
input.OrderNos = input.OrderNos.Where(x => !x.IsNullOrWhiteSpace()).Distinct().ToList(); // 单号去重、去空
var orderIds = await _orderRepository.GetListAsync(x =>
x.SubSystemId == input.SubSystemId && x.OrderType == input.OrderType &&
input.OrderNos.Contains(x.OrderNo)
, x => x.Id);
// todo:判断是否可以删除取决于这条轨迹的创建人是否是系统,这里要改
var codes = input.TrackCodes;
if (codes.Count == 0)
if (orderIds.Count == 0)
{
throw new BusinessException(message: "没有一个轨迹代码是可删的");
throw new BusinessException(message: "订单一个都不存在");
}
// 获取用户name
var userInfo = await _requestCurrentUserService.Service.GetCurrentUserBasicInfoAsync();
if (userInfo.Code != "200" || userInfo.Data is null)
if (userInfo.Code != GlobalConst.SuccessCode || userInfo.Data is null)
{
//TODO: log || ex
throw new BusinessException(message: $"调用用户中心,获取用户信息失败:{userInfo?.Msg}");
throw new BusinessException(message: $"调用用户中心,获取用户信息失败:{userInfo.Msg}");
}
var name = userInfo.Data.UserName;
// todo:重构
// // 删除轨迹
// foreach (var group in codes.GroupBy(x => x.OrderId))
// {
// var @event = new TrackDeleteEvent
// {
// OrderIds = group.Select(x => x.OrderId).ToArray(),
// TrackCodes = input.TrackCodes,
// SubSystemId = orders.First(x => x.Id == group.Key).SubSystemId,
// OperationMan = name
// };
// await _capPublisher.PublishAsync(GlobalConst.TrackDeleteSubscribe, @event);
// }
// 删除轨迹
var @event = new TrackDeleteEvent
{
OrderIds = orderIds.ToArray(),
TrackCodes = input.TrackCodes,
SubSystemId = input.SubSystemId,
OperationMan = userInfo.Data.UserName
};
await _capPublisher.PublishAsync(GlobalConst.TrackDeleteSubscribe, @event);
return new UnifyResultDto(true, true);
}
@ -200,59 +170,51 @@ public partial class TrackService : ApplicationService, ITrackService
public async Task<UnifyResultDto> BatchUpsertTrackAsync(BatchUpsertTrackInput input)
{
input.OrderNos = input.OrderNos.Where(x => !x.IsNullOrWhiteSpace()).Distinct().ToList(); // 单号去重、去空
if (input.OrderNos.Count == 0)
{
throw new BusinessException(message: "订单一个都不存在");
}
var orders = await _orderRepository.GetListAsync(x =>
x.OrderType == input.OrderType && input.OrderNos.Contains(x.OrderNo),
x.SubSystemId == input.SubSystemId && x.OrderType == input.OrderType &&
input.OrderNos.Contains(x.OrderNo),
x => new
{
x.Id,
x.OrderNo,
x.SubSystemId,
x.CustomId
});
var userInfo = await _requestCurrentUserService.Service.GetCurrentUserBasicInfoAsync();
if (userInfo.Code != "200" || userInfo.Data is null)
if (orders.Count == 0)
{
//TODO: log || ex
throw new BusinessException(message: $"调用用户中心,获取用户信息失败:{userInfo?.Msg}");
throw new BusinessException(message: "订单一个都不存在");
}
var name = userInfo.Data.UserName;
// 获取用户name
var userInfo = await _requestCurrentUserService.Service.GetCurrentUserBasicInfoAsync();
if (userInfo.Code != GlobalConst.SuccessCode || userInfo.Data is null)
{
throw new BusinessException(message: $"调用用户中心,获取用户信息失败:{userInfo.Msg}");
}
foreach (var group in orders.GroupBy(x => new
// 按客户新增/更新轨迹(为了推送轨迹时方便)
foreach (var group in orders.GroupBy(x => x.CustomId))
{
x.SubSystemId,
x.CustomId
}))
{
// 新增/更新轨迹
var @event = new TrackUpsertEvent
{
SubSystemId = group.Key.SubSystemId,
CustomId = group.Key.CustomId,
OrderIdentifiers =
group.Select(order => new OrderIdentifier
{
OrderId = order.Id,
OrderNo = order.OrderNo,
OrderType = input.OrderType,
}).ToArray(),
SubSystemId = input.SubSystemId,
CustomId = group.Key,
OrderIdentifiers = group.Select(order => new OrderIdentifier
{
OrderId = order.Id,
OrderNo = order.OrderNo,
OrderType = input.OrderType,
}).ToArray(),
IsAdd = input.IsAdd,
TrackCode = input.TrackCode,
TrackPlace = input.TrackPlace,
TrackTime = input.TrackTime!.Value,
TrackTimeZone = input.TrackTimeZone!.Value,
OperationMan = name
TrackTime = input.TrackTime,
TrackTimeZone = input.TrackTimeZone,
OperationMan = userInfo.Data.UserName
};
await _capPublisher.PublishAsync(GlobalConst.TrackUpsertSubscribe, @event);
}
return new UnifyResultDto(true, true);
}
}

View File

@ -61,7 +61,7 @@ public class TrackContentService : ApplicationService
var dto = ObjectMapper.Map<GetTrackContentDetailVO, GetTrackContentDetailDto>(detailInfo);
if (dto.TrackFlagId == 0) dto.TrackFlagId = null;
return new UnifyResultDto<GetTrackContentDetailDto>("200", "", dto);
return new UnifyResultDto<GetTrackContentDetailDto>(GlobalConst.SuccessCode, "", dto);
}
/// <summary>
@ -190,7 +190,7 @@ public class TrackContentService : ApplicationService
var entity = ObjectMapper.Map<EditTrackContentInput, TrackContentEntity>(input);
var isTrue = await _trackContentRepository.InsertAsync(entity);
return new UnifyResultDto("200", "新增成功", isTrue);
return new UnifyResultDto(GlobalConst.SuccessCode, "新增成功", isTrue);
}
private async Task<UnifyResultDto> UpdateAsync(EditTrackContentInput input)
@ -261,7 +261,7 @@ public class TrackContentService : ApplicationService
ts.Complete();
}
return new UnifyResultDto("200", "修改成功", isTrue);
return new UnifyResultDto(GlobalConst.SuccessCode, "修改成功", isTrue);
}
private async Task<UnifyResultDto> DeleteAsync(EditTrackContentInput input)
@ -291,7 +291,7 @@ public class TrackContentService : ApplicationService
var isTrue = await _trackContentRepository.SoftDeleteAsync(x => x.Id == input.Id);
return new UnifyResultDto("200", "删除成功", isTrue);
return new UnifyResultDto(GlobalConst.SuccessCode, "删除成功", isTrue);
}
#endregion 私有方法

View File

@ -61,7 +61,7 @@ public class TrackFlagService : ApplicationService, ITransientDependency
}
var dto = ObjectMapper.Map<GetTrackFlagDetailVO, GetTrackFlagDetailDto>(detailInfo);
return new UnifyResultDto<GetTrackFlagDetailDto>("200", "", dto);
return new UnifyResultDto<GetTrackFlagDetailDto>(GlobalConst.SuccessCode, "", dto);
}
/// <summary>
@ -111,7 +111,7 @@ public class TrackFlagService : ApplicationService, ITransientDependency
var entity = ObjectMapper.Map<EditTrackFlagInput, TrackFlagEntity>(input);
var isTrue = await _trackFlagRepository.InsertAsync(entity);
return new UnifyResultDto("200", "新增成功", isTrue);
return new UnifyResultDto(GlobalConst.SuccessCode, "新增成功", isTrue);
}
private async Task<UnifyResultDto> UpdateAsync(EditTrackFlagInput input)
@ -145,7 +145,7 @@ public class TrackFlagService : ApplicationService, ITransientDependency
ObjectMapper.Map(input, templateEntity);
var isTrue = await _trackFlagRepository.UpdateAsync(templateEntity);
return new UnifyResultDto("200", "修改成功", isTrue);
return new UnifyResultDto(GlobalConst.SuccessCode, "修改成功", isTrue);
}
private async Task<UnifyResultDto> DeleteAsync(EditTrackFlagInput input)
@ -163,7 +163,7 @@ public class TrackFlagService : ApplicationService, ITransientDependency
var isTrue = await _trackFlagRepository.SoftDeleteAsync(x => x.Id == input.Id);
return new UnifyResultDto("200", "删除成功", isTrue);
return new UnifyResultDto(GlobalConst.SuccessCode, "删除成功", isTrue);
}
#endregion

View File

@ -88,7 +88,7 @@ public class TrackNodeService : ApplicationService, ITransientDependency
if (string.IsNullOrEmpty(input.NodeName) || string.IsNullOrEmpty(input.NodeEnName) ||
!input.SubSystemId.HasValue)
{
return new UnifyResultDto("200", "NodeName,NodeEnName,SubSystemId 必填", false);
return new UnifyResultDto(GlobalConst.SuccessCode, "NodeName,NodeEnName,SubSystemId 必填", false);
}
var trackNodesEntitys = await _trackNodeRepository.GetListAsync(a =>
@ -113,13 +113,13 @@ public class TrackNodeService : ApplicationService, ITransientDependency
if (!StringHelper.IsValidEnglishString(input.NodeEnName))
{
return new UnifyResultDto("200", "节点英文名称必须是英文和常用英文符号", false);
return new UnifyResultDto(GlobalConst.SuccessCode, "节点英文名称必须是英文和常用英文符号", false);
}
var entity = ObjectMapper.Map<EditTrackNodeInput, TrackNodeEntity>(input);
var isTrue = await _trackNodeRepository.InsertAsync(entity);
return new UnifyResultDto("200", "新增成功", isTrue);
return new UnifyResultDto(GlobalConst.SuccessCode, "新增成功", isTrue);
}
private async Task<UnifyResultDto> UpdateAsync(EditTrackNodeInput input)
@ -128,13 +128,13 @@ public class TrackNodeService : ApplicationService, ITransientDependency
if (string.IsNullOrEmpty(input.NodeName) || string.IsNullOrEmpty(input.NodeEnName))
{
return new UnifyResultDto("200", "NodeName,NodeEnName 必填", false);
return new UnifyResultDto(GlobalConst.SuccessCode, "NodeName,NodeEnName 必填", false);
}
var trackNodesEntitys = await _trackNodeRepository.GetFirstAsync(a => a.Id == input.Id);
if (trackNodesEntitys == null)
{
return new UnifyResultDto("200", "没有找到数据,更新失败", false);
return new UnifyResultDto(GlobalConst.SuccessCode, "没有找到数据,更新失败", false);
}
#endregion
@ -143,14 +143,14 @@ public class TrackNodeService : ApplicationService, ITransientDependency
trackNodesEntitys.NodeName = input.NodeName;
var isTrue = await _trackNodeRepository.UpdateAsync(trackNodesEntitys);
return new UnifyResultDto("200", "修改成功", isTrue);
return new UnifyResultDto(GlobalConst.SuccessCode, "修改成功", isTrue);
}
private async Task<UnifyResultDto> DeleteAsync(EditTrackNodeInput input)
{
if (input.Id <= 0 || !input.SubSystemId.HasValue)
{
return new UnifyResultDto("200", "SubSystemId 必填", false);
return new UnifyResultDto(GlobalConst.SuccessCode, "SubSystemId 必填", false);
}
var trackStatus =
@ -158,11 +158,11 @@ public class TrackNodeService : ApplicationService, ITransientDependency
val.Node == input.Id && val.SubSystemId == input.SubSystemId);
if (trackStatus != null)
{
return new UnifyResultDto("200", "删除失败,该节点已被使用", false);
return new UnifyResultDto(GlobalConst.SuccessCode, "删除失败,该节点已被使用", false);
}
var rows = await _trackNodeRepository.DeleteById(input.Id);
return new UnifyResultDto("200", "删除成功", rows > 0);
return new UnifyResultDto(GlobalConst.SuccessCode, "删除成功", rows > 0);
}
#endregion

View File

@ -4,7 +4,6 @@ using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.Track.Domain.Aggregates.TrackContentAggregate;
using SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Dtos.Order;
namespace SJZY.Track.Application.Services.TrackOrders;
@ -183,8 +182,6 @@ public class TrackOrderService : ApplicationService
[HttpGet("GetOrderOperationsById")]
public async Task<List<OrderOperationRecordIndex>> GetOrderOperationsByIdAsync(int orderId)
{
// todo:分页?dto?
return await _orderOperationRecordRepository.GetOrderOperationsByIdAsync(orderId);
;
}
}

View File

@ -3,7 +3,6 @@ using SJZY.Expand.ABP.Core;
using SJZY.Track.Application.Contract.Dtos.TrackPull;
using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Domain.Aggregates.TrackPullAggregate;
using SJZY.Track.Domain.Consts;
using SJZY.Track.Domain.Dtos.TrackPull;
namespace SJZY.Track.Application.Services.TrackPull;

View File

@ -2,7 +2,6 @@ using SJZY.Expand.ABP.Core;
using SJZY.Track.Application.Contract.Dtos.TrackPush;
using SJZY.Track.Application.Contract.Services;
using SJZY.Track.Domain.Aggregates.TrackPushAggregate;
using SJZY.Track.Domain.Consts;
using Volo.Abp.DependencyInjection;
namespace SJZY.Track.Application.Services.TrackPush;

View File

@ -61,7 +61,7 @@ public class TrackStatusService : ApplicationService, ITransientDependency
}
var dto = ObjectMapper.Map<GetTrackStatusDetailVO, GetTrackStatusDetailDto>(detailInfo);
return new UnifyResultDto<GetTrackStatusDetailDto>("200", "", dto);
return new UnifyResultDto<GetTrackStatusDetailDto>(GlobalConst.SuccessCode, "", dto);
}
/// <summary>
@ -118,7 +118,7 @@ public class TrackStatusService : ApplicationService, ITransientDependency
var entity = ObjectMapper.Map<EditTrackStatusInput, TrackStatusEntity>(input);
var isTrue = await _trackStatusRepository.InsertAsync(entity);
return new UnifyResultDto("200", "新增成功", isTrue);
return new UnifyResultDto(GlobalConst.SuccessCode, "新增成功", isTrue);
}
private async Task<UnifyResultDto> UpdateAsync(EditTrackStatusInput input)
@ -157,7 +157,7 @@ public class TrackStatusService : ApplicationService, ITransientDependency
ObjectMapper.Map(input, templateEntity);
var isTrue = await _trackStatusRepository.UpdateAsync(templateEntity);
return new UnifyResultDto("200", "修改成功", isTrue);
return new UnifyResultDto(GlobalConst.SuccessCode, "修改成功", isTrue);
}
private async Task<UnifyResultDto> DeleteAsync(EditTrackStatusInput input)
@ -175,7 +175,7 @@ public class TrackStatusService : ApplicationService, ITransientDependency
var isTrue = await _trackStatusRepository.SoftDeleteAsync(x => x.Id == input.Id);
return new UnifyResultDto("200", "删除成功", isTrue);
return new UnifyResultDto(GlobalConst.SuccessCode, "删除成功", isTrue);
}
#endregion

View File

@ -60,7 +60,7 @@ public class TrackTemplateService : ApplicationService
}
var dto = ObjectMapper.Map<GetTrackTemplateDetailVO, GetTrackTemplateDetailDto>(detailInfo);
return new UnifyResultDto<GetTrackTemplateDetailDto>("200", "", dto);
return new UnifyResultDto<GetTrackTemplateDetailDto>(GlobalConst.SuccessCode, "", dto);
}
/// <summary>
@ -228,7 +228,7 @@ public class TrackTemplateService : ApplicationService
var entity = ObjectMapper.Map<EditTrackTemplateInput, TrackTemplateEntity>(input);
var isTrue = await _trackTemplateRepository.InsertAsync(entity);
return new UnifyResultDto("200", "新增成功", isTrue);
return new UnifyResultDto(GlobalConst.SuccessCode, "新增成功", isTrue);
}
private async Task<UnifyResultDto> UpdateAsync(EditTrackTemplateInput input)
@ -259,14 +259,14 @@ public class TrackTemplateService : ApplicationService
ObjectMapper.Map(input, templateEntity);
var isTrue = await _trackTemplateRepository.UpdateAsync(templateEntity);
return new UnifyResultDto("200", "修改成功", isTrue);
return new UnifyResultDto(GlobalConst.SuccessCode, "修改成功", isTrue);
}
private async Task<UnifyResultDto> DeleteAsync(EditTrackTemplateInput input)
{
var isTrue = await _trackTemplateRepository.SoftDeleteAsync(x => x.Id == input.Id);
return new UnifyResultDto("200", "删除成功", isTrue);
return new UnifyResultDto(GlobalConst.SuccessCode, "删除成功", isTrue);
}
#endregion 私有方法

View File

@ -11,7 +11,6 @@ using SJZY.InterfaceRelay.Application.Contracts;
using SJZY.Track.Application.CAP;
using SJZY.Track.Application.Contract;
using SJZY.Track.Application.Localization;
using SJZY.Track.Domain.Consts;
using SJZY.UserCenter.Contracts;
using SJZY.UserCenter.SharedModel;
using SJZY.UserCenter.SharedModel.Pub;

View File

@ -8,7 +8,7 @@ public interface ITrackDetailsRepository : IElasticsearchClientService<TrackDeta
Task<List<TrackDetailsIndex>> GetLatestListAsync(int[] eventOrderIds, List<string> trackCodes);
Task<List<TrackDetailsIndex>> GetListAsync(int orderType, List<string> orderNos);
Task<List<TrackDetailsIndex>> GetListAsync(int subSystemId, int orderType, List<string> orderNos);
Task<bool> AnyAsync(int orderId, string originTrackDataHash);

View File

@ -7,6 +7,11 @@ namespace SJZY.Track.Domain.Aggregates.TrackDetailsAggregate;
[ElasticsearchType(RelationName = GlobalConst.TrackIndex)]
public class TrackDetailsIndex : IdBaseIndex
{
/// <summary>
/// 子系统
/// </summary>
public int SubSystemId { get; set; }
/// <summary>
/// 订单Id
/// </summary>

View File

@ -9,4 +9,6 @@ public partial class GlobalConst
public const int NormalLimit = 10000;
public const float NoneTrackTimeZone = 99999;
public const string SuccessCode = "200";
}

View File

@ -8,7 +8,7 @@ public class InterfaceRelayConst
/// <summary>
/// 接口通成功代码
/// </summary>
public const string SuccessCode = "200";
public const string SuccessCode = GlobalConst.SuccessCode;
/// <summary>
/// 获取轨迹接口代码

View File

@ -104,9 +104,9 @@ public class OrderRepository : BasicRepository<OrderEntity>, IOrderRepository, I
// 软删订单主表
await SoftDeleteAsync(x => x.Id == orderId);
// 软删订单模板
// 软删订单航班
// 软删订单关联关系
// 软删订单拉取状态
tran.Complete();
}

View File

@ -178,7 +178,7 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
}
}
public async Task<List<TrackDetailsIndex>> GetListAsync(int orderType, List<string> orderNos)
public async Task<List<TrackDetailsIndex>> GetListAsync(int subSystemId, int orderType, List<string> orderNos)
{
if (orderNos.Count < 1) return new List<TrackDetailsIndex>();
@ -195,7 +195,9 @@ internal class TrackDetailsRepository : ElasticSearchContextAbstract<TrackDetail
))
.Query(q =>
q.Bool(b => b
.Must(mu => mu
.Must(
mu => mu.Term(f => f.SubSystemId, subSystemId),
mu => mu
.Terms(t => t
.Field(f => f.OrderNo.Suffix("keyword"))
.Terms(orderNos)