From 7b3f083b9b2d1b8c8472e01044b36827c2984105 Mon Sep 17 00:00:00 2001
From: xiaolipro <2357729423@qq.com>
Date: Sat, 29 Nov 2025 15:44:34 +0800
Subject: [PATCH] t
---
.../TrackPull/EditTrackPullPriorityInput.cs | 10 +-
.../ProvideServices/OrderServiceV2.cs | 207 ++++++++++++------
.../Services/TrackPull/TrackPullService.cs | 8 +-
.../Aggregates/OrderAggregate/OrderEntity.cs | 1 +
.../TrackPullConfigEntity.cs | 14 +-
.../TrackPullPriorityEntity.cs | 2 +-
.../GetTrackPullConfigDetailOutputVO.cs | 5 -
.../GetTrackPullPriorityDetailOutputVO.cs | 2 +-
.../GetTrackPullPriorityPageOutputVO.cs | 4 +-
.../Repositories/TrackPullConfigRepository.cs | 1 -
10 files changed, 152 insertions(+), 102 deletions(-)
diff --git a/src/TrackCenter.Application/Dtos/TrackPull/EditTrackPullPriorityInput.cs b/src/TrackCenter.Application/Dtos/TrackPull/EditTrackPullPriorityInput.cs
index 38852c4e..0765744f 100644
--- a/src/TrackCenter.Application/Dtos/TrackPull/EditTrackPullPriorityInput.cs
+++ b/src/TrackCenter.Application/Dtos/TrackPull/EditTrackPullPriorityInput.cs
@@ -14,25 +14,25 @@ public class EditTrackPullPriorityInput
///
/// 轨迹拉取配置id
///
- public int? TrackPullConfigId { get; set; }
+ public int TrackPullConfigId { get; set; }
///
/// 客户
///
- public string? Customer { get; set; }
+ public string Customer { get; set; }
///
/// 订单类型
///
- public TrackOrderType? OrderType { get; set; }
+ public TrackOrderType OrderType { get; set; }
///
/// 优先级
///
- public string? Priority { get; set; }
+ public int Priority { get; set; }
///
/// 服务商拉取频率(分钟)
///
- public int? PullInterval { get; set; }
+ public int PullInterval { get; set; }
}
diff --git a/src/TrackCenter.Application/Services/ProvideServices/OrderServiceV2.cs b/src/TrackCenter.Application/Services/ProvideServices/OrderServiceV2.cs
index d4d16c8e..efb22b49 100644
--- a/src/TrackCenter.Application/Services/ProvideServices/OrderServiceV2.cs
+++ b/src/TrackCenter.Application/Services/ProvideServices/OrderServiceV2.cs
@@ -1,5 +1,6 @@
using System.ComponentModel.DataAnnotations;
using InterfaceForward.Domain.Shared.Helpers;
+using Microsoft.AspNetCore.Components.Forms;
using TrackCenter.Domain.Aggregates.OrderAggregate;
using TrackCenter.Domain.Aggregates.TrackPullAggregate;
using TrackCenter.Repository.Aggregates.OrderAggregate;
@@ -71,6 +72,65 @@ public class OrderServiceV2(
};
}
+ ///
+ /// 新增、更新大包(存在就更新)
+ ///
+ ///
+ ///
+ [HttpPost("OrderV2/UpsertBigBag")]
+ public async Task UpsertAsync(UpsertBigBagInput input)
+ {
+ // 校验订单是否已存在,存在则更新
+ var order = await orderRepository.GetFirstAsync(x =>
+ x.AppKey == input.ApiCode && x.OrderType == TrackOrderType.大包 && x.OrderNo == input.BagNo);
+ // 订单已存在则视为更新
+ if (order != null)
+ {
+ order = await BuiltOrder(input);
+
+ await orderRepository.UpdateOrderAsync(order);
+
+ var index = new OrderOperationRecordIndex
+ {
+ OrderId = order.Id,
+ OrderNo = input.BagNo,
+ OptionType = OrderOperationType.修改订单.ToString(),
+ Content = input.ToJson(),
+ CreateUserId = CurrentUserId,
+ CreateUserName = CurrentUser.UserName ?? string.Empty,
+ };
+
+ _ = orderOperationRecordEsRepository.AddAsync(index);
+
+ return new IdBaseDto
+ {
+ Id = order.Id
+ };
+ }
+
+ order = await BuiltOrder(input);
+ var orderId = await orderRepository.CreateOrderAsync(order);
+
+ // 写入操作日志
+ var indexForAdd = new OrderOperationRecordIndex
+ {
+ OrderId = orderId,
+ OrderNo = input.BagNo,
+ OptionType = nameof(OrderOperationType.创建订单),
+ Content = input.ToJson(),
+ CreateUserId = CurrentUserId,
+ CreateUserName = CurrentUser.UserName ?? string.Empty,
+ CreateTime = DateTime.Now
+ };
+ _ = orderOperationRecordEsRepository.AddAsync(indexForAdd);
+
+
+ return new IdBaseDto
+ {
+ Id = orderId
+ };
+ }
+
private async Task BuiltOrder(UpsertSmallBagInput input)
{
var order = new OrderEntity
@@ -92,86 +152,42 @@ public class OrderServiceV2(
};
var config = await trackPullConfigRepository
- .GetListAsync(x => x.AppKey == input.ApiCode
- && x.ServiceProviderCode == input.ApiCode && x.OrderType == TrackOrderType.小包);
+ .FirstOrDefaultAsync(x => x.AppKey == input.ApiCode
+ && x.ServiceProviderCode == input.ApiCode);
- order.OrderPullStatus = BuiltOrderPullStatus(config, order);
+ if (config == null) throw new BusinessException(message: "没有一个拉取配置可以适用,请配置,否则无法拉取轨迹");
+
+ order.OrderPullStatus = [CreateOrderPullStatus(config, order)];
return order;
}
- private static List BuiltOrderPullStatus(
- List configs,
- OrderEntity order)
+ private Task BuiltOrder(UpsertBigBagInput input)
{
- if (configs.IsNullOrEmpty()) return [];
-
- TrackPullConfigEntity? selected = null;
- var bestScore = -1;
-
- foreach (var config in configs)
+ var order = new OrderEntity
{
- if (!IsConfigApplicable(config, order))
- {
- continue;
- }
+ AppKey = input.ApiCode,
+ ServiceProviderCode = input.ApiCode,
+ OrderType = TrackOrderType.大包,
+ OrderNo = input.BagNo,
+ ThirdPartyOrderNumber = input.OtherNo,
+ Customer = input.Client,
+ Channel = input.Channel,
+ ProductCode = input.Product,
+ ArrivalCountry = input.Country
+ };
- var score = CalculateMatchScore(config, order);
- if (score > bestScore)
- {
- bestScore = score;
- selected = config;
- }
- }
+ // tips: 2025-11-29 zzh 大包没有轨迹拉取能力
- if (selected == null) throw new BusinessException(message: "没有一个拉取配置可以适用,请配置,否则无法拉取轨迹");
+ // var config = await trackPullConfigRepository
+ // .FirstOrDefaultAsync(x => x.AppKey == input.ApiCode
+ // && x.ServiceProviderCode == input.ApiCode);
+ //
+ // if (config == null) throw new BusinessException(message: "没有一个拉取配置可以适用,请配置,否则无法拉取轨迹");
+ //
+ // order.OrderPullStatus = [CreateOrderPullStatus(config, order)];
- return [CreateOrderPullStatus(selected, order)];
- }
-
- private static bool IsConfigApplicable(TrackPullConfigEntity config, OrderEntity order)
- {
- return IsFieldApplicable(order.Customer, config.Customer) &&
- IsFieldApplicable(order.Channel, config.Channel) &&
- IsFieldApplicable(order.ProductCode, config.Product);
- }
-
- private static bool IsFieldApplicable(string? orderValue, string? configValue)
- {
- if (string.IsNullOrWhiteSpace(configValue))
- {
- return true;
- }
-
- return string.Equals(configValue, orderValue, StringComparison.OrdinalIgnoreCase);
- }
-
- private static int CalculateMatchScore(TrackPullConfigEntity config, OrderEntity order)
- {
- var score = 0;
-
- if (IsPreciseMatch(order.Customer, config.Customer))
- {
- score++;
- }
-
- if (IsPreciseMatch(order.Channel, config.Channel))
- {
- score++;
- }
-
- if (IsPreciseMatch(order.ProductCode, config.Product))
- {
- score++;
- }
-
- return score;
- }
-
- private static bool IsPreciseMatch(string? orderValue, string? configValue)
- {
- return !string.IsNullOrWhiteSpace(configValue) &&
- string.Equals(configValue, orderValue, StringComparison.OrdinalIgnoreCase);
+ return Task.FromResult(order);
}
private static OrderPullStatusEntity CreateOrderPullStatus(TrackPullConfigEntity config, OrderEntity order)
@@ -195,6 +211,11 @@ public class OrderServiceV2(
status.StartTime = DateTime.Now.AddHours(config.SilenceBeforeStart);
}
+ if (string.IsNullOrWhiteSpace(config.EndTrackCode))
+ {
+ status.EndTime = DateTime.Now.AddHours(config.SilenceBeforeStart).AddDays(7);
+ }
+
return status;
}
}
@@ -273,3 +294,49 @@ public class Consignee
///
public string Email { get; set; }
}
+
+public class UpsertBigBagInput
+{
+ ///
+ /// 客户名称,或者code,必填
+ ///
+ [Required]
+ public string Client { get; set; }
+
+ ///
+ /// 客户单号,必填
+ ///
+ [Required]
+ public string BagNo { get; set; }
+
+ ///
+ /// 其他单号
+ ///
+ public string OtherNo { get; set; }
+
+ ///
+ /// 渠道名称,或者code
+ ///
+ public string Channel { get; set; }
+
+ ///
+ /// 产品名称,或者code
+ ///
+ public string Product { get; set; }
+
+ ///
+ /// 产品名称,或者code
+ ///
+ public string Country { get; set; }
+
+ ///
+ /// 服务商code
+ ///
+ public string ApiCode { get; set; }
+}
+
+public class UpsertMsterOrderInput
+{
+
+}
+
diff --git a/src/TrackCenter.Application/Services/TrackPull/TrackPullService.cs b/src/TrackCenter.Application/Services/TrackPull/TrackPullService.cs
index 38655b00..0757e49a 100644
--- a/src/TrackCenter.Application/Services/TrackPull/TrackPullService.cs
+++ b/src/TrackCenter.Application/Services/TrackPull/TrackPullService.cs
@@ -88,8 +88,7 @@ public class TrackPullService(
{
Expression> isAnyExp = x =>
x.AppKey == input.AppKey &&
- x.ServiceProviderCode == input.ServiceProviderCode &&
- x.OrderType == input.OrderType;
+ x.ServiceProviderCode == input.ServiceProviderCode;
if (input.Options == OptionTypeNoNull.修改) isAnyExp = isAnyExp.And(x => x.Id != input.Id);
if (await trackPullConfigRepository.IsAnyAsync(isAnyExp))
@@ -317,6 +316,8 @@ public class TrackPullService(
if (await trackPullConfigRepository.IsPriorityAnyAsync(isPriorityAnyExp))
throw new BusinessException("配置已存在");
+
+ if (input.PullInterval < 60) input.PullInterval = 60;
}
switch (input.Options)
@@ -345,8 +346,7 @@ public class TrackPullService(
case OptionTypeNoNull.删除:
{
- var oldTrackPullPriorityEntity =
- await trackPullConfigRepository.GetPriorityByIdAsync(input.Id!.Value) ??
+ _ = await trackPullConfigRepository.GetPriorityByIdAsync(input.Id!.Value) ??
throw new BusinessException(message: "找不到数据");
await trackPullConfigRepository.SoftDeletePriorityAsync(x => x.Id == input.Id);
diff --git a/src/TrackCenter.Domain/Aggregates/OrderAggregate/OrderEntity.cs b/src/TrackCenter.Domain/Aggregates/OrderAggregate/OrderEntity.cs
index bc0dd798..a4200097 100644
--- a/src/TrackCenter.Domain/Aggregates/OrderAggregate/OrderEntity.cs
+++ b/src/TrackCenter.Domain/Aggregates/OrderAggregate/OrderEntity.cs
@@ -221,6 +221,7 @@ public class OrderEntity : FullAuditedAggregateRoot
[SugarColumn(IsIgnore = true)] public List OrderFlights { get; set; } = [];
+ // tips:2025-11-29:sp挪到订单主表了,1v1拉取
[SugarColumn(IsIgnore = true)] public List OrderPullStatus { get; set; } = [];
public void ResetTrackInfo()
diff --git a/src/TrackCenter.Domain/Aggregates/TrackPullAggregate/TrackPullConfigEntity.cs b/src/TrackCenter.Domain/Aggregates/TrackPullAggregate/TrackPullConfigEntity.cs
index ff988646..8558b3be 100644
--- a/src/TrackCenter.Domain/Aggregates/TrackPullAggregate/TrackPullConfigEntity.cs
+++ b/src/TrackCenter.Domain/Aggregates/TrackPullAggregate/TrackPullConfigEntity.cs
@@ -8,12 +8,6 @@ namespace TrackCenter.Domain.Aggregates.TrackPullAggregate;
[SugarTable("t_track_pull_config")]
public class TrackPullConfigEntity : FullAuditedAggregateRoot
{
- ///
- /// 自增主键
- ///
- [SugarColumn(ColumnName = "Id", IsPrimaryKey = true, IsIdentity = true)]
- public int Id { get; set; }
-
///
/// 应用
///
@@ -24,7 +18,7 @@ public class TrackPullConfigEntity : FullAuditedAggregateRoot
/// 服务商代码
///
[SugarColumn(ColumnName = "ServiceProviderCode")]
- public string? ServiceProviderCode { get; set; }
+ public string ServiceProviderCode { get; set; }
///
/// 解析方式,1取接口通返参映射后的,2取服务商原返参
@@ -92,12 +86,6 @@ public class TrackPullConfigEntity : FullAuditedAggregateRoot
[SugarColumn(ColumnName = "TrackTimeZoneName")]
public string? TrackTimeZoneName { get; set; }
- ///
- /// 订单类型
- ///
- [SugarColumn(ColumnName = "OrderType")]
- public TrackOrderType OrderType { get; set; }
-
///
/// 开始轨迹code
///
diff --git a/src/TrackCenter.Domain/Aggregates/TrackPullAggregate/TrackPullPriorityEntity.cs b/src/TrackCenter.Domain/Aggregates/TrackPullAggregate/TrackPullPriorityEntity.cs
index 0bf59092..55589ef2 100644
--- a/src/TrackCenter.Domain/Aggregates/TrackPullAggregate/TrackPullPriorityEntity.cs
+++ b/src/TrackCenter.Domain/Aggregates/TrackPullAggregate/TrackPullPriorityEntity.cs
@@ -30,7 +30,7 @@ public class TrackPullPriorityEntity: FullAuditedEntity
/// 优先级
///
[SugarColumn(ColumnName = "优先级")]
- public string Priority { get; set; }
+ public int Priority { get; set; }
///
/// 服务商拉取频率(分钟)
diff --git a/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs b/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs
index d35a5460..0a5411b4 100644
--- a/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs
+++ b/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullConfigDetailOutputVO.cs
@@ -81,11 +81,6 @@ public class GetTrackPullConfigDetailOutputVO
///
public string TrackDetailsPath { get; set; }
- ///
- /// 订单类型
- ///
- public TrackOrderType OrderType { get; set; }
-
///
/// 开始轨迹code
///
diff --git a/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullPriorityDetailOutputVO.cs b/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullPriorityDetailOutputVO.cs
index 8f28b111..053759fb 100644
--- a/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullPriorityDetailOutputVO.cs
+++ b/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullPriorityDetailOutputVO.cs
@@ -24,7 +24,7 @@ public class GetTrackPullPriorityDetailOutputVO
///
/// 优先级
///
- public string Priority { get; set; }
+ public int Priority { get; set; }
///
/// 服务商拉取频率(分钟)
diff --git a/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullPriorityPageOutputVO.cs b/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullPriorityPageOutputVO.cs
index e90688b7..7616fcd8 100644
--- a/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullPriorityPageOutputVO.cs
+++ b/src/TrackCenter.Domain/Dtos/TrackPull/GetTrackPullPriorityPageOutputVO.cs
@@ -19,13 +19,13 @@ public class GetTrackPullPriorityPageOutputVO
///
/// 优先级
///
- public string Priority { get; set; }
+ public int Priority { get; set; }
///
/// 服务商拉取频率(分钟)
///
public int PullInterval { get; set; }
-
+
public DateTime CreateTime { get; set; }
public string? CreateUser { get; set; }
diff --git a/src/TrackCenter.Repository/Repositories/TrackPullConfigRepository.cs b/src/TrackCenter.Repository/Repositories/TrackPullConfigRepository.cs
index 61e53cfc..47a1cf6c 100644
--- a/src/TrackCenter.Repository/Repositories/TrackPullConfigRepository.cs
+++ b/src/TrackCenter.Repository/Repositories/TrackPullConfigRepository.cs
@@ -102,7 +102,6 @@ public class TrackPullConfigRepository : BasicRepository,
TrackStatusName = trackPull.TrackStatusName,
OrderPath = trackPull.OrderPath,
TrackDetailsPath = trackPull.TrackDetailsPath,
- OrderType = trackPull.OrderType,
StartTrackCode = trackPull.StartTrackCode,
EndTrackCode = trackPull.EndTrackCode,
SilenceBeforeStart = trackPull.SilenceBeforeStart,