From 4c4cdd63264f7f00383e8f11d91996c397d08759 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Wed, 28 Feb 2024 16:15:32 +0800
Subject: [PATCH 1/2] =?UTF-8?q?add=20=E5=85=B3=E8=81=94=E8=AE=A2=E5=8D=95?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
common.props | 1 +
.../Dtos/ProvideServices/LinkOrderInput.cs | 24 +++++--
.../Services/ProvideServices/OrderService.cs | 64 ++++++++++++++-----
.../OrderAggregate/IOrderRepository.cs | 14 ++++
.../Aggregates/OrderAggregate/OrderEntity.cs | 11 ++++
src/SJZY.Track.Repository/OrderRepository.cs | 10 +++
.../SJZY.Track.Repository.csproj | 4 +-
7 files changed, 106 insertions(+), 22 deletions(-)
diff --git a/common.props b/common.props
index 6dfdd8fe..492bcb09 100644
--- a/common.props
+++ b/common.props
@@ -3,6 +3,7 @@
latest
enable
enable
+ $(NoWarn);CS1591;CS0436;NU1803
diff --git a/src/SJZY.Track.Application/Dtos/ProvideServices/LinkOrderInput.cs b/src/SJZY.Track.Application/Dtos/ProvideServices/LinkOrderInput.cs
index 460c506d..ae3dfd9d 100644
--- a/src/SJZY.Track.Application/Dtos/ProvideServices/LinkOrderInput.cs
+++ b/src/SJZY.Track.Application/Dtos/ProvideServices/LinkOrderInput.cs
@@ -1,15 +1,31 @@
-using SJZY.Track.Domain.Aggregates.OrderAggregate;
+using System.ComponentModel.DataAnnotations;
namespace SJZY.Track.Application.Dtos.ProvideServices;
public class LinkOrderInput
{
///
- /// false解绑,true关联,必填
+ /// false解绑,true关联
///
+ [Required]
public bool IsLink { get; set; }
- public NoInfo NoInfo { get; set; }
+ ///
+ /// 订单类型,必填
+ ///
+ [Required]
+ public int OrderType { get; set; }
- public List LinkedOrderInfos { get; set; }
+ ///
+ /// 订单号,必填
+ ///
+ [Required]
+ public string OrderNo { get; set; }
+
+ [Required] public int LinkOrderType { get; set; }
+
+ ///
+ /// 关联的单号
+ ///
+ public List LinkOrderNos { get; set; } = new();
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
index cb0f68ef..4ebfcc66 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
@@ -71,24 +71,58 @@ public class OrderService : ApplicationService
[HttpPost("Order/Link")]
public async Task LinkOrderAsync(LinkOrderInput input)
{
- //todo:去重
- var distinctOrderInfos = input.LinkedOrderInfos.Distinct().ToList();
-
- if (await _orderRepository.IsAnyAsync(x => x.IsEqual(input.NoInfo)))
+ if (!await _orderRepository.IsAnyAsync(x => x.OrderType == input.OrderType && x.OrderNo == input.OrderNo))
{
+ throw new BusinessException(message: $"单号:{input.OrderNo}不存在");
}
- // var links = input.LinkedOrderInfos.Select(x => new OrderLinkEntity
- // {
- // OrderNo = x.OrderNo,
- // OrderType = x.NoType
- // }).ToList();
- //
- // foreach (var link in links)
- // {
- // if (await _orderLinkQuery.IsAnyAsync(x => x.))
- // }
- // _orderRepository.LinkOrderAsync();
+ if (input.LinkOrderNos.Count < 1 || input.LinkOrderType == 0) return true;
+
+ // 单号去重
+ input.LinkOrderNos = input.LinkOrderNos.Distinct().ToList();
+
+ // 解绑
+ if (!input.IsLink) return await UnLinkOrderAsync(input);
+
+ // 关联订单
+ return await DoLinkOrderAsync(input);
+ }
+
+ private async Task DoLinkOrderAsync(LinkOrderInput input)
+ {
+ // 获取已关联的订单
+ var linkOrderNos = await _orderLinkQuery.GetListAsync(x =>
+ x.OrderType == input.OrderType && x.OrderNo == input.OrderNo && x.LinkOrderType == input.LinkOrderType,
+ x => x.LinkOrderNo);
+
+ // 计算出未关联的订单
+ var noLinkOrderNos = input.LinkOrderNos.Except(linkOrderNos);
+
+ // 过滤掉不存在的订单
+ var canLinkOrderNos = await _orderRepository.GetListAsync(x =>
+ x.OrderType == input.LinkOrderType && noLinkOrderNos.Contains(x.OrderNo),
+ x => x.OrderNo);
+
+ await _orderRepository.LinkOrderAsync(canLinkOrderNos.Select(x => new OrderLinkEntity
+ {
+ OrderNo = input.OrderNo,
+ OrderType = input.OrderType,
+ LinkOrderNo = x,
+ LinkOrderType = input.LinkOrderType
+ }).ToList());
+
+ return true;
+ }
+
+ private async Task UnLinkOrderAsync(LinkOrderInput input)
+ {
+ var unLinkIds = await _orderLinkQuery.GetListAsync(x =>
+ x.OrderType == input.OrderType && x.OrderNo == input.OrderNo &&
+ x.LinkOrderType == input.LinkOrderType && input.LinkOrderNos.Contains(x.LinkOrderNo),
+ x => x.Id);
+
+ // real del
+ await _orderRepository.UnLinkByIdsAsync(unLinkIds);
return true;
}
diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs
index fb130780..d187933a 100644
--- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs
+++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/IOrderRepository.cs
@@ -17,4 +17,18 @@ public interface IOrderRepository : IBasicRepository
///
///
Task CreateOrderTemplatesAsync(List templateEntities);
+
+ ///
+ /// 关联订单
+ ///
+ ///
+ ///
+ Task LinkOrderAsync(List orderLinkEntities);
+
+ ///
+ /// 解除订单关联关系
+ ///
+ ///
+ ///
+ Task UnLinkByIdsAsync(List linkIds);
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
index 2faa141f..e474f40e 100644
--- a/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
+++ b/src/SJZY.Track.Domain/Aggregates/OrderAggregate/OrderEntity.cs
@@ -89,4 +89,15 @@ public struct NoInfo
[Required]
[MaxLength(100)]
public string OrderNo { get; set; }
+
+ public NoInfo(int noType, string orderNo)
+ {
+ NoType = noType;
+ OrderNo = orderNo;
+ }
+
+ public override string ToString()
+ {
+ return $"[订单类型: {NoType}, 订单号: {OrderNo}]";
+ }
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Repository/OrderRepository.cs b/src/SJZY.Track.Repository/OrderRepository.cs
index 77d83641..9b64b010 100644
--- a/src/SJZY.Track.Repository/OrderRepository.cs
+++ b/src/SJZY.Track.Repository/OrderRepository.cs
@@ -18,4 +18,14 @@ public class OrderRepository : BasicRepository, IOrderRepository, I
{
await Context.Insertable(templateEntities).ExecuteCommandAsync();
}
+
+ public async Task LinkOrderAsync(List orderLinkEntities)
+ {
+ await Context.Insertable(orderLinkEntities).ExecuteCommandAsync();
+ }
+
+ public async Task UnLinkByIdsAsync(List linkIds)
+ {
+ await Context.Deleteable(linkIds).ExecuteCommandAsync();
+ }
}
\ No newline at end of file
diff --git a/src/SJZY.Track.Repository/SJZY.Track.Repository.csproj b/src/SJZY.Track.Repository/SJZY.Track.Repository.csproj
index e4341712..d75f4b08 100644
--- a/src/SJZY.Track.Repository/SJZY.Track.Repository.csproj
+++ b/src/SJZY.Track.Repository/SJZY.Track.Repository.csproj
@@ -1,9 +1,7 @@
-
+
net7.0
- enable
- enable
True
From 14933065e4cc9150c07d6b3d9abd61073fd20ee2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=86=9B?= <2357729423@qq.com>
Date: Wed, 28 Feb 2024 16:20:16 +0800
Subject: [PATCH 2/2] =?UTF-8?q?change=20=E6=8B=86=E5=88=86=E8=AE=A2?=
=?UTF-8?q?=E5=8D=95=E5=85=B3=E8=81=94=E6=9C=8D=E5=8A=A1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ApplicationModule.cs | 12 +--
src/SJZY.Track.Application/GlobalUsings.cs | 3 +
.../ProvideServices/OrderLinkService.cs | 84 +++++++++++++++++++
.../Services/ProvideServices/OrderService.cs | 69 +--------------
4 files changed, 91 insertions(+), 77 deletions(-)
create mode 100644 src/SJZY.Track.Application/GlobalUsings.cs
create mode 100644 src/SJZY.Track.Application/Services/ProvideServices/OrderLinkService.cs
diff --git a/src/SJZY.Track.Application/ApplicationModule.cs b/src/SJZY.Track.Application/ApplicationModule.cs
index 899bceee..ba3bc813 100644
--- a/src/SJZY.Track.Application/ApplicationModule.cs
+++ b/src/SJZY.Track.Application/ApplicationModule.cs
@@ -1,6 +1,5 @@
using SJZY.Expand.ABP.Core.Localization;
using SJZY.Track.Application.Localization;
-using SJZY.Track.Domain;
using SJZY.UserCenter.Contracts;
using SJZY.UserCenter.SharedModel;
using Volo.Abp.AspNetCore.Mvc;
@@ -26,14 +25,11 @@ namespace SJZY.Track.Application
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
- Configure(options =>
- {
- options.AddMaps(true);
- });
+ Configure(options => { options.AddMaps(true); });
Configure(options =>
{
- options.ConventionalControllers.Create(typeof(ApplicationModule).Assembly);//创建动态api
+ options.ConventionalControllers.Create(typeof(ApplicationModule).Assembly); //创建动态api
});
//添加虚拟文件系统
@@ -60,7 +56,6 @@ namespace SJZY.Track.Application
var configuration = context.Services.GetConfiguration();
PreConfigure(options =>
{
-
options.ProxyClientActions.Add(async (remoteName, serviceProvider, httpClient) =>
{
//如果设置Token,前端需要传入Token 否则引发异常
@@ -70,6 +65,5 @@ namespace SJZY.Track.Application
});
});
}
-
}
-}
+}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/GlobalUsings.cs b/src/SJZY.Track.Application/GlobalUsings.cs
new file mode 100644
index 00000000..63eef9f8
--- /dev/null
+++ b/src/SJZY.Track.Application/GlobalUsings.cs
@@ -0,0 +1,3 @@
+// Global using directives
+
+global using SJZY.Track.Domain;
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderLinkService.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderLinkService.cs
new file mode 100644
index 00000000..f729f6b1
--- /dev/null
+++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderLinkService.cs
@@ -0,0 +1,84 @@
+using SJZY.Track.Application.Dtos.ProvideServices;
+using SJZY.Track.Domain.Aggregates.OrderAggregate;
+
+namespace SJZY.Track.Application.Services.ProvideServices;
+
+///
+/// 订单关联服务
+///
+[ApiExplorerSettings(GroupName = "提供接口")]
+public class OrderLinkService
+{
+ private readonly IOrderRepository _orderRepository;
+ private readonly IBasicQuery _orderLinkQuery;
+
+ public OrderLinkService(IBasicQuery orderLinkQuery, IOrderRepository orderRepository)
+ {
+ _orderLinkQuery = orderLinkQuery;
+ _orderRepository = orderRepository;
+ }
+
+ ///
+ /// 关联订单
+ ///
+ ///
+ ///
+ [HttpPost("Order/Link")]
+ public async Task LinkOrderAsync(LinkOrderInput input)
+ {
+ if (!await _orderRepository.IsAnyAsync(x => x.OrderType == input.OrderType && x.OrderNo == input.OrderNo))
+ {
+ throw new BusinessException(message: $"单号:{input.OrderNo}不存在");
+ }
+
+ if (input.LinkOrderNos.Count < 1 || input.LinkOrderType == 0) return true;
+
+ // 单号去重
+ input.LinkOrderNos = input.LinkOrderNos.Distinct().ToList();
+
+ // 解绑
+ if (!input.IsLink) return await UnLinkOrderAsync(input);
+
+ // 关联订单
+ return await DoLinkOrderAsync(input);
+ }
+
+ private async Task DoLinkOrderAsync(LinkOrderInput input)
+ {
+ // 获取已关联的订单
+ var linkOrderNos = await _orderLinkQuery.GetListAsync(x =>
+ x.OrderType == input.OrderType && x.OrderNo == input.OrderNo && x.LinkOrderType == input.LinkOrderType,
+ x => x.LinkOrderNo);
+
+ // 计算出未关联的订单
+ var noLinkOrderNos = input.LinkOrderNos.Except(linkOrderNos);
+
+ // 过滤掉不存在的订单
+ var canLinkOrderNos = await _orderRepository.GetListAsync(x =>
+ x.OrderType == input.LinkOrderType && noLinkOrderNos.Contains(x.OrderNo),
+ x => x.OrderNo);
+
+ await _orderRepository.LinkOrderAsync(canLinkOrderNos.Select(x => new OrderLinkEntity
+ {
+ OrderNo = input.OrderNo,
+ OrderType = input.OrderType,
+ LinkOrderNo = x,
+ LinkOrderType = input.LinkOrderType
+ }).ToList());
+
+ return true;
+ }
+
+ private async Task UnLinkOrderAsync(LinkOrderInput input)
+ {
+ var unLinkIds = await _orderLinkQuery.GetListAsync(x =>
+ x.OrderType == input.OrderType && x.OrderNo == input.OrderNo &&
+ x.LinkOrderType == input.LinkOrderType && input.LinkOrderNos.Contains(x.LinkOrderNo),
+ x => x.Id);
+
+ // real del
+ await _orderRepository.UnLinkByIdsAsync(unLinkIds);
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
index 4ebfcc66..e40ed43e 100644
--- a/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
+++ b/src/SJZY.Track.Application/Services/ProvideServices/OrderService.cs
@@ -1,6 +1,5 @@
using Newtonsoft.Json;
using SJZY.Track.Application.Dtos.ProvideServices;
-using SJZY.Track.Domain;
using SJZY.Track.Domain.Aggregates.OrderAggregate;
using SJZY.UserCenter.HttpApi.Services;
@@ -13,12 +12,10 @@ namespace SJZY.Track.Application.Services.ProvideServices;
public class OrderService : ApplicationService
{
private readonly IOrderRepository _orderRepository;
- private readonly IBasicQuery _orderLinkQuery;
- public OrderService(IOrderRepository orderRepository, IBasicQuery orderLinkQuery)
+ public OrderService(IOrderRepository orderRepository)
{
_orderRepository = orderRepository;
- _orderLinkQuery = orderLinkQuery;
}
///
@@ -62,68 +59,4 @@ public class OrderService : ApplicationService
return true;
}
-
- ///
- /// 关联订单
- ///
- ///
- ///
- [HttpPost("Order/Link")]
- public async Task LinkOrderAsync(LinkOrderInput input)
- {
- if (!await _orderRepository.IsAnyAsync(x => x.OrderType == input.OrderType && x.OrderNo == input.OrderNo))
- {
- throw new BusinessException(message: $"单号:{input.OrderNo}不存在");
- }
-
- if (input.LinkOrderNos.Count < 1 || input.LinkOrderType == 0) return true;
-
- // 单号去重
- input.LinkOrderNos = input.LinkOrderNos.Distinct().ToList();
-
- // 解绑
- if (!input.IsLink) return await UnLinkOrderAsync(input);
-
- // 关联订单
- return await DoLinkOrderAsync(input);
- }
-
- private async Task DoLinkOrderAsync(LinkOrderInput input)
- {
- // 获取已关联的订单
- var linkOrderNos = await _orderLinkQuery.GetListAsync(x =>
- x.OrderType == input.OrderType && x.OrderNo == input.OrderNo && x.LinkOrderType == input.LinkOrderType,
- x => x.LinkOrderNo);
-
- // 计算出未关联的订单
- var noLinkOrderNos = input.LinkOrderNos.Except(linkOrderNos);
-
- // 过滤掉不存在的订单
- var canLinkOrderNos = await _orderRepository.GetListAsync(x =>
- x.OrderType == input.LinkOrderType && noLinkOrderNos.Contains(x.OrderNo),
- x => x.OrderNo);
-
- await _orderRepository.LinkOrderAsync(canLinkOrderNos.Select(x => new OrderLinkEntity
- {
- OrderNo = input.OrderNo,
- OrderType = input.OrderType,
- LinkOrderNo = x,
- LinkOrderType = input.LinkOrderType
- }).ToList());
-
- return true;
- }
-
- private async Task UnLinkOrderAsync(LinkOrderInput input)
- {
- var unLinkIds = await _orderLinkQuery.GetListAsync(x =>
- x.OrderType == input.OrderType && x.OrderNo == input.OrderNo &&
- x.LinkOrderType == input.LinkOrderType && input.LinkOrderNos.Contains(x.LinkOrderNo),
- x => x.Id);
-
- // real del
- await _orderRepository.UnLinkByIdsAsync(unLinkIds);
-
- return true;
- }
}
\ No newline at end of file